Saturday, April 13, 2013

ACCESS via Elevated Usage User Account Contrl


http://technet.microsoft.com/en-us/library/cc722159(v=ws.10).aspx
User Account Control Step-by-Step Guide

302 out of 507 rated this helpful - Rate this topicUpdated: April 20, 2011Applies To: Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows Storage Server 2008 R2, Windows VistaUser Account Control (UAC) is a security component that allows an administrator to enter credentials during a non-administrator's user session to perform occasional administrative tasks. This step-by-step guide provides the instructions that are necessary for using UAC in a test environment. You can use this guide to test how your line-of-business (LOB) applications run in Windows 7 and Windows Vista.

In this guide

What is User Account Control? Requirements for User Account Control Key scenarios for User Account Control Scenario 1: Request an application to run elevated one time Scenario 2: Configure an application to always run elevated Scenario 3: Configure User Account Control Troubleshooting and support Additional resources This guide is intended for the following audiences:IT planners and analysts who are evaluating the productSecurity architects who are responsible for implementing trustworthy computingAdministrators who need to control the behavior of UACThis document is not intended to provide a comprehensive, detailed description of UAC. Additional resources include the following:Users of this step-by-step guide will also be interested in Getting Started with User Account Control on Windows Vista and User Account Control in Windows 7.For additional information for IT professionals, see User Account Control in the Windows Server Technical Library.For information for developers and independent software vendors about how to develop applications for Windows 7, Windows Vista, Windows Server 2008 R2, or Windows Server 2008, see The Windows Vista and Windows Server 2008 Developer Story: Windows Vista Application Development Requirements for User Account Control (UAC).

What is User Account Control?

User Account Control (UAC) is a security component that enables users to perform common tasks as non-administrators (called standard users in Windows Vista), and as administrators without having to switch users, log off, or use Run As. User accounts that are members of the local Administrators group run most applications as a standard user. By separating user and administrator functions, UAC helps users move toward using standard user rights by default.When an administrator logs on to a computer that is running Windows 7 or Windows Vista, the user is assigned two separate access tokens. Access tokens, which contain a user's group membership and authorization and access control data, are used by the Windows operating system to control what resources and tasks the user can access. The access control model in earlier Windows operating systems did not include any failsafe checks to ensure that users truly wanted to perform a task that required their administrative access token. As a result, malicious software could install on users' computers without notifying the users. (This is sometimes referred to as a "silent" installation.)Even more damaging, because the user is an administrator, the malicious software could use the administrator's access control data to infect core operating system files, and in some instances, become nearly impossible to remove.ImportantFor more information about the UAC changes in Windows 7, see What's New in User Account Control.The primary difference between a standard user and an administrator is the level of access that the user has over core, protected areas of the computer. Administrators can change the system state, turn off the firewall, configure security policies, install a service or a driver that affects every user on the computer, and install software for the entire computer. Standard users cannot perform these tasks, and they can only install per-user software.Unlike earlier versions of Windows, when an administrator logs on to a computer running Windows 7 or Windows Vista, the user's full administrator access token is split into two access tokens: a full administrator access token and a standard user access token. During the logon process, authorization and access control components that identify an administrator are removed, resulting in a standard user access token. The standard user access token is then used to start the desktop, the Explorer.exe process. Because all applications inherit their access control data from the initial launch of the desktop, they all run as a standard user.After an administrator logs on, the full administrator access token is not invoked until the user attempts to perform an administrative task. When a standard user logs on, only a standard user access token is created. This standard user access token is then used to start the desktop.ImportantBecause the user experience can be configured with Group Policy, there can be different user experiences, depending on policy settings. The configuration choices made in your environment will affect the prompts and dialog boxes that are seen by standard users, administrators, or both.

Requirements for User Account Control

We recommend that you first use the steps provided in this guide in a test environment. Step-by-step guides are not necessarily meant to be used to deploy features in the operating system without accompanying documentation (as listed in the Additional resources section), and this guide should be used with discretion as a stand-alone document.

Setting up the test lab

The lab configuration needed for testing UAC includes a domain controller running Windows Server 2008 R2 or Windows Server 2008; a member server running Windows Server 2008 R2 or Windows Server 2008; and a client computer running Windows 7 or Windows Vista. The domain controller, member server, and the client computer should be on an isolated network, and they should be connected through a common hub or Layer 2 switch. Private addresses should be used throughout the test configuration.

Key scenarios for User Account Control

This guide covers the following scenarios for UAC:Scenario 1: Request an application to run elevated one time Scenario 2: Configure an application to always run elevated Scenario 3: Configure User Account Control NoteThe three scenarios that are included in this guide are intended to help administrators become familiar with the UAC feature. They include the basic information and procedures that administrators need to start using UAC. Information and procedures for advanced or customized UAC configurations are not included in this guide.

Scenario 1: Request an application to run elevated one time

In Windows Vista, UAC and its Admin Approval Mode are enabled by default. When UAC is enabled, local administrator accounts run as standard user accounts. This means that when a member of the local Administrators group logs on, they run with their administrative privileges disabled. This is the case until they attempt to run an application or task that has an administrative token. When members of the local Administrators group attempt to start such an application or task, they are prompted to consent to running the application as elevated. Scenario 1 details the procedure to run an application or task as elevated one time.NoteTo perform the following procedure, you must be logged on to a client computer as a member of the local administrators group. You cannot be logged on with the computer (or built-in) administrator account because Admin Approval Mode does not apply to this account (the built-in administrator account is disabled on new installations of Windows Vista).

To request an application to run elevated one time

Start an application that is likely to have been assigned an administrative token, such as Microsoft Windows Disk Cleanup. A User Account Control prompt is displayed.Verify that the details presented match the request you initiated.In the User Account Control dialog box, click Continue to start the application.
.
Scenario 2: Configure an application to always run elevated

Scenario 2 is similar to the previous scenario in that you want to run an application or process as elevated with the administrator access token. However, in this scenario you want to run an application that has not been marked by the developer or identified by the operating system as an administrative application. Some applications, such as internal line-of-business applications, or non-Microsoft products might require administrative rights, but they have not been identified as such. In this scenario, you mark an application to prompt the user for consent, and if granted, to run as an administrative application. The following procedure steps you through this process.NoteTo perform the following procedure, you must be logged on to a client computer as a member of the local administrators group. You cannot be logged on with the computer (or built-in) administrator account because Admin Approval Mode does not apply to this account.ImportantThis procedure cannot be used to prevent UAC from prompting for consent to run an administrative application.

To configure an application to always run elevated

Right-click an application that is not likely to have been assigned an administrative token, such as a word processing application.Click Properties, and then select the Compatibilitytab.Under Privilege Level, select Run this program as an administrator, and then click OK.NoteIf the Run this program as an administratoroption is unavailable, it means that the application is blocked from always running elevated, the application does not require administrative credentials to run, the application is part of the current version of the operating system, or you are not logged on to the computer as an administrator.


Scenario 3: Configure User Account Control

Scenario 3 outlines some common tasks that local administrators perform during the set up and configuration of client computers running Windows 7 or Windows Vista. The following procedures step you through the tasks of turning off UAC, disabling Admin Approval Mode, disabling UAC from prompting for credentials to install applications, and changing the elevation prompt behavior.ImportantAdvanced configuration options for UAC are not available in Windows Vista Starter, Windows Vista Home Basic, or Windows Vista Home Premium.

Turning off UAC

Use the following procedure to disable UAC.To perform the following procedure, you must be able to log on with or provide the credentials of a member of the local Administrators group.ImportantTurning off UAC reduces the security of your computer and may expose you to increased risk from malicious software. We do not recommend leaving UAC disabled.

To turn off UAC

Click Start, and then click Control Panel.In Control Panel, click User Accounts.In the User Accounts window, click User Accounts.In the User Accounts tasks window, click Turn User Account Control on or off.If UAC is currently configured in Admin Approval Mode, the User Account Control message appears. Click Continue.Clear the Use User Account Control (UAC) to help protect your computer check box, and then click OK.Click Restart Now to apply the change right away, or click Restart Later, and then close the User Accounts tasks window.

Disabling Admin Approval Mode

Use the following procedure to disable Admin Approval Mode.NoteTo perform the following procedure, you must be logged on to a client computer as a local administrator.ImportantYou cannot disable Admin Approval Mode on Windows Vista Starter, Windows Vista Home Basic, or Windows Vista Home Premium because secpol.msc is not included.

To disable Admin Approval Mode

Click Start, click All Programs, click Accessories, click Run, type secpol.msc in the Open box, and then click OK.If the User Account Control dialog box appears, confirm that the action it displays is what you want, and then click Continue..From the Local Security Settings console tree, double-click Local Policies, and then double-clickSecurity Options.Scroll down and double-click User Account Control: Run all administrators in Admin Approval Mode.Select the Disabled option, and then click OK.Close the Local Security Settings window.

Disabling User Account Control from prompting for credentials to install applications

Use the following procedure to disable UAC from prompting for credentials to install applications.NoteTo perform the following procedure, you must be logged on to a client computer as a local administrator.ImportantThis procedure is not supported on Windows Vista Starter, Windows Vista Home Basic, or Windows Vista Home Premium.

To disable UAC from prompting for credentials to install applications

Click Start, click All Programs, click Accessories, click Run, type secpol.msc in the Open text box, and then click OK.From the Local Security Settings console tree, click Local Policies, and then click Security Options.Scroll down and double-click User Account Control: Detect application installations and prompt for elevation.Select the Disabled option, and then click OK.Close the Local Security Settings window.



.


.

PYTHON explains exactally how repository works


http://www.franz.com/agraph/allegrograph/doc/python-tutorial/python-tutorial-40.html


thon Sesame API Tutorial for AllegroGraph 4.2

This is an introduction to the Python client API to AllegroGraph RDFStore™ version 4.2 from Franz Inc.The Python Sesame API offers convenient and efficient access to an AllegroGraph server from a Python-based application. This API provides methods for creating, querying and maintaining RDF data, and for managing the stored triples.The Python Sesame API deliberately emulates the Aduna Sesame API to make it easier to migrate from Sesame to AllegroGraph.  The Python Sesame API has also been extended in ways that make it easier and more intuitive than the Sesame API. 

Contents

OverviewPrerequisites (Linux)TerminologyCreating Users with WebViewRunning Python Tutorial ExamplesCreating a Repository and Triple IndicesAsserting and Retracting TriplesA SPARQL QueryStatement MatchingLiteral ValuesImporting TriplesExporting TriplesSearching Multiple GraphsNamespacesFree Text SearchSelect, Ask, Describe, and Construct QueriesParametric QueriesRange MatchesFederated RepositoriesProlog Rule QueriesLoading Prolog RulesRDFS++ InferenceGeospatial SearchSocial Network AnalysisTransaction ControlDuplicate Triples  

Overview   Return to Top

The Python client tutorial rests on a simple architecture involving AllegroGraph, disk-based data files, Python, and a file of Python examples called tutorial_examples_40.py.AllegroGraph 4.1 Server contains the Python API, which is part of the AllegroGraph installation.Python communicates with AllegroGraph through HTTP port 8080 in this example. Python and AllegroGraph may be installed on the same computer, but in practice one server is shared by multiple clients.Load tutorial_examples_40.py into Python to view the tutorial examples.Each lesson in tutorial_examples_40.py is encapsulated in a Python function, named exampleN(), where N ranges from 0 to 21 (or more). The function names are referenced in the title of each section to make it easier to compare the tutorial text and the living code of the examples file.

Prerequisites (Linux)   Return to Top

The tutorial examples can be run on a Linux system, running AllegroGraph and the examples on the same computer ("localhost"). The tutorial assumes that AllegroGraph and Python 2.5 have been installed and configured using the procedure posted on this webpage.

Terminology   Return to Top

We need to clarify some terminology before proceeding."RDF" is the Resource Description Framework defined by the World Wide Web Consortium (W3C). It provides a elegantly simple means for describing multi-faceted resource objects and for linking them into complex relationship graphs. AllegroGraph Server creates, searches, and manages such RDF graphs.A "URI" is a Uniform Resource Identifier. It is label used to uniquely identify variosu types of entities in an RDF graph. A typical URI looks a lot like a web address: <http:\\www.company.com\project\class#number>. In spite of the resemblance, a URI is not a web address. It is simply a unique label.A "triple" is a data statement, a "fact," stored in RDF format. It states that a resource has an attribute with a value. It consists of three fields:Subject: The first field contains the URI that uniquely identifies the resource that this triple describes.Predicate: The second field contains the URI identifying a property of this resource, such as its color or size, or a relationship between this resource and another one, such as parentage or ownership.Object: The third field is the value of the property. It could be a literal value, such as "red," or the URI of a linked resource.A "quad" is a triple with an added "context" field, which is used to divide the repository into "subgraphs." This context or subgraph is just a URI label that appears in the fourth field of related triples.A "quint" is a quad with fifth field used for the "tripleID." AllegroGraph Server implements all triples as quints behind the scenes. The fourth and fifth fields are often ignored, however, so we speak casually of "triples," and sometimes of "quads," when it would be more rigorous to call them all "quints."A "resource description" is defined as a collection of triples that all have the same URI in the subject field. In other words, the triples all describe attributes of the same thing.A "statement" is a client-side Python object that describes a triple (quad, quint). In the context of AllegroGraph Server:A "catalog" is a list of repositories owned by an AllegroGraph server.A "repository" is a collection of triples within a Catalog, stored and indexed on a hard disk.A "context" is a subgraph of the triples in a repository.If contexts are not in use, the triples are stored in the background (default) graph.

Creating Users with WebView    Return to Top

Each connection to an AllegroGraph server runs under the credentials of a registered AllegroGraph user account.

Initial Superuser Account

The installation instructions for AllegroGraph advise you to create a default superuser called "test", with password "xyzzy". This is the user (and password) expected by the tutorial examples. If you created this account as directed, you can proceed to the next section and return to this topic at a later time when you need to create non-superuser accounts.If you created a different superuser account you'll have to edit the tutorial_examples_40.py file before proceeding. Modify these entries near the top of the file:AG_USER = 'test'AG_PASSWORD = 'xyzzy' Otherwise you'll get an authentication failure when you attempt to connect to the server.

Users, Permissions, Access Rules, and Roles

AllegroGraph user accounts may be given any combination of the following three permissions:SuperuserStart SessionEvaluate Arbritray CodeIn addition, a user account may be given read, write or read/write access to individual repositories.You can also define a role (such as "librarian") and give the role a set of permissions and access rules. Then you can assign several users to a shared role. This lets you manage their permissions and access by editing the role instead of the individual user accounts.A superuser automatically has all possible permissions and unlimited access. A superuser can also create, manage and delete other user accounts. Non-superusers cannot view or edit account settings.A user with the Start Sessions permission can use the AllegroGraph features that require spawning a dedicated session, such as Transactions and Social Network Analysis. If you try to use these features without the appropriate permission, you'll encounter authentication errors.A user with permission to Evaluate Arbitrary Code can run Prolog Rule Queries. This user can also do anything else that allows executing Lisp code, such as defining select-style generators, or doing eval-in-server, as well as loading server-side files.

WebView

WebView is AllegroGraph's HTTP-based graphical user interface for user and repository management. It provides a SPARQL endpoint for querying your triple stores as well as various tools that let you create and maintain triple stores interactively.To connect to WebView, simply direct your Web browser to the AllegroGraph port of your server. If you have installed AllegroGraph locally (and used the default port number), use:http://localhost:10035You will be asked to log in. Use the superuser credentials described in the previous section.The first page of WebView is a summary of your catalogs, repositories, and federations. Click the user account link in the lower left corner of the page. This exposes the Users and Roles page.This is the environment for creating and managing user accounts.To create a new user, click the [add a user] link. This exposes a small form where you can enter the username (one symbol) and password. Click OK to save the new account.The new user will appear in the list of users. Click the [view permissions] link to open a control panel for the new user account:Use the checkboxes to apply permissions to this account (superuser, start session, evaluate arbitrary code).It is imporant that you set up access permissions for the new user. Use the form to create an access rule by selecting read, write or read/write access, naming a catalog (or * for all), and naming a repository within that catalog (or * for all). Click the [add] link. This creates an access rule for your new user. The access rule will appear in the permissions display:This new user can log in and perform transactions on any repository in the system.To repeat, the "test" superuser is all you need to run all of the tutorial examples. This section is for the day when you want to issue more modest credentials to some of your operators.

Running Python Tutorial Examples    Return to Top

The AllegroGraph Python Tutorial examples are in thetutorial subdirectory where you unpacked the Python client tar.gz file. Navigate to that directory and follow one of these examples: $ python tutorial_examples_40.py runs all tests. $ python tutorial_examples_40.py all runs all tests. $ python tutorial_examples_40.py 10 runs example10() $ python tutorial_examples_40.py 1 5 22 runs examples 1, 5, and 22

Creating a Repository and Triple Indices (example1())    Return to Top

The first task is to attach to our AllegroGraph Server and open a repository. This task is implemented inexample1() from tutorial_examples_40.py.In example1() we build a chain of Python objects, ending in a"connection" object that lets us manipulate triples in a specific repository. The overall process of generating the connection object follows this diagram:The example1() function opens (or creates) a repository by building a series of client-side objects, culminating in a "connection" object. The connection object will be passed to other functions in tutorial_examples_40.py.The connection object contains the methods that let us manipulate triples in a specific repository.The example first connects to an AllegroGraph Server by providing the endpoint (host IP address and port number) of an already-launched AllegroGraph server. This creates a client-side server object, which can access the AllegroGraph server's list of available catalogs through the listCatalogs() method:.def example1(accessMode=Repository.RENEW): server = AllegroGraphServer(AG_HOST, AG_PORT, 'user', 'password') print "Available catalogs", server.listCatalogs() This is the output so far:>>> example1() Defining connnection to AllegroGraph server -- host:'localhost' port:8080 Available catalogs ['/', 'scratch']This output says that the server has two catalogs, the default rootCatalog, '/', and a named catalog 'scratch' that someone has created for some experimentation.In the next line of example1(), we use the server.openCatalog() method to create a client-side catalog object. In this example we will connect to the default rootCatalog by calling openCatalog() with no arguments. When we look inside the root catalog, we can see which repositories are available: catalog = server.openCatalog() print "Available repositories in catalog '%s': %s" % (catalog.getName(), catalog.listRepositories()) The corresponding output lists the available repositories. (When you run the examples, you may see a different list of repositories.)Available repositories in catalog 'None': ['tutorial'] The next step is to create a client-side repository object representing the respository we wish to open, by calling the getRepository() method of the catalog object. We have to provide the name of the desired repository (AG_REPOSITORY, bound to python-tutorial in this case), and select one of four access modes:Repository.RENEW clears the contents of an existing repository before opening. If the indicated repository does not exist, it creates one.Repository.OPEN opens an existing repository, or throws an exception if the repository is not found.Repository.ACCESS opens an existing repository, or creates a new one if the repository is not found.Repository.CREATE creates a new repository, or throws an exception if one by that name already exists.Repository.RENEW is the default setting for the example1() function of tutorial_examples_40.py. It can be overridden by calling example1() with the appropriate argument, such as example1(Repository.OPEN). myRepository = catalog.getRepository(AG_REPOSITORY, accessMode) myRepository.initialize()A new or renewed repository must be initialized, using the initialize() method of the repository object. If you try to initialize a respository twice you get a warning message in the Python window but no exception.The goal of all this object-building has been to create a client-side connection object, whose methods let us manipulate the triples of the repository. The repository object's getConnection() method returns this connection object. connection = myRepository.getConnection() print "Repository %s is up! It contains %i statements." % ( myRepository.getDatabaseName(), connection.size()) The size() method of the connection object returns how many triples are present. In the example1() function, this number should always be zero because we "renewed" the repository. This is the output in the Python window: Repository pythontutorial is up! It contains 0 statements. <franz.openrdf.repository.repositoryconnection.RepositoryConnection object at 0x0127D710> >>> Whenever you create a new repository, you should stop to consider which kinds of triple indices you will need.  This is an important efficiency decision.  AllegroGraph uses a set of sorted indices to quickly identify a contiguous block of triples that are likely to match a specific query pattern.These indices are identified by names that describe their organization. The default set of indices are called spogi, posgi, ospgi, gspoi, gposi, gospi, and i , where:S stands for the subject URI.P stands for the predicate URI.O stands for the object URI or literal.G stands for the graph URI.I stands for the triple identifier (its unique id number within the triple store).The order of the letters denotes how the index has been organized. For instance, the spogi index contains all of the triples in the store, sorted first by subject, then by predicate, then by object, and finally by graph. The triple id number is present as a fifth column in the index. If you know the URI of a desired resource (the subjectvalue of the query pattern), then the spogi index lets you retrieve all triples with that subject as a single block. The idea is to provide your respository with the indices that your queries will need, and to avoid maintaining indices that you will never need. We can use the connection object's listValidIndices()method to examine the list of all possible AllegroGraph triple indices: indices = conn.listValidIndices() print "All valid triple indices: %s" % (indices)This is the list of all possible valid indices:All valid triple indices: ['spogi', 'spgoi', 'sopgi', 'sogpi', 'sgpoi', 'sgopi', 'psogi', 'psgoi', 'posgi', 'pogsi', 'pgsoi', 'pgosi', 'ospgi', 'osgpi', 'opsgi', 'opgsi', 'ogspi', 'ogpsi', 'gspoi', 'gsopi', 'gpsoi', 'gposi', 'gospi', 'gopsi', 'i']AllegroGraph can generate any of these indices if you need them, but it creates only seven indices by default.  We can see the current indices by using the connection object's listIndices() method: indices = conn.listIndices() print "Current triple indices: %s" % (indices)There are currently seven indices:Current triple indices: ['i', 'gospi', 'gposi', 'gspoi', 'ospgi', 'posgi', 'spogi']The indices that begin with "g" are sorted primarily by subgraph (or "context").  If you application does not use subgraphs, you should consider removing these indices from the repository.  You don't want to build and maintain triple indices that your application will never use.  This wastes CPU time and disk space.  The connection object has a convenient dropIndex()method: print "Removing graph indices..." conn.dropIndex("gospi") conn.dropIndex("gposi") conn.dropIndex("gspoi") indices = conn.listIndices() print "Current triple indices: %s" % (indices)Having dropped three of the triple indices, there are now four remaining:Removing graph indices...Current triple indices: ['i', 'ospgi', 'posgi', 'spogi']The i index is for deleting triples by using the triple id number.  The ospgi index is sorted primarily by object value, which makes it possible to grab a range of object values as a single block of triples from the index.  Similarly, the posgi index lets us reach for a block of triples that all share the same predicate.  We mentioned previously that the spogi index lets us retrieve blocks of triples that all have the same subject URI. As it happens, we may have been overly hasty in eliminating all of the graph indices.  AllegroGraph can find the right matches as long as there is any one index present, but using the "right" index is much faster.  Let's put one of the graph indices back, just in case we need it. We'll use the connection object's addIndex() method: print "Adding one graph index back in..." conn.addIndex("gspoi") indices = conn.listIndices() print "Current triple indices: %s" % (indices) return connAdding one graph index back in...Current triple indices: ['i', 'gspoi', 'ospgi', 'posgi', 'spogi']The last line (return conn) is the pointer to the new connection object. This is the value returned by example1() when it is called by other functions in tutorial_examples_40.py. The other functions then use the connection object to access the repository.

Asserting and Retracting Triples (example2())    Return to Top

In example example2(), we show how to create resources describing two people, Bob and Alice, by asserting individual triples into the respository. The example also retracts and replaces a triple. Assertions and retractions to the triple store are executed by 'add' and 'remove' methods belonging to the connection object, which we obtain by calling the example1() function (described above).Before asserting a triple, we have to generate the URI values for the subject, predicate and object fields. The Python Sesame API to AllegroGraph Server predefines a number of classes and predicates for the RDF, RDFS, XSD, and OWL ontologies. RDF.TYPE is one of the predefined predicates we will use.The 'add' and 'remove' methods take an optional 'contexts' argument that specifies one or more subgraphs that are the target of triple assertions and retractions. When the context is omitted, triples are asserted/retracted to/from the background graph. In the example below, facts about Alice and Bob reside in the background graph.The example2() function begins by calling example1() to create the appropriate connection object, which is bound to the variable conn.def example2(): conn = example1() The next step is to begin assembling the URIs we will need for the new triples. The createURI() method generates a URI from a string. These are the subject URIs identifying the resources "Bob" and "Alice": alice = conn.createURI("http://example.org/people/alice") bob = conn.createURI("http://example.org/people/bob") Bob and Alice will be members of the "person" class (RDF:TYPE person). person = conn.createURI("http://example.org/ontology/Person") Both Bob and Alice will have a "name" attribute. name = conn.createURI("http://example.org/ontology/name") The name attributes will contain literal values. We have to generate the Literal objects from strings: bobsName = conn.createLiteral("Bob") alicesName = conn.createLiteral("Alice")The next line prints out the number of triples currently in the repository. print "Triple count before inserts: ", conn.size() Triple count before inserts: 0 Now we assert four triples, two for Bob and two more for Alice, using the connection object's add() method. After the assertions, we count triples again (there should be four) and print out the triples for inspection. ## alice is a person conn.add(alice, RDF.TYPE, person) ## alice's name is "Alice" conn.add(alice, name, alicesName) ## bob is a person conn.add(bob, RDF.TYPE, person) ## bob's name is "Bob": conn.add(bob, name, bobsName) print "Triple count: ", conn.size() for s in conn.getStatements(None, None, None, None, False): print s The "None" arguments to the getStatements() method say that we don't want to restrict what values may be present in the subject, predicate, object or context positions. Just print out all the triples.This is the output at this point. We see four triples, two about Alice and two about Bob:Triple count: 4 (<http://example.org/people/alice>, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://example.org/ontology/Person>) (<http://example.org/people/alice>, <http://example.org/ontology/name>, "Alice") (<http://example.org/people/bob>, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://example.org/ontology/Person>) (<http://example.org/people/bob>, <http://example.org/ontology/name>, "Bob")We see two resources of type "person," each with a literal name.The next step is to demonstrate how to remove a triple. Use the remove() method of the connection object, and supply a triple pattern that matches the target triple. In this case we want to remove Bob's name triple from the repository. Then we'll count the triples again to verify that there are only three remaining. Finally, we re-assert Bob's name so we can use it in subsequent examples, and we'll return the connection object.. conn.remove(bob, name, bobsName) print "Triple count: ", conn.size() conn.add(bob, name, bobsName) return connTriple count: 3 <franz.openrdf.repository.repositoryconnection.RepositoryConnection object at 0x01466830>

A SPARQL Query (example3())    Return to Top

SPARQL stands for the "SPARQL Protocol and RDF Query Language," a recommendation of the World Wide Web Consortium (W3C). SPARQL is a query language for retrieving RDF triples.Our next example illustrates how to evaluate a SPARQL query. This is the simplest query, the one that returns all triples. Note that example3() continues with the four triples created in example2().def example3(): conn = example2() try: queryString = "SELECT ?s ?p ?o WHERE {?s ?p ?o .}" The SELECT clause returns the variables ?s, ?p and ?o in the bindingSet. The variables are bound to the subject, predicate and objects values of each triple that satisfies the WHERE clause. In this case the WHERE clause is unconstrained. The dot (.) in the fourth position signifies the end of the pattern.The connection object's prepareTupleQuery() method creates a query object that can be evaluated one or more times. (A "tuple" is an ordered sequence of data elements in Python.) The results are returned in an iterator that yields a sequence of bindingSets. tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString) result = tupleQuery.evaluate(); Below we illustrate one (rather heavyweight) method for extracting the values from a binding set, indexed by the name of the corresponding column variable in the SELECT clause. try: for bindingSet in result: s = bindingSet.getValue("s") p = bindingSet.getValue("p") o = bindingSet.getValue("o") print "%s %s %s" % (s, p, o) http://example.org/people/alice http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.org/ontology/Person http://example.org/people/alice http://example.org/ontology/name "Alice" http://example.org/people/bob http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://example.org/ontology/Person http://example.org/people/bob http://example.org/ontology/name "Bob" The Connection class is designed to be created for the duration of a sequence of updates and queries, and then closed. In practice, many AllegroGraph applications keep a connection open indefinitely. However, best practice dictates that the connection should be closed, as illustrated below. The same hygiene applies to the iterators that generate binding sets. finally: result.close(); finally: conn.close(); myRepository = conn.repository myRepository.shutDown()

Statement Matching (example4())    Return to Top

The getStatements() method of the connection object provides a simple way to perform unsophisticated queries. This method lets you enter a mix of required values and wildcards, and retrieve all matching triples. (If you need to perform sophisticated tests and comparisons you should use the SPARQL query instead.)Below, we illustrate two kinds of 'getStatement' calls. The first mimics traditional Sesame syntax, and returns a Statement object at each iteration. This is the example4() function of tutorial_examples_40.py. It begins by calling example2() to create a connection object and populate the pythontutorial repository with four triples describing Bob and Alice. We're going to search for triples that mention Alice, so we have to create an "Alice" URI to use in the search pattern:def example4(): conn = example2() alice = conn.createURI("http://example.org/people/alice") Now we search for triples with Alice's URI in the subject position. The "None" values are wildcards for the predicate and object positions of the triple. print "Searching for Alice using getStatements():" statements = conn.getStatements(alice, None, None) The getStatements() method returns a repositoryResult object (bound to the variable "statements" in this case). This object can be iterated over, exposing one result statement at a time. It is sometimes desirable to screen the results for duplicates, using the enableDuplicateFilter() method. Note, however, that duplicate filtering can be expensive. Our example does not contain any duplicates, but it is possible for them to occur. statements.enableDuplicateFilter() for s in statements: print s This prints out the two matching triples for "Alice."Searching for Alice using getStatements():(<http://example.org/people/alice>, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://example.org/ontology/Person>) (<http://example.org/people/alice>, <http://example.org/ontology/name>, "Alice") At this point it is good form to close the respositoryResponse object because they occupy memory and are rarely reused in most programs. statements.close()

Literal Values (example5())   Return to Top

The next example, example5(), illustrates some variations on what we have seen so far. The example creates and asserts typed and plain literal values, including language-specific plain literals, and then conducts searches for them in three ways:getStatements() search, which is an efficient way to match a single triple pattern.SPARQL direct match, for efficient multi-pattern search.SPARQL filter match, for sophisticated filtering such as performing range matches.The getStatements() and SPARQL direct searches return exactly the datatype you ask for. The SPARQL filter queries can sometimes return multiple datatypes. This behavior will be one focus of this section.If you are not explicit about the datatype of a value, either when asserting the triple or when writing a search pattern, AllegroGraph will deduce an appropriate datatype and use it. This is another focus of this section. This helpful behavior can sometimes surprise you with unanticipated results.

Setup

Example5() begins by obtaining a connection object from example1(), and then clears the repository of all existing triples.def example5(): conn = example1() conn.clear() For sake of coding efficiency, it is good practice to create variables for namespace strings. We'll use this namespace again and again in the following lines. We have made the URIs in this example very short to keep the result displays compact. exns = "http://people/" The example creates new resources describing seven people, named alphabetically from Alice to Greg. These are URIs to use in the subject field of the triples. The example shows how to enter a full URI string, or alternately how to combine a namespace with a local resource name. alice = conn.createURI("http://example.org/people/alice") bob = conn.createURI("http://example.org/people/bob") carol = conn.createURI("http://example.org/people/carol") dave = conn.createURI(namespace=exns, localname="dave") eric = conn.createURI(namespace=exns, localname="eric") fred = conn.createURI(namespace=exns, localname="fred") greg = conn.createURI(namesapce=exns, localname="greg")

Numeric Literal Values

This section explores the behavior of numeric literals.

Asserting Numeric Data

The first section assigns ages to the participants, using a variety of numeric types. First we need a URI for the "age" predicate. age = conn.createURI(namespace=exns, localname="age")The next step is to create a variety of values representing ages. Coincidentally, these people are all 42 years old, but we're going to record that information in multiple ways: fortyTwo = conn.createLiteral(42) # creates long fortyTwoDouble = conn.createLiteral(42.0) # creates double fortyTwoInt = conn.createLiteral('42', datatype=XMLSchema.INT) fortyTwoLong = conn.createLiteral('42', datatype=XMLSchema.LONG) fortyTwoFloat = conn.createLiteral('42', datatype=XMLSchema.FLOAT) fortyTwoString = conn.createLiteral('42', datatype=XMLSchema.STRING) fortyTwoPlain = conn.createLiteral('42') # creates plain literalIn four of these statements, we explicitly identified the datatype of the value in order to create an INT, a LONG, a FLOAT and a STRING. This is the best practice.In three other statements, we just handed AllegroGraph numeric-looking values to see what it would do with them. As we will see in a moment, 42 creates a LONG, 42.0 becomes into a DOUBLE, and '42' becomes a "plain" (untyped) literal value. (Note that plain literals are not quite the same thing as typed literal strings. A search for a plain literal will not always match a typed string, and vice versa.)Now we need to assemble the URIs and values into statements (which are client-side triples): stmt1 = conn.createStatement(alice, age, fortyTwo) stmt2 = conn.createStatement(bob, age, fortyTwoDouble) stmt3 = conn.createStatement(carol, age, fortyTwoInt) stmt4 = conn.createStatement(dave, age, fortyTwoLong) stmt5 = conn.createStatement(eric, age, fortyTwoFloat) stmt6 = conn.createStatement(fred, age, fortyTwoString) stmt7 = conn.createStatement(greg, age, fortyTwoPlain)And then add the statements to the triple store on the AllegroGraph server. We can use either add() or addStatement() for this purpose. conn.add(stmt1) conn.add(stmt2) conn.add(stmt3) conn.addStatement(stmt4) conn.addStatement(stmt5) conn.addStatement(stmt6) conn.addStatement(stmt7) Now we'll complete the round trip to see what triples we get back from these assertions. This is how we use getStatements() in this example to retrieve and display triples for us: print "\nShowing all age triples using getStatements(). Seven matches." statements = conn.getStatements(None, age, None) for s in statements: print sThis loop prints all age triples to the interaction window. Note that the retrieved triples are of six types: two ints, a long, a float, a double, a string, and a "plain literal." All of them say that their person's age is 42. Note that the triple for Greg has the plain literal value "42", while the triple for Fred uses "42" as a typed string.Showing all age triples using getStatements(). Seven matches.(<http://people/greg>, <http://people/age>, "42")(<http://people/fred>, <http://people/age>, "42"^^<http://www.w3.org/2001/XMLSchema#string>)(<http://people/eric>, <http://people/age>, "4.2E1"^^<http://www.w3.org/2001/XMLSchema#float>)(<http://people/dave>, <http://people/age>, "42"^^<http://www.w3.org/2001/XMLSchema#long>)(<http://people/carol>, <http://people/age>, "42"^^<http://www.w3.org/2001/XMLSchema#int>)(<http://people/bob>, <http://people/age>, "4.2E1"^^<http://www.w3.org/2001/XMLSchema#double>)(<http://people/alice>, <http://people/age>, "42"^^<http://www.w3.org/2001/XMLSchema#long>)If you ask for a specific datatype, you will get it. If you leave the decision up to AllegroGraph, you might get something unexpected such as an plain literal value.

Matching Numeric Data

This section explores getStatements() and SPARQL matches against numeric triples.In the first example, we asked AllegroGraph to find an untyped number, 42.Query TypeQueryMatches which types?getStatements()conn.getStatements(None, age, 42)"42"^^<http://www.w3.org/2001/XMLSchema#long>SPARQL direct matchSELECT ?s ?p WHERE {?s ?p 42 .}No direct matches.SPARQL filter matchSELECT ?s ?p ?o WHERE {?s ?p ?o . filter (?o = 42)}"42"^^<http://www.w3.org/2001/XMLSchema#int>"4.2E1"^^<http://www.w3.org/2001/XMLSchema#float>"42"^^<http://www.w3.org/2001/XMLSchema#long>"4.2E1"^^<http://www.w3.org/2001/XMLSchema#double>The getStatements() query returned triples containing longs only. The SPARQL direct match didn't know how to interpret the untyped value and found zero matches. The SPARQL filter match, however, opened the doors to matches of multiple numeric types, and returned ints, floats, longs and doubles."Match 42.0" without explicitly declaring the number's type.Query TypeQueryMatches which types?getStatements()conn.getStatements(None, age, 42.0)"42"^^<http://www.w3.org/2001/XMLSchema#double>Matches a double but not a float.SPARQL direct matchSELECT ?s ?p WHERE {?s ?p 42.0 .}No direct matches.SPARQL filter matchSELECT ?s ?p ?o WHERE {?s ?p ?o . filter (?o = 42.0)}"42"^^<http://www.w3.org/2001/XMLSchema#int>"4.2E1"^^<http://www.w3.org/2001/XMLSchema#float>"42"^^<http://www.w3.org/2001/XMLSchema#long>"4.2E1"^^<http://www.w3.org/2001/XMLSchema#double>The getStatements() search returned a double but not the similar float. The filter match returned all numeric types that were equal to 42.0."Match '42'^^<http://www.w3.org/2001/XMLSchema#int>."Note that we have to use a variable (fortyTwoInt) bound to a Literal value in order to offer this int to getStatements(). We can't just type the value into the getStatements() method directly.Query TypeQueryMatches which types?getStatements()conn.getStatements(None, age, fortyTwoInt)"42"^^<http://www.w3.org/2001/XMLSchema#int>SPARQL direct matchSELECT ?s ?p WHERE {?s ?p "42"^^<http://www.w3.org/2001/XMLSchema#int>}"42"^^<http://www.w3.org/2001/XMLSchema#int>SPARQL filter matchSELECT ?s ?p ?o WHERE {?s ?p ?o . filter (?o = "42"^^<http://www.w3.org/2001/XMLSchema#int>)}"42"^^<http://www.w3.org/2001/XMLSchema#int>"4.2E1"^^<http://www.w3.org/2001/XMLSchema#float>"42"^^<http://www.w3.org/2001/XMLSchema#long>"4.2E1"^^<http://www.w3.org/2001/XMLSchema#double>Both the getStatements() query and the SPARQL direct query returned exactly what we asked for: ints. The filter match returned all numeric types that matches in value."Match '42'^^<http://www.w3.org/2001/XMLSchema#long>."Again we need a bound variable to offer a Literal value to getStatements().Query TypeQueryMatches which types?getStatements()conn.getStatements(None, age, fortyTwoLong)"42"^^<http://www.w3.org/2001/XMLSchema#long>SPARQL direct matchSELECT ?s ?p WHERE {?s ?p "42"^^<http://www.w3.org/2001/XMLSchema#long>}"42"^^<http://www.w3.org/2001/XMLSchema#long>SPARQL filter matchSELECT ?s ?p ?o WHERE {?s ?p ?o . filter (?o = "42"^^<http://www.w3.org/2001/XMLSchema#long>)}"42"^^<http://www.w3.org/2001/XMLSchema#int>"4.2E1"^^<http://www.w3.org/2001/XMLSchema#float>"42"^^<http://www.w3.org/2001/XMLSchema#long>"4.2E1"^^<http://www.w3.org/2001/XMLSchema#double>Both the getStatements() query and the SPARQL direct query returned longs. The filter match returned all numeric types."Match '42'^^<http://www.w3.org/2001/XMLSchema#double>."Query TypeQueryMatches which types?getStatements()conn.getStatements(None, age, fortyTwoDouble)"42"^^<http://www.w3.org/2001/XMLSchema#double>SPARQL direct matchSELECT ?s ?p WHERE {?s ?p "42"^^<http://www.w3.org/2001/XMLSchema#double>}"42"^^<http://www.w3.org/2001/XMLSchema#double>SPARQL filter matchSELECT ?s ?p ?o WHERE {?s ?p ?o . filter (?o = "42"^^<http://www.w3.org/2001/XMLSchema#double>)}"42"^^<http://www.w3.org/2001/XMLSchema#int>"4.2E1"^^<http://www.w3.org/2001/XMLSchema#float>"42"^^<http://www.w3.org/2001/XMLSchema#long>"4.2E1"^^<http://www.w3.org/2001/XMLSchema#double>Both the getStatements() query and the SPARQL direct query returned doubles. The filter match returned all numeric types.

Matching Numeric Strings and Plain Literals

At this point we are transitioning from tests of numeric matches to tests of string matches, but there is a gray zone to be explored first. What do we find if we search for strings that contain numbers? In particular, what about "plain literal" values that are almost, but not quite, strings?"Match '42'^^<http://www.w3.org/2001/XMLSchema#string>."This example asks for a typed string to see if we get any numeric matches back.Query TypeQueryMatches which types?getStatements()conn.getStatements(None, age, fortyTwoString)"42"^^<http://www.w3.org/2001/XMLSchema#string>It did not match the plain literal. SPARQL direct matchSELECT ?s ?p WHERE {?s ?p "42"^^<http://www.w3.org/2001/XMLSc

Matching Date, Time, and Datetime Literals

"Match date." What happens if we search for the date literal we defined? We'll use the "date" variable with getStatements(), but just type the expected value into the SPARQL queries.Query TypeQueryMatches which types?getStatements()conn.getStatements(None, age, date)"1984-12-06"^^<http://www.w3.org/2001/XMLSchema#date>SPARQL direct matchSELECT ?s ?p WHERE {?s ?p '1984-12-06'^^<http://www.w3.org/2001/XMLSchema#date>"1984-12-06"^^<http://www.w3.org/2001/XMLSchema#date>SPARQL filter matchSELECT ?s ?p ?o WHERE {?s ?p ?o . filter (?o ='1984-12-06'^^<http://www.w3.org/2001/XMLSchema#date>)}"1984-12-06"^^<http://www.w3.org/2001/XMLSchema#date>All three queries match narrowly, meaning the exact date and datatype we asked for is returned."Match datetime." What happens if we search for the datetime literal? We'll use the "datetime" variable with getStatements(), but just type the expected value into the SPARQL queries.Query TypeQueryMatches which types?getStatements()conn.getStatements(None, age, datetime)"1984-12-06T09:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>SPARQL direct matchSELECT ?s ?p WHERE {?s ?p '1984-12-06T09:00:00Z'^^<http://www.w3.org/2001/XMLSchema#dateTime> .}"1984-12-06T09:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>SPARQL filter matchSELECT ?s ?p ?o WHERE {?s ?p ?o . filter (?o = '1984-12-06T09:00:00Z'^^<http://www.w3.org/2001/XMLSchema#dateTime>)}"1984-12-06T09:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>The matches are specific for the exact date, time and type."Match time." What happens if we search for the time literal? We'll use the "time" variable with getStatements(), but just type the expected value into the SPARQL queries.Query TypeQueryMatches which types?getStatements()conn.getStatements(None, age, time)"09:00:00Z"^^<http://www.w3.org/2001/XMLSchema#time>SPARQL direct matchSELECT ?s ?p WHERE {?s ?p "09:00:00Z"^^<http://www.w3.org/2001/XMLSchema#time> .}"09:00:00Z"^^<http://www.w3.org/2001/XMLSchema#time>SPARQL filter matchSELECT ?s ?p ?o WHERE {?s ?p ?o . filter (?o = "09:00:00Z"^^<http://www.w3.org/2001/XMLSchema#time>)}"09:00:00Z"^^<http://www.w3.org/2001/XMLSchema#time>The matches are specific for the exact time and type."Match datetime with offset." What happens if we search for a datetime with zulu offset?Query TypeQueryMatches which types?getStatements()conn.getStatements(None, age, datetimeOffset)"1984-12-06T08:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>SPARQL direct matchSELECT ?s ?p WHERE {?s ?p "1984-12-06T09:00:00+01:00"^^<http://www.w3.org/2001/XMLSchema#dateTime> .}"1984-12-06T08:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>SPARQL filter matchSELECT ?s ?p ?o WHERE {?s ?p ?o . filter (?o = "1984-12-06T09:00:00+01:00"^^<http://www.w3.org/2001/XMLSchema#dateTime>)}"1984-12-06T08:00:00Z"^^<http://www.w3.org/2001/XMLSchema#dateTime>Note that we searched for "1984-12-06T09:00:00+01:00" but found "1984-12-06T08:00:00Z". It is the same moment in time.

Importing Triples (example6() and example7())    Return to Top

The Python Sesame API client can load triples in either RDF/XML format or NTriples format. The example below calls the connection object's add() method to load an NTriples file, and addFile() to load an RDF/XML file. Both methods work, but the best practice is to use addFile().Note: If you get a "file not found" error while running this example, it means that Python is looking in the wrong directory for the data files to load. The usual explanation is that you have moved the tutorial_examples_40.py file to an unexpected directory. You can clear the issue by putting the data files in the same directory as tutorial_examples_40.py, or by setting the Python current working directory to the location of the data files using os.setcwd().The RDF/XML file contains a short list of v-cards (virtual business cards), like this one: <rdf:Description rdf:about="http://somewhere/JohnSmith/"> <vCard:FN>John Smith</vCard:FN> <vCard:N rdf:parseType="Resource"> <vCard:Family>Smith</vCard:Family> <vCard:Given>John</vCard:Given> </vCard:N> </rdf:Description> The NTriples file contains a graph of resources describing the Kennedy family, the places where they were each born, their colleges, and their professions. A typical entry from that file looks like this:<http://www.franz.com/simple#person1> <http://www.franz.com/simple#first-name> "Joseph" . <http://www.franz.com/simple#person1> <http://www.franz.com/simple#middle-initial> "Patrick" . <http://www.franz.com/simple#person1> <http://www.franz.com/simple#last-name> "Kennedy" . <http://www.franz.com/simple#person1> <http://www.franz.com/simple#suffix> "none" . <http://www.franz.com/simple#person1> <http://www.franz.com/simple#alma-mater> <http://www.franz.com/simple#Harvard> . <http://www.franz.com/simple#person1> <http://www.franz.com/simple#birth-year> "1888" . <http://www.franz.com/simple#person1> <http://www.franz.com/simple#death-year> "1969" . <http://www.franz.com/simple#person1> <http://www.franz.com/simple#sex> <http://www.franz.com/simple#male> . <http://www.franz.com/simple#person1> <http://www.franz.com/simple#spouse> <http://www.franz.com/simple#person2> . <http://www.franz.com/simple#person1> <http://www.franz.com/simple#has-child> <http://www.franz.com/simple#person3> . <http://www.franz.com/simple#person1> <http://www.franz.com/simple#profession> <http://www.franz.com/simple#banker> . <http://www.franz.com/simple#person1> <http://www.franz.com/simple#birth-place> <http://www.franz.com/simple#place5> . <http://www.franz.com/simple#person1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.franz.com/simple#person> . Note that AllegroGraph can segregate triples into contexts (subgraphs) by treating them as quads, but the NTriples and RDF/XML formats can not include context information. They deal with triples only, so there is no place to store a fourth field in those formats. In the case of the add() call, we have omitted the context argument so the triples are loaded the default background graph (sometimes called the "null context.") The addFile() call includes an explicit context setting, so the fourth argument of each vcard triple will be the context named "/tutorial/vc_db_1_rdf". The connection size() method takes an optional context argument. With no argument, it returns the total number of triples in the repository. Below, it returns the number '16' for the 'context' context argument, and the number '28' for the null context (None) argument.The example6() function of tutorial_examples_40.py creates a dedicated session connection to AllegroGraph, using methods you have seen before, plus the Connection object's openSession() method:def example6(close=True): print "Starting example6()." server = AllegroGraphServer(AG_HOST, AG_PORT, AG_USER, AG_PASSWORD) catalog = server.openCatalog(AG_CATALOG) myRepository = catalog.getRepository(AG_REPOSITORY, Repository.RENEW) myRepository.initialize() conn = myRepository.getConnection() conn.clear() conn.openSession()The dedicated session is not immediately pertinent to the examples in this section, but will become important in later examples that reuse this connection to demonstrate Prolog Rules and Social Network Analysis.The variables path1 and path2 are bound to the RDF/XML and NTriples files, respectively. path1 = "./python-vcards.rdf" path2 = "./python-kennedy.ntriples" The NTriples about the vcards will be added to a specific context, so naturally we need a URI to identify that context. context = conn.createURI("http://example.org#vcards")In the next step we use addFile() to load the vcard triples into the #vcards context: conn.addFile(path1, None, format=RDFFormat.RDFXML, context=context)Then we use add() to load the Kennedy family tree into the null context: conn.add(path2, base=None, format=RDFFormat.NTRIPLES, contexts=None)Now we'll ask AllegroGraph to report on how many triples it sees in the null context and in the #vcards context: print "After loading, repository contains %i vcard triples in context '%s'\n and %i kennedy triples in context '%s'." % (conn.size(context), context, conn.size('null'), 'null') return connThe output of this report was:After loading, repository contains 16 vcard triples in context 'http://example.org#vcards' and 1214 kennedy triples in context 'null'. The SPARQL query below is found in example7() of tutorial_examples_40.py. It borrows the same triples we loaded in example6(), above, and runs two unconstrained retrievals. The first uses getStatement, and prints out the subject URI and context of each triple.def example7(): conn = example6() print "Match all and print subjects and contexts" result = conn.getStatements(None, None, None, None, limit=25) for row in result: print row.getSubject(), row.getContext()This loop prints out a mix of triples from the null context and from the #vcards context. We set a limit of 25 triples because the Kennedy dataset contains over a thousand triples.The following loop, however, does not produce the same results. This is a SPARQL query that should match all available triples, printing out the subject and context of each triple. We limited this query by using the DISTINCT keyword. Otherwise there would be many duplicate results. print "\nSame thing with SPARQL query (can't retrieve triples in the null context)" queryString = "SELECT DISTINCT ?s ?c WHERE {graph ?c {?s ?p ?o .} }" tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString) result = tupleQuery.evaluate(); for i, bindingSet in enumerate(result): print bindingSet[0], bindingSet[1] conn.close()In this case, the loop prints out only v-card results. The SPARQL query is not able to access the null context when a non-null context is also present.

Exporting Triples (example8() and example9())    Return to Top

The next examples show how to write triples out to a file in either NTriples format or RDF/XML format. The output of either format may be optionally redirected to standard output (the Python command window) for inspection.Example example8() begins by obtaining a connection object from example6(). This means the repository contains v-card triples in the #vcards context, and Kennedy family tree triples in the null context.def example8(): conn = example6()In this example, we'll export the triples in the #vcards context. context = conn.createURI("http://example.org#vcards")To write triples in NTriples format, call NTriplesWriter(). You have to tell it the path and file name of the exported file. If the output file argument is 'None', the writers write to standard output. You can uncomment that line if you'd like to see it work. This code exports the vcards triples in ntriples format: outputFile = "/tmp/temp.nt" #outputFile = None if outputFile == None: print "Writing RDF to Standard Out instead of to a file" ntriplesWriter = NTriplesWriter(outputFile) conn.export(ntriplesWriter, context);To write triples in RDF/XML format, call RDFXMLWriter(). This code exports the Kennedy triples in RDF/XML format. outputFile2 = "/tmp/temp.rdf" #outputFile2 = None if outputFile2 == None: print "Writing NTriples to Standard Out instead of to a file" rdfxmlfWriter = RDFXMLWriter(outputFile2) conn.export(rdfxmlfWriter, 'null')The export() method writes out all triples in one or more contexts. This provides a convenient means for making local backups of sections of your RDF store. The 'null' argument targets the triples of the default graph. If two or more contexts are specified, then triples from all of those contexts will be written to the same file. Since the triples are "mixed together" in the file, the context information is not recoverable. If the context argument is omitted, all triples in the store are written out, and again all context information is lost.Finally, if the objective is to write out a filtered set of triples, the exportStatements() method can be used. The example below (from example9()) writes out all familyName triples from the vcards context to standard output. familyName = conn.createURI("http://www.w3.org/2001/vcard-rdf/3.0#FN") conn.exportStatements(None, familyName, None, False, RDFXMLWriter(None), context)

Searching Multiple Graphs (example10())    Return to Top

We have already seen contexts (subgraphs) at work when loading and saving files. In example10() we provide more realistic examples of contexts, and we explore the FROM, FROM DEFAULT, and FROM NAMED clauses of a SPARQL query to see how they interact with multiple subgraphs in the triple store. Finally, we will introduce the dataset object. A dataset is a list of contexts that should all be searched simultaneously. It is an object for use with SPARQL queries.To set up the example, we create six statements, and add two of each to three different contexts: context1, context2, and the null context. The process of setting up the six statements follows the same pattern as we used in the previous examples: ## Create URIs for resources, predicates and classes. exns = "http://example.org/people/" alice = conn.createURI(namespace=exns, localname="alice") bob = conn.createURI(namespace=exns, localname="bob") ted = conn.createURI(namespace=exns, localname="ted") person = conn.createURI(namespace=exns, localname="Person") name = conn.createURI(namespace=exns, localname="name") ## Create literal name values. alicesName = conn.createLiteral("Alice") bobsName = conn.createLiteral("Bob") tedsName = conn.createLiteral("Ted") ## Create URIs to identify the named contexts. context1 = conn.createURI(namespace=exns, localname="context1") context2 = conn.createURI(namespace=exns, localname="context2") The next step is to assert two triples into each of three contexts: ## Assemble new statements and add them to the contexts. conn.add(alice, RDF.TYPE, person, context1) conn.add(alice, name, alicesName, context1) conn.add(bob, RDF.TYPE, person, context2) conn.add(bob, name, bobsName, context2) conn.add(ted, RDF.TYPE, person) // Added to null context conn.add(ted, name, tedsName) // Added to null contextNote that the final two statements (about Ted) were added to the null context (the unnamed default graph).

GetStatements

The first test uses getStatements() to return all triples in all contexts (context1, context2, and null). This is default search behavior, so there is no need to specify the contexts in the conn.getStatements() method. Note that conn.size() also reports on all contexts by default. statements = conn.getStatements(None, None, None) print "All triples in all contexts: %s" % (conn.size()) for s in statements: print sThe output of this loop is shown below. The context URIs are in the fourth position. Triples from the null context have no context value.All triples in all contexts: 6(<http://example.org/people/alice>, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://example.org/people/Person>, <http://example.org/people/context1>)(<http://example.org/people/alice>, <http://example.org/people/name>, "Alice", <http://example.org/people/context1>)(<http://example.org/people/bob>, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://example.org/people/Person>, <http://example.org/people/context2>)(<http://example.org/people/bob>, <http://example.org/people/name>, "Bob", <http://example.org/people/context2>)(<http://example.org/people/ted>, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://example.org/people/Person>)(<http://example.org/people/ted>, <http://example.org/people/name>, "Ted")The next match explicitly lists 'context1' and 'context2' as the only contexts to participate in the match. It returns four statements. The conn.size() method can also address individual contexts. statements = conn.getStatements(None, None, None, [context1, context2]) print "Triples in contexts 1 or 2: %s" % (conn.size([context1, context2])) for s in statements: print sThe output of this loop shows that the triples in the null context have been excluded.Triples in contexts 1 or 2: 4(<http://example.org/people/bob>, <http://example.org/people/name>, "Bob", <http://example.org/people/context2>)(<http://example.org/people/bob>, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://example.org/people/Person>, <http://example.org/people/context2>)(<http://example.org/people/alice>, <http://example.org/people/name>, "Alice", <http://example.org/people/context1>)(<http://example.org/people/alice>, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://example.org/people/Person>, <http://example.org/people/context1>)This time we use getStatements() to search explicitly for triples in the null context and in context 2. statements = conn.getStatements(None, None, None, ['null', context2]) print "Triples in contexts null or 2: %s" % (conn.size(['null', context2])) for s in statements: print sThe output of this loop is:Triples in contexts null or 2: 4(<http://example.org/people/bob>, <http://example.org/people/name>, "Bob", <http://example.org/people/context2>)(<http://example.org/people/bob>, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://example.org/people/Person>, <http://example.org/people/context2>)(<http://example.org/people/ted>, <http://example.org/people/name>, "Ted")(<http://example.org/people/ted>, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://example.org/people/Person>)The lesson is that getStatements() can freely mix triples from the null context and named contexts. It is all you need as long as the query is a very simple one.

SPARQL using FROM, F

Friday, April 12, 2013

found & decrypted IN DELL IN windows/PolicyDefinitions/en-US

all of these policy files reference

http://www.w3.org/2001/XMLSchema   revision=0.1
which redirects to:

http://schemas.stylusstudio.com/dc/n0/index.html
http://www.stylusstudio.com/site_map.html

http://www.stylusstudio.com/customer_service.html

Supported XML Technologies in Stylus Studio® X15 XML

Learning XML is easy with Stylus Studio® X15 XML, the only XML IDE to support all official W3C XML technologies! Click on a heading below to learn more about Stylus Studio®'s tools support for an XML or related W3C technologies.

XML 1.0

Stylus Studio® X15 XML's XML editor includes numerous synchronized, visual XML editing views, SenseX (Intelligent XML Editing), Integrated XML Validator, XML Differencing and much more!

XSLT

Stylus Studio® X15 XML's XSLT editor supports XSLT Debugging, XSLT Mapping, XSLT Profiling, Visual HTML-to-XSLT Stylesheet Design, XSL:FO transformation and much more!

XQuery (XML Query)

Stylus Studio® X15 XML is the first and only XML Development tool to support visual XQuery Editing, XQuery Mapping, XQuery Debugging.

XML Schema

Read about Stylus Studio® X15 XML's support for visual XML Schema editing, validation, XSD documentation generation, and other XSD utilities.

Document Type Definition (DTD)

Stylus Studio® X15 XML includes a visual DTD editor, integrated DTD validator and various DTD generation utilities.

XPath

Stylus Studio® X15 XML includes utilities for XPath 1.0/2.0, including XPath Evaluator, XPath Expression Generator, SenseX for XPath (Intelligent XPath Editing), and much more!

SQL/XML

Create XML views of Relational Database with Stylus Studio® X15 XML's SQL/XML utilities.

XHTML/HTML

Stylus Studio® X15 XML includes various handy XML tools for Web Designers for building advanced XML-data driven Websites.

SOAP, WSDL, UDDI

Stylus Studio® X15 XML supports Web Service Development via a Web Service Call Composer (i.e. a Web Service Invoker/Tester), a UDDI Registry Browser and more

Java & XML

Build XML-enabled Java applications using Stylus Studio® X15 XML's JSP Editor, XML-Java debugger, integrated Java code editor and more.

Microsoft & XML

Stylus Studio® X15 XML build XML enabled Microsoft applications with MSXML, Microsoft .NET XML (System.XML), SQL Server 2000, and other XML-enabled products and API's.Prev: "QuickStart Training" Next: "XML Tech Talks"Download a 15 Day Free 

Sunday, March 31, 2013

Good Site: Android How-tos

Android How-tos
http://www.omappedia.com/wiki/Android_How-tos
Contents

 [hide]1 Android Configuration Options1.1 Audio1.2 Camera1.3 OMAP2 Root File System2.1 Vendor Files2.2 JAR Files3 GFX Suppport3.1 Verify Lib GFX Version3.2 Verify Kernel GFX Version3.3 Memory Allocation4 Run Android Application from Command Line5 Work Flow: Code Changes6 Android Scripting Environment7 Debugging Segmentation Faults8 Open Source Means Participation9 GIT: Temporarily setting aside work in progress10 Color coding logcat output for easier debugging11 Making Ctrl+C work in Android console12 Getting su work from serial console13 Disabling screen lock forever14 Booting with Unlocked Screen15 Auto-add reviewers to your patches16 To Clean Build a Subdirectory (mm -B)17 Use "repo" to Push Patches18 Create and Insert a Unique Change-Id Line During git commit19 Git Usage Tips20 Recovering Lost Commits21 Measure Yourself Against Your Team22 Speed Up Repo Sync23 Android Debug Commands24 Kernel Traces - On the Go25 Repo Commands and Their Equivalent git Commands26 Finding Your Kernel Version27 Find What Changed in a subdir of a git Tree28 Compiling latest Android SDK version29 Faster Git Clones30 Run-time Debug (and module) Parameter Access31 gedit-plugins to make gedit easier to use.32 repo forall: One Shell Command for All the Projects33 The Power of Rebasing a Commit34 git gc /prune: Reduce Disk Space and Increase Performance35 ADB Usage36 ADB over ethernet37 Verbose Logs38 Prelinking in Android39 Clearing Airplane Mode40 Switching Java Versions41 Android Screen Capture42 Building Gingerbread from 32-bit Ubuntu43 eMMC boot: Quickly Flash Incremental Kernel44 eMMC boot: Steps to Update init.rc Changes45 Parallelize Repo Sync46 Side-by-Side Comparison of Patch Sets in Gerrit47 An APK is Just a Zip File48 Filtering Logcat Output49 Further Detail on Logcat Logs50 Capture Baseline Snapshot using repo manifest51 Floating Pane Feature in Gerrit52 Coding Standards for User Space and Kernel Space53 Unlock home screen without touchscreen54 Boot Process Performance Visualization55 Query All Changes in Gerrit56 Creating a Call Log57 Query Gerrit for: commit id, url, and more, from terminal!58 Understanding the Android makefile59 Understanding the Variants options in Android "lunch" command60 Uploading a zImage to Ram for testing without flashing using fastboot61 Configuring a Git Alias62 Input From Command Line63 Using git blame64 Adding a reviewer column to Gerrit65 Show git branch name at command prompt66 Diverting logcat prints to kernel log67 Show git branch name at command prompt68 Debugging libs in /system/lib/hw69 Using trace-cmd and kernelshark to get system traces69.1 SUMMARY69.2 UBUNTU SET-UP69.3 KERNEL CONFIG69.4 BUILD TRACE-CMD FOR OMAP69.5 USING TRACE-CMD69.6 ANALYZING TRACE.DAT WITH KERNELSHARK69.7 TROUBLESHOOTING69.8 LINKS TO MORE INFO70 Automatic logging kernel log71 Shell command to gather non consecutive GIT commits72 Android Screen Caster73 Multiple Build variants/targets on a single source74 Speed up Android builds with CCACHE75 VIM:Taglist: Lists functions while editing a file in VIM/GVIM editor76 Generating Keyevents Through adb shell

Wednesday, March 27, 2013

Gmail is hacked from laptop ie browser

Pop up at log in:and then image at bottom of screen
The source code of the log in page shows the hacked redirects
----------------------------------------POP UP

The site rightinbox.herokuapp.com is requesting access to your Google Account for the product(s) listed below.

  •  Gmail

Google is not affiliated with rightinbox.herokuapp.com, and we recommend that you grant access only if you trust the site.

If you grant access, you can revoke access at any time under 'My Account'. rightinbox.herokuapp.com will not have access to your password or any other personal information from your Google Account.S

---------------Source Code at log on screen

  <head>

  <meta charset="utf-8">

  <title>Gmail: Email from Google</title>

  <meta name="description" content="10+ GB of storage, less spam, and mobile access. Gmail is email that&#39;s intuitive, efficient, and useful. And maybe even fun.">

  <link rel="icon" type="image/ico" href="//mail.google.com/favicon.ico">

<style type="text/css">

  html, body, div, h1, h2, h3, h4, h5, h6, p, img, dl,

  dt, dd, ol, ul, li, table, tr, td, form, object, embed,

  article, aside, canvas, command, details, fieldset,

  figcaption, figure, footer, group, header, hgroup, legend,

  mark, menu, meter, nav, output, progress, section, summary,

  time, audio, video {

  margin: 0;

  padding: 0;

  border: 0;

  }

  article, aside, details, figcaption, figure, footer,

  header, hgroup, menu, nav, section {

  display: block;

  }

  html {

  font: 81.25% arial, helvetica, sans-serif;

  background: #fff;

  color: #333;

  line-height: 1;

  direction: ltr;

  }

  a {

  color: #15c;

  text-decoration: none;

  }

  a:active {

  color: #d14836;

  }

  a:hover {

  text-decoration: underline;

  }

  h1, h2, h3, h4, h5, h6 {

  color: #222;

  font-size: 1.54em;

  font-weight: normal;

  line-height: 24px;

  margin: 0 0 .46em;

  }

  p {

  line-height: 17px;

  margin: 0 0 1em;

  }

  ol, ul {

  list-style: none;

  line-height: 17px;

  margin: 0 0 1em;

  }

  li {

  margin: 0 0 .5em;

  }

  table {

  border-collapse: collapse;

  border-spacing: 0;

  }

  strong {

  color: #222;

  }

</style>

<style type="text/css">

  html, body {

  position: absolute;

  height: 100%;

  min-width: 100%;

  }

  .wrapper {

  position: relative;

  min-height: 100%;

  }

  .wrapper + style + iframe {

  display: none;

  }

  .content {

  padding: 0 44px;

  position: relative;

  }

  .topbar {

  text-align: right;

  padding-top: .5em;

  padding-bottom: .5em;

  }

  .google-header-bar {

  height: 71px;

  background: #f1f1f1;

  border-bottom: 1px solid #e5e5e5;

  overflow: hidden;

  }

  .header .logo {

  margin: 17px 0 0;

  float: left;

  }

  .header .signin,

  .header .signup {

  margin: 28px 0 0;

  float: right;

  font-weight: bold;

  }

  .header .signin-button,

  .header .signup-button {

  margin: 22px 0 0;

  float: right;

  }

  .header .signin-button a {

  font-size: 13px;

  font-weight: normal;

  }

  .header .signup-button a {

  position: relative;

  top: -1px;

  margin: 0 0 0 1em;

  }

  .main {

  margin: 0 auto;

  width: 650px;

  padding-top: 23px;

  padding-bottom: 100px;

  }

  .main h1:first-child {

  margin: 0 0 .92em;

  }

  .google-footer-bar {

  position: absolute;

  bottom: 0;

  height: 35px;

  width: 100%;

  border-top: 1px solid #ebebeb;

  overflow: hidden;

  }

  .footer {

  padding-top: 9px;

  font-size: .85em;

  white-space: nowrap;

  line-height: 0;

  }

  .footer ul {

  color: #999;

  float: left;

  max-width: 80%;

  }

  .footer ul li {

  display: inline;

  padding: 0 1.5em 0 0;

  }

  .footer a {

  color: #333;

  }

  .footer .lang-chooser-wrap {

  float: right;

  max-width: 20%;

  }

  .footer .lang-chooser-wrap img {

  vertical-align: middle;

  }

  .footer .attribution {

  float: right;

  }

  .footer .attribution span {

  vertical-align: text-top;

  }

  .redtext {

  color: #dd4b39;

  }

  .greytext {

  color: #555;

  }

  .secondary {

  font-size: 11px;

  color: #666;

  }

  .source {

  color: #093;

  }

  .hidden {

  display: none;

  }

  .announce-bar {

  position: absolute;

  bottom: 35px;

  height: 33px;

  z-index: 2;

  width: 100%;

  background: #f9edbe;

  border-top: 1px solid #efe1ac;

  border-bottom: 1px solid #efe1ac;

  overflow: hidden;

  }

  .announce-bar .message {

  font-size: .85em;

  line-height: 33px;

  margin: 0;

  }

  .announce-bar .message .separated {

  margin-left: 1.5em;

  }

  .announce-bar-ac {

  background: #eee;

  border-top: 1px solid #e5e5e5;

  border-bottom: 1px solid #e5e5e5;

  }

  .clearfix:after {

  visibility: hidden;

  display: block;

  font-size: 0;

  content: '.';

  clear: both;

  height: 0;

  }

  * html .clearfix {

  zoom: 1;

  }

  *:first-child+html .clearfix {

  zoom: 1;

  }

  pre {

  font-family: monospace;

  position: absolute;

  left: 0;

  margin: 0;

  padding: 1.5em;

  font-size: 13px;

  background: #f1f1f1;

  border-top: 1px solid #e5e5e5;

  direction: ltr;

  }

</style>

<style type="text/css">

  button, input, select, textarea {

  font-family: inherit;

  font-size: inherit;

  }

  button::-moz-focus-inner,

  input::-moz-focus-inner {

  border: 0;

  }

  input[type=email],

  input[type=number],

  input[type=password],

  input[type=tel],

  input[type=text],

  input[type=url] {

  display: inline-block;

  height: 29px;

  line-height: 25px;

  margin: 0;

  padding: 0 8px;

  background: #fff;

  border: 1px solid #d9d9d9;

  border-top: 1px solid #c0c0c0;

  -webkit-box-sizing: border-box;

  -moz-box-sizing: border-box;

  box-sizing: border-box;

  -webkit-border-radius: 1px;

  -moz-border-radius: 1px;

  border-radius: 1px;

  }

  input[type=email]:hover,

  input[type=number]:hover,

  input[type=password]:hover,

  input[type=tel]:hover,

  input[type=text]:hover,

  input[type=url]:hover {

  border: 1px solid #b9b9b9;

  border-top: 1px solid #a0a0a0;

  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  }

  input[type=email]:focus,

  input[type=number]:focus,

  input[type=password]:focus,

  input[type=tel]:focus,

  input[type=text]:focus,

  input[type=url]:focus {

  outline: none;

  border: 1px solid #4d90fe;

  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);

  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);

  box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);

  }

  input[type=email][disabled=disabled],

  input[type=number][disabled=disabled],

  input[type=password][disabled=disabled],

  input[type=tel][disabled=disabled],

  input[type=text][disabled=disabled],

  input[type=url][disabled=disabled] {

  border: 1px solid #e5e5e5;

  background: #f1f1f1;

  }

  input[type=email][disabled=disabled]:hover,

  input[type=number][disabled=disabled]:hover,

  input[type=password][disabled=disabled]:hover,

  input[type=tel][disabled=disabled]:hover,

  input[type=text][disabled=disabled]:hover,

  input[type=url][disabled=disabled]:hover {

  -webkit-box-shadow: none;

  -moz-box-shadow: none;

  box-shadow: none;

  }

  input[type=email][readonly=readonly],

  input[type=number][readonly=readonly],

  input[type=password][readonly=readonly],

  input[type=text][readonly=readonly],

  input[type=url][readonly=readonly] {

  border: 1px solid #d9d9d9;

  }

  input[type=email][readonly=readonly]:hover,

  input[type=number][readonly=readonly]:hover,

  input[type=password][readonly=readonly]:hover,

  input[type=text][readonly=readonly]:hover,

  input[type=url][readonly=readonly]:hover,

  input[type=email][readonly=readonly]:focus,

  input[type=number][readonly=readonly]:focus,

  input[type=password][readonly=readonly]:focus,

  input[type=text][readonly=readonly]:focus,

  input[type=url][readonly=readonly]:focus {

  -webkit-box-shadow: none;

  -moz-box-shadow: none;

  box-shadow: none;

  }

  input[type=checkbox].form-error,

  input[type=email].form-error,

  input[type=number].form-error,

  input[type=password].form-error,

  input[type=text].form-error,

  input[type=tel].form-error,

  input[type=url].form-error {

  border: 1px solid #dd4b39;

  }

  input[type=checkbox],

  input[type=radio] {

  -webkit-appearance: none;

  appearance: none;

  width: 13px;

  height: 13px;

  margin: 0;

  cursor: pointer;

  vertical-align: bottom;

  background: #fff;

  border: 1px solid #dcdcdc;

  -webkit-border-radius: 1px;

  -moz-border-radius: 1px;

  border-radius: 1px;

  -webkit-box-sizing: border-box;

  -moz-box-sizing: border-box;

  box-sizing: border-box;

  position: relative;

  border: 0;

  width: 16px;

  height: 16px;

  box-sizing: content-box;

  background: none;

  }

  input[type=checkbox]:active,

  input[type=radio]:active {

  border-color: #c6c6c6;

  background: #ebebeb;

  background: none;

  }

  input[type=checkbox]:hover {

  border-color: #c6c6c6;

  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);

  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);

  box-shadow: inset 0 1px 1px rgba(0,0,0,0.1);

  }

  input[type=radio] {

  -webkit-border-radius: 1em;

  -moz-border-radius: 1em;

  border-radius: 1em;

  width: 15px;

  height: 15px;

  }

  input[type=checkbox]:checked,

  input[type=radio]:checked {

  background: #fff;

  }

  input[type=radio]:checked::after {

  content: '';

  display: block;

  position: relative;

  top: 3px;

  left: 3px;

  width: 7px;

  height: 7px;

  background: #666;

  -webkit-border-radius: 1em;

  -moz-border-radius: 1em;

  border-radius: 1em;

  }

  input[type=checkbox]:checked::after {

  content: url(//ssl.gstatic.com/ui/v1/menu/checkmark.png);

  display: block;

  position: absolute;

  top: -6px;

  left: -5px;

  }

  input[type=checkbox]:focus {

  outline: none;

  border-color:#4d90fe;

  }

  .g-button {

  display: inline-block;

  min-width: 46px;

  text-align: center;

  color: #444;

  font-size: 11px;

  font-weight: bold;

  height: 27px;

  padding: 0 8px;

  line-height: 27px;

  -webkit-border-radius: 2px;

  -moz-border-radius: 2px;

  border-radius: 2px;

  -webkit-transition: all 0.218s;

  -moz-transition: all 0.218s;

  -ms-transition: all 0.218s;

  -o-transition: all 0.218s;

  transition: all 0.218s;

  border: 1px solid #dcdcdc;

  background-color: #f5f5f5;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#f1f1f1));

  background-image: -webkit-linear-gradient(top,#f5f5f5,#f1f1f1);

  background-image: -moz-linear-gradient(top,#f5f5f5,#f1f1f1);

  background-image: -ms-linear-gradient(top,#f5f5f5,#f1f1f1);

  background-image: -o-linear-gradient(top,#f5f5f5,#f1f1f1);

  background-image: linear-gradient(top,#f5f5f5,#f1f1f1);

  -webkit-user-select: none;

  -moz-user-select: none;

  user-select: none;

  cursor: default;

  }

  *+html .g-button {

  min-width: 70px;

  }

  button.g-button,

  input[type=submit].g-button {

  height: 29px;

  line-height: 29px;

  vertical-align: bottom;

  margin: 0;

  }

  *+html button.g-button,

  *+html input[type=submit].g-button {

  overflow: visible;

  }

  .g-button:hover {

  border: 1px solid #c6c6c6;

  color: #333;

  text-decoration: none;

  -webkit-transition: all 0.0s;

  -moz-transition: all 0.0s;

  -ms-transition: all 0.0s;

  -o-transition: all 0.0s;

  transition: all 0.0s;

  background-color: #f8f8f8;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#f8f8f8),to(#f1f1f1));

  background-image: -webkit-linear-gradient(top,#f8f8f8,#f1f1f1);

  background-image: -moz-linear-gradient(top,#f8f8f8,#f1f1f1);

  background-image: -ms-linear-gradient(top,#f8f8f8,#f1f1f1);

  background-image: -o-linear-gradient(top,#f8f8f8,#f1f1f1);

  background-image: linear-gradient(top,#f8f8f8,#f1f1f1);

  -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.1);

  -moz-box-shadow: 0 1px 1px rgba(0,0,0,0.1);

  box-shadow: 0 1px 1px rgba(0,0,0,0.1);

  }

  .g-button:active {

  background-color: #f6f6f6;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#f6f6f6),to(#f1f1f1));

  background-image: -webkit-linear-gradient(top,#f6f6f6,#f1f1f1);

  background-image: -moz-linear-gradient(top,#f6f6f6,#f1f1f1);

  background-image: -ms-linear-gradient(top,#f6f6f6,#f1f1f1);

  background-image: -o-linear-gradient(top,#f6f6f6,#f1f1f1);

  background-image: linear-gradient(top,#f6f6f6,#f1f1f1);

  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  }

  .g-button:visited {

  color: #666;

  }

  .g-button-submit {

  border: 1px solid #3079ed;

  color: #fff;

  text-shadow: 0 1px rgba(0,0,0,0.1);

  background-color: #4d90fe;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#4787ed));

  background-image: -webkit-linear-gradient(top,#4d90fe,#4787ed);

  background-image: -moz-linear-gradient(top,#4d90fe,#4787ed);

  background-image: -ms-linear-gradient(top,#4d90fe,#4787ed);

  background-image: -o-linear-gradient(top,#4d90fe,#4787ed);

  background-image: linear-gradient(top,#4d90fe,#4787ed);

  }

  .g-button-submit:hover {

  border: 1px solid #2f5bb7;

  color: #fff;

  text-shadow: 0 1px rgba(0,0,0,0.3);

  background-color: #357ae8;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#357ae8));

  background-image: -webkit-linear-gradient(top,#4d90fe,#357ae8);

  background-image: -moz-linear-gradient(top,#4d90fe,#357ae8);

  background-image: -ms-linear-gradient(top,#4d90fe,#357ae8);

  background-image: -o-linear-gradient(top,#4d90fe,#357ae8);

  background-image: linear-gradient(top,#4d90fe,#357ae8);

  }

  .g-button-submit:active {

  background-color: #357ae8;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#357ae8));

  background-image: -webkit-linear-gradient(top,#4d90fe,#357ae8);

  background-image: -moz-linear-gradient(top,#4d90fe,#357ae8);

  background-image: -ms-linear-gradient(top,#4d90fe,#357ae8);

  background-image: -o-linear-gradient(top,#4d90fe,#357ae8);

  background-image: linear-gradient(top,#4d90fe,#357ae8);

  -webkit-box-shadow: inset 0 1px 2px rgb a(0,0,0,0.3);

  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);

  box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);

  }

  .g-button-share {

  border: 1px solid #29691d;

  color: #fff;

  text-shadow: 0 1px rgba(0,0,0,0.1);

  background-color: #3d9400;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#3d9400),to(#398a00));

  background-image: -webkit-linear-gradient(top,#3d9400,#398a00);

  background-image: -moz-linear-gradient(top,#3d9400,#398a00);

  background-image: -ms-linear-gradient(top,#3d9400,#398a00);

  background-image: -o-linear-gradient(top,#3d9400,#398a00);

  background-image: linear-gradient(top,#3d9400,#398a00);

  }

  .g-button-share:hover {

  border: 1px solid #2d6200;

  color: #fff;

  text-shadow: 0 1px rgba(0,0,0,0.3);

  background-color: #368200;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#3d9400),to(#368200));

  background-image: -webkit-linear-gradient(top,#3d9400,#368200);

  background-image: -moz-linear-gradient(top,#3d9400,#368200);

  background-image: -ms-linear-gradient(top,#3d9400,#368200);

  background-image: -o-linear-gradient(top,#3d9400,#368200);

  background-image: linear-gradient(top,#3d9400,#368200);

  }

  .g-button-share:active {

  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);

  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);

  box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);

  }

  .g-button-red {

  border: 1px solid transparent;

  color: #fff;

  text-shadow: 0 1px rgba(0,0,0,0.1);

  text-transform: uppercase;

  background-color: #d14836;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#dd4b39),to(#d14836));

  background-image: -webkit-linear-gradient(top,#dd4b39,#d14836);

  background-image: -moz-linear-gradient(top,#dd4b39,#d14836);

  background-image: -ms-linear-gradient(top,#dd4b39,#d14836);

  background-image: -o-linear-gradient(top,#dd4b39,#d14836);

  background-image: linear-gradient(top,#dd4b39,#d14836);

  }

  .g-button-red:hover {

  border: 1px solid #b0281a;

  color: #fff;

  text-shadow: 0 1px rgba(0,0,0,0.3);

  background-color: #c53727;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#dd4b39),to(#c53727));

  background-image: -webkit-linear-gradient(top,#dd4b39,#c53727);

  background-image: -moz-linear-gradient(top,#dd4b39,#c53727);

  background-image: -ms-linear-gradient(top,#dd4b39,#c53727);

  background-image: -o-linear-gradient(top,#dd4b39,#c53727);

  background-image: linear-gradient(top,#dd4b39,#c53727);

  -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.2);

  -moz-box-shadow: 0 1px 1px rgba(0,0,0,0.2);

  -ms-box-shadow: 0 1px 1px rgba(0,0,0,0.2);

  -o-box-shadow: 0 1px 1px rgba(0,0,0,0.2);

  box-shadow: 0 1px 1px rgba(0,0,0,0.2);

  }

  .g-button-red:active {

  border: 1px solid #992a1b;

  background-color: #b0281a;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#dd4b39),to(#b0281a));

  background-image: -webkit-linear-gradient(top,#dd4b39,#b0281a);

  background-image: -moz-linear-gradient(top,#dd4b39,#b0281a);

  background-image: -ms-linear-gradient(top,#dd4b39,#b0281a);

  background-image: -o-linear-gradient(top,#dd4b39,#b0281a);

  background-image: linear-gradient(top,#dd4b39,#b0281a);

  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);

  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);

  box-shadow: inset 0 1px 2px rgba(0,0,0,0.3);

  color: #fff

  }

  .g-button-white {

  border: 1px solid #dcdcdc;

  color: #666;

  background: #fff;

  }

  .g-button-white:hover {

  border: 1px solid #c6c6c6;

  color: #333;

  background: #fff;

  -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.1);

  -moz-box-shadow: 0 1px 1px rgba(0,0,0,0.1);

  box-shadow: 0 1px 1px rgba(0,0,0,0.1);

  }

  .g-button-white:active {

  background: #fff;

  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  }

  .g-button-red:visited,

  .g-button-share:visited,

  .g-button-submit:visited {

  color: #fff;

  }

  .g-button-submit:focus,

  .g-button-share:focus,

  .g-button-red:focus {

  -webkit-box-shadow: inset 0 0 0 1px #fff;

  -moz-box-shadow: inset 0 0 0 1px #fff;

  box-shadow: inset 0 0 0 1px #fff;

  }

  .g-button-share:focus {

  border-color: #29691d;

  }

  .g-button-red:focus {

  border-color: #d14836;

  }

  .g-button-submit:focus:hover,

  .g-button-share:focus:hover,

  .g-button-red:focus:hover {

  -webkit-box-shadow: inset 0 0 0 1px #fff, 0 1px 1px rgba(0,0,0,0.1);

  -moz-box-shadow: inset 0 0 0 1px #fff, 0 1px 1px rgba(0,0,0,0.1);

  box-shadow: inset 0 0 0 1px #fff, 0 1px 1px rgba(0,0,0,0.1);

  }

  .g-button.selected {

  background-color: #eee;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#eee),to(#e0e0e0));

  background-image: -webkit-linear-gradient(top,#eee,#e0e0e0);

  background-image: -moz-linear-gradient(top,#eee,#e0e0e0);

  background-image: -ms-linear-gradient(top,#eee,#e0e0e0);

  background-image: -o-linear-gradient(top,#eee,#e0e0e0);

  background-image: linear-gradient(top,#eee,#e0e0e0);

  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);

  border: 1px solid #ccc;

  color: #333;

  }

  .g-button img {

  display: inline-block;

  margin: -3px 0 0;

  opacity: .55;

  filter: alpha(opacity=55);

  vertical-align: middle;

  pointer-events: none;

  }

  *+html .g-button img {

  margin: 4px 0 0;

  }

  .g-button:hover img {

  opacity: .72;

  filter: alpha(opacity=72);

  }

  .g-button:active img {

  opacity: 1;

  filter: alpha(opacity=100);

  }

  .g-button.disabled img {

  opacity: .5;

  filter: alpha(opacity=50);

  }

  .g-button.disabled,

  .g-button.disabled:hover,

  .g-button.disabled:active,

  .g-button-submit.disabled,

  .g-button-submit.disabled:hover,

  .g-button-submit.disabled:active,

  .g-button-share.disabled,

  .g-button-share.disabled:hover,

  .g-button-share.disabled:active,

  .g-button-red.disabled,

  .g-button-red.disabled:hover,

  .g-button-red.disabled:active,

  input[type=submit][disabled].g-button {

  background-color: none;

  opacity: .5;

  filter: alpha(opacity=50);

  cursor: default;

  pointer-events: none;

  }

  .goog-menu {

  -webkit-box-shadow: 0 2px 4px rgba(0,0,0,0.2);

  -moz-box-shadow: 0 2px 4px rgba(0,0,0,0.2);

  box-shadow: 0 2px 4px rgba(0,0,0,0.2);

  -webkit-transition: opacity 0.218s;

  -moz-transition: opacity 0.218s;

  -ms-transition: opacity 0.218s;

  -o-transition: opacity 0.218s;

  transition: opacity 0.218s;

  background: #fff;

  border: 1px solid #ccc;

  border: 1px solid rgba(0,0,0,.2);

  cursor: default;

  font-size: 13px;

  margin: 0;

  outline: none;

  padding: 0 0 6px;

  position: absolute;

  z-index: 2;

  overflow: auto;

  }

  .goog-menuitem,

  .goog-tristatemenuitem,

  .goog-filterobsmenuitem {

  position: relative;

  color: #333;

  cursor: pointer;

  list-style: none;

  margin: 0;

  padding: 6px 7em 6px 30px;

  white-space: nowrap;

  }

  .goog-menuitem-highlight,

  .goog-menuitem-hover {

  background-color: #eee;

  border-color: #eee;

  border-style: dotted;

  border-width: 1px 0;

  padding-top: 5px;

  padding-bottom: 5px;

  }

  .goog-menuitem-highlight .goog-menuitem-content,

  .goog-menuitem-hover .goog-menuitem-content {

  color: #333;

  }

  .goog-menuseparator {

  border-top: 1px solid #ebebeb;

  margin-top: 9px;

  margin-bottom: 10px;

  }

  .goog-inline-block {

  position: relative;

  display: -moz-inline-box;

  display: inline-block;

  }

  * html .goog-inline-block {

  display: inline;

  }

  *:first-child+html .goog-inline-block {

  display: inline;

  }

  .dropdown-block {

  display: block;

  }

  .goog-flat-menu-button {

  -webkit-border-radius: 2px;

  -moz-border-radius: 2px;

  border-radius: 2px;

  background-color: #f5f5f5;

  background-image: -webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#f1f1f1));

  background-image: -webkit-linear-gradient(top,#f5f5f5,#f1f1f1);

  background-image: -moz-linear-gradient(top,#f5f5f5,#f1f1f1);

  background-image: -ms-linear-gradient(top,#f5f5f5,#f1f1f1);

  background-image: -o-linear-gradient(top,#f5f5f5,#f1f1f1);

  background-image: linear-gradient(top,#f5f5f5,#f1f1f1);

  border: 1px solid #dcdcdc;

  color: #444;

  font-size: 11px;

  font-weight: bold;

  line-height: 27px;

  list-style: none;

  margin: 0 2px;

  min-width: 46px;

  outline: none;

  padding: 0 18px 0 6px;

  text-decoration: none;

  vertical-align: middle;

  }

  .goog-flat-menu-button-disabled {

  background-color: #fff;

  border-color: #f3f3f3;

  color: #b8b8b8;

  cursor: default;

  }

  .goog-flat-menu-button.goog-flat-menu-button-hover {

  background-color: #f8f8f8;

  background-image: -webkit-linear-gradient(top,#f8f8f8,#f1f1f1);

  background-image: -moz-linear-gradient(top,#f8f8f8,#f1f1f1);

  background-image: -ms-linear-gradient(top,#f8f8f8,#f1f1f1);

  background-image: -o-linear-gradient(top,#f8f8f8,#f1f1f1);

  background-image: linear-gradient(top,#f8f8f8,#f1f1f1);

  -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.1);

  -moz-box-shadow: 0 1px 1px rgba(0,0,0,.1);

  box-shadow: 0 1px 1px rgba(0,0,0,.1);

  border-color: #c6c6c6;

  color: #333;

  }

  .goog-flat-menu-button.goog-flat-menu-button-focused {

  border-color: #4d90fe;

  }

  .form-error .goog-flat-menu-button {

  border: 1px solid #dd4b39;

  }

  .form-error .goog-flat-menu-button-focused {

  border-color: #4d90fe;

  }

  .goog-flat-menu-button.goog-flat-menu-button-open,

  .goog-flat-menu-button.goog-flat-menu-button-active {

  -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);

  -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1);

  box-shadow: inset 0 1px 2px rgba(0,0,0,.1);

  background-color: #eee;

  background-image: -webkit-linear-gradient(top,#eee,#e0e0e0);

  background-image: -moz-linear-gradient(top,#eee,#e0e0e0);

  background-image: -ms-linear-gradient(top,#eee,#e0e0e0);

  background-image: -o-linear-gradient(top,#eee,#e0e0e0);

  background-image: linear-gradient(top,#eee,#e0e0e0);

  border: 1px solid #ccc;

  color: #333;

  z-index: 2;

  }

  .goog-flat-menu-button-caption {

  vertical-align: top;

  white-space: nowrap;

  }

  .goog-flat-menu-button-dropdown {

  border-color: #777 transparent;

  border-style: solid;

  border-width: 4px 4px 0;

  height: 0;

  width: 0;

  position: absolute;

  right: 5px;

  top: 12px;

  }

  .jfk-select .goog-flat-menu-button-dropdown {

  background: url(//ssl.gstatic.com/ui/v1/disclosure/grey-disclosure-arrow-up-down.png) center no-repeat;

  border: none;

  height: 11px;

  margin-top: -4px;

  width: 7px;

  }

  .goog-menu-nocheckbox .goog-menuitem,

  .goog-menu-noicon .goog-menuitem {

  padding-left: 16px;

  vertical-align: middle;

  }

  body ::-webkit-scrollbar {

  height: 16px;

  width: 16px;

  overflow: visible;

  }

  body ::-webkit-scrollbar-button {

  height: 0;

  width: 0;

  }

  body ::-webkit-scrollbar-track {

  background-clip: padding-box;

  border: solid transparent;

  border-width: 0 0 0 7px;

  }

  body ::-webkit-scrollbar-track:horizontal {

  border-width: 7px 0 0;

  }

  body ::-webkit-scrollbar-track:hover {

  background-color: rgba(0,0,0,.05);

  -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1);

  box-shadow: inset 1px 0 0 rgba(0,0,0,.1);

  }

  body ::-webkit-scrollbar-track:horizontal:hover {

  -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,.1);

  box-shadow: inset 0 1px 0 rgba(0,0,0,.1);

  }

  body ::-webkit-scrollbar-track:active {

  background-color: rgba(0,0,0,.05);

  -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07);

  box-shadow: inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07);

  }

  body ::-webkit-scrollbar-track:horizontal:active {

  -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07);

  box-shadow: inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07);

  }

  .jfk-scrollbar-dark::-webkit-scrollbar-track:hover {

  background-color: rgba(255,255,255,.1);

  -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.2);

  box-shadow: inset 1px 0 0 rgba(255,255,255,.2);

  }

  .jfk-scrollbar-dark::-webkit-scrollbar-track:horizontal:hover {

  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2);

  box-shadow: inset 0 1px 0 rgba(255,255,255,.2);

  }

  .jfk-scrollbar-dark::-webkit-scrollbar-track:active {

  background-color: rgba(255,255,255,.1);

  -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.25),inset -1px 0 0 rgba(255,255,255,.15);

  box-shadow: inset 1px 0 0 rgba(255,255,255,.25),inset -1px 0 0 rgba(255,255,255,.15);

  }

  .jfk-scrollbar-dark::-webkit-scrollbar-track:horizontal:active {

  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.25),inset 0 -1px 0 rgba(255,255,255,.15);

  box-shadow: inset 0 1px 0 rgba(255,255,255,.25),inset 0 -1px 0 rgba(255,255,255,.15);

  }

  body ::-webkit-scrollbar-thumb {

  background-color: rgba(0,0,0,.2);

  background-clip: padding-box;

  border: solid transparent;

  border-width: 0 0 0 7px;

  min-height: 28px;

  padding: 100px 0 0;

  -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);

  box-shadow: inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);

  }

  body ::-webkit-scrollbar-thumb:horizontal {

  border-width: 7px 0 0;

  padding: 0 0 0 100px;

  -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.1),inset -1px 0 0 rgba(0,0,0,.07);

  box-shadow: inset 1px 1px 0 rgba(0,0,0,.1),inset -1px 0 0 rgba(0,0,0,.07);

  }

  body ::-webkit-scrollbar-thumb:hover {

  background-color: rgba(0,0,0,.4);

  -webkit-box-shadow: inset 1px 1px 1px rgba(0,0,0,.25);

  box-shadow: inset 1px 1px 1px rgba(0,0,0,.25);

  }

  body ::-webkit-scrollbar-thumb:active {

  background-color: rgba(0,0,0,.5);

  -webkit-box-shadow: inset 1px 1px 3px rgba(0,0,0,.35);

  box-shadow: inset 1px 1px 3px rgba(0,0,0,.35);

  }

  .jfk-scrollbar-dark::-webkit-scrollbar-thumb {

  background-color: rgba(255,255,255,.3);

  -webkit-box-shadow: inset 1px 1px 0 rgba(255,255,255,.15),inset 0 -1px 0 rgba(255,255,255,.1);

  box-shadow: inset 1px 1px 0 rgba(255,255,255,.15),inset 0 -1px 0 rgba(255,255,255,.1);

  }

  .jfk-scrollbar-dark::-webkit-scrollbar-thumb:horizontal {

  -webkit-box-shadow: inset 1px 1px 0 rgba(255,255,255,.15),inset -1px 0 0 rgba(255,255,255,.1);

  box-shadow: inset 1px 1px 0 rgba(255,255,255,.15),inset -1px 0 0 rgba(255,255,255,.1);

  }

  .jfk-scrollbar-dark::-webkit-scrollbar-thumb:hover {

  background-color: rgba(255,255,255,.6);

  -webkit-box-shadow: inset 1px 1px 1px rgba(255,255,255,.37);

  box-shadow: inset 1px 1px 1px rgba(255,255,255,.37);

  }

  .jfk-scrollbar-dark::-webkit-scrollbar-thumb:active {

  background-color: rgba(255,255,255,.75);

  -webkit-box-shadow: inset 1px 1px 3px rgba(255,255,255,.5);

  box-shadow: inset 1px 1px 3px rgba(255,255,255,.5);

  }

  .jfk-scrollbar-borderless::-webkit-scrollbar-track {

  border-width: 0 1px 0 6px

  }

  .jfk-scrollbar-borderless::-webkit-scrollbar-track:horizontal {

  border-width: 6px 0 1px

  }

  .jfk-scrollbar-borderless::-webkit-scrollbar-track:hover {

  background-color: rgba(0,0,0,.035);

  -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.14),inset -1px -1px 0 rgba(0,0,0,.07);

  box-shadow: inset 1px 1px 0 rgba(0,0,0,.14),inset -1px -1px 0 rgba(0,0,0,.07);

  }

  .jfk-scrollbar-borderless.jfk-scrollbar-dark::-webkit-scrollbar-track:hover {

  background-color: rgba(255,255,255,.07);

  -webkit-box-shadow: inset 1px 1px 0 rgba(255,255,255,.25),inset -1px -1px 0 rgba(255,255,255,.15);

  box-shadow: inset 1px 1px 0 rgba(255,255,255,.25),inset -1px -1px 0 rgba(255,255,255,.15);

  }

  .jfk-scrollbar-borderless::-webkit-scrollbar-thumb {

  border-width: 0 1px 0 6px;

  }

  .jfk-scrollbar-borderless::-webkit-scrollbar-thumb:horizontal {

  border-width: 6px 0 1px;

  }

  body ::-webkit-scrollbar-corner {

  background: transparent;

  }

  body::-webkit-scrollbar-track-piece {

  background-clip: padding-box;

  background-color: #f1f1f1;

  border: solid #fff;

  border-width: 0 0 0 3px;

  -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07);

  box-shadow: inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07);

  }

  body::-webkit-scrollbar-track-piece:horizontal {

  border-width: 3px 0 0;

  -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07);

  box-shadow: inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07);

  }

  body::-webkit-scrollbar-thumb {

  border-width: 1px 1px 1px 5px;

  }

  body::-webkit-scrollbar-thumb:horizontal {

  border-width: 5px 1px 1px;

  }

  body::-webkit-scrollbar-corner {

  background-clip: padding-box;

  background-color: #f1f1f1;

  border: solid #fff;

  border-width: 3px 0 0 3px;

  -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.14);

  box-shadow: inset 1px 1px 0 rgba(0,0,0,.14);

  }

  .jfk-scrollbar::-webkit-scrollbar {

  height: 16px;

  overflow: visible;

  width: 16px;

  }

  .jfk-scrollbar::-webkit-scrollbar-button {

  height: 0;

  width: 0;

  }

  .jfk-scrollbar::-webkit-scrollbar-track {

  background-clip: padding-box;

  border: solid transparent;

  border-width: 0 0 0 7px;

  }

  .jfk-scrollbar::-webkit-scrollbar-track:horizontal {

  border-width: 7px 0 0;

  }

  .jfk-scrollbar::-webkit-scrollbar-track:hover {

  background-color: rgba(0,0,0,.05);

  -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1);

  box-shadow: inset 1px 0 0 rgba(0,0,0,.1);

  }

  .jfk-scrollbar::-webkit-scrollbar-track:horizontal:hover {

  -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,.1);

  box-shadow: inset 0 1px 0 rgba(0,0,0,.1);

  }

  .jfk-scrollbar::-webkit-scrollbar-track:active {

  background-color: rgba(0,0,0,.05);

  -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07);

  box-shadow: inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07);

  }

  .jfk-scrollbar::-webkit-scrollbar-track:horizontal:active {

  -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07);

  box-shadow: inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07);

  }

  .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:hover {

  background-color: rgba(255,255,255,.1);

  -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.2);

  box-shadow: inset 1px 0 0 rgba(255,255,255,.2);

  }

  .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:horizontal:hover {

  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2);

  box-shadow: inset 0 1px 0 rgba(255,255,255,.2);

  }

  .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:active {

  background-color: rgba(255,255,255,.1);

  -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.25),inset -1px 0 0 rgba(255,255,255,.15);

  box-shadow: inset 1px 0 0 rgba(255,255,255,.25),inset -1px 0 0 rgba(255,255,255,.15);

  }

  .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:horizontal:active {

  -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.25),inset 0 -1px 0 rgba(255,255,255,.15);

  box-shadow: inset 0 1px 0 rgba(255,255,255,.25),inset 0 -1px 0 rgba(255,255,255,.15);

  }

  .jfk-scrollbar::-webkit-scrollbar-thumb {

  background-color: rgba(0,0,0,.2);

  background-clip: padding-box;

  border: solid transparent;

  border-width: 0 0 0 7px;

  min-height: 28px;

  padding: 100px 0 0;

  -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);

  box-shadow: inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);

  }

  .jfk-scrollbar::-webkit-scrollbar-thumb:horizontal {

  border-width: 7px 0 0;

  padding: 0 0 0 100px;

  -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.1),inset -1px 0 0 rgba(0,0,0,.07);

  box-shadow: inset 1px 1px 0 rgba(0,0,0,.1),inset -1px 0 0 rgba(0,0,0,.07);

  }

  .jfk-scrollbar::-webkit-scrollbar-thumb:hover {

  background-color: rgba(0,0,0,.4);

  -webkit-box-shadow: inset 1px 1px 1px rgba(0,0,0,.25);

  box-shadow: inset 1px 1px 1px rgba(0,0,0,.25);

  }

  .jfk-scrollbar::-webkit-scrollbar-thumb:active {

  background-color: rgba(0,0,0,0.5);

  -webkit-box-shadow: inset 1px 1px 3px rgba(0,0,0,0.35);

  box-shadow: inset 1px 1px 3px rgba(0,0,0,0.35);

  }

  .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-thumb {

  background-color: rgba(255,255,255,.3);

  -webkit-box-shadow: inset 1px 1px 0 rgba(255,255,255,.15),inset 0 -1px 0 rgba(255,255,255,.1);

  box-shadow: inset 1px 1px 0 rgba(255,255,255,.15),inset 0 -1px 0 rgba(255,255,255,.1);

  }

  .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-thumb:horizontal {

  -webkit-box-shadow: inset 1px 1px 0 rgba(255,255,255,.15),inset -1px 0 0 rgba(255,255,255,.1);

  box-shadow: inset 1px 1px 0 rgba(255,255,255,.15),inset -1px 0 0 rgba(255,255,255,.1);

  }

  .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-thumb:hover {

  background-color: rgba(255,255,255,.6);

  -webkit-box-shadow: inset 1px 1px 1px rgba(255,255,255,.37);

  box-shadow: inset 1px 1px 1px rgba(255,255,255,.37);

  }

  .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-thumb:active {

  background-color: rgba(255,255,255,.75);

  -webkit-box-shadow: inset 1px 1px 3px rgba(255,255,255,.5);

  box-shadow: inset 1px 1px 3px rgba(255,255,255,.5);

  }

  .jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-track {

  border-width: 0 1px 0 6px;

  }

  .jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-track:horizontal {

  border-width: 6px 0 1px;

  }

  .jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-track:hover {

  background-color: rgba(0,0,0,.035);

  -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.14),inset -1px -1px 0 rgba(0,0,0,.07);

  box-shadow: inset 1px 1px 0 rgba(0,0,0,.14),inset -1px -1px 0 rgba(0,0,0,.07);

  }

  .jfk-scrollbar-borderless.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:hover {

  background-color: rgba(255,255,255,.07);

  -webkit-box-shadow: inset 1px 1px 0 rgba(255,255,255,.25),inset -1px -1px 0 rgba(255,255,255,.15);

  box-shadow: inset 1px 1px 0 rgba(255,255,255,.25),inset -1px -1px 0 rgba(255,255,255,.15);

  }

  .jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-thumb {

  border-width: 0 1px 0 6px;

  }

  .jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-thumb:horizontal {

  border-width: 6px 0 1px;

  }

  .jfk-scrollbar::-webkit-scrollbar-corner {

  background: transparent;

  }

  body.jfk-scrollbar::-webkit-scrollbar-track-piece {

  background-clip: padding-box;

  background-color: #f1f1f1;

  border: solid #fff;

  border-width: 0 0 0 3px;

  -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07);

  box-shadow: inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07);

  }

  body.jfk-scrollbar::-webkit-scrollbar-track-piece:horizontal {

  border-width: 3px 0 0;

  -webkit-box-shadow: inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07);

  box-shadow: inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07);

  }

  body.jfk-scrollbar::-webkit-scrollbar-thumb {

  border-width: 1px 1px 1px 5px;

  }

  body.jfk-scrollbar::-webkit-scrollbar-thumb:horizontal {

  border-width: 5px 1px 1px;

  }

  body.jfk-scrollbar::-webkit-scrollbar-corner {

  background-clip: padding-box;

  background-color: #f1f1f1;

  border: solid #fff;

  border-width: 3px 0 0 3px;

  -webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.14);

  box-shadow: inset 1px 1px 0 rgba(0,0,0,.14);

  }

  .errormsg {

  margin: .5em 0 0;

  display: block;

  color: #dd4b39;

  line-height: 17px;

  }

  .help-link {

  background: #dd4b39;

  padding: 0 5px;

  color: #fff;

  font-weight: bold;

  display: inline-block;

  -webkit-border-radius: 1em;

  -moz-border-radius: 1em;

  border-radius: 1em;

  text-decoration: none;

  position: relative;

  top: 0px;

  }

  .help-link:visited {

  color: #fff;

  }

  .help-link:hover {

  color: #fff;

  background: #c03523;

  text-decoration: none;

  }

  .help-link:active {

  opacity: 1;

  background: #ae2817;

  }

</style>

<style type="text/css">

  .main {

  width: auto;

  max-width: 1000px;

  min-width: 780px;

  }

  .product-info {

  margin: 0 385px 0 0;

  }

  .product-info h3 {

  font-size: 1.23em;

  font-weight: normal;

  }

  .product-info a:visited {

  color: #61c;

  }

  .product-info .g-button:visited {

  color: #666;

  }

  .sign-in {

  width: 335px;

  float: right;

  }

  .signin-box,

  .accountchooser-box {

  margin: 12px 0 0;

  padding: 20px 25px 15px;

  background: #f1f1f1;

  border: 1px solid #e5e5e5;

  }

  .product-headers {

  margin: 0 0 1.5em;

  }

  .product-headers h1 {

  font-size: 25px;

  margin: 0 !important;

  }

  .product-headers h2 {

  font-size: 16px;

  margin: .4em 0 0;

  }

  .features {

  overflow: hidden;

  margin: 2em 0 0;

  }

  .features li {

  margin: 3px 0 2em;

  }

  .features img {

  float: left;

  margin: -3px 0 0;

  }

  .features p {

  margin: 0 0 0 68px;

  }

  .features .title {

  font-size: 16px;

  margin-bottom: .3em;

  }

  .features.no-icon p {

  margin: 0;

  }

  .features .small-title {

  font-size: 1em;

  font-weight: bold;

  }

  .notification-bar {

  background: #f9edbe;

  padding: 8px;

  }

</style>

<style type="text/css">

  .signin-box h2 {

  font-size: 16px;

  line-height: 17px;

  height: 16px;

  margin: 0 0 1.2em;

  position: relative;

  min-width: 100%;

  }

  .signin-box h2 strong {

  display: inline-block;

  position: absolute;

  right: 0;

  top: 1px;

  height: 19px;

  width: 52px;

  background: transparent url(//ssl.gstatic.com/accounts/ui/google-signin-flat.png) no-repeat;

  }

  @media only screen and (-webkit-device-pixel-ratio: 2){

  .signin-box h2 strong {

  background: transparent url(//ssl.gstatic.com/accounts/ui/google-signin-flat_2x.png) no-repeat;

  background-size: 52px 19px;

  }

  }

  .signin-box div {

  margin: 0 0 1.5em;

  }

  .signin-box label {

  display: block;

  }

  .signin-box input[type=email],

  .signin-box input[type=text],

  .signin-box input[type=password] {

  width: 100%;

  height: 32px;

  line-height: 28px;

  font-size: 15px;

  direction: ltr;

  }

  .signin-box .email-label,

  .signin-box .passwd-label {

  font-weight: bold;

  margin: 0 0 .5em;

  display: block;

  -webkit-user-select: none;

  -moz-user-select: none;

  user-select: none;

  }

  .signin-box .reauth {

  display: inline-block;

  font-size: 15px;

  height: 29px;

  line-height: 29px;

  margin: 0;

  }

  .signin-box label.remember {

  display: inline-block;

  vertical-align: top;

  margin: 9px 0 0;

  margin: 4px 0 0;

  line-height: 25px;

  }

  .signin-box .remember-label {

  font-weight: normal;

  color: #666;

  line-height: 0;

  padding: 0 0 0 .4em;

  -webkit-user-select: none;

  -moz-user-select: none;

  user-select: none;

  }

  .signin-box input[type=submit] {

  margin: 0 1.5em 1.2em 0;

  height: 32px;

  font-size: 13px;

  }

  .signin-box ul {

  margin: 0;

  }

  .signin-box .training-msg {

  padding: .5em 8px;

  background: #f9edbe;

  }

  .signin-box .training-msg p {

  margin: 0 0 .5em;

  }

</style>

<link rel="publisher" href="https://plus.google.com/103345707817934461425">

<style type="text/css">

  .mail .mail-promo {

  border: 1px solid #ebebeb;

  margin: 30px 0 0;

  padding: 20px;

  overflow: hidden;

  }

  .mail .mail-promo h3,

  .mail .mail-promo p {

  margin-left: 60px;

  }

  .mail .mail-promo img {

  width: 42px;

  margin: 3px 0 0;

  float: left;

  }

  .mail .mail-promo h3 {

  font-size: 16px;

  margin-bottom: .3em;

  }

  .mail .mail-promo p {

  margin-bottom: 0;

  }

  .mail .mail-promo p:last-of-type {

  margin-bottom: 0;

  }

  .mail .mail-promo a {

  white-space: nowrap;

  }

  .mail .mail-promo-64 {

  padding: 10px 20px;

  }

  .mail .mail-promo-64 img {

  width: 64px;

  height: 64px;

  }

  .mail .mail-promo-64 h3,

  .mail .mail-promo-64 p {

  margin-left: 76px;

  }

  .mail .mail-promo-64 h3 {

  padding-top: .6em;

  }

  .mail ul.mail-links {

  margin: 0;

  overflow: hidden;

  }

  .mail ul.mail-links li {

  display: inline-block;

  margin-right: 20px;

  *display: inline; /*ie7*/

  }

</style>

  </head>

  <body>

  <div class="wrapper">

  <div class="google-header-bar">

  <div class="header content clearfix">

  <img class="logo" src="//ssl.gstatic.com/images/logos/google_logo_41.png" alt="Google">

  <span class="signup-button">

  New to Gmail?

  <a id="link-signup" class="g-button g-button-red" href="https://accounts.google.com/SignUp?service=mail&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F&ltmpl=default">

  Create an account

  </a>

  </span>

  </div>

  </div>

  <div class="main content clearfix">

  <div class="sign-in">

<div class="signin-box">

  <h2>Sign in <strong></strong></h2>

  <form novalidate id="gaia_loginform" action="https://accounts.google.com/ServiceLoginAuth" method="post">

  <input type="hidden" 

  

    

  name="continue" id="continue" value="http://mail.google.com/mail/"


  

 >

  <input type="hidden" 

  

    

  name="service" id="service" value="mail"


  

 >

  <input type="hidden" 

  

    

  name="rm" id="rm" value="false"


  

 >

  <input type="hidden" 

  

    

  name="dsh" id="dsh" value="2037596127886672899"


  

 >

  <input type="hidden" 

  

    

  name="ltmpl" id="ltmpl" value="default"


  

 >

  <input type="hidden" 

  

    

  name="scc" id="scc" value="1"


  

 >

  <input type="hidden"

         name="GALX"

         value="h3isTll8T5I">

  <input type="hidden"

    id="pstMsg"

    name="pstMsg"

    value="0">

  <input type="hidden"

    id="dnConn"

    name="dnConn"

    value="">

  <input type="hidden"

    id="checkConnection"

    name="checkConnection"

    value="">

  <input type="hidden"

    id="checkedDomains"

    name="checkedDomains"

    value="youtube">

<input type="hidden" name="timeStmp" id="timeStmp"

       value=''/>

<input type="hidden" name="secTok" id="secTok"

       value=''/>

<input type="hidden" id="_utf8" name="_utf8" value="&#9731;"/>

  <input type="hidden" name="bgresponse" id="bgresponse" value="js_disabled">

<div class="email-div">

  <label for="Email"><strong class="email-label">Username</strong></label>

  <input type="email" spellcheck="false"  

  

    

  name="Email" id="Email" value=""


  


      

    >

</div>

<div class="passwd-div">

  <label for="Passwd"><strong class="passwd-label">Password</strong></label>

  <input type="password" name="Passwd" id="Passwd"

    

    

    

  >

</div>

  <input type="submit" class="g-button g-button-submit" name="signIn" id="signIn"

      value="Sign in">

  <label class="remember" onclick="">

  <input type="checkbox" 

  name="PersistentCookie" id="PersistentCookie" value="yes"


    

  >

  <strong class="remember-label">

  Stay signed in

  </strong>

  </label>

  <input type="hidden" name="rmShown" value="1">

  </form>

  <ul>

  <li>

  <a id="link-forgot-passwd"

          href="https://accounts.google.com/RecoverAccount?service=mail&amp;continue=http%3A%2F%2Fmail.google.com%2Fmail%2F"

          target="_top">

  Can&#39;t access your account?

  </a>

  </li>

  </ul>

</div>

  </div>

  <div class="product-info mail">

<div class="product-headers">

  <h1 class="redtext">Gmail</h1>

  <h2>A Google approach to email.</h2>

</div>

<p>

  Gmail is built on the idea that email can be more intuitive, efficient, and useful. And maybe even fun. After all, Gmail has:

</p>

<ul class="features">

  <li>

  <img src="//ssl.gstatic.com/images/icons/feature/filing_cabinet-g42.png" alt="">

  <p class="title">Lots of space</p>

  <p>

  Over <span id=quota>2757.272164</span> megabytes (and counting) of free storage.

  </p>

  </li>

  <li>

  <img src="//ssl.gstatic.com/images/icons/feature/nosign-r42.png" alt="">

  <p class="title">Less spam</p>

  <p>Keep unwanted messages out of your inbox.</p>

  </li>

  <li>

  <img src="//ssl.gstatic.com/images/icons/feature/mobile_phone-42.gif" alt="">

  <p class="title">Mobile access</p>

  <p>Get Gmail on your mobile phone. <a href="http://www.google.com/mobile/gmail/#utm_source=en-cpp-g4mc-gmhp&utm_medium=cpp&utm_campaign=en">Learn more</a></p>

  </li>

</ul>

<ul class="mail-links">

  <li><a href="http://mail.google.com/mail/help/intl/en/about.html" onclick="_gaq.push(['_link', 'http://mail.google.com/mail/help/intl/en/about.html', 'true']); return false;">

  About Gmail</a></li>

  <li><a href="http://mail.google.com/mail/help/intl/en/about_whatsnew.html" onclick="_gaq.push(['_link', 'http://mail.google.com/mail/help/intl/en/about_whatsnew.html', 'true']); return false;">New features!</a></li>

  <li><a href="http://mail.google.com/mail/help/intl/en/switch.html" onclick="_gaq.push(['_link', 'http://mail.google.com/mail/help/intl/en/switch.html', 'true']); return false;">Switch to Gmail</a></li>

  <li>

  <a href="https://accounts.google.com/SignUp?service=mail&amp;continue=http%3A%2F%2Fmail.google.com%2Fmail%2F&amp;ltmpl=default">Create an account</a>

  </li>

</ul>

  <div class="mail-promo">

  <img src="//ssl.gstatic.com/images/icons/product/chrome-42.png" alt="">

  <h3>Gmail runs fast in the Chrome browser</h3>

  <p>Chrome is a fast, free browser made for the modern web.

  <p><a href="https://www.google.com/chrome/?brand=CHHZ">Download Chrome</a></p>

  </div>

  </div>

  <div id="cc_iframe_parent"></div>

  </div>

<div class="google-footer-bar">

  <div class="footer content clearfix">

  <ul>

  <li>© 2013 Google</li>

  <li><a href="http://www.google.com/apps/intl/en/business/gmail.html#utm_medium=et&utm_source=gmail-signin-en&utm_campaign=crossnav" target="_blank">Gmail for Work</a></li>

  <li><a href="http://mail.google.com/mail/help/intl/en/terms.html" target="_blank">Terms &amp; Privacy</a></li>

  <li><a href="http://mail.google.com/support/?hl=en" target="_blank">Help</a></li>

  </ul>

  <span id="lang-chooser-wrap" class="lang-chooser-wrap" style="display: none;">

  <img src="//ssl.gstatic.com/images/icons/ui/common/universal_language_settings-21.png">

  <select id="lang-chooser" class="lang-chooser">

  <option value="in"

         >

  ?Bahasa Indonesia?

  </option>

  <option value="ms"

         >

  ?Bahasa Melayu?

  </option>

  <option value="ca"

         >

  ?català?

  </option>

  <option value="cs"

         >

  ?čeština?

  </option>

  <option value="cy"

         >

  ?Cymraeg?

  </option>

  <option value="da"

         >

  ?dansk?

  </option>

  <option value="de"

         >

  ?Deutsch?

  </option>

  <option value="et"

         >

  ?eesti?

  </option>

  <option value="en-GB"

         >

  ?English (United Kingdom)?

  </option>

  <option value="en"

        selected="selected" >

  ?English (United States)?

  </option>

  <option value="es"

         >

  ?español (España)?

  </option>

  <option value="es-419"

         >

  ?español (Latinoamérica)?

  </option>

  <option value="eu"

         >

  ?euskara?

  </option>

  <option value="fil"

         >

  ?Filipino?

  </option>

  <option value="fr"

         >

  ?français?

  </option>

  <option value="hr"

         >

  ?hrvatski?

  </option>

  <option value="is"

         >

  ?íslenska?

  </option>

  <option value="it"

         >

  ?italiano?

  </option>

  <option value="sw"

         >

  ?Kiswahili?

  </option>

  <option value="lv"

         >

  ?latviešu?

  </option>

  <option value="lt"

         >

  ?lietuvių?

  </option>

  <option value="hu"

         >

  ?magyar?

  </option>

  <option value="nl"

         >

  ?Nederlands?

  </option>

  <option value="no"

         >

  ?norsk?

  </option>

  <option value="pl"

         >

  ?polski?

  </option>

  <option value="pt-BR"

         >

  ?português (Brasil)?

  </option>

  <option value="pt-PT"

         >

  ?português (Portugal)?

  </option>

  <option value="ro"

         >

  ?română?

  </option>

  <option value="sk"

         >

  ?slovenčina?

  </option>

  <option value="sl"

         >

  ?slovenščina?

  </option>

  <option value="fi"

         >

  ?suomi?

  </option>

  <option value="sv"

         >

  ?svenska?

  </option>

  <option value="vi"

         >

  ?Tiếng Việt?

  </option>

  <option value="tl"

         >

  ?tl?

  </option>

  <option value="tr"

         >

  ?Türkçe?

  </option>

  <option value="el"

         >

  ?Ελληνικά?

  </option>

  <option value="bg"

         >

  ?български?

  </option>

  <option value="ru"

         >

  ?русский?

  </option>

  <option value="sr"

         >

  ?Српски?

  </option>

  <option value="uk"

         >

  ?українська?

  </option>

  <option value="iw"

         >

  ?עברית??

  </option>

  <option value="ur"

         >

  ?اردو??

  </option>

  <option value="ar"

         >

  ?العربية??

  </option>

  <option value="fa"

         >

  ?فارسی??

  </option>

  <option value="am"

         >

  ?አማርኛ?

  </option>

  <option value="mr"

         >

  ?मराठी?

  </option>

  <option value="hi"

         >

  ?हिन्दी?

  </option>

  <option value="bn"

         >

  ?বাংলা?

  </option>

  <option value="gu"

         >

  ?ગુજરાતી?

  </option>

  <option value="ta"

         >

  ?தமிழ்?

  </option>

  <option value="te"

         >

  ?తెలుగు?

  </option>

  <option value="kn"

         >

  ?ಕನ್ನಡ?

  </option>

  <option value="ml"

         >

  ?മലയാളം?

  </option>

  <option value="th"

         >

  ?ไทย?

  </option>

  <option value="ko"

         >

  ?한국어?

  </option>

  <option value="ja"

         >

  ?日本語?

  </option>

  <option value="zh-CN"

         >

  ?简体中文?

  </option>

  <option value="zh-TW"

         >

  ?繁體中文?

  </option>

  </select>

  </span>

  </div>

</div>

  <script type="text/javascript">/* Anti-spam. Want to say hello? Contact (base64) Ym90Z3VhcmQtY29udGFjdEBnb29nbGUuY29tCg== */(function(){eval('var g=void 0,k=true,l=null,q=false,s,t=this,u=function(a,b){var c=a.split("."),d=t;!(c[0]in d)&&d.execScript&&d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)!c.length&&b!==g?d[e]=b:d=d[e]?d[e]:d[e]={}},w=function(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";else if("function"==b&&"undefined"==typeof a.call)return"object";return b},x="closure_uid_"+(1E9*Math.random()>>>0),y=0,aa=Date.now||function(){return+new Date};var A=Array.prototype,ba=A.indexOf?function(a,b,c){return A.indexOf.call(a,b,c)}:function(a,b,c){c=c==l?0:0>c?Math.max(0,a.length+c):c;if("string"==typeof a)return"string"!=typeof b||1!=b.length?-1:a.indexOf(b,c);for(;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};var B=function(){var a=t.document;return a?a.documentMode:g},C="",D=/MSIE\\s+([^\\);]+)(\\)|;)/.exec(t.navigator?t.navigator.userAgent:l),C=D?D[1]:"",E=B(),F=E>parseFloat(C)?String(E):C,ca={},G=function(a){var b;if(!(b=ca[a])){b=0;for(var c=String(F).replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,"").split("."),d=String(a).replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,"").split("."),e=Math.max(c.length,d.length),f=0;0==b&&f<e;f++){var h=c[f]||"",m=d[f]||"",n=RegExp("(\\\\d*)(\\\\D*)","g"),z=RegExp("(\\\\d*)(\\\\D*)","g");do{var p=n.exec(h)||["","",""],r=z.exec(m)||["","",""];if(0==p[0].length&&0==r[0].length)break;b=((0==p[1].length?0:parseInt(p[1],10))<(0==r[1].length?0:parseInt(r[1],10))?-1:(0==p[1].length?0:parseInt(p[1],10))>(0==r[1].length?0:parseInt(r[1],10))?1:0)||((0==p[2].length)<(0==r[2].length)?-1:(0==p[2].length)>(0==r[2].length)?1:0)||(p[2]<r[2]?-1:p[2]>r[2]?1:0)}while(0==b)}b=ca[a]=0<=b}return b},da=t.document,ea=!da?g:B()||("CSS1Compat"==da.compatMode?parseInt(F,10):5);G("9");new function(){aa()};var fa=function(a){a=a.replace(/\\r\\n/g,"\\n");for(var b=[],c=0,d=0;d<a.length;d++){var e=a.charCodeAt(d);128>e?b[c++]=e:(2048>e?b[c++]=e>>6|192:(b[c++]=e>>12|224,b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b};var H=l,I=l,J=l,ga=function(){if(!H){H={};I={};J={};for(var a=0;65>a;a++)H[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(a),I[H[a]]=a,J[a]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.".charAt(a)}};var ha=9<=ea,ia=!G("9");G("8");G("9");var K=function(a,b){this.type=a;this.currentTarget=this.target=b};K.prototype.L=q;K.prototype.defaultPrevented=q;K.prototype.preventDefault=function(){this.defaultPrevented=k};var L=function(a,b){a&&this.u(a,b)};(function(){function a(){}a.prototype=K.prototype;L.qa=K.prototype;L.prototype=new a})();s=L.prototype;s.target=l;s.relatedTarget=l;s.offsetX=0;s.offsetY=0;s.clientX=0;s.clientY=0;s.screenX=0;s.screenY=0;s.button=0;s.keyCode=0;s.charCode=0;s.ctrlKey=q;s.altKey=q;s.shiftKey=q;s.metaKey=q;s.aa=l;s.u=function(a,b){var c=this.type=a.type;K.call(this,c);this.target=a.target||a.srcElement;this.currentTarget=b;var d=a.relatedTarget;d||("mouseover"==c?d=a.fromElement:"mouseout"==c&&(d=a.toElement));this.relatedTarget=d;this.offsetX=a.offsetX!==g?a.offsetX:a.layerX;this.offsetY=a.offsetY!==g?a.offsetY:a.layerY;this.clientX=a.clientX!==g?a.clientX:a.pageX;this.clientY=a.clientY!==g?a.clientY:a.pageY;this.screenX=a.screenX||0;this.screenY=a.screenY||0;this.button=a.button;this.keyCode=a.keyCode||0;this.charCode=a.charCode||("keypress"==c?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.state=a.state;this.aa=a;a.defaultPrevented&&this.preventDefault();delete this.L};s.preventDefault=function(){L.qa.preventDefault.call(this);var a=this.aa;if(a.preventDefault)a.preventDefault();else if(a.returnValue=q,ia)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};var ja=0;var ka=function(){};s=ka.prototype;s.key=0;s.l=q;s.t=q;s.u=function(a,b,c,d,e,f){if("function"==w(a))this.Z=k;else if(a&&a.handleEvent&&"function"==w(a.handleEvent))this.Z=q;else throw Error("Invalid listener argument");this.m=a;this.X=b;this.src=c;this.type=d;this.capture=!!e;this.W=f;this.t=q;this.key=++ja;this.l=q};s.handleEvent=function(a){return this.Z?this.m.call(this.W||this.src,a):this.m.handleEvent.call(this.m,a)};var M={},N={},O={},P={},Q=function(a,b,c,d,e){if("array"==w(b))for(var f=0;f<b.length;f++)Q(a,b[f],c,d,e);else{a:{if(!b)throw Error("Invalid event type");d=!!d;var h=N;b in h||(h[b]={h:0,i:0});h=h[b];d in h||(h[d]={h:0,i:0},h.h++);var h=h[d],f=a[x]||(a[x]=++y),m;h.i++;if(h[f]){m=h[f];for(var n=0;n<m.length;n++)if(h=m[n],h.m==c&&h.W==e){if(h.l)break;m[n].t=q;a=m[n];break a}}else m=h[f]=[],h.h++;n=la();h=new ka;h.u(c,n,a,b,d,e);h.t=q;n.src=a;n.m=h;m.push(h);O[f]||(O[f]=[]);O[f].push(h);a.addEventListener?a==t||!a.customEvent_?a.addEventListener(b,n,d):a.sa():a.attachEvent(b in P?P[b]:P[b]="on"+b,n);a=h}M[a.key]=a}},la=function(){var a=ma,b=ha?function(c){return a.call(b.src,b.m,c)}:function(c){c=a.call(b.src,b.m,c);if(!c)return c};return b},na=function(a,b,c,d){if(!d.v&&d.Y){for(var e=0,f=0;e<d.length;e++)d[e].l?d[e].X.src=l:(e!=f&&(d[f]=d[e]),f++);d.length=f;d.Y=q;0==f&&(delete N[a][b][c],N[a][b].h--,0==N[a][b].h&&(delete N[a][b],N[a].h--),0==N[a].h&&delete N[a])}},oa=function(a,b,c,d,e){var f=1;b=b[x]||(b[x]=++y);if(a[b]){var h=--a.i,m=a[b];m.v?m.v++:m.v=1;try{for(var n=m.length,z=0;z<n;z++){var p=m[z];p&&!p.l&&(f&=R(p,e)!==q)}}finally{a.i=Math.max(h,a.i),m.v--,na(c,d,b,m)}}return Boolean(f)},R=function(a,b){if(a.t){var c=a.key,d=M[c];if(d&&!d.l){var e=d.src,f=d.type,h=d.X,m=d.capture;e.removeEventListener?(e==t||!e.customEvent_)&&e.removeEventListener(f,h,m):e.detachEvent&&e.detachEvent(f in P?P[f]:P[f]="on"+f,h);e=e[x]||(e[x]=++y);if(O[e]){var h=O[e],n=ba(h,d);0<=n&&A.splice.call(h,n,1);0==h.length&&delete O[e]}d.l=k;if(d=N[f][m][e])d.Y=k,na(f,m,e,d);delete M[c]}}return a.handleEvent(b)},ma=function(a,b){if(a.l)return k;var c=a.type,d=N;if(!(c in d))return k;var d=d[c],e,f;if(!ha){var h;if(!(h=b))a:{h=["window","event"];for(var m=t;e=h.shift();)if(m[e]!=l)m=m[e];else{h=l;break a}h=m}e=h;h=k in d;m=q in d;if(h){if(0>e.keyCode||e.returnValue!=g)return k;a:{var n=q;if(0==e.keyCode)try{e.keyCode=-1;break a}catch(z){n=k}if(n||e.returnValue==g)e.returnValue=k}}n=new L;n.u(e,this);e=k;try{if(h){for(var p=[],r=n.currentTarget;r;r=r.parentNode)p.push(r);f=d[k];f.i=f.h;for(var v=p.length-1;!n.L&&0<=v&&f.i;v--)n.currentTarget=p[v],e&=oa(f,p[v],c,k,n);if(m){f=d[q];f.i=f.h;for(v=0;!n.L&&v<p.length&&f.i;v++)n.currentTarget=p[v],e&=oa(f,p[v],c,q,n)}}else e=R(a,n)}finally{p&&(p.length=0)}return e}c=new L(b,this);return e=R(a,c)};var U=function(a){try{if(this.c=[],S(this,this.b,0),S(this,this.p,0),S(this,this.A,0),S(this,this.j,[]),S(this,this.g,[]),S(this,this.Q,"object"==typeof window?window:t),S(this,this.R,this),S(this,this.B,0),S(this,this.O,0),S(this,this.P,0),S(this,this.n,pa(4)),S(this,this.w,[]),S(this,this.o,{}),this.N=k,a&&"!"==a[0])this.d=a;else{ga();for(var b=I,c=[],d=0;d<a.length;){var e=b[a.charAt(d++)],f=d<a.length?b[a.charAt(d)]:0;++d;var h=d<a.length?b[a.charAt(d)]:0;++d;var m=d<a.length?b[a.charAt(d)]:0;++d;if(e==l||f==l||h==l||m==l)throw Error();c.push(e<<2|f>>4);64!=h&&(c.push(f<<4&240|h>>2),64!=m&&c.push(h<<6&192|m))}this.f=c;!this.f||!this.f.length?this.e(this.ba):(this.S=[],this.C())}}catch(n){T(this,n)}};s=U.prototype;s.U=[function(){},function(a){var b=V(a),c=V(a),d=a.a(b),b=W(a,b),e=W(a,c);e==a.k||e==a.q?d=""+d:0<b&&(1==b?d&=255:2==b?d&=65535:4==b&&(d&=4294967295));S(a,c,d)},function(a){var b=V(a),c=W(a,b);if(0<c){for(var d=0;c--;)d=d<<8|V(a);S(a,b,d)}else if(c!=a.G){d=V(a)<<8|V(a);if(c==a.k)if(c="",a.c[a.H]!=g)for(var e=a.a(a.H);d--;)var f=e[V(a)<<8|V(a)],c=c+f;else{c=Array(d);for(e=0;e<d;e++)c[e]=V(a);d=c;c=[];for(f=e=0;e<d.length;){var h=d[e++];if(128>h)c[f++]=String.fromCharCode(h);else if(191<h&&224>h){var m=d[e++];c[f++]=String.fromCharCode((h&31)<<6|m&63)}else{var m=d[e++],n=d[e++];c[f++]=String.fromCharCode((h&15)<<12|(m&63)<<6|n&63)}}c=c.join("")}else{c=Array(d);for(e=0;e<d;e++)c[e]=V(a)}S(a,b,c)}},function(a){V(a)},function(a){var b=V(a),c=V(a),d=V(a),c=a.a(c),b=a.a(b);S(a,d,b[c])},function(a){var b=V(a),c=V(a),b=a.a(b);S(a,c,w(b))},function(a){var b=V(a),c=V(a),d=W(a,b),e=W(a,c);d==a.k&&e==a.k?(a.c[c]==g&&S(a,c,""),S(a,c,a.a(c)+a.a(b))):e==a.q&&(0>d?(b=a.a(b),d==a.k&&(b=fa(""+b)),(c==a.g||c==a.n||c==a.w)&&X(a,c,Y(b.length,2)),X(a,c,b)):0<d&&X(a,c,Y(a.a(b),d)))},function(a){var b=V(a),c=V(a);S(a,c,function(a){return eval(a)}(a.a(b)))},function(a){var b=V(a),c=V(a);S(a,c,a.a(c)-a.a(b))},function(a){var b=Z(a);S(a,b.K,b.J.apply(b.self,b.s))},function(a){var b=V(a),c=V(a);S(a,c,a.a(c)%a.a(b))},function(a){var b=V(a),c=a.a(V(a)),d=a.a(V(a)),e=a.a(V(a)),b=a.a(b);Q(b,c,qa(a,d,e,k))},function(a){var b=V(a),c=V(a),d=V(a);a.a(b)[a.a(c)]=a.a(d)},function(a){var b=Z(a),c=b.s,d=b.self,e=b.J;switch(c.length){case 0:c=d[e]();break;case 1:c=d[e](c[0]);break;case 2:c=d[e](c[0],c[1]);break;case 3:c=d[e](c[0],c[1],c[2]);break;default:a.e(a.r);return}S(a,b.K,c)},function(a){var b=V(a),c=V(a);S(a,c,a.a(c)+a.a(b))},function(a){var b=V(a),c=V(a);0!=a.a(b)&&S(a,a.b,a.a(c))},function(a){var b=V(a),c=V(a),d=V(a);a.a(b)==a.a(c)&&S(a,d,a.a(d)+1)},function(a){var b=V(a),c=V(a),d=V(a);a.a(b)>a.a(c)&&S(a,d,a.a(d)+1)},function(a){var b=V(a),c=V(a),d=V(a);S(a,d,a.a(b)<<c)},function(a){var b=V(a),c=V(a),d=V(a);S(a,d,a.a(b)|a.a(c))},function(a){var b=a.a(V(a));ra(a,b)},function(a){var b=a.S.pop();if(b){for(var c=V(a);0<c;c--){var d=V(a);b[d]=a.c[d]}a.c=b}else S(a,a.b,a.f.length)},function(a){var b=V(a),c=V(a),d=V(a);S(a,d,(a.a(b)in a.a(c))+0)},function(a){var b=V(a),c=a.a(V(a)),d=a.a(V(a));S(a,b,qa(a,c,d))},function(a){var b=V(a),c=V(a);S(a,c,a.a(c)*a.a(b))},function(a){var b=V(a),c=V(a),d=V(a);S(a,d,a.a(b)>>c)},function(a){var b=V(a),c=V(a),d=V(a);S(a,d,a.a(b)||a.a(c))},function(a){var b=Z(a),c=b.s,d=b.self,e=b.J;switch(c.length){case 0:c=new d[e];break;case 1:c=new d[e](c[0]);break;case 2:c=new d[e](c[0],c[1]);break;case 3:c=new d[e](c[0],c[1],c[2]);break;case 4:c=new d[e](c[0],c[1],c[2],c[3]);break;default:a.e(a.r);return}S(a,b.K,c)},function(a){var b=V(a),c=V(a),d=V(a),e=V(a),b=a.a(b),c=a.a(c),d=a.a(d);a=a.a(e);if("object"==w(b)){var e=[],f;for(f in b)e.push(f);b=e}f=b.length;for(e=0;e<f;e+=d)c(b.slice(e,e+d),a)}];s.b=0;s.A=1;s.j=2;s.p=3;s.g=4;s.H=5;s.V=6;s.T=8;s.Q=9;s.R=10;s.B=11;s.O=12;s.P=13;s.n=14;s.w=15;s.o=16;s.ma=17;s.ea=15;s.ka=12;s.fa=10;s.ga=42;s.na=6;s.k=-1;s.q=-2;s.G=-3;s.ba=17;s.ca=21;s.r=22;s.oa=30;s.ia=31;s.da=33;s.D={};s.M="caller";s.pa=0;var T=function(a,b){a.d=("E:"+b.message+":"+b.stack).substring(0,2048)},pa=function(a){for(var b=Array(a);a--;)b[a]=255*Math.random()|0;return b},sa=function(a,b,c){try{for(var d=0;84941944608!=d;)a+=(b<<4^b>>>5)+b^d+c[d&3],d+=2654435769,b+=(a<<4^a>>>5)+a^d+c[d>>>11&3];return[a>>>24,a>>16&255,a>>8&255,a&255,b>>>24,b>>16&255,b>>8&255,b&255]}catch(e){throw e;}},$=function(a,b){return a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3]},Y=function(a,b){for(var c=[],d=b-1;0<=d;d--)c[b-1-d]=a>>8*d&255;return c},X=function(a,b,c,d){if(b!=a.j){var e=a.a(b);b=b==a.n?function(b){try{var c=e.length,d=c&7;if(4==d){var f=[0,0,0,a.a(a.P)];e.la=sa($(e,c-8),$(e,c-4),f)}e.push(e.la[d]^b)}catch(p){throw p;}}:function(a){e.push(a)};d&&b(d&255);d=c.length;for(var f=0;f<d;f++)b(c[f])}},ta=function(a,b){var c=function(){for(var a=d[e.M],p=a===b,a=a&&a[e.M],r=0;a&&a!=f&&a!=h&&a!=m&&a!=n&&20>r;)r++,a=a[e.M];return c[!p+!a+(r>>2)]},d=function(){return c()},e=U.prototype,f=e.C,h=e.$,m=U,n=e.e;c[e.pa]=a;a=g;return d},ua=function(a){var b=function(){return c()},c=function(){return a};b.ha=function(b){a=b};return b},S=function(a,b,c){if(b==a.b||b==a.p)a.c[b]?a.c[b].ha(c):a.c[b]=ua(c);else{if((b==a.g||b==a.j)&&a.c[b])return;a.c[b]=ta(c,a.a)}b==a.A&&(a.F=g,S(a,a.b,a.a(a.b)+4))};U.prototype.a=function(a){var b=this.c[a];if(b===g)throw this.e(this.oa,0,a),this.D;return b()};U.prototype.e=function(a,b,c){var d=this.a(this.p);a=[a,d>>8&255,d&255];c!=g&&a.push(c);0==this.a(this.j).length&&(this.c[this.j]=g,S(this,this.j,a));b&&(c="",b.message&&(c=b.message.toString()),b.stack!=g&&(c+=": "+b.stack),c=c.substring(0,2048),c=fa(c),X(this,this.n,Y(c.length,2).concat(c),this.ka))};var V=function(a){var b=a.a(a.b);if(b>=a.f.length)throw a.e(a.ia,0,b),a.D;a.F==g&&(a.F=$(a.f,b-4),a.I=g);if(a.I!=b>>3){a.I=b>>3;var c=[0,0,0,a.a(a.A)];a.ja=sa(a.F,a.I,c)}S(a,a.b,b+1);return a.f[b]^a.ja[b%8]},W=function(a,b){return b<=a.ma?b==a.j||b==a.g||b==a.n||b==a.w?a.q:b==a.V||b==a.Q||b==a.R||b==a.o?a.G:b==a.H?a.k:4:[1,2,4,a.q,a.G,a.k][b%a.na]};U.prototype.va=function(a,b){b.push(a[0]<<24|a[1]<<16|a[2]<<8|a[3]);b.push(a[4]<<24|a[5]<<16|a[6]<<8|a[7]);b.push(a[8]<<24|a[9]<<16|a[10]<<8|a[11])};U.prototype.ua=function(a,b,c){var d=a[(b+2)%3];a[b]=a[b]-a[(b+1)%3]-d^(1==b?d<<c:d>>>c)};U.prototype.ta=function(a,b){if(3==a.length){for(var c=0;3>c;c++)b[c]+=a[c];for(var d=[13,8,13,12,16,5,3,10,15],c=0;9>c;c++)b[3](b,c%3,d[c])}};var Z=function(a){var b={};b.J=a.a(V(a));b.K=V(a);var c=V(a)-1,d=V(a);b.self=a.a(d);for(b.s=[];c--;)d=V(a),b.s.push(a.a(d));return b},qa=function(a,b,c,d){return function(){if(!d||a.N)return S(a,a.V,arguments),S(a,a.o,c),va(a,b)}},ra=function(a,b){a.S.push(a.c.slice());a.c[a.b]=g;S(a,a.b,b)},va=function(a,b){var c=a.a(a.b);a.f&&c<a.f.length?(S(a,a.b,a.f.length),ra(a,b)):S(a,a.b,b);var d=a.C();S(a,a.b,c);return d};U.prototype.C=function(){try{for(var a=this.f.length,b=2001,c=l,d=0;--b&&(d=this.a(this.b))<a;)try{S(this,this.p,d);var e=V(this)%this.U.length;(c=this.U[e])?c(this):this.e(this.ca,0,e)}catch(f){if(f!=this.D){var h=this.a(this.B);h?(S(this,h,f),S(this,this.B,0)):this.e(this.r,f)}}b||this.e(this.da,0,d)}catch(m){try{this.e(this.r,m)}catch(n){T(this,n)}}return this.a(this.o)};U.prototype.$=function(){if(this.d)return this.d;try{this.N=q;this.c[this.T]&&va(this,this.a(this.T));var a=this.a(this.j);0<a.length&&X(this,this.g,Y(a.length,2).concat(a),this.ea);var b=this.a(this.O)&255,b=b-(this.a(this.g).length+4),c=this.a(this.n);4<c.length&&(b-=c.length+3);0<b&&X(this,this.g,Y(b,2).concat(pa(b)),this.fa);4<c.length&&X(this,this.g,Y(c.length,2).concat(c),this.ga);var d=[3].concat(this.a(this.g)),e;ga();e=[];for(a=0;a<d.length;a+=3){var f=d[a],h=a+1<d.length,m=h?d[a+1]:0,n=a+2<d.length,z=n?d[a+2]:0,b=f>>2,c=(f&3)<<4|m>>4,p=(m&15)<<2|z>>6,r=z&63;n||(r=64,h||(p=64));e.push(J[b],J[c],J[p],J[r])}if(this.d=e=e.join("").replace(/\\./g,""))this.d="!"+this.d;else{this.d="";for(e=0;e<d.length;e++){var v=d[e].toString(16);1==v.length&&(v="0"+v);this.d+=v}}}catch(wa){T(this,wa)}return this.d};U.prototype.ra=function(a){a(this.$())};try{Q(window,"unload",function(){})}catch(xa){}u("botguard.bg",U);u("botguard.bg.prototype.invoke",U.prototype.ra);')})()</script>

  <script type="text/javascript">

  document.bg = new botguard.bg('J1rFU92xEZQtnBjxvCHWtEhciNTsAXti7MbXkbNk7xq03x/uBhVO9pIgnBjya8WUF2UQqeUnzFF/evvXg+cu0xysbVvh1KRTGZCpokRmYgxSkPveyWLijAO+VNKTwnNhM6kPUmNQPlXxMw9wQ0Qd8Aqo1WOk568Osmmc2CCkpjEbMrPUB8ZiOLrWEpvayOgHXxMN1B8H+6k03zrEUgTQEyEgCTj3s1vBEOK8KJAiJlOzuZLK+ZwlLkZ3QKkr8C+CYuyVJSN1g+b6/s48A8b7BRQMAE5tc+rw8qnWisBGPsPDtgJ6RXPZzOW2tOBp7VJ7+YziaxBHliFAAKYAu2XpHMIy/tN7MLbGpaPhyYTZmKf0XwYg+6zozbiJv4M/KxvHFQVgJOKuPzMBU5NvRMuFvb+/CdIscnFzF2oPoOotpixGTVWPPbTrDr5umA8GNnugb/xyJtdw95JnBsHnd14HJ1uV4jUtAnZ+nMHjiimrQpf92OOy6OtzBZZKXOQ4IBpPqVkrpun7dJQvpLt2xo6FpTSSVu9hFAVdfvE9r5q1BBeW391V2cGp+AiP/8lNVU5S4fvddcZMdm32haMMaQzFQ79vLyIuqHq4tBYLqD5u6ltQC+RrYdBv0S63B+Utq34zZyNmQTo0rpf2H/mUbYjnqZEXpJcmVADrCKmAhNaBMV3amLTNIl3xZST0GzG2QO4XJ2K7pWr0Mh0ZxIAodGjrmvt+uLSRudS5VXwzX6kFkIoTB/0gCl891I+wWTZt6g8jvMAlnEJVi/AVjtWmkjiLp3jVk5z3QazcBp/lAHzdZI4pE/ULFK2rDXTw0q8tlQoThkE+hjAdH8eEmJVfxhUSJOr6bkyGsUWttJzR86R31K0BesVZw86ncVjDkb9cWbBxKZDDXR6iXpnFbK00P2TVW/R3FubxrZXjixjc4bkheOl4wixVQnpCiUt0BPlzDTb9Sfd5u9QYA/ln5RlpzbzsNLOVV1FjuPJaOR3yn1H4OcQSIKH/9ps0Xo38kqH0Dnk1xbeZMKAj2b6MENpWXre8YB8TJbP0laXpAL3rUlOlYJs3p2c2Sk9x3DLaNT2tHpfARLW1S1gsa1qei1seelNUUDMgKxISS5/KrUuhHtoF/Sk2fPmPEyPTQENR8BWqbxPyccrTa5Bxb60bvH5vKvr7ZfV5d6ME+1whHYyCTFFSbRVuf2Zkte1ZFec8Rr45C7MfXosb1CM2K3zOLcjVo05OJFxF4O3pEvkdYr78C53nFWAcg9og4UGhqG5UfkyUsTAvkiwWKOC4+587r7BEl35NgtfYypPRD2+ARbLx/9QhHMrAoT3835X3gOQbHmgzQfmwpluarQXb6HMpctKFnNawxK0aGAQJX6TpsShhXoBvZX/Lcplh3KrvDi/J6juhLlz4+rkGqS2ODJOPhoC4LfV4v00HtATm/5Inz/40DEe68RtAFR1fIEoS3oL51HKruN2AZNpIlYSdb+C87sPedAz2nKctQu75DJ3fBEqaIY6UDhK9G5cC0cz+tZoKxT+f+zh8DjqVlqvQG/mlKeAHt5LnxXyuWA/XgGfqHFU7VauLIpags5DryjvrIE4Qx7GxYp1k+3HLfRPNI0eYdaV34rsVyIG3hzdZIc0UxzSqPTcIcI642OLtY22OqwMLpY7EeFonsoJ4vaLx/egxsmtttmYSJmjFw3w56OBHj+noyI2UerPLTnPASvh8GtnHDgO9imJkKMu9NY09/Z6Uv6lsQfObBj8U/NvlbkaUl4tVGTfSleamQO1UPJIgcDXQyQTYahKuV7ZEJNTpQO8a9OwqqjyCuYEsWL4uC3dzFWXEtmdxyQn0qJbtPhar56ulyNl7O5bxnvCCBwZ5IldBr6W357LRMNRrdz2RKTKIUxZ283wflfblXYHeKwZd6ibm7excWQynjVByapgnF/BvEm/dCD39qX/s39hWNy5f2hBLfJ+qHU7pSwgEKVzMQcuFi8uAzHVxA/5OEf4n4D29L63MzpEAdun3C6/N2n8Qlr8GE6QZ8akL5I7kGGdN4uyRJLoCZAe8KYO0kxodGvg5eqBmHDIst5n5AIoZbEFAfYj33q8s9eWSPhVTTBIZMjPWFPWrZH7NfwAP/rXLnS5K/5GzToFCmzuSYhKD7jHbvIKZ+FtJBTLxV68h5ydyy915TD4RGOxi0EcO/xEPxgQG1vvTBgGztQBSGqFUedTxVg0/7aa1lla+F0kHfcF5S1TkO12l03j7Xr9RJhFK90WtkZp4OdETFZ8k9HG0FkyM6zj1PkVyntP8OvgLt6LAvLmvjgWaSsuzkzO90JaLUDT7I4rvg6lyHjis1FdZALksefJvFq0FdHjsydueK03jybbJyOQq5G9hQ20gtRF31yspfCVql5qep94rZI5L7Wkw8yAjnduNJFqexg2PmdgbIwANqtvbalnXnibENHokHrNYxnjRv6cfPNs5B4uS6puqhpsE4xrCjtUmy/HYLLJbK1DCVSd7w9FLi5W9Ck2FAFZWu8XWrEdCLNPNJ9avVRdUUMfHY1RPq90IpmogLk9YTCY4X9V1Hoc4FSb94fGkSbLEHWy6lmZO1EfHEmYl2zqL6UvXgl/A50uPo0ZKUzda3DjYx05kJfny+9cBC0Cdue4Yr3FaOI+H1dNzcrqQnV9qav7XrpTB4kA6v1ZeGVuoqXXzBilfvs+1nusywFBENCQ72LOwV02I+yVGkFhLfrgNPf5SfZmtuE2LlSA83HXU1CX3e1EMmO9KpREtKwdCF8z+OprWLsZEFGUsiGGOwkZuBHyO2PhrpIrrCdNsim0GOCMUSo5/PU7wqbk3EcUD/d6/oHSLO/37Z2sxOBcRvTwkyZk8CZtZ0HsVz2IN7NgrkQNNfsiLxrEdTwC9nKwGozVMJ6zDBoIdT/5S/uixzcHDzDSts6IlQKSgTgeSqDFXAtJReg5eJrVK9AA02omKPG1rbqs9KggiykXXq+NK9mUnXXXdc9YqHr6RtttMA/GoZRJJbHtAmfRzWxwPCmsoni/1RUjcNi7zNz5Si1ynS4k6moEoRZdSBLWezbcuM4M69qWDQAT1btgDlSIE6MMOZklXiqth3LtAMJq0Ap9IJQ1o2oY024G8vZcKiOLPmn7iNboYNqWQNTjxrQ9YG+37KyhS/da6WzOUF8uhDwuVY157SHbSYkR+mgvUwNM/p+bc2oBeGRjc1XA+iBq4N9F9yGUvZlYo9PmhuSXk9xKKy1Jb8aGYK1yQmE9bQvTa2GUeOU2jzwhSukW/6MeVKzSd5MowGcSRhmUOs+dzTofT0ik+kyWkzqMKJS+O7OP4RbSxoXn90SS0rP8A/zNetTWBBvM6jngVHi7oaucaRXYdv2WSd9PGAYeCjdNsshveHPfVSqVBTV1Gk17bC/JAbjdMSCefLhNHV3UbBqWvhFLWHwmpina0GkxDsTdVzuQL2e2qbkNmneweVAmf6dJGWFrrq+93TgwJmp30mHyOYxMLcb51+E1z9N3joqmkKBRgc1wMOtX95fsozBRsSyRv+rp26UJwL326hHaYFmoCIcVMHoGHbDzbUEYaSbleHuZKT98cU6GM/ctRZ61KdEm5SzjYFybF8TJDPlUAY+PElfI5/E/QpUy7k7w5k1zSCQqrkJ1wumBVFxIUjliQNeTwAN6rp8py+zog9wOG2vrZuoAU+o8Xc0Aem1adovlalG4xZaVZoruGnnQZF+ph2uedfUo8aaMj2ahjLYtkdJ7Gd0ot689rCX2Vtvgj+uB/EPTGoBGGCJymfG9bn0CVLdDFYDa/uyh+tsuLTVvTKvgMtOQsyqy/3UPxUcnYNMJprXw+tuykdSUKqF+N3bgB4EjBqdazit33i8bp3dNgu9kmcyuMhyxbQHC8+lzsDxsV3yBQIvn/XN9jx9uXJPAkIP2OOskKBE/vzl9Z79SLrWuzaNmIkRJ+EERBTvW7wtOKuh3X0Hw4ccrQzseo0VT4pqDb4rBrVq9bxKunD4tL3NQ4ogtHqsg9nS6PguN6LOGRFY4v3NeJ7A65bgkCjWrCB0xsm9y+tQK01f0qulQrQfVxGds5lHkP+yHHBaT/peQJN8hmnMhuQohmf13/JNJuPHb0GTAOYQowYNktmRnj/rzHuJ0XZAxlTLqFhXr+sxyp7/HQRU88hHyXgbo57SNqelYX5pppG9MuiOFa5pQMAHx0mniOD+WDn6HkS4JdRBz+9fbrEBkick+wFzXwnBAEFWBaE5P7MAJE1/irSY06pKvACsLnijM5lzCm8XjV68f25lGeyIPpxCp118sV7kKNb3GEBYlT+5ZpJIunQVdvRiU8fVx4wWD8sA9TVw2UiBJwVjbF1eThRrE0v5uapscYLCWw6KVZ5/UFbfC1saQWq3cDxAk2jiPMPCuZhcwW0bTlvjys8W2Djx4E2VJg9W95vZGVJbKCyKnQFajdZz8PgUcODcFSsPzT2SOZo5rao5uiyEb3gp0dhhDypUa4CYX+dFHUgdXf+/WRLR9+EA9uy25FqGVXP+tWB9TraTT3yDZQnCXkjHOFwK0CeE8jKzywW2sAvvxmo4gb4sOeV30GkSR2i6cyFnrOzOA7dniQ3Cj9lwTTXzjgoh2QNgZwbkIH9MWXIPpmv10lQZx72msvdIYbsIXm4IItY5IbAOZUBXQI7eC9yQ2PkrYxX24MbBzuZaPuPyEiqQSna8CReh926Zi3QNDQSqshxMErFOz57LBGcRXLsYh/ahARc8qiSa7JbW8LZTx+o5N8L7MGf37sDtB8h+kY6vf4Ko67iXLaGtJks1aNeqzMrfagntjImze/kNTz+URPzyig7kYNK7sIrzqK+pvbkzQjm8rwtFj8MS56qpf7qsA8aNMfm0ySWn96U/KE6dDLsSDbJV3o38T3Ctwh/bnhgLEWjFp2/L4hTe2mHgb2zMIkFyoWpzfU62WlrUix7PdfAAbuKPEmH+RNfedaOVjln53PpHndybzr7+LLmPZ5vQx7HVT9URrCWmoVldsB/GPAiBcy0fwxIEUebFDW7O+VOAcY9vOok8T4Yhjckx9pldNeXV99pQ8qc/6A6CiBVMuGdulLeuVTCZZun9f31KM4+oJU6T2f3vpiHc+1f7u4RKLuNHMr8CQTYK+8YWMWS0zt8yUARp0uDPQJD36GgwEuCZ568ZBVvqb2NEUxxxLmw5sngvzmNZPNDcsgqWZ3RfTSqyrrvl9N+EbaxCSyVON3DzjfmsXfmsSo/AL1jcM9vop5kt4iXR1nWvGP2hItVaeRh5iFlPZVUSAjrSzBdzlMUhThZV5OPvPFxhxX01uA2DcPox/RBDr0egTDU6PsSTbJKtjlJvj78LAog+8j+qdtoKXEvTgvThRfY1+wpKFpbQyk5filzzOHCc3W+D7tdJICSw6mIAEiFpy+nwQpOGgPM9ppYAHit1osf/vmewNwpUPw/+3Zduo6jiGcXWp6SnSCr+mK4nBObIWbNmp4+6BXov0xeOaKH5YC2Y6DhyQz03hDhFsRSXXIwbm8jZSpzI4tV4t37ysLwad6nKElgHAy8WSIpGgDnbMuKXQbuhBqysy4eu23rmDBOmnF7iRVWVKzZ8W5Fd2IIuxZyU0bmqhY+7BQzE/G3EgT7lHnAgOsl402lEVNtvO3UHnu8muefMD1A2XymxDfhWaHX6ZQSW10RmmaUDVlNsIHgS8Iaokuwhtp/ZOlqTPgLtJCR+tHoQ3F+QokSx5/TckhNsMxTxDfPoObJAbCyFRr0IOpROO3bHXmlhsOZWArAkB//rEOiph4m/aaO598z5qfNd6h36NIE6Ca9VJEz4UFHrkJsgk20WqWVIlAJBG4kcOo6xLPNeykU8BgkJZvaNsn4BgTy9JP5wnkKEc65oCZXBGOv62ZTL3ADlx7qLfu75R5WCjV/UMx80+N1BZIYpr9S+7pgtOAWX29B008k0sZCPI2uJBIvZ5uSPcGRzCm97k0/JpiugxwDL3qJ25rBBVRAUYRx6ZraCnsGr/lX/ckwwG80Gx4rJJMRk+rTVr64pWk0iPD9xu7cD4RTF73qz4N1pglzZIVgSkT2FLL7kBXGw+op2EWOXi2uL0xs+AVv+DpV+d+YalxYSWBJRGECcCdEt/g9W5sMmYsv/xdsGvttrSAFr+7eJ14+GH0/YjvxG22Q6tbPB5n6gisH1NJwSuFuVf4rR/HAZ58XTMokOrc9fddPhaLy2ikDF343pIhCMpQPjlRsOBA90cL6g32VCK4F0TOIBHETuPPa+vjNp03HH/fYc2gBfZQ0fn/KVMffGZOnnHqI5pMCspLWu1bHeTe6tW8CMjGYbp0u2IZS2Yn6RxLsZEH7sTNqEQ9cG90qJORRMJBSzdzWvJl3ZfM4nty7f+hjr/M1Q8aNMuPLyjI8FyCmSlx0RWw8vPJYtHI/bZLkanEn5m1SLOF1uI2azznHhAs2p2dnZ4m/UxZgzzL7gJS4RbfifMEyskSsVJwRAtsMcmJP2yQkrPYocsuOesOQNTzxpgbyid/dDaVhQ0lMG1/+Q3jHYVjjHpufj+BpZqBjx3AhNTk6qm1K0S4CBzoYOe8kns678E1zbugGp+uOkfVvKCKQ8s+rJ3NVYeYWXyV+lXgFYLsqC1DkEbTvbsiEbxzZISxqONwc+ddZ9GHD6EA1/kwwGYSv0FKGBx4e4qIQhnQQGcvxBsjXqDdmerZ8Bf2KP/uasfJUNPZDSNWv4QjPX81IjDXdYKd575w0D9Tt1gTS48/xZgla3uCXQlfpibdsXD1Ha28AO80O6zuJcYMNULq+HymrbzkCEZ4o1ArwgL1Y+a7Nelge7Zf80HR4XtgjZ6FUrYnx47W2RPuKE4hz+sAueW3cZxjdOV5JAVSwQtFua+ntyfl00xAj2P8XBEJzu0FhVnVX/zietC7Z5OybMnTkv9O6uCHaZBtKNGTKfxT9R9za/ebof77V2b1OjKu8SELLySpPSr7cIFZeb0RzS+byDdvxG6tX1OtPPZKzp8YK1XezHC9wGbWWR7+2RvCY+QMJ3i6u3RZYEUhYWAz0XrnrWlkD+/PnujSosuiS+w0erTfDGgaRfOCEQECfX5phiopOAXYQctPK4d75NtkKOC4t00wC74z/fvjBih4CuKQW8SZLdQ5puL/IxGnuMDiIuE/ZL5Qb5qgKw3Lw8jNtoaaPGj903lbfXl5NsTssKn9aZ5dd0o7Mm5S/Fw8fT/M7NaVEbLql5Q6HPGA54meg1wNuPXslMpGoq4RS3ycQPjT9OZ5F6jOW+GaS7kWEmvluD8j0UxgsThCBv0KJfYUPN8l485vnrfC5Ti6v/HejH5iupnMCvqYMDrWx5iOJ+VBlIAHRksWNHH+O5Xw8EI/ZPBgAuTKvEqngXNDrzG0jgNxDxuQs6loBh91azc7QxnM+KKTR/vxtoz1zxBK810ZXFRcq7y28rlqzLTzhmcUQKjPYob7IDh2x1SHlFdSHwvGO8XgLtzRSvwe1TXDz89Zjo7i0+8BMazmte4MDV47862lWKyp1YB/gbhGiVHOMfRjn1U9VLYgpYWkkBINay0bj/YN1ERpzrzUZK6H3ZqJQFPWMUbeavdqXRtqNN8zEnClLe3H/s2KZ5JgiSG+DvNVXJ4GfvU0fIUF51z9ECwRwS85tEDDQ4uEjTm1mttN98kSrKqScOXsqBELheZ/YmNmg4PoC4kMPQugb7IH9k69vR1rl+Ppzp1sSpae3Zre1pQuCjzftrP1areRh/T/DKcPjnXcB1Y4Pv4fGCEY6pH7GLFUGEGSDw4mM6aehxfBdS59MLqZ8GDALALXStikSmsXsxODxeVbrZbewtRC1jgbAH+Zk5r8+vqPtkLMHPI/xwQ/JMBpBVDmJVpZNNy/6GsDsjEPPT4vorDP8qxwjUGNIdbEMUNQ+mvb6yIez1wVFXuPtY0aH7u0I3bXdc6K6g/Dt5ckAJmcEqDdILDcDwiaCL9nRmJxYrYYJLfSrXCbvJ30k25GscnFhmrUSDgMj8uU5Gn/QcueAOHSx2QbRzqpXoIfRhehXK14md7qSAUcA21bn2mHCrClgXhhsJG1wt06bBR16OTdpCXjWfcbbQY3fETAB1/NxfkE2vHbsDYDv8P2NfeKjnIN5zY9iNYB3nipk+eyg8HeF/gZtYPFyQgNyqIW9lusncyFD1SKY7ulyZ4tx9IZs++vAQLrm18O/VPUr/SVyGPTOuBK/Kb8+z9zUPOtwm0w3gd8XexC4+7TVkmeleLDGLtUbR4UOwb54hcnJj13Cpv6LoXIzl/PwONopIPu0onFZ57pcoSObxfmPmu+56HkZBazWxHFSJrN2IOkHPqgLW9dBngjKifbNQ3DVy8OWfeSTLQdFbHr8qdpcOMG/Q13taawZRQjp69JbFh1JW8+6jFcQpI9MVxbilQmbSK9+Gc7Q3quaD/smgWT+yiUobMjdW3DfOV/JAXmqV09X94q/0w++9ObKUSLD3g3n8XVgxaLaqwx33etLO+iXFLPReYd6ukZ7ir1o3PyJPefWoA9ekpNVzjh8luM1e+IRVJFT+lYuNf8mPCPzbnqmzwFBdW/Dub3hVOFtpRERxbEkvwptCa9Tns2fE62KIX+Pn729AVvIbP17skpIWcfNWGqyhmZecMepBspCRGqfRZd02Xf03/GRjoDWfcF0oYNpwi5Nj0uGeK8Czs5zrVrw/I8OvqggRu7WVyPqsfoHbNvbn/NTaAHiidCw+o4Dg1XC0dif9kIV9nAJdroEMwmfXflq4PeuP1zfoxwe3Q/gIQ45JUnvpexLkuBvq36Cc4uwpYfjVvqbDCQTGNUewxLqt0d25OFEa3RN9fVuFrDQOxA3r/9Qvv/yYaVHg==');

  </script>

<script type="text/javascript">

  var gaia_hasInnerTextProperty =

  document.getElementsByTagName("body")[0].innerText != undefined ? true : false;

  var gaia_attachEvent = function(element, event, callback) {

  if (element.addEventListener) {

  element.addEventListener(event, callback, false);

  } else if (element.attachEvent) {

  element.attachEvent('on' + event, callback);

  }

  };

  var gaia_getElementsByClass = function(className) {

  if (document.getElementsByClassName) {

  return document.getElementsByClassName(className);

  } else if (document.querySelectorAll && document.querySelectorAll('.' + className)) {

  return document.querySelectorAll('.' + className);

  }

  return [];

  };

</script>

<script type="text/javascript">

  function gaia_parseFragment() {

  var hash = location.hash;

  var params = {};

  if (!hash) {

  return params;

  }

  var paramStrs = decodeURIComponent(hash.substring(1)).split('&');

  for (var i = 0; i < paramStrs.length; i++) {

      var param = paramStrs[i].split('=');

      params[param[0]] = param[1];

    }

    return params;

  }


  function gaia_prefillEmail() {

    var f = null;

    if (document.getElementById) {

      f = document.getElementById('gaia_loginform');

    }


    if (f && f.Email && (f.Email.value == null || f.Email.value == '')

        && (f.Email.type != 'hidden')) {

      hashParams = gaia_parseFragment();

      if (hashParams['Email'] && hashParams['Email'] != '') {

        f.Email.value = hashParams['Email'];

      }

    }

  }


  

  try {

    gaia_prefillEmail();

  } catch (e) {

  }



  

  function gaia_setFocus() {

    

    var f = null;

    if (document.getElementById) {

      f = document.getElementById('gaia_loginform');

    }

    if (f) {

      var agt = navigator.userAgent.toLowerCase();

      var is_ie = (agt.indexOf("msie") != -1);

      if (f.Email && (f.Email.value == null || f.Email.value == '' || is_ie)

          && (f.Email.type != 'hidden') && f.Email.focus) {

        f.Email.focus();

        if (f.Email.value) {

           

          f.Email.value = f.Email.value;

        }

      } else if (f.Passwd) {

        f.Passwd.focus();

      }

    }

    

  }

  window.onload = gaia_setFocus;


  function gaia_onLoginSubmit() {

    

    

    if (window.gaiacb_onLoginSubmit) {

      gaiacb_onLoginSubmit();

    }

    

    


  

  try {

    document.bg.invoke(function(response) {

      document.getElementById('bgresponse').value = response;

    });

  } catch (err) {}

  



    return true;

  }

  document.getElementById('gaia_loginform').onsubmit = gaia_onLoginSubmit;


  

  

    var Ga=!0,G=null,Gb=!1,Gc;var Ge=function(a,b){var c=a;a&&"string"==typeof a&&(c=document.getElementById(a));if(b&&!c)throw new Gd(a);return c},Gd=function(a){this.id=a;this.toString=function(){return"No element found for id '"+this.id+"'"}};var Gf={},Gg;Gg=window.addEventListener?function(a,b,c){var d=function(a){var b=c.call(this,a);Gb===b&&Gh(a);return b};a=Ge(a,Ga);a.addEventListener(b,d,Gb);Gi(a,b).push(d);return d}:window.attachEvent?function(a,b,c){a=Ge(a,Ga);var d=function(){var b=window.event,d=c.call(a,b);Gb===d&&Gh(b);return d};a.attachEvent("on"+b,d);Gi(a,b).push(d);return d}:void 0;var Gh=function(a){a.preventDefault?a.preventDefault():a.returnValue=Gb;return Gb};

var Gi=function(a,b){Gf[a]=Gf[a]||{};Gf[a][b]=Gf[a][b]||[];return Gf[a][b]};var Gj=function(){try{return new XMLHttpRequest}catch(a){for(var b=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],c=0;c<b.length;c++)try{return new ActiveXObject(b[c])}catch(d){}}return G},Gk=function(){this.h=Gj();this.parameters={}};Gk.prototype.g=function(){};

Gk.prototype.send=function(a){var b=[],c;for(c in this.parameters){var d=this.parameters[c];b.push(c+"="+encodeURIComponent(d))}var b=b.join("&"),e=this.h,f=this.g;e.open("POST",a,Ga);e.setRequestHeader("Content-type","application/x-www-form-urlencoded");e.onreadystatechange=function(){4==e.readyState&&f({status:e.status,text:e.responseText})};e.send(b)};

Gk.prototype.r=function(a){var b=this.g,c=this.h;c.open("GET",a,Ga);c.onreadystatechange=function(){4==c.readyState&&b({status:c.status,text:c.responseText})};c.send()};var Gm=function(a){this.f=a;this.n=this.o();if(this.f==G)throw new Gl("Empty module name");};Gc=Gm.prototype;Gc.o=function(){var a=window.location.pathname;return a&&0==a.indexOf("/accounts")?"/accounts/JsRemoteLog":"/JsRemoteLog"};

Gc.q=function(a,b,c){var d=this.n,e=this.f||"",d=d+"?module="+encodeURIComponent(e);a=a||"";d=d+"&type="+encodeURIComponent(a);b=b||"";d=d+"&msg="+encodeURIComponent(b);c=c||[];for(a=0;a<c.length;a++)d=d+"&arg="+encodeURIComponent(c[a]);try{var f=Math.floor(1E4*Math.random()),d=d+"&r="+String(f)}catch(g){}return d};Gc.send=function(a,b,c){var d=new Gk;d.parameters={};try{var e=this.q(a,b,c);d.r(e)}catch(f){}};Gc.a=function(a,b){this.send("ERROR",a,b)};

Gc.i=function(a){var b=this;return function(){try{return a.apply(G,arguments)}catch(c){throw b.a("Uncatched exception: "+c),c;}}};var Gl=function(){};var Gn=Gn||new Gm("uri"),Go=RegExp("^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([\\w\\d\\-\\u0100-\\uffff.%]*)(?::([0-9]+))?)?([^?#]+)?(?:\\?([^#]*))?(?:#(.*))?$"),Gp=function(a){return"http"==a.toLowerCase()?80:"https"==a.toLowerCase()?443:G},Gq=function(a,b){var c=b.match(Go)[1]||G,d,e=b.match(Go)[3]||G;d=e&&decodeURIComponent(e);e=Number(b.match(Go)[4]||G)||G;if(!c||!d)return Gn.a("Invalid origin Exception",[String(b)]),Gb;e||(e=Gp(c));var f=a.match(Go)[1]||G;if(!f||f.toLowerCase()!=c.toLowerCase())return Gb;

c=(c=a.match(Go)[3]||G)&&decodeURIComponent(c);if(!c||c.toLowerCase()!=d.toLowerCase())return Gb;(d=Number(a.match(Go)[4]||G)||G)||(d=Gp(f));return e==d};var Gr=Gr||new Gm("check_connection"),Gs="^([^:]+):(\\d*):(\\d?)$",Gt=G,Gu=G,Gv=G,Gw=function(a,b){this.d=a;this.c=b;this.b=Gb};Gc=Gw.prototype;Gc.j=function(a,b){if(!b)return Gb;if(0<=a.indexOf(","))return Gr.a("CheckConnection result contains comma",[a]),Gb;var c=b.value;b.value=c?c+","+a:a;return Ga};Gc.e=function(a){return this.j(a,Gu)};Gc.l=function(a){return this.j(a,Gv)};Gc.k=function(a){a=a.match(Gs);return!a||3>a.length?G:a[1]};

Gc.s=function(a,b){if(!Gq(this.d,a))return Gb;if(this.b||!b)return Ga;"accessible"==b?(this.e(a),this.b=Ga):this.k(b)==this.c&&(this.l(b)||this.e(a),this.b=Ga);return Ga};Gc.p=function(){var a;a=this.d;var b="timestamp",c=String((new Date).getTime());if(0<a.indexOf("#"))throw Object("Unsupported URL Exception: "+a);return a=0<=a.indexOf("?")?a+"&"+encodeURIComponent(b)+"="+encodeURIComponent(c):a+"?"+encodeURIComponent(b)+"="+encodeURIComponent(c)};

Gc.m=function(){var a=window.document.createElement("iframe"),b=a.style;b.visibility="hidden";b.width="1px";b.height="1px";b.position="absolute";b.top="-100px";a.src=this.p();a.id=this.c;Gt.appendChild(a)};

var Gx=function(a){return function(b){var c=b.origin.toLowerCase();b=b.data;for(var d=a.length,e=0;e<d&&!a[e].s(c,b);e++);}},Gy=function(){if(window.postMessage){var a;a=window.__CHECK_CONNECTION_CONFIG.iframeParentElementId;var b=window.__CHECK_CONNECTION_CONFIG.connectivityElementId,c=window.__CHECK_CONNECTION_CONFIG.newResultElementId;(Gt=document.getElementById(a))?(b&&(Gu=document.getElementById(b)),c&&(Gv=document.getElementById(c)),!Gu&&!Gv?(Gr.a("Unable to locate the input element to storeCheckConnection result",

["old id: "+String(b),"new id: "+String(c)]),a=Gb):a=Ga):(Gr.a("Unable to locate the iframe anchor to append connection test iframe",["element id: "+a]),a=Gb);if(a){a=window.__CHECK_CONNECTION_CONFIG.domainConfigs;if(!a){if(!window.__CHECK_CONNECTION_CONFIG.iframeUri){Gr.a("Missing iframe URL in old configuration");return}a=[{iframeUri:window.__CHECK_CONNECTION_CONFIG.iframeUri,domainSymbol:"youtube"}]}if(0!=a.length){for(var b=a.length,c=[],d=0;d<b;d++)c.push(new Gw(a[d].iframeUri,a[d].domainSymbol));

Gg(window,"message",Gx(c));for(d=0;d<b;d++)c[d].m()}}}},Gz=function(){if(window.__CHECK_CONNECTION_CONFIG){var a=window.__CHECK_CONNECTION_CONFIG.postMsgSupportElementId;if(window.postMessage){var b=document.getElementById(a);b?b.value="1":Gr.a("Unable to locate the input element to storepostMessage test result",["element id: "+a])}}};G_checkConnectionMain=Gr.i(Gy);G_setPostMessageSupportFlag=Gr.i(Gz);



    window.__CHECK_CONNECTION_CONFIG = {

      

      

        newResultElementId: 'checkConnection',

        domainConfigs: [{iframeUri: 'https://accounts.youtube.com/accounts/CheckConnection?pmpo\75https%3A%2F%2Faccounts.google.com\46v\075358216805',domainSymbol: 'youtube'}],

      


      

      iframeUri: '',

      

      iframeOrigin: '',

      

      connectivityElementId: 'dnConn',

      

      iframeParentElementId: 'cc_iframe_parent',

      

      postMsgSupportElementId: 'pstMsg',

      

      msgContent: 'accessible'

    };


    G_setPostMessageSupportFlag();

    G_checkConnectionMain();

  


  


  


  

</script>

<script type="text/javascript">

  gaia_appendParam = function(url, name, value) {

  var param = encodeURIComponent(name) + '=' + encodeURIComponent(value);

  if (url.indexOf('?') >= 0) {

  return url + '&' + param;

  } else {

  return url + '?' + param;

  }

  };

  var langChooser = document.getElementById('lang-chooser');

  var langChooserWrap = document.getElementById('lang-chooser-wrap');

  if (langChooser && langChooserWrap) {

  var langChooserParam = 'hl';

  var langChooserUrl = '\x2FServiceLogin?service=mail\x26passive=true\x26rm=false\x26continue=http%3A%2F%2Fmail.google.com%2Fmail%2F\x26scc=1\x26ltmpl=default\x26ltmplcache=2\x26lp=1';

  langChooserWrap.style.display = '';

  langChooser.onchange = function() {

  window.location.href =

  gaia_appendParam(langChooserUrl, langChooserParam, this.value);

  };

  }

</script>

<script type="text/javascript">

  var gaia_swapHiResLogo = function() {

  var devicePixelRatio =

  window.devicePixelRatio ? window.devicePixelRatio : 1;

  if (devicePixelRatio > 1) {

  var logos = gaia_getElementsByClass('logo');

  for (var i = 0; i < logos.length; i++) {

        if (logos[i].nodeName == 'IMG' &&

            logos[i].src.search('google_logo_41.png') > 0) {

  logos[i].width = 116;

  logos[i].height = 41;

  logos[i].src = '//ssl.gstatic.com/images/logo_ret.png';

  }

  }

  }

  }

  gaia_swapHiResLogo();

</script>

<script type="text/javascript">

var _gaq = _gaq || [];

_gaq.push(['_setAccount', 'UA-992684-1']);

_gaq.push(['_setDomainName', 'accounts.google.com']);

_gaq.push(['_setAllowLinker', true]);

_gaq.push(['_addIgnoredRef', 'mail.google.com']);

_gaq.push(['_setAllowAnchor', true]);

_gaq.push(['_trackPageview', '/mail/homepage']);

(function() {

  var ga = document.createElement('script'); ga.type = 'text/javascript';

  ga.async = true;

  ga.src = ('https:' == document.location.protocol ? 'https://ssl' :

  'http://www') + '.google-analytics.com/ga.js';

  (document.getElementsByTagName('head')[0] ||

  document.getElementsByTagName('body')[0]).appendChild(ga);

})();

</script>

  <script type="text/javascript">

var BrowserSupport_={IsBrowserSupported:function(){var agt=navigator.userAgent.toLowerCase();var is_op=agt.indexOf("opera")!=-1;var is_ie=agt.indexOf("msie")!=-1&&document.all&&!is_op;var is_ie5=agt.indexOf("msie 5")!=-1&&document.all&&!is_op;var is_mac=agt.indexOf("mac")!=-1;var is_gk=agt.indexOf("gecko")!=-1;var is_sf=agt.indexOf("safari")!=-1;if(is_ie&&!is_op&&!is_mac){if(agt.indexOf("palmsource")!=

-1||agt.indexOf("regking")!=-1||agt.indexOf("windows ce")!=-1||agt.indexOf("j2me")!=-1||agt.indexOf("avantgo")!=-1||agt.indexOf(" stb")!=-1)return false;var v=BrowserSupport_.GetFollowingFloat(agt,"msie ");if(v!=null)return v>=5.5}if(is_gk&&!is_sf){var v=BrowserSupport_.GetFollowingFloat(agt,"rv:");if(v!=null)return v>=1.4;else{v=BrowserSupport_.GetFollowingFloat(agt,"galeon/");if(v!=null)return v>=

1.3}}if(is_sf){if(agt.indexOf("rv:3.14.15.92.65")!=-1)return false;var v=BrowserSupport_.GetFollowingFloat(agt,"applewebkit/");if(v!=null)return v>=312}if(is_op){if(agt.indexOf("sony/com1")!=-1)return false;var v=BrowserSupport_.GetFollowingFloat(agt,"opera ");if(v==null)v=BrowserSupport_.GetFollowingFloat(agt,"opera/");if(v!=null)return v>=8}if(agt.indexOf("pda; sony/com2")!=-1)return true;return false},

GetFollowingFloat:function(str,pfx){var i=str.indexOf(pfx);if(i!=-1){var v=parseFloat(str.substring(i+pfx.length));if(!isNaN(v))return v}return null}};var is_browser_supported=BrowserSupport_.IsBrowserSupported()

  </script>

<script type=text/javascript>

<!--


var start_time = (new Date()).getTime();


if (top.location != self.location) {

 top.location = self.location.href;

}


function SetGmailCookie(name, value) {

  document.cookie = name + "=" + value + ";path=/;domain=.google.com";

}


function lg() {

  var now = (new Date()).getTime();


  var cookie = "T" + start_time + "/" + start_time + "/" + now;

  SetGmailCookie("GMAIL_LOGIN", cookie);

}


function gaiacb_onLoginSubmit() {

  lg();

  if (!fixed) {

    FixForm();

  }

  return true;

}


function StripParam(url, param) {

  var start = url.indexOf(param);

  if (start == -1) return url;

  var end = start + param.length;


  var charBefore = url.charAt(start-1);

  if (charBefore != '?' && charBefore != '&') return url;


  var charAfter = (url.length >= end+1) ? url.charAt(end) : '';

  if (charAfter != '' && charAfter != '&' && charAfter != '#') return url;

  if (charBefore == '&') {

  --start;

  } else if (charAfter == '&') {

  ++end;

  }

  return url.substring(0, start) + url.substring(end);

}

var fixed = 0;

function FixForm() {

  if (is_browser_supported) {

  var form = el("gaia_loginform");

  if (form && form["continue"]) {

  var url = form["continue"].value;

  url = StripParam(url, "ui=html");

  url = StripParam(url, "zy=l");

  form["continue"].value = url;

  }

  }

  fixed = 1;

}

function el(id) {

  if (document.getElementById) {

  return document.getElementById(id);

  } else if (window[id]) {

  return window[id];

  }

  return null;

}

// Estimates of nanite storage generation over time.

var CP = [

 [ 1224486000000, 7254 ],

 [ 1335290400000, 7704 ],

 [ 1335376800000, 10240 ],

 [ 2144908800000, 13531 ],

 [ 2147328000000, 43008 ],

 [ 46893711600000, Number.MAX_VALUE ]

];

var quota_elem;

var ONE_PX = "https://mail.google.com/mail/images/c.gif?t=" +

  (new Date()).getTime();

function LogRoundtripTime() {

  var img = new Image();

  var start = (new Date()).getTime();

  img.onload = GetRoundtripTimeFunction(start);

  img.src = ONE_PX;

}

function GetRoundtripTimeFunction(start) {

  return function() {

  var end = (new Date()).getTime();

  SetGmailCookie("GMAIL_RTT", (end - start));

  }

}

function MaybePingUser() {

  var f = el("gaia_loginform");

  if (f.Email.value) {

  new Image().src = 'https://mail.google.com/mail?gxlu=' +

  encodeURIComponent(f.Email.value) +

  '&zx=' + (new Date().getTime());

  }

}

function OnLoad() {

  gaia_setFocus();

  MaybePingUser();

  var passwd_elem = el("Passwd");

  if (passwd_elem) {

  passwd_elem.onfocus = MaybePingUser;

  }

  LogRoundtripTime();

  if (!quota_elem) {

  quota_elem = el("quota");

  updateQuota();

  }

  LoadConversionScript();

}

function updateQuota() {

  if (!quota_elem) {

  return;

  }

  var now = (new Date()).getTime();

  var i;

  for (i = 0; i < CP.length; i++) {

    if (now < CP[i][0]) {

      break;

    }

  }

  if (i == 0) {

    setTimeout(updateQuota, 1000);

  } else if (i == CP.length) {

    quota_elem.innerHTML = CP[i - 1][1];

  } else {

    var ts = CP[i - 1][0];

    var bs = CP[i - 1][1];

    quota_elem.innerHTML = format(((now-ts) / (CP[i][0]-ts) * (CP[i][1]-bs)) + bs);

    setTimeout(updateQuota, 1000);

  }

}


var PAD = '.000000';


function format(num) {

  var str = String(num);

  var dot = str.indexOf('.');

  if (dot < 0) {

     return str + PAD;

  } if (PAD.length > (str.length - dot)) {

  return str + PAD.substring(str.length - dot);

  } else {

  return str.substring(0, dot + PAD.length);

  }

}

var google_conversion_type = 'landing';

var google_conversion_id = 1069902127;

var google_conversion_language = "en_US";

var google_conversion_format = "1";

var google_conversion_color = "FFFFFF";

function LoadConversionScript() {

  var script = document.createElement("script");

  script.type = "text/javascript";

  script.src = "https://www.googleadservices.com/pagead/conversion.js";

}

// -->

</script>

<script>

window.onload = function() {

  OnLoad();

  FixForm();

}

</script>

  </div>

  </body>

</html>