Launching DB Browser

The Initial Screen

show on screen

Environment Overview

  • A small menu system consisting of File, Edit, View and Help.
  • Below the the menu system is a toolbar with four options; New Database, Open Database, Write Changes and Revert Changes.

Below the toolbar is a 4-tabbed pane for; Database Structure, Browse Data, Edit Proagmas and Execute SQL. Initially theese will be quite empty as we haven’t created or opened a database yet.

  • In general we will see how each of these are used as we go through the lesson.
  • except of the Edit Pragmas tab which deals with system wide parameters which we won’t want to change.

  • On the right hand side therte are two further panes, at the top is the Edit Database Cell pane which is al greyed out.
  • Below it is a 3-tabbed pane for DB Schema, SQL log and Remote.
  • We are only really interested in the DB Schema tab

Initial change to the layout

Modify panes for lessons

  • We will make a couple of initial changes to the layout of the screen.
  • These will be retained across sessions.
  1. From the View menu item un-select the Edit Database Cell icon to the left of the text. This will make the pane close and the bottom pane will be expanded automatically to fill the space.

  2. From the View menu item select preferences and select the Data Browser tab.

  • Towards the botton there is a section dealing with Field colors.
  • You will see three bars below the word Text, to the right there are in fact three invisible bars for the Background.
  • Click in the area for the Backgroung color for NULL.
  • A color selector window will open, select Red.
  • The bar will turn Red.
  • This is now the default background cell colour that will be used to display NULL values in you tables.

  • We will discuss the meaning of NULL values in a table in a later.
  • close the preference window by clicking OK.

Opening a database

Download data

https://data-lessons.github.io/sql-socialsci/data/SN7577.sqlite

Database sn7577 info

https://discover.ukdataservice.ac.uk/#7577 * Title: Audit of Political Engagement 11, 2013 * Political behaviour and attitudes - Politics

To open the database in DB Browser do the following;

  • clichk on the open database button in the toolbar.
  • Navigate to where you have stored the database file on your local machine, select it and click open.

  • When you open the database, the Database Structure tab on the left andthe DB Schema pane on the right will look very similar.
  • However the DB Schema pane is only there to allow you to see the details of the schema for the tables.
  • In particular what tables are in the database and the fields and their types which are in each table.

  • The Database Structure tab on the left allows you to initiate actions on the tables.
  • If you right click on a table name in the DB Schema pane, nothing happens.
  • However, if you do the same in the Database Structure menu you will be given a set of possible actions.
  • These are the same actions that are available from the toolbar at the top of the tab.

  • If you select Browse Table, the data from the table is loaded into the Browse Data pane from where it can be examined or filtered.
  • You can also select ther table you wish to Browse directly from here.

  • There are options for New Record and Delete Record.
  • It is unlikely that you will want to use these options.
  • Our interest is in analysing exiosting data not creating or deleting data.

Running SQL Queries

On the toolbar there are five buttons. Left to right they are:

image
image

Creating a database

  • As well as opening (connecting) to existing databases it is also possible to create new SQLite databases and tables using DB Browser.

  • To create a database click the New Database button from the main toolbar (also available from the File menu).
  • You will initially be asked for a name for the database and where you want to save it. It is saved as a single file.
  • You can choose your own extension but sqlite is recommended.
  • If you do not provide a default, then a .db extension will be used.
  • Although the new database is empty, in that there are no tables in it, the .sqlite file itself is not empty.

  • Once you have saved the databae file the Create Table wizard will open allowing you to create a table.
  • You can cancel this as we will be going through the create table process in a later episode.

Write Changes & Revert Changes

  • During your DB Browser session, if you create or delete any tables the changes are not automatically written to the database file.
  • When you try to end the session (i.e. close the application) you will be asked if you want to save the changes you have made.
  • Alternatively you can explicitly save changes or revert changes during a session by use of the Write Changes and Revert Changes buttons on the toolbar.
  • Once written the changes are permanent (there is no concept of multiple undo like you might have in other programs).
  • Revert Changes will take you back to the last Written copy.

Key Points

  • The DB Browser for SQLite application allows you to connect to an existing database or create a new database

  • When connected to a database you can create new tables

  • When connected to a database you can write and run SQL queries and view the results

  • You can save the reults of a query to a file

LS0tCnRpdGxlOiAiVXNpbmcgREIgQnJvd3NlciBmb3IgU1FMaXRlICIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMjIExhdW5jaGluZyBEQiBCcm93c2VyIAoqIFdpbmRvd3MgLSBVc2Ugd2luZG93cyBidXR0b24gKGJvdHRvbSBsZWZ0IG9mIHNjcmVlbiksIHR5cGUgaW4gIkRCIEJyb3dzZXIiCiogTWFjIC0gU3RhcnQgREIgQnJvd3NlciBmcm9tIGFwcGxpY2F0aW9ucyBmb2xkZXIgCgojIyMgVGhlIEluaXRpYWwgU2NyZWVuCioqc2hvdyBvbiBzY3JlZW4qKgoKKiBzdGFydCB1cCB3aW5kb3cgCgojIyMjIEVudmlyb25tZW50IE92ZXJ2aWV3IAoKKiBBIHNtYWxsIGBtZW51IHN5c3RlbWAgY29uc2lzdGluZyBvZiBgRmlsZSwgRWRpdCwgVmlldyBhbmQgSGVscGAuIAoqIEJlbG93IHRoZSB0aGUgbWVudSBzeXN0ZW0gaXMgYSB0b29sYmFyIHdpdGggZm91ciBvcHRpb25zOyBgTmV3IERhdGFiYXNlLCBPcGVuIERhdGFiYXNlLCBXcml0ZSBDaGFuZ2VzIGFuZCBSZXZlcnQgQ2hhbmdlc2AuIAoKQmVsb3cgdGhlIHRvb2xiYXIgaXMgYSA0LXRhYmJlZCBwYW5lIGZvcjsgYERhdGFiYXNlIFN0cnVjdHVyZSwgQnJvd3NlIERhdGEsIEVkaXQgUHJvYWdtYXMgYW5kIEV4ZWN1dGUgU1FMYC4gCkluaXRpYWxseSB0aGVlc2Ugd2lsbCBiZSBxdWl0ZSBlbXB0eSBhcyB3ZSBoYXZlbuKAmXQgY3JlYXRlZCBvciBvcGVuZWQgYSBkYXRhYmFzZSB5ZXQuIAoKKiBJbiBnZW5lcmFsIHdlIHdpbGwgc2VlIGhvdyBlYWNoIG9mIHRoZXNlIGFyZSB1c2VkIGFzIHdlIGdvIHRocm91Z2ggdGhlIGxlc3Nvbi4KKiBleGNlcHQgb2YgdGhlIEVkaXQgUHJhZ21hcyB0YWIgd2hpY2ggZGVhbHMgd2l0aCBzeXN0ZW0gd2lkZSBwYXJhbWV0ZXJzIHdoaWNoIHdlIHdvbuKAmXQgd2FudCB0byBjaGFuZ2UuCgoqIE9uIHRoZSByaWdodCBoYW5kIHNpZGUgdGhlcnRlIGFyZSB0d28gZnVydGhlciBwYW5lcywgYXQgdGhlIHRvcCBpcyB0aGUgYEVkaXQgRGF0YWJhc2UgQ2VsbGAgcGFuZSB3aGljaCBpcyBhbCBncmV5ZWQgb3V0LiAKKiBCZWxvdyBpdCBpcyBhIDMtdGFiYmVkIHBhbmUgZm9yIERCIFNjaGVtYSwgU1FMIGxvZyBhbmQgUmVtb3RlLiAKKiBXZSBhcmUgb25seSByZWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgYERCIFNjaGVtYSB0YWJgCgojIyBJbml0aWFsIGNoYW5nZSB0byB0aGUgbGF5b3V0IAoqIExheW91dCBpcyBxdWl0ZSBmbGV4aWJsZSAKKiBEcmFnIGFuZCBkcm9wIGludG8gcG9zaXRpb25zCiogaW5kaXZpZHVhbCB0YWJzIG9uIHRoZSBib3R0b20gcGFuZSBjbG9zZWQgZGlyZWN0bHkgZnJvbSB0aGUgcGFuZSBhbmQgcmUtb3BlbmVkIGZyb20gdGhlIG1lbnUgVmlldyBpdGVtLgoKIyMjIE1vZGlmeSBwYW5lcyBmb3IgbGVzc29ucwoqIFdlIHdpbGwgbWFrZSBhIGNvdXBsZSBvZiBpbml0aWFsIGNoYW5nZXMgdG8gdGhlIGxheW91dCBvZiB0aGUgc2NyZWVuLiAKKiBUaGVzZSB3aWxsIGJlIHJldGFpbmVkIGFjcm9zcyBzZXNzaW9ucy4KCjEuIEZyb20gdGhlIFZpZXcgbWVudSBpdGVtIHVuLXNlbGVjdCB0aGUgYEVkaXQgRGF0YWJhc2UgQ2VsbGAgaWNvbiB0byB0aGUgbGVmdCBvZiB0aGUgdGV4dC4gVGhpcyB3aWxsIG1ha2UgdGhlIHBhbmUgY2xvc2UgYW5kIHRoZSBib3R0b20gcGFuZSB3aWxsIGJlIGV4cGFuZGVkIGF1dG9tYXRpY2FsbHkgdG8gZmlsbCB0aGUgc3BhY2UuCgoyLiBGcm9tIHRoZSBgVmlldyBtZW51YCBpdGVtIHNlbGVjdCBgcHJlZmVyZW5jZXNgIGFuZCBzZWxlY3QgdGhlIGBEYXRhIEJyb3dzZXJgIHRhYi4KCiogVG93YXJkcyB0aGUgYm90dG9uIHRoZXJlIGlzIGEgc2VjdGlvbiBkZWFsaW5nIHdpdGggRmllbGQgY29sb3JzLiAKKiBZb3Ugd2lsbCBzZWUgdGhyZWUgYmFycyBiZWxvdyB0aGUgd29yZCBUZXh0LCB0byB0aGUgcmlnaHQgdGhlcmUgYXJlIGluIGZhY3QgdGhyZWUgaW52aXNpYmxlIGJhcnMgZm9yIHRoZSBCYWNrZ3JvdW5kLiAKKiBDbGljayBpbiB0aGUgYXJlYSBmb3IgdGhlIGBCYWNrZ3JvdW5nIGNvbG9yIGZvciBOVUxMYC4gCiogQSBjb2xvciBzZWxlY3RvciB3aW5kb3cgd2lsbCBvcGVuLCBzZWxlY3QgYFJlZGAuIAoqIFRoZSBiYXIgd2lsbCB0dXJuIFJlZC4gCiogVGhpcyBpcyBub3cgdGhlIGRlZmF1bHQgYmFja2dyb3VuZCBjZWxsIGNvbG91ciB0aGF0IHdpbGwgYmUgdXNlZCB0byBkaXNwbGF5IGBOVUxMYCB2YWx1ZXMgaW4geW91IHRhYmxlcy4gCgoqIFdlIHdpbGwgZGlzY3VzcyB0aGUgbWVhbmluZyBvZiBgTlVMTGAgdmFsdWVzIGluIGEgdGFibGUgaW4gYSBsYXRlci4KKiBjbG9zZSB0aGUgcHJlZmVyZW5jZSB3aW5kb3cgYnkgY2xpY2tpbmcgYE9LYC4KCiMjIE9wZW5pbmcgYSBkYXRhYmFzZQoKKiBGb3IgdGhpcyBsZXNzb24gd2Ugd2lsbCBiZSBtYWtpbmcgZXh0ZW5zaXZlIHVzZSBvZiB0aGUgU043NTc3IGRhdGFiYXNlLiAKKiBJZiB5b3UgZG8gbm90IGFscmVhZHkgaGF2ZSBhIGNvcHkgb2YgdGhpcyBkYXRhYmFzZSB5b3UgY2FuIGRvd25sb2FkIGl0IGZyb20gaGVyZS4KCiMjIyMgRG93bmxvYWQgZGF0YQpbaHR0cHM6Ly9kYXRhLWxlc3NvbnMuZ2l0aHViLmlvL3NxbC1zb2NpYWxzY2kvZGF0YS9TTjc1Nzcuc3FsaXRlXShodHRwczovL2RhdGEtbGVzc29ucy5naXRodWIuaW8vc3FsLXNvY2lhbHNjaS9kYXRhL1NONzU3Ny5zcWxpdGUpCgojIyMjIERhdGFiYXNlIHNuNzU3NyBpbmZvCltodHRwczovL2Rpc2NvdmVyLnVrZGF0YXNlcnZpY2UuYWMudWsvIzc1NzddKGh0dHBzOi8vZGlzY292ZXIudWtkYXRhc2VydmljZS5hYy51ay8jNzU3NykKKiBUaXRsZTogQXVkaXQgb2YgUG9saXRpY2FsIEVuZ2FnZW1lbnQgMTEsIDIwMTMgCiogUG9saXRpY2FsIGJlaGF2aW91ciBhbmQgYXR0aXR1ZGVzIC0gUG9saXRpY3MgCgoKClRvIG9wZW4gdGhlIGRhdGFiYXNlIGluIERCIEJyb3dzZXIgZG8gdGhlIGZvbGxvd2luZzsKCiogY2xpY2hrIG9uIHRoZSBgb3BlbiBkYXRhYmFzZWAgYnV0dG9uIGluIHRoZSB0b29sYmFyLgoqIE5hdmlnYXRlIHRvIHdoZXJlIHlvdSBoYXZlIHN0b3JlZCB0aGUgZGF0YWJhc2UgZmlsZSBvbiB5b3VyIGxvY2FsIG1hY2hpbmUsIHNlbGVjdCBpdCBhbmQgY2xpY2sgb3Blbi4KCiogV2hlbiB5b3Ugb3BlbiB0aGUgZGF0YWJhc2UsIHRoZSBgRGF0YWJhc2UgU3RydWN0dXJlYCB0YWIgb24gdGhlIGxlZnQgYW5kdGhlIGBEQiBTY2hlbWFgIHBhbmUgb24gdGhlIHJpZ2h0IHdpbGwgbG9vayB2ZXJ5IHNpbWlsYXIuIAoqIEhvd2V2ZXIgdGhlIGBEQiBTY2hlbWFgIHBhbmUgaXMgb25seSB0aGVyZSB0byBhbGxvdyB5b3UgdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBzY2hlbWEgZm9yIHRoZSB0YWJsZXMuIAoqIEluIHBhcnRpY3VsYXIgd2hhdCB0YWJsZXMgYXJlIGluIHRoZSBkYXRhYmFzZSBhbmQgdGhlIGZpZWxkcyBhbmQgdGhlaXIgdHlwZXMgd2hpY2ggYXJlIGluIGVhY2ggdGFibGUuCgoqIFRoZSBgRGF0YWJhc2UgU3RydWN0dXJlYCB0YWIgb24gdGhlIGxlZnQgYWxsb3dzIHlvdSB0byBpbml0aWF0ZSBhY3Rpb25zIG9uIHRoZSB0YWJsZXMuIAoqIElmIHlvdSByaWdodCBjbGljayBvbiBhIHRhYmxlIG5hbWUgaW4gdGhlIGBEQiBTY2hlbWFgIHBhbmUsIG5vdGhpbmcgaGFwcGVucy4gCiogSG93ZXZlciwgaWYgeW91IGRvIHRoZSBzYW1lIGluIHRoZSBgRGF0YWJhc2UgU3RydWN0dXJlYCBtZW51IHlvdSB3aWxsIGJlIGdpdmVuIGEgc2V0IG9mIHBvc3NpYmxlIGFjdGlvbnMuIAoqIFRoZXNlIGFyZSB0aGUgc2FtZSBhY3Rpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSB0b29sYmFyIGF0IHRoZSB0b3Agb2YgdGhlIHRhYi4KCiogSWYgeW91IHNlbGVjdCBgQnJvd3NlIFRhYmxlYCwgdGhlIGRhdGEgZnJvbSB0aGUgdGFibGUgaXMgbG9hZGVkIGludG8gdGhlIGBCcm93c2UgRGF0YWAgcGFuZSBmcm9tIHdoZXJlIGl0IGNhbiBiZSBleGFtaW5lZCBvciBmaWx0ZXJlZC4gCiogWW91IGNhbiBhbHNvIHNlbGVjdCB0aGVyIHRhYmxlIHlvdSB3aXNoIHRvIEJyb3dzZSBkaXJlY3RseSBmcm9tIGhlcmUuCgoqIFRoZXJlIGFyZSBvcHRpb25zIGZvciBgTmV3IFJlY29yZGAgYW5kIGBEZWxldGUgUmVjb3JkYC4gCiogSXQgaXMgdW5saWtlbHkgdGhhdCB5b3Ugd2lsbCB3YW50IHRvIHVzZSB0aGVzZSBvcHRpb25zLiAKKiBPdXIgaW50ZXJlc3QgaXMgaW4gYW5hbHlzaW5nIGV4aW9zdGluZyBkYXRhIG5vdCBjcmVhdGluZyBvciBkZWxldGluZyBkYXRhLgoKIyMgUnVubmluZyBTUUwgUXVlcmllcwoKKiBXZSB3aWxsIGJlIHJ1bm5pbmcgcXVlcmllcyBleHRlbnNpdmVseSBpbiBmdXR1cmUgZXBpc29kZXMuCiogRm9yIG5vdyB3ZSB3aWxsIGp1c3QgcHJvdmlkZSBhbiBvdXRsaW5lIG9mIHRoZSBlbnZpcm9ubWVudC4KCiogSW4gdGhlIGxlZnQgaGFuZCBwYW5lIGlmIHlvdSBzZWxlY3QgdGhlIGBFeGVjdXRlIFNRTGAgdGFiLCB5b3Ugd2lsbCBiZSBwcmVzZW50ZWQgd2l0aCBhIHRocmVlIHBhbmVkIHdpbmRvdyBhbmQgYSBzbWFsbCB0b29sYmFyLiAKKiBUaGUgdG9wIHBhbmUgaXMgaXRzZWxmIHRhYmJlZCB3aXRoIHRoZSBpbml0aWFsIHRhYiBsYWJlbGVkIGBTUUwgMWAuIAoqIFRoaXMgaXMgdGhlIFNRTCBlZGl0b3IgcGFuZSBpbnRvIHdoaWNoIHlvdSB3aWxsIHR5cGUgeW91ciBxdWVyaWVzLgoKT24gdGhlIHRvb2xiYXIgdGhlcmUgYXJlIGZpdmUgYnV0dG9ucy4gTGVmdCB0byByaWdodCB0aGV5IGFyZToKCiAgKiBPcGVuIFRhYiAoY3JlYXRlcyBhIG5ldyB0YWIgaW4gdGhlIGVkaXRvcikKICAqIE9wZW4gU1FMIGZpbGUgKGFsbG93cyB5b3UgdG8gbG9hZCBhIHByZXBhcmVkIGZpbGUgb2YgU1FMIGludG8gdGhlIGVkaXRvciAtIHRoZSB0YWIgICAgIHRha2VzIHRoZSBuYW1lIG9mIGhlIGZpbGUpCiAgKiBTYXZlIFNRTCBmaWxlIChhbGxvd3MgeW91IHRvIHNhdmUgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGFjdGl2ZSBwYW5lIHRvIHRoZSAgICAgIGxvY2FsIGZpbGUgc3lzdGVtKQogICogRXhlY3V0ZSBTUUwgKEV4ZWN1dGVzIGFsbCBvZiB0aGUgU1FMIHN0YXRlbWVudHMgaW4gdGhlIGVkaXRvciBwYW5lKQogICogRXhlY3V0ZSBjdXJyZW50IGxpbmUgKEFjdHVhbGx5IGV4ZWN1dGVzIHdoYXRldmVyIGlzIHNlbGVjdGVkKQogIAoqIEJlY2F1c2UgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBhbmQgZXhlY3V0ZSBtdWx0aXBsZSBTUUwgc3RhdGVtZW50cyBpbiB0aGUgc2FtZSBlZGl0b3IgcGFuZSwgZWFjaCBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCBhIGA7YC4gCiogSWYgeW91IG9ubHkgaGF2ZSBhIHNpbmdsZSBzdGF0ZW1lbnQgeW91IGRvbuKAmXQgbmVlZCBpdCwgYnV0IGl0IG1pZ2h0IGJlIGNvbnNpZGVyZWQgYmVzdCBwcmFjdGljZSB0byBhbHdheXMgaW5jbHVkZSBpdC4KCiogVGhlIHBhbmUgYmVsb3cgdGhlIGVkaXRvciBpcyB0aGUgUmVzdWx0cyBwYW5lLiAKKiBUaGUgcmVzdWx0cyBvZiBydW5uaW5nIHlvdXIgcXVlcnkgd2lsbCBhcHBlYXIgaGVyZSBpbiBhIHNpbXBsZSB0YWJ1bGFyIGZvcm1hdC4gCiogVGhlIGJvdHRvbSBwYW5lIGlzIGZvciBtZXNzYWdlcyBhYm91dCB0aGUgZXhlY3V0aW9uLCBlaXRoZXIgYW4gZXJyb3IgbWVzc2FnZSBvciBhbiBpbmRpY2F0aW9uIG9mIGhvdyBtYW55IHJvd3Mgd2VyZSByZXR1cm5lZCBieSB0aGUgcXVlcnkuCgoqIEJlbG93IGlzIGEgc2ltcGxlIGV4YW1vcGxlIHF1ZXJ5IGFuZCB0aGUgcmVzdWx0cy4KCiFbaW1hZ2VdKGltYWdlcy9EQl9Ccm93c2VyX3J1bl80LnBuZykKCiogTm90aWNlIHRoYXQgdGhlIHF1ZXJ5aGFzIGJlZW4gd3JpdHRlbiBvdmVyIG11bHRpcGxlIGxpbmVzLiAKKiBUaGlzIGlzIGNvbW1vbmx5IGRvbmUgdG8gYWlkIHJlYWRhYmlsaXR5LiAKKiBUaGUgc2Vjb25kIHBhbmUgaGFzIHRoZSB0YWJ1bGFyIHJlc3VsdHMsIGFuZCB0aGUgYm90dG9tIHBhbmUgaGFzIGEgbWVzc2FnZSBpbmRpY2F0aW5nIGhvdyBtYW55IHJvd3Mgd2VyZSByZXR1cm5lZCwgaG93IGxvbmcgaXQgdG9vayBhbmQgYSBjb3B5IG9mIHRoZSBTUUwgc3RhdGVtZW50IHRoYXQgd2FzIGV4ZWN1dGVkLgoKKiBUbyB0aGUgcmlnaHQgb2YgdGhlIGJvdHRvbSBwYW5lIGlzIGEgc2luZ2xlIGJ1dHRvbiB3aGljaCB3aWxsIHByb3ZpZGV5b3Ugd2l0aCBvcHRpb25zIGFib3V0IHdoYXQgeW91IGNhbiBkbyB3aXRoIHRoZSBvdXRwdXQuIAoqIFRoaXMgaW5jbHVkZXMgc2F2aW5nIGl0IHRvIGEgYGNzdmAgZmlsZS4KCiMjIyBDcmVhdGluZyBhIGRhdGFiYXNlCgoqIEFzIHdlbGwgYXMgb3BlbmluZyAoY29ubmVjdGluZykgdG8gZXhpc3RpbmcgZGF0YWJhc2VzIGl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIG5ldyBTUUxpdGUgZGF0YWJhc2VzIGFuZCB0YWJsZXMgdXNpbmcgREIgQnJvd3Nlci4gCgoqIFRvIGNyZWF0ZSBhIGRhdGFiYXNlIGNsaWNrIHRoZSBgTmV3IERhdGFiYXNlYCBidXR0b24gZnJvbSB0aGUgbWFpbiB0b29sYmFyIChhbHNvIGF2YWlsYWJsZSBmcm9tIHRoZSBGaWxlIG1lbnUpLiAKKiBZb3Ugd2lsbCBpbml0aWFsbHkgYmUgYXNrZWQgZm9yIGEgbmFtZSBmb3IgdGhlIGRhdGFiYXNlIGFuZCB3aGVyZSB5b3Ugd2FudCB0byBzYXZlIGl0LiBJdCBpcyBzYXZlZCBhcyBhIHNpbmdsZSBmaWxlLgoqIFlvdSBjYW4gY2hvb3NlIHlvdXIgb3duIGV4dGVuc2lvbiBidXQgYHNxbGl0ZWAgaXMgcmVjb21tZW5kZWQuIAoqIElmIHlvdSBkbyBub3QgcHJvdmlkZSBhIGRlZmF1bHQsIHRoZW4gYSBgLmRiYCBleHRlbnNpb24gd2lsbCBiZSB1c2VkLiAKKiBBbHRob3VnaCB0aGUgbmV3IGRhdGFiYXNlIGlzIGVtcHR5LCBpbiB0aGF0IHRoZXJlIGFyZSBubyB0YWJsZXMgaW4gaXQsIHRoZSAuc3FsaXRlIGZpbGUgaXRzZWxmIGlzIG5vdCBlbXB0eS4KCiogT25jZSB5b3UgaGF2ZSBzYXZlZCB0aGUgZGF0YWJhZSBmaWxlIHRoZSBgQ3JlYXRlIFRhYmxlIHdpemFyZGAgd2lsbCBvcGVuIGFsbG93aW5nIHlvdSB0byBjcmVhdGUgYSB0YWJsZS4KKiBZb3UgY2FuIGNhbmNlbCB0aGlzIGFzIHdlIHdpbGwgYmUgZ29pbmcgdGhyb3VnaCB0aGUgY3JlYXRlIHRhYmxlIHByb2Nlc3MgaW4gYSBsYXRlciBlcGlzb2RlLgoKCiMjIyBXcml0ZSBDaGFuZ2VzICYgUmV2ZXJ0IENoYW5nZXMKCiogRHVyaW5nIHlvdXIgREIgQnJvd3NlciBzZXNzaW9uLCBpZiB5b3UgY3JlYXRlIG9yIGRlbGV0ZSBhbnkgdGFibGVzIHRoZSBjaGFuZ2VzIGFyZSBub3QgYXV0b21hdGljYWxseSB3cml0dGVuIHRvIHRoZSBkYXRhYmFzZSBmaWxlLgoqIFdoZW4geW91IHRyeSB0byBlbmQgdGhlIHNlc3Npb24gKGkuZS4gY2xvc2UgdGhlIGFwcGxpY2F0aW9uKSB5b3Ugd2lsbCBiZSBhc2tlZCBpZiB5b3Ugd2FudCB0byBzYXZlIHRoZSBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUuIAoqIEFsdGVybmF0aXZlbHkgeW91IGNhbiBleHBsaWNpdGx5IHNhdmUgY2hhbmdlcyBvciByZXZlcnQgY2hhbmdlcyBkdXJpbmcgYSBzZXNzaW9uIGJ5IHVzZSBvZiB0aGUgV3JpdGUgQ2hhbmdlcyBhbmQgUmV2ZXJ0IENoYW5nZXMgYnV0dG9ucyBvbiB0aGUgdG9vbGJhci4gCiogT25jZSB3cml0dGVuIHRoZSBjaGFuZ2VzIGFyZSBwZXJtYW5lbnQgKHRoZXJlIGlzIG5vIGNvbmNlcHQgb2YgbXVsdGlwbGUgYHVuZG9gIGxpa2UgeW91IG1pZ2h0IGhhdmUgaW4gb3RoZXIgcHJvZ3JhbXMpLiAKKiBSZXZlcnQgQ2hhbmdlcyB3aWxsIHRha2UgeW91IGJhY2sgdG8gdGhlIGxhc3QgV3JpdHRlbiBjb3B5LgoKIyMjIEtleSBQb2ludHMKKiBUaGUgREIgQnJvd3NlciBmb3IgU1FMaXRlIGFwcGxpY2F0aW9uIGFsbG93cyB5b3UgdG8gY29ubmVjdCB0byBhbiBleGlzdGluZyBkYXRhYmFzZSBvciBjcmVhdGUgYSBuZXcgZGF0YWJhc2UKCiogV2hlbiBjb25uZWN0ZWQgdG8gYSBkYXRhYmFzZSB5b3UgY2FuIGNyZWF0ZSBuZXcgdGFibGVzCgoqIFdoZW4gY29ubmVjdGVkIHRvIGEgZGF0YWJhc2UgeW91IGNhbiB3cml0ZSBhbmQgcnVuIFNRTCBxdWVyaWVzIGFuZCB2aWV3IHRoZSByZXN1bHRzCgoqIFlvdSBjYW4gc2F2ZSB0aGUgcmV1bHRzIG9mIGEgcXVlcnkgdG8gYSBmaWxlCgo=