[
  {
    "path": ".github/workflows/semgrep.yml",
    "content": "on:\n  pull_request: {}\n  workflow_dispatch: {}\n  push: \n    branches:\n      - main\n      - master\n  schedule:\n    - cron: '0 0 * * *'\nname: Semgrep config\njobs:\n  semgrep:\n    name: semgrep/ci\n    runs-on: ubuntu-latest\n    env:\n      SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}\n      SEMGREP_URL: https://cloudflare.semgrep.dev\n      SEMGREP_APP_URL: https://cloudflare.semgrep.dev\n      SEMGREP_VERSION_CHECK_URL: https://cloudflare.semgrep.dev/api/check-version\n    container:\n      image: semgrep/semgrep\n    steps:\n      - uses: actions/checkout@v4\n      - run: semgrep ci\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\nbuilds/\ndebian/\n"
  },
  {
    "path": "Godeps/Godeps.json",
    "content": "{\n\t\"ImportPath\": \"github.com/eagerio/stout\",\n\t\"GoVersion\": \"go1.6\",\n\t\"GodepVersion\": \"v63\",\n\t\"Packages\": [\n\t\t\"./...\"\n\t],\n\t\"Deps\": [\n\t\t{\n\t\t\t\"ImportPath\": \"github.com/cenk/backoff\",\n\t\t\t\"Comment\": \"v1.0.0-7-gcdf48bb\",\n\t\t\t\"Rev\": \"cdf48bbc1eb78d1349cbda326a4a037f7ba565c6\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"github.com/imdario/mergo\",\n\t\t\t\"Comment\": \"0.2.2-6-g50d4dbd\",\n\t\t\t\"Rev\": \"50d4dbd4eb0e84778abe37cefef140271d96fade\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"github.com/mitchellh/go-homedir\",\n\t\t\t\"Rev\": \"1111e456ffea841564ac0fa5f69c26ef44dafec9\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"github.com/wsxiaoys/terminal/color\",\n\t\t\t\"Rev\": \"0940f3fc43a0ed42d04916b1c04578462c650b09\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"github.com/zackbloom/go-ini\",\n\t\t\t\"Rev\": \"3db81f263990ac57212cfdc3ce9a65e8af8af966\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"github.com/zackbloom/goamz/aws\",\n\t\t\t\"Rev\": \"0f589c21f1937992b2952e1f4ce0d31f132b685d\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"github.com/zackbloom/goamz/cloudfront\",\n\t\t\t\"Rev\": \"0f589c21f1937992b2952e1f4ce0d31f132b685d\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"github.com/zackbloom/goamz/iam\",\n\t\t\t\"Rev\": \"0f589c21f1937992b2952e1f4ce0d31f132b685d\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"github.com/zackbloom/goamz/route53\",\n\t\t\t\"Rev\": \"0f589c21f1937992b2952e1f4ce0d31f132b685d\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"github.com/zackbloom/goamz/s3\",\n\t\t\t\"Rev\": \"0f589c21f1937992b2952e1f4ce0d31f132b685d\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"golang.org/x/crypto/ssh/terminal\",\n\t\t\t\"Rev\": \"5bcd134fee4dd1475da17714aac19c0aa0142e2f\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"golang.org/x/net/html\",\n\t\t\t\"Rev\": \"8a52c78636f6b7be1b1e5cb58b01a85f1e082659\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"golang.org/x/net/html/atom\",\n\t\t\t\"Rev\": \"8a52c78636f6b7be1b1e5cb58b01a85f1e082659\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"golang.org/x/net/publicsuffix\",\n\t\t\t\"Rev\": \"8a52c78636f6b7be1b1e5cb58b01a85f1e082659\"\n\t\t},\n\t\t{\n\t\t\t\"ImportPath\": \"gopkg.in/yaml.v1\",\n\t\t\t\"Rev\": \"9f9df34309c04878acc86042b16630b0f696e1de\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "Godeps/Readme",
    "content": "This directory tree is generated automatically by godep.\n\nPlease do not edit.\n\nSee https://github.com/tools/godep for more information.\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2014 Eager Platform Co.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Stout\n\n#### [View the site →](http://stout.is/)\n\nStout is a deploy tool for static websites.  It takes a website and uploads it to S3 in a more reliable way than other tools.  It can be an alternative\nto paid services like Divshot, to dynamic web servers like Rails, or to manually uploading your site to S3 or an FTP server.\n\n## Why You Need Stout\n\nTraditionally uploading your files to S3 introduces a serious caching issue we ran into in practice at [Eager](https://eager.io).\nThe cache for the various files your site depends on can expire at different times, meaning your users get an inconsistent (broken) set of files for a\ntime after every single deploy. Further, traditional static site deployments don't offer any method of rolling back a previous deploy.\n\nWe built Stout to fix these issues.\n\n### Features\n\n- Versions script and style files to ensure your pages don't use an inconsistent set of files during or after a deploy\n- Supports rollback to any previous version\n- Does not depend on any specific build tool or workflow (it is a standalone executable written in Go)\n- Does not require a datastore of any kind to maintain state or history\n- Can be used by multiple developers simultaneously without locking or a danger of inconsistent state\n- Properly handles caching headers\n- Supports deploying multiple projects to various subdirectories of the same site without conflicts\n- Compresses files for faster delivery\n\n### Limitations\n\n- Stout doesn't currently support rolling back files that aren't HTML, JS or CSS (images, videos, etc.).  See the Versioning section for more information.\n- All-or-nothing consistency is only guarenteed on a per-html-file basis, not for the entire deploy.  See the Consistency section for more information.\n\n## Getting Started\n\n[Download](https://github.com/EagerIO/Stout/releases) the `stout` executable for your system from our latest release into a directory on your `$PATH`, like `/usr/local/bin`.\n\nYou can use the `create` command to create a new site.  It automatically creates an S3 bucket, a CloudFront distribution, and a user account for deployment.  It therefore requires\ncredentials for an Amazon AWS account which has permissions to those services along with Route 53.\n\n```sh\nstout create --bucket my.website.com --key MY_AWS_KEY --secret MY_AWS_SECRET\n```\n\nYou can then deploy your project:\n\n```sh\nstout deploy --bucket my.website.com --key MY_AWS_KEY --secret MY_AWS_SECRET\n```\n\nIf your built files are in another directory, add the `--root` option:\n\n```sh\nstout deploy --bucket my.website.com --key MY_AWS_KEY --secret MY_AWS_SECRET --root ./build\n```\n\nIf your bucket located not in the default region, which is us-east-1, add the `--region` option:\n\n```sh\nstout deploy --bucket my.website.com --key MY_AWS_KEY --secret MY_AWS_SECRET --region us-west-1\n```\n\nIf you don't want to deploy all the files in your folder, use the files argument.\n\n```sh\nstout deploy --bucket my.website.com --key MY_AWS_KEY --secret MY_AWS_SECRET --root ./build --files \"*.html,images/*\"\n```\n\nJavascript and CSS included in your HTML files will always be included automatically.\n\nThe deploy command will give you a deploy id you can use in the future to rollback if you have to:\n\n```sh\nstout rollback --bucket my.website.com --key MY_AWS_KEY --secret MY_AWS_SECRET a3b8ff290c33\n```\n\nEventually you'll probably want to move your config to a deploy.yaml file, rather than specifying it in the command every time.\n\nUsing the info below you can learn about what the deploy/rollback tools actually do, deploying to subfolders, deploying from your build tool, and rolling back.\n\n## Backstory\n\nWe wrote Stout because we couldn't find an open-source way to reliably and efficiently deploy our static sites (including our app and blog).  We used a traditional upload-to-s3 tool, but caching meant a user could get the new html and styles, but the old scripts, for example, causing sporatic and random errors.  It also didn't support reliably rolling back when necessary.  We built Stout to be the reliable, production-ready choice for static deploys.\n\n## Function\n\nStout is an executable file built from Go code.  The `deploy` command deploys one or more html files and their dependencies to a specified location in S3.  The `rollback` command takes a deploy id and rolls the project back to that version.\n\n### Deploy\n\nThe deploy process works by parsing the script and style tags out of one or more html files.  It then hashes those files, uploads them prefixed with their hashes, and updates the location of the original script and link tags with the hashed locations.\n\nIt generates a deploy id by hashing all of the files in the deploy, and uploads the html files to a location prefixed by the deploy id.\n\nWhen the uploads are successful, the prefixed html files are atomically copied to their unprefixed paths, completing the deploy.\n\n### Rollback\n\nA rollback simply copies the html files prefixed with the specified deploy id to the unprefixed paths.\n\n### Deploy Configuration\n\nYou can configure the deploy tool with any combination of command line flags or arguments provided in a configuration yaml file.\n\nThe options are:\n\n##### `bucket`\n  The S3 bucket to deploy to.  In most configurations this bucket should be the origin for the CDN which actually serves your site.  It usually makes sense to make this the url you are going to host your site from (i.e. `\"example.com\"`)\n  \t\n##### `config` (\"./deploy.yaml\")\n  The location of a yaml file to read any otherwise unspecified configuration from.\n   \n##### `dest` (\"./\")\n  The destination directory to write files to in the S3 bucket.   For example if you wanted your this project to end up hosted at `yoursite.com/blog`, you would specify `--dest blog`.\n  \t\n##### `root` (\"./\")\n The local directory where the files to be uploaded lives.  It's common to make this your \"./build\" directory or the like.\n \n##### `files` (\"*\")\n  Comma-seperated glob patterns of the files to be deployed (within the `--root`).  HTML files will be parsed, and the CSS/JS they point to will be included (versioned) automatically.  If you also include those files in your glob pattern they will be uploaded twice, once with a versioning hash in the URL, again without.\n  \n  Be sure to include any additional files you would like deployed like images, videos, font files, etc.\n\n  You can use relative paths which break out of the `root`.  If you prefix the path with `-/`, it will be interpreted as relative to the project directory, not the `root`.\n  \t\n##### `env`\n  The config file can contain configurations for multiple environments (production, staging, etc.).  This specifies which is used.  See the \"YAML Config\" section for more information.\n\n##### `key`\n  The AWS key to use.  The create command will create an IAM user for each project with access only to the relevant bucket.  See the Permissions section for more information.\n  \n##### `secret`\n  The AWS secret of the provided key.\n\n##### `region` (\"us-east-1\")\n  The AWS region the S3 bucket is located in. \n  \n  If you are getting a `The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.` error, specify your bucket `--region`.\n   \n### YAML Config\n\nYou can provide a yaml file which specifies configuration defaults for the project being deployed.  We include this file in each project which will be deployed.  This file can have multiple configurations for different environments, along with a default section.\n\nFor example, the `deploy.yaml` for one of our projects looks like:\n\n```yaml\ndefault:\n  root: 'build/'\n\nproduction:\n  key: 'XXX'\n  secret: 'XXX'\n  bucket: 'eager.io'\n\ndevelopment:\n  key: 'XXX'\n  secret: 'XXX'\n  bucket: 'next.eager.io'\n```\n\nReplacing the \"XXX\"s with our actual credentials.\n\nTo deploy to development we run (from the directory with the deploy.yaml file in it):\n\n```bash\ndeploy --env development\n```\n\nA rollback of development would be:\n\n```bash\nrollback --env development $DEPLOY_ID\n```\n\nWhere the deploy id is taken from the output of the deploy you wish to rollback to.\n \nOur public projects use a similar config, but they specify the Amazon credentials as environment vars from the build system, passed in as flags:\n \n ```bash\ndeploy --env development --key $AMAZON_KEY_DEV --secret $AMAZON_SECRET_DEV\n```\n\nNever commit Amazon credentials to a file in a public repo.  Keep them on your local machine, or in your build system's configuration.\n\n### Clean URLS\n\nIt's not specific to Stout, but it's worth mentioning that we recommend you structure your built folder to use a folder with an index.html file for each page.\n\nFor example, if you want a root and a page at `/blog`, you would have:\n\n```\nindex.html\nblog/\n  index.html\n```\n\nThat way, assuming S3 and CloudFront are configured properly, you'll be able to use the clean URLs `/` and `/blog/`.\n\n### SSL\n\nCloudfront has the ability to serve your site using SSL.  The general procedure for setting it up is:\n\n1. Get an SSL certificate for your domain\n2. Upload it to Amazon\n3. Select that certificate in the configuration for the CloudFront distribution Stout creates for you\n\nYou will absolutely need more detailed instructions, which you can find [here](https://bryce.fisher-fleig.org/blog/setting-up-ssl-on-aws-cloudfront-and-s3/).\n\nSelecting a certificate for you is one of the few things the `create` command does not do, as it's not always possible to decide which certificate is appropriate.  If you need SSL support, you will have to remember to select the cert in the Amazon Console or CLI after running the `create` command.\n\n### Permissions\n\nThe AWS user which is used for Stout should have the `GetObject`, `PutObject`, `DeleteObject`, and `ListBucket` permissions.  The `create` command will set this up for you if you use it.\n\nThis is an example policy config which works:\n\n```json\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:DeleteObject\",\n        \"s3:ListBucket\",\n        \"s3:PutObject\",\n        \"s3:PutObjectAcl\",\n        \"s3:GetObject\"\n      ],\n      \"Resource\": [\n        \"arn:aws:s3:::BUCKET\", \"arn:aws:s3:::BUCKET/*\"\n      ]\n    }\n  ]\n}\n```\n\nBe sure to replace `BUCKET` with your bucket's actual name.\n\n### Deploying with CircleCI\n \n Deploying with CircleCI is simply a matter of installing the deploy tool and running it as you would locally.  Here's an excerpt of a working circle.yml:\n \n ```yaml\ndependencies:\n  post:\n    - go get github.com/tools/godep\n    - git clone git@github.com:EagerIO/Stout.git\n    - cd Stout; godep go build -o ../stout src/*.go\n    \ndeployment:\n  development:\n    branch: dev\n    commands:\n      - ./stout deploy --env development --key $AMAZON_KEY_DEV --secret $AMAZON_SECRET_DEV\n\n  production:\n    branch: master\n    commands:\n      - ./stout deploy --env production --key $AMAZON_KEY_PROD --secret $AMAZON_SECRET_PROD\n ```\n \nIf you use environment vars for your credentials, make sure to add them to your Circle config.\n \nIf your repo is private, you can specify your Amazon key and secret in your deploy.yaml file, removing the need to specify them in the commands.\n \n### Caching\n\nAll versioned files (include a hash of their contents in the path) are configured to cache for one year.  All unversioned files are configured to cache for 60 seconds.  This means it will take up to 60 seconds for users to see changes made to your site.\n\n### Versioning\n\nOnly JS and CSS files which are pointed to in HTML files are hashed, as we need to be able to update the HTML to point to our new, versioned, files.\n\nAny other file included in your `--files` argument will be uploaded, but not versioned, meaning a rollback will not effect these files.  This is something we'd like to improve. \n \n### Consistency\n\nAs the final step of the deploy is atomic, multiple actors can trigger deploys simultaneously without any danger of inconsistent state.  Whichever process triggers the final 'copy' step for a given file will win, with it's specified dependencies guarenteed to be used in their entirity.  Note that this consistency is only guarenteed on a per-html-file level, you may end up with some html files from one deployer, and others from another, but all files will point to their correct dependencies.\n\n### Deploying Multiple Projects To One Site\n\nYou can deploy multiple projects to the same domain simply by specifying the appropriate `dest` for each one.  For example your homepage might have the dest `./`, and your blog `./blog`.  Your homepage will be hosted at `your-site.com`, your blog `your-site.com/blog`.\n\n### Using Client-side Routers\n\nIt is possible to use a client-side router (where you have multiple request URLs point to the same HTML file) by configuring your CloudFront distribution to serve your index.html file in response to 403s and 404s.\n\n![CF](https://raw.githubusercontent.com/EagerIO/Stout/master/docs/images/cf-screenshot.png)\n\n### Installing\n\n- Download the release for your system type from our [releases](https://github.com/EagerIO/Stout/releases)\n- Copy or symlink the `stout` binary contained in the archive into your path (for example, into `/usr/local/bin`)\n\n### Building\n\n- Install go and godep\n- Run `godep restore ./...`\n- Run `go build -o ../stout src/*`\n\n#### For a Release (Cross Compiling)\n\n- Run `go get github.com/laher/goxc`\n- Run `go get code.google.com/p/go.tools/cmd/vet`\n- Run `./utils/xc.sh`\n\nThe first run will take significantly longer than future runs.  The built files will be placed in the `./builds` directory.\n\n### Running\n\nTo run the commands for development purposes, run: `go run src/*`, followed by any command line args you would normally give to the command.\n\n### Contributing\n\nPlease do, we would love for this to become a project of the community.  Feel free to open an issue, submit a PR or contribute to the wiki.\n"
  },
  {
    "path": "docs/getting-started.md",
    "content": "### Setting Up Your Site\n\nIf you don't already have an S3-hosted site, start here.\n\nWe're going to create a basic site config which uses CloudFront's CDN to deliver high performance at a minimal cost.  Once you run the setup, you'll end up with a configuration which looks like this:\n\n```\nThe Deploy Tool -> S3 <- CloudFront's Global CDN <- DNS <- Your Users\n```\n\nThe simplest way to get started is to run the `create_site.sh` script in the utils folder.  After installing the [aws command line tools](http://aws.amazon.com/cli/), run:\n\n```bash\n./utils/create_site.sh subdomain.my-site.com\n```\n\nFeel free to leave out the subdomain if you'd like to host it at the root of your domain.\n\nThis will:\n\n- Create an S3 bucket for this site with the correct security policy and website hosting\n- Create a CloudFront distribution pointed at that bucket\n- Create a user with the appropriate permissions to upload to that bucket\n- Create an access key for that user\n\nOnce that's done, copy the access key, secret key (from the JSON blob the access key request spits out) and bucket (the bucket's name is just the url you provided) it printed to your `deploy.yaml`, or save them to use with the `stout deploy` as arguments.\n\nThe final step is to point your DNS records to the new CloudFront distribution.  If you use Route 53 you want to create an alias to the distribution (it will be named the same as the new domain).  If you use another DNS service, you'll want to create a CNAME to the CloudFront distribution's hostname.\n\nPlease note that it will take up to twenty minutes for the CloudFront distribution to initialize.  Additionally it may take some time for your DNS records to update.\n\nIf you'd like development or staging environments, just run the command again with the URL you'd like them to have, and add the new credentials as before.  See the \"YAML Config\" section of the README for an example of how to configure multiple environments.\n\nBe very careful to never commit a file to a public repo that contains your AWS credentials.  If you are deploying a public repo, either keep the credentials on your local machine you deploy from, or in the build service (like CircleCI) you're using.\n\n#### Step-by-step Instructions\n\n1. Install Amazon's AWS Command-Line Tools (and create an AWS account if you don't have one)\n1. Run the `create_site.sh` tool with the URL of the site you'd like to deploy\n1. Take note of the AWS key and secret in the final JSON blob outputted by the script\n1. Download the executable from this project\n1. Run `stout deploy --bucket subdomain.your-site.com --key YOUR_NEW_AWS_KEY --secret YOUR_NEW_AWS_SECRET` to deploy\n1. Add the `--root` argument if your built files are in a subdirectory.\n1. Visit the cloudfront url of your new distribution to see how your site currently looks, include any new files you may have missed and deploy again\n1. Optionally, Move any configuration options you don't mind being committed to your repository to a deploy.yaml file\n1. Optionally, Run `create_site.sh` again to create staging or development sites, and add their configuration to your deploy.yaml as well\n1. Optionally, Deploy more projects to this same site by running deploy with the `--dest` argument\n1. Optionally, Add the deploy step to your build tool\n"
  },
  {
    "path": "src/admin.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\n\t\"github.com/zackbloom/goamz/cloudfront\"\n\t\"github.com/zackbloom/goamz/iam\"\n\t\"github.com/zackbloom/goamz/route53\"\n\t\"github.com/zackbloom/goamz/s3\"\n\t\"golang.org/x/crypto/ssh/terminal\"\n\t\"golang.org/x/net/publicsuffix\"\n)\n\nfunc CreateBucket(options Options) error {\n\tbucket := s3Session.Bucket(options.Bucket)\n\n\terr := bucket.PutBucket(\"public-read\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = bucket.PutBucketWebsite(s3.WebsiteConfiguration{\n\t\tIndexDocument: &s3.IndexDocument{\"index.html\"},\n\t\tErrorDocument: &s3.ErrorDocument{\"error.html\"},\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = bucket.PutPolicy([]byte(`{\n\t\t\t\"Version\": \"2008-10-17\",\n\t\t\t\"Statement\": [\n\t\t\t\t{\n\t\t\t\t\t\"Sid\": \"PublicReadForGetBucketObjects\",\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Principal\": {\n\t\t\t\t\t\t\"AWS\": \"*\"\n\t\t\t\t\t},\n\t\t\t\t\t\"Action\": \"s3:GetObject\",\n\t\t\t\t\t\"Resource\": \"arn:aws:s3:::` + options.Bucket + `/*\"\n\t\t\t\t}\n\t\t\t]\n\t\t}`,\n\t))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc GetDistribution(options Options) (dist cloudfront.DistributionSummary, err error) {\n\tdistP, err := cfSession.FindDistributionByAlias(options.Bucket)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif distP != nil {\n\t\tfmt.Println(\"CloudFront distribution found with the provided bucket name, assuming config matches.\")\n\t\tfmt.Println(\"If you run into issues, delete the distribution and rerun this command.\")\n\n\t\tdist = *distP\n\t\treturn\n\t}\n\n\tconf := cloudfront.DistributionConfig{\n\t\tOrigins: cloudfront.Origins{\n\t\t\tcloudfront.Origin{\n\t\t\t\tId:         \"S3-\" + options.Bucket,\n\t\t\t\tDomainName: options.Bucket + \".s3-website-\" + options.AWSRegion + \".amazonaws.com\",\n\t\t\t\tCustomOriginConfig: &cloudfront.CustomOriginConfig{\n\t\t\t\t\tHTTPPort:             80,\n\t\t\t\t\tHTTPSPort:            443,\n\t\t\t\t\tOriginProtocolPolicy: \"http-only\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tDefaultRootObject: \"index.html\",\n\t\tPriceClass:        \"PriceClass_All\",\n\t\tEnabled:           true,\n\t\tDefaultCacheBehavior: cloudfront.CacheBehavior{\n\t\t\tTargetOriginId:       \"S3-\" + options.Bucket,\n\t\t\tViewerProtocolPolicy: \"allow-all\",\n\t\t\tAllowedMethods: cloudfront.AllowedMethods{\n\t\t\t\tAllowed: []string{\"GET\", \"HEAD\"},\n\t\t\t\tCached:  []string{\"GET\", \"HEAD\"},\n\t\t\t},\n\t\t},\n\t\tViewerCertificate: &cloudfront.ViewerCertificate{\n\t\t\tCloudFrontDefaultCertificate: true,\n\t\t\tMinimumProtocolVersion:       \"TLSv1\",\n\t\t\tSSLSupportMethod:             \"sni-only\",\n\t\t},\n\t\tCustomErrorResponses: cloudfront.CustomErrorResponses{\n\t\t\t// This adds support for single-page apps\n\t\t\tcloudfront.CustomErrorResponse{\n\t\t\t\tErrorCode:          403,\n\t\t\t\tResponsePagePath:   \"/index.html\",\n\t\t\t\tResponseCode:       200,\n\t\t\t\tErrorCachingMinTTL: 60,\n\t\t\t},\n\t\t\tcloudfront.CustomErrorResponse{\n\t\t\t\tErrorCode:          404,\n\t\t\t\tResponsePagePath:   \"/index.html\",\n\t\t\t\tResponseCode:       200,\n\t\t\t\tErrorCachingMinTTL: 60,\n\t\t\t},\n\t\t},\n\t\tAliases: cloudfront.Aliases{\n\t\t\toptions.Bucket,\n\t\t},\n\t}\n\n\treturn cfSession.Create(conf)\n}\n\nfunc CreateUser(options Options) (key iam.AccessKey, err error) {\n\tname := options.Bucket + \"_deploy\"\n\n\t_, err = iamSession.CreateUser(name, \"/\")\n\tif err != nil {\n\t\tiamErr, ok := err.(*iam.Error)\n\t\tif ok && iamErr.Code == \"EntityAlreadyExists\" {\n\t\t\terr = nil\n\t\t} else {\n\t\t\treturn\n\t\t}\n\t}\n\n\t_, err = iamSession.PutUserPolicy(name, name, `{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": [\n\t\t\t\t{\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Action\": [\n\t\t\t\t\t\t\"s3:DeleteObject\",\n\t\t\t\t\t\t\"s3:ListBucket\",\n\t\t\t\t\t\t\"s3:PutObject\",\n\t\t\t\t\t\t\"s3:PutObjectAcl\",\n\t\t\t\t\t\t\"s3:GetObject\"\n\t\t\t\t\t],\n\t\t\t\t\t\"Resource\": [\n\t\t\t\t\t\t\"arn:aws:s3:::`+options.Bucket+`\", \"arn:aws:s3:::`+options.Bucket+`/*\"\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}`,\n\t)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tkeyResp, err := iamSession.CreateAccessKey(name)\n\tif err != nil {\n\t\treturn\n\t}\n\n\treturn keyResp.AccessKey, nil\n}\n\nfunc UpdateRoute(options Options, dist cloudfront.DistributionSummary) error {\n\tzoneName, err := publicsuffix.EffectiveTLDPlusOne(options.Bucket)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tzoneName = zoneName + \".\"\n\n\tresp, err := r53Session.ListHostedZonesByName(zoneName, \"\", 100)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif resp.IsTruncated {\n\t\tpanic(\"More than 100 zones in the account\")\n\t}\n\n\tvar zone *route53.HostedZone\n\tfor _, z := range resp.HostedZones {\n\t\tif z.Name == zoneName {\n\t\t\tzone = &z\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif zone == nil {\n\t\tfmt.Printf(\"A Route 53 hosted zone was not found for %s\\n\", zoneName)\n\t\tif zoneName != options.Bucket {\n\t\t\tfmt.Println(\"If you would like to use Route 53 to manage your DNS, create a zone for this domain, and update your registrar's configuration to point to the DNS servers Amazon provides and rerun this command.  Note that you must copy any existing DNS configuration you have to Route 53 if you do not wish existing services hosted on this domain to stop working.\")\n\t\t\tfmt.Printf(\"If you would like to continue to use your existing DNS, create a CNAME record pointing %s to %s and the site setup will be finished.\\n\", options.Bucket, dist.DomainName)\n\t\t} else {\n\t\t\tfmt.Println(\"Since you are hosting the root of your domain, using an alternative DNS host is unfortunately not possible.\")\n\t\t\tfmt.Println(\"If you wish to host your site at the root of your domain, you must switch your sites DNS to Amazon's Route 53 and retry this command.\")\n\t\t}\n\n\t\treturn nil\n\t}\n\n\tfmt.Printf(\"Adding %s to %s Route 53 zone\\n\", options.Bucket, zone.Name)\n\tparts := strings.Split(zone.Id, \"/\")\n\tidValue := parts[2]\n\n\t_, err = r53Session.ChangeResourceRecordSet(&route53.ChangeResourceRecordSetsRequest{\n\t\tChanges: []route53.Change{\n\t\t\troute53.Change{\n\t\t\t\tAction: \"CREATE\",\n\t\t\t\tName:   options.Bucket,\n\t\t\t\tType:   \"A\",\n\t\t\t\tAliasTarget: route53.AliasTarget{\n\t\t\t\t\tHostedZoneId:         \"Z2FDTNDATAQYW2\",\n\t\t\t\t\tDNSName:              dist.DomainName,\n\t\t\t\t\tEvaluateTargetHealth: false,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}, idValue)\n\n\tif err != nil {\n\t\tif strings.Contains(err.Error(), \"it already exists\") {\n\t\t\tfmt.Println(\"Existing route found, assuming it is correct\")\n\t\t\tfmt.Printf(\"If you run into trouble, you may need to delete the %s route in Route53 and try again\\n\", options.Bucket)\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc Create(options Options) {\n\tif s3Session == nil {\n\t\ts3Session = openS3(options.AWSKey, options.AWSSecret, options.AWSRegion, options.S3Host)\n\t}\n\tif iamSession == nil {\n\t\tiamSession = openIAM(options.AWSKey, options.AWSSecret, options.AWSRegion)\n\t}\n\tif r53Session == nil {\n\t\tr53Session = openRoute53(options.AWSKey, options.AWSSecret)\n\t}\n\tif cfSession == nil {\n\t\tcfSession = openCloudFront(options.AWSKey, options.AWSSecret)\n\t}\n\n\t_, err := exec.LookPath(\"aws\")\n\tif err != nil {\n\t\tfmt.Println(\"The aws CLI executable was not found in the PATH\")\n\t\tfmt.Println(\"Install it from http://aws.amazon.com/cli/ and try again\")\n\t}\n\n\tfmt.Println(\"Creating Bucket\")\n\terr = CreateBucket(options)\n\n\tif err != nil {\n\t\tfmt.Println(\"Error creating S3 bucket\")\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\n\tfmt.Println(\"Loading/Creating CloudFront Distribution\")\n\tdist, err := GetDistribution(options)\n\n\tif err != nil {\n\t\tfmt.Println(\"Error loading/creating CloudFront distribution\")\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\n\tfmt.Println(\"Adding Route\")\n\terr = UpdateRoute(options, dist)\n\n\tif err != nil {\n\t\tfmt.Println(\"Error adding route to Route53 DNS config\")\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\n\tif !options.NoUser {\n\t\tkey, err := CreateUser(options)\n\n\t\tif err != nil {\n\t\t\tfmt.Println(\"Error creating user\")\n\t\t\tfmt.Println(err)\n\t\t\treturn\n\t\t}\n\n\t\tfmt.Println(\"An access key has been created with just the permissions required to deploy / rollback this site\")\n\t\tfmt.Println(\"It is strongly recommended you use this limited account to deploy this project in the future\\n\")\n\t\tfmt.Printf(\"ACCESS_KEY_ID=%s\\n\", key.Id)\n\t\tfmt.Printf(\"ACCESS_KEY_SECRET=%s\\n\\n\", key.Secret)\n\n\t\tif terminal.IsTerminal(int(os.Stdin.Fd())) {\n\t\t\tfmt.Println(`You can either add these credentials to the deploy.yaml file,\nor specify them as arguments to the stout deploy / stout rollback commands.\nYou MUST NOT add them to the deploy.yaml file if this project is public\n(i.e. a public GitHub repo).\n\nIf you can't add them to the deploy.yaml file, you can specify them as\narguments on the command line.  If you use a build system like CircleCI, you\ncan add them as environment variables and pass those variables to the deploy\ncommands (see the README).\n\nYour first deploy command might be:\n\t\n\tstout deploy --bucket ` + options.Bucket + ` --key ` + key.Id + ` --secret '` + key.Secret + `'\n`)\n\t\t}\n\n\t}\n\n\tfmt.Println(\"You can begin deploying now, but it can take up to ten minutes for your site to begin to work\")\n\tfmt.Println(\"Depending on the configuration of your site, you might need to set the 'root', 'dest' or 'files' options to get your deploys working as you wish.  See the README for details.\")\n\tfmt.Println(\"It's also a good idea to look into the 'env' option, as in real-world situations it usually makes sense to have a development and/or staging site for each of your production sites.\")\n}\n\nfunc createCmd() {\n\toptions, _ := parseOptions()\n\tloadConfigFile(&options)\n\taddAWSConfig(&options)\n\n\tif options.Bucket == \"\" {\n\t\tpanic(\"You must specify a bucket\")\n\t}\n\n\tif options.AWSKey == \"\" || options.AWSSecret == \"\" {\n\t\tpanic(\"You must specify your AWS credentials\")\n\t}\n\n\tCreate(options)\n}\n"
  },
  {
    "path": "src/cli.go",
    "content": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n)\n\nfunc printUsage() {\n\tfmt.Println(`Stout Static Deploy Tool\nSupports three commands, create, deploy and rollback.\n\nExample Usage:\n\nTo create a site which will be hosted at my.awesome.website:\n\nstout create --bucket my.awesome.website --key AWS_KEY --secret AWS_SECRET\n\nTo deploy the current folder to the root of the my.awesome.website site:\n\nstout deploy --bucket my.awesome.website --key AWS_KEY --secret AWS_SECRET\n\nTo rollback to a specific deploy:\n\nstout rollback --bucket my.awesome.website --key AWS_KEY --secret AWS_SECRET c4a22bf94de1\n\nSee the README for more configuration information.\n`)\n}\n\nfunc main() {\n\tflag.Parse()\n\n\tcommand := flag.Arg(0)\n\n\tswitch command {\n\tcase \"help\":\n\t\tprintUsage()\n\tcase \"deploy\":\n\t\tdeployCmd()\n\tcase \"rollback\":\n\t\trollbackCmd()\n\tcase \"create\":\n\t\tcreateCmd()\n\tdefault:\n\t\tfmt.Println(\"Command not understood\")\n\t\tfmt.Println(\"\")\n\t\tprintUsage()\n\t}\n}\n"
  },
  {
    "path": "src/deploy.go",
    "content": "package main\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"crypto/md5\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/big\"\n\t\"mime\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/cenk/backoff\"\n\t\"golang.org/x/net/html\"\n\n\t\"log\"\n\n\t\"github.com/wsxiaoys/terminal/color\"\n\t\"github.com/zackbloom/goamz/s3\"\n)\n\nconst (\n\tSCRIPT = iota\n\tSTYLE\n)\n\nconst UPLOAD_WORKERS = 20\n\nvar NO_GZIP = []string{\n\t\"mp4\",\n\t\"webm\",\n\t\"ogg\",\n}\n\nfunc hashFile(path string) []byte {\n\thash := md5.New()\n\tio.WriteString(hash, path)\n\tio.WriteString(hash, \"\\n\")\n\n\t// TODO: Encode type?\n\n\tref := must(os.Open(path)).(*os.File)\n\tdefer ref.Close()\n\n\tmust(io.Copy(hash, ref))\n\n\treturn hash.Sum(nil)\n}\n\nfunc hashBytes(data []byte) []byte {\n\thash := md5.New()\n\tmust(io.Copy(hash, bytes.NewReader(data)))\n\treturn hash.Sum(nil)\n}\n\nfunc hashFiles(files []string) string {\n\thash := new(big.Int)\n\tfor _, file := range files {\n\t\tval := new(big.Int)\n\t\tval.SetBytes(hashFile(file))\n\n\t\thash = hash.Xor(hash, val)\n\t}\n\n\treturn fmt.Sprintf(\"%x\", hash)\n}\n\nfunc getRef() string {\n\tgitPath := mustString(exec.LookPath(\"git\"))\n\n\tcmd := exec.Command(gitPath, \"rev-parse\", \"--verify\", \"HEAD\")\n\n\tout := bytes.Buffer{}\n\tcmd.Stdout = &out\n\tpanicIf(cmd.Run())\n\n\treturn string(out.Bytes())\n}\n\nfunc guessContentType(file string) string {\n\treturn mime.TypeByExtension(filepath.Ext(file))\n}\n\nfunc shouldCompress(file string) bool {\n\text := filepath.Ext(file)\n\tfor _, e := range NO_GZIP {\n\t\tif \".\"+e == ext {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\ntype UploadFileRequest struct {\n\tBucket       *s3.Bucket\n\tReader       io.Reader\n\tPath         string\n\tDest         string\n\tIncludeHash  bool\n\tCacheSeconds int\n}\n\nfunc uploadFile(req UploadFileRequest) (remotePath string) {\n\tbuffer := bytes.NewBuffer([]byte{})\n\n\tcompress := shouldCompress(req.Path)\n\n\tif compress {\n\t\twriter := gzip.NewWriter(buffer)\n\t\tmust(io.Copy(writer, req.Reader))\n\t\twriter.Close()\n\t} else {\n\t\tmust(io.Copy(buffer, req.Reader))\n\t}\n\n\tdata := buffer.Bytes()\n\n\thash := hashBytes(data)\n\thashPrefix := fmt.Sprintf(\"%x\", hash)[:12]\n\ts3Opts := s3.Options{\n\t\tContentMD5:   base64.StdEncoding.EncodeToString(hash),\n\t\tCacheControl: fmt.Sprintf(\"public, max-age=%d\", req.CacheSeconds),\n\t}\n\n\tif compress {\n\t\ts3Opts.ContentEncoding = \"gzip\"\n\t}\n\n\tdest := req.Path\n\tif req.IncludeHash {\n\t\tdest = hashPrefix + \"_\" + dest\n\t}\n\tdest = filepath.Join(req.Dest, dest)\n\n\tlog.Printf(\"Uploading to %s in %s (%s) [%d]\\n\", dest, req.Bucket.Name, hashPrefix, req.CacheSeconds)\n\n\top := func() error {\n\t\t// We need to create a new reader each time, as we might be doing this more than once (if it fails)\n\t\treturn req.Bucket.PutReader(dest, bytes.NewReader(data), int64(len(data)), guessContentType(dest)+\"; charset=utf-8\", s3.PublicRead, s3Opts)\n\t}\n\n\tback := backoff.NewExponentialBackOff()\n\tback.MaxElapsedTime = 30 * time.Second\n\n\terr := backoff.RetryNotify(op, back, func(err error, next time.Duration) {\n\t\tlog.Println(\"Error uploading\", err, \"retrying in\", next)\n\t})\n\tpanicIf(err)\n\n\treturn dest\n}\n\ntype FileRef struct {\n\tLocalPath    string\n\tRemotePath   string\n\tUploadedPath string\n}\n\ntype FileInst struct {\n\tFile     *FileRef\n\tInstPath string\n}\n\nfunc writeFiles(options Options, includeHash bool, files chan *FileRef) {\n\tbucket := s3Session.Bucket(options.Bucket)\n\n\tfor file := range files {\n\t\thandle := must(os.Open(file.LocalPath)).(*os.File)\n\t\tdefer handle.Close()\n\n\t\tvar ttl int\n\t\tttl = FOREVER\n\t\tif !includeHash {\n\t\t\tttl = LIMITED\n\t\t}\n\n\t\tremote := file.RemotePath\n\t\tif strings.HasPrefix(remote, \"/\") {\n\t\t\tremote = remote[1:]\n\t\t}\n\t\tpartialPath, err := filepath.Rel(options.Dest, remote)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\t(*file).UploadedPath = uploadFile(UploadFileRequest{\n\t\t\tBucket:       bucket,\n\t\t\tReader:       handle,\n\t\t\tPath:         partialPath,\n\t\t\tDest:         options.Dest,\n\t\t\tIncludeHash:  includeHash,\n\t\t\tCacheSeconds: ttl,\n\t\t})\n\t}\n}\n\nfunc deployFiles(options Options, includeHash bool, files []*FileRef) {\n\tch := make(chan *FileRef)\n\n\twg := new(sync.WaitGroup)\n\tfor i := 0; i < UPLOAD_WORKERS; i++ {\n\t\twg.Add(1)\n\t\tgo func() {\n\t\t\twriteFiles(options, includeHash, ch)\n\t\t\twg.Done()\n\t\t}()\n\t}\n\n\tfor _, file := range files {\n\t\tif !includeHash && strings.HasSuffix(file.RemotePath, \".html\") {\n\t\t\tpanic(fmt.Sprintf(\"Cowardly refusing to deploy an html file (%s) without versioning.\", file.RemotePath))\n\t\t}\n\n\t\tch <- file\n\t}\n\n\tclose(ch)\n\n\twg.Wait()\n}\n\nfunc addFiles(form uint8, parent *html.Node, files []string) {\n\tfor _, file := range files {\n\t\tnode := html.Node{\n\t\t\tType: html.ElementNode,\n\t\t}\n\t\tswitch form {\n\t\tcase SCRIPT:\n\t\t\tnode.Data = \"script\"\n\t\t\tnode.Attr = []html.Attribute{\n\t\t\t\thtml.Attribute{\n\t\t\t\t\tKey: \"src\",\n\t\t\t\t\tVal: file,\n\t\t\t\t},\n\t\t\t}\n\n\t\tcase STYLE:\n\t\t\tnode.Data = \"link\"\n\t\t\tnode.Attr = []html.Attribute{\n\t\t\t\thtml.Attribute{\n\t\t\t\t\tKey: \"rel\",\n\t\t\t\t\tVal: \"stylesheet\",\n\t\t\t\t},\n\t\t\t\thtml.Attribute{\n\t\t\t\t\tKey: \"href\",\n\t\t\t\t\tVal: file,\n\t\t\t\t},\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(\"Type not understood\")\n\t\t}\n\n\t\tparent.AppendChild(&node)\n\t}\n}\n\nfunc isLocal(href string) bool {\n\tparsed := must(url.Parse(href)).(*url.URL)\n\treturn parsed.Host == \"\"\n}\n\nfunc formatHref(path string) string {\n\tif !strings.HasPrefix(path, \"/\") {\n\t\tpath = \"/\" + path\n\t}\n\treturn path\n}\n\nfunc renderHTML(options Options, file HTMLFile) string {\n\thandle := must(os.Open(file.File.LocalPath)).(*os.File)\n\tdefer handle.Close()\n\n\tdoc := must(html.Parse(handle)).(*html.Node)\n\n\tvar f func(*html.Node)\n\tf = func(n *html.Node) {\n\t\tfor c := n.FirstChild; c != nil; c = c.NextSibling {\n\t\t\tf(c)\n\t\t}\n\n\t\tif n.Type == html.ElementNode {\n\t\t\tswitch n.Data {\n\t\t\tcase \"script\":\n\t\t\t\tfor i, a := range n.Attr {\n\t\t\t\t\tif a.Key == \"src\" {\n\t\t\t\t\t\tfor _, dep := range file.Deps {\n\t\t\t\t\t\t\tif dep.InstPath == a.Val {\n\t\t\t\t\t\t\t\tn.Attr[i].Val = formatHref(dep.File.UploadedPath)\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase \"link\":\n\t\t\t\tstylesheet := false\n\t\t\t\tfor _, a := range n.Attr {\n\t\t\t\t\tif a.Key == \"rel\" {\n\t\t\t\t\t\tstylesheet = a.Val == \"stylesheet\"\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif !stylesheet {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tfor i, a := range n.Attr {\n\t\t\t\t\tif a.Key == \"href\" {\n\t\t\t\t\t\tfor _, dep := range file.Deps {\n\t\t\t\t\t\t\tif dep.InstPath == a.Val {\n\t\t\t\t\t\t\t\tn.Attr[i].Val = formatHref(dep.File.UploadedPath)\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tf(doc)\n\n\tbuf := bytes.NewBuffer([]byte{})\n\tpanicIf(html.Render(buf, doc))\n\n\treturn buf.String()\n}\n\nfunc parseHTML(options Options, path string) (files []string, base string) {\n\tfiles = make([]string, 0)\n\n\thandle := must(os.Open(path)).(*os.File)\n\tdefer handle.Close()\n\n\tdoc := must(html.Parse(handle)).(*html.Node)\n\n\tvar f func(*html.Node)\n\tf = func(n *html.Node) {\n\t\tfor c := n.FirstChild; c != nil; c = c.NextSibling {\n\t\t\tf(c)\n\t\t}\n\n\t\tif n.Type == html.ElementNode {\n\t\t\tswitch n.Data {\n\t\t\tcase \"base\":\n\t\t\t\tfor _, a := range n.Attr {\n\t\t\t\t\tif a.Key == \"href\" {\n\t\t\t\t\t\tbase = a.Val\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase \"script\":\n\t\t\t\tfor _, a := range n.Attr {\n\t\t\t\t\tif a.Key == \"src\" {\n\t\t\t\t\t\tif isLocal(a.Val) {\n\t\t\t\t\t\t\tfiles = append(files, a.Val)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase \"link\":\n\t\t\t\tlocal := false\n\t\t\t\tstylesheet := false\n\t\t\t\thref := \"\"\n\t\t\t\tfor _, a := range n.Attr {\n\t\t\t\t\tswitch a.Key {\n\t\t\t\t\tcase \"href\":\n\t\t\t\t\t\tlocal = isLocal(a.Val)\n\t\t\t\t\t\thref = a.Val\n\t\t\t\t\tcase \"rel\":\n\t\t\t\t\t\tstylesheet = a.Val == \"stylesheet\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif local && stylesheet {\n\t\t\t\t\tfiles = append(files, href)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tf(doc)\n\n\treturn\n}\n\nfunc deployHTML(options Options, id string, file HTMLFile) {\n\tdata := renderHTML(options, file)\n\n\tinternalPath, err := filepath.Rel(options.Root, file.File.LocalPath)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tpermPath := joinPath(options.Dest, id, internalPath)\n\tcurPath := joinPath(options.Dest, internalPath)\n\n\tbucket := s3Session.Bucket(options.Bucket)\n\tuploadFile(UploadFileRequest{\n\t\tBucket:       bucket,\n\t\tReader:       strings.NewReader(data),\n\t\tPath:         permPath,\n\t\tIncludeHash:  false,\n\t\tCacheSeconds: FOREVER,\n\t})\n\n\tlog.Println(\"Copying\", permPath, \"to\", curPath)\n\tcopyFile(bucket, permPath, curPath, \"text/html; charset=utf-8\", LIMITED)\n}\n\nfunc expandFiles(root string, glob string) []string {\n\tout := make([]string, 0)\n\tcases := strings.Split(glob, \",\")\n\n\tfor _, pattern := range cases {\n\t\tif strings.HasPrefix(pattern, \"-/\") {\n\t\t\tpattern = pattern[2:]\n\t\t} else {\n\t\t\tpattern = joinPath(root, pattern)\n\t\t}\n\n\t\tlist := must(filepath.Glob(pattern)).([]string)\n\n\t\tfor _, file := range list {\n\t\t\tinfo := must(os.Stat(file)).(os.FileInfo)\n\n\t\t\tif info.IsDir() {\n\t\t\t\tfilepath.Walk(file, func(path string, info os.FileInfo, err error) error {\n\t\t\t\t\tpanicIf(err)\n\n\t\t\t\t\tif !info.IsDir() {\n\t\t\t\t\t\tout = append(out, path)\n\t\t\t\t\t}\n\n\t\t\t\t\treturn nil\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tout = append(out, file)\n\t\t\t}\n\t\t}\n\t}\n\treturn out\n}\n\nfunc listFiles(options Options) []*FileRef {\n\tfilePaths := expandFiles(options.Root, options.Files)\n\n\tfiles := make([]*FileRef, len(filePaths))\n\tfor i, path := range filePaths {\n\t\tremotePath := joinPath(options.Dest, mustString(filepath.Rel(options.Root, path)))\n\n\t\tfor strings.HasPrefix(remotePath, \"../\") {\n\t\t\tremotePath = remotePath[3:]\n\t\t}\n\n\t\tfiles[i] = &FileRef{\n\t\t\tLocalPath:  path,\n\t\t\tRemotePath: remotePath,\n\t\t}\n\t}\n\n\treturn files\n}\n\nfunc ignoreFiles(full []*FileRef, rem []*FileRef) []*FileRef {\n\tout := make([]*FileRef, 0, len(full))\n\n\tfor _, file := range full {\n\t\tignore := false\n\t\tpath := filepath.Clean(file.LocalPath)\n\n\t\tfor _, remFile := range rem {\n\t\t\tif filepath.Clean(remFile.LocalPath) == path {\n\t\t\t\tignore = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif !ignore {\n\t\t\tout = append(out, file)\n\t\t}\n\t}\n\n\treturn out\n}\n\nfunc extractFileList(options Options, pattern string) (files []string) {\n\tfiles = make([]string, 0)\n\n\tparts := strings.Split(pattern, \",\")\n\n\tfor _, part := range parts {\n\t\tmatches, err := filepath.Glob(joinPath(options.Root, part))\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tif matches == nil {\n\t\t\tpanic(fmt.Sprintf(\"Pattern %s did not match any files\", part))\n\t\t}\n\n\t\tfiles = append(files, matches...)\n\t}\n\n\treturn files\n}\n\nfunc filesWithExtension(files []*FileRef, ext string) (outFiles []*FileRef) {\n\toutFiles = make([]*FileRef, 0)\n\tfor _, file := range files {\n\t\tif filepath.Ext(file.LocalPath) == ext {\n\t\t\toutFiles = append(outFiles, file)\n\t\t}\n\t}\n\n\treturn\n}\n\ntype HTMLFile struct {\n\tFile FileRef\n\tDeps []FileInst\n\tBase string\n}\n\nfunc (f HTMLFile) GetLocalPath() string {\n\treturn f.File.LocalPath\n}\n\nfunc Deploy(options Options) {\n\tif s3Session == nil {\n\t\ts3Session = openS3(options.AWSKey, options.AWSSecret, options.AWSRegion, options.S3Host)\n\t}\n\n\tfiles := listFiles(options)\n\n\thtmlFileRefs := filesWithExtension(files, \".html\")\n\tvar htmlFiles []HTMLFile\n\tvar id string\n\n\tif len(htmlFileRefs) == 0 {\n\t\tlog.Println(\"No HTML files found\")\n\t} else {\n\t\tinclFiles := make(map[string]*FileRef)\n\t\thtmlFiles = make([]HTMLFile, len(htmlFileRefs))\n\t\tfor i, file := range htmlFileRefs {\n\t\t\tdir := filepath.Dir(file.LocalPath)\n\n\t\t\trel, err := filepath.Rel(options.Root, dir)\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\n\t\t\tpaths, base := parseHTML(options, file.LocalPath)\n\n\t\t\tif strings.HasPrefix(strings.ToLower(base), \"http\") || strings.HasPrefix(base, \"//\") {\n\t\t\t\tpanic(\"Absolute base tags are not supported\")\n\t\t\t}\n\n\t\t\tif strings.HasSuffix(base, \"/\") {\n\t\t\t\tbase = base[:len(base)-1]\n\t\t\t}\n\n\t\t\thtmlFiles[i] = HTMLFile{\n\t\t\t\tFile: *file,\n\t\t\t\tDeps: make([]FileInst, len(paths)),\n\t\t\t\tBase: base,\n\t\t\t}\n\n\t\t\tvar dest string\n\t\t\tif strings.HasPrefix(base, \"/\") && strings.HasPrefix(base, \"/\"+options.Dest) {\n\t\t\t\tdest = base\n\t\t\t} else {\n\t\t\t\tdest = joinPath(options.Dest, base)\n\t\t\t}\n\n\t\t\tvar root string\n\t\t\tif strings.HasPrefix(base, \"/\") && strings.HasSuffix(options.Root, base) {\n\t\t\t\troot = options.Root\n\t\t\t} else {\n\t\t\t\troot = joinPath(options.Root, base)\n\t\t\t}\n\n\t\t\tfor j, path := range paths {\n\t\t\t\tvar local, remote string\n\t\t\t\tif strings.HasPrefix(path, \"/\") {\n\t\t\t\t\tlocal = joinPath(options.Root, path)\n\t\t\t\t\tremote = joinPath(options.Dest, path)\n\t\t\t\t} else {\n\t\t\t\t\tif strings.HasPrefix(base, \"/\") {\n\t\t\t\t\t\tlocal = joinPath(root, path)\n\t\t\t\t\t\tremote = joinPath(dest, path)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlocal = joinPath(options.Root, rel, base, path)\n\t\t\t\t\t\tremote = joinPath(options.Dest, rel, base, path)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor strings.HasPrefix(remote, \"../\") {\n\t\t\t\t\tremote = remote[3:]\n\t\t\t\t}\n\n\t\t\t\tref, ok := inclFiles[local]\n\t\t\t\tif !ok {\n\t\t\t\t\tref = &FileRef{\n\t\t\t\t\t\tLocalPath:  local,\n\t\t\t\t\t\tRemotePath: remote,\n\n\t\t\t\t\t\t// Filled in after the deploy:\n\t\t\t\t\t\tUploadedPath: \"\",\n\t\t\t\t\t}\n\n\t\t\t\t\tinclFiles[local] = ref\n\t\t\t\t}\n\n\t\t\t\tuse := FileInst{\n\t\t\t\t\tFile:     ref,\n\t\t\t\t\tInstPath: path,\n\t\t\t\t}\n\n\t\t\t\thtmlFiles[i].Deps[j] = use\n\t\t\t}\n\t\t}\n\n\t\tinclFileList := make([]*FileRef, len(inclFiles))\n\t\ti := 0\n\t\tfor _, ref := range inclFiles {\n\t\t\tinclFileList[i] = ref\n\t\t\ti++\n\t\t}\n\n\t\thashPaths := make([]string, 0)\n\t\tfor _, item := range inclFileList {\n\t\t\thashPaths = append(hashPaths, item.LocalPath)\n\t\t}\n\t\tfor _, item := range htmlFiles {\n\t\t\thashPaths = append(hashPaths, item.File.LocalPath)\n\t\t}\n\n\t\thash := hashFiles(hashPaths)\n\t\tid = hash[:12]\n\n\t\tdeployFiles(options, true, inclFileList)\n\t}\n\n\tdeployFiles(options, false, ignoreFiles(files, htmlFileRefs))\n\n\tif len(htmlFileRefs) != 0 {\n\t\t// Ensure that the new files exist in s3\n\t\t// Time based on \"Eventual Consistency: How soon is eventual?\"\n\t\ttime.Sleep(1500 * time.Millisecond)\n\n\t\twg := sync.WaitGroup{}\n\t\tfor _, file := range htmlFiles {\n\t\t\twg.Add(1)\n\n\t\t\tgo func(file HTMLFile) {\n\t\t\t\tdefer wg.Done()\n\t\t\t\tdeployHTML(options, id, file)\n\t\t\t}(file)\n\t\t}\n\n\t\twg.Wait()\n\t}\n\n\tvisId := id\n\tif id == \"\" {\n\t\tvisId = \"0 HTML Files\"\n\t}\n\n\tcolor.Printf(`\n+------------------------------------+\n|         @{g}Deploy Successful!@{|}         |\n|                                    |\n|       Deploy ID: @{?}%s@{|}      |\n+------------------------------------+\n`, visId)\n\n}\n\nfunc deployCmd() {\n\toptions, _ := parseOptions()\n\tloadConfigFile(&options)\n\taddAWSConfig(&options)\n\n\tif options.Bucket == \"\" {\n\t\tpanic(\"You must specify a bucket\")\n\t}\n\n\tif options.AWSKey == \"\" || options.AWSSecret == \"\" {\n\t\tpanic(\"You must specify your AWS credentials\")\n\t}\n\n\tDeploy(options)\n}\n"
  },
  {
    "path": "src/rollback.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"path/filepath\"\n\t\"sync\"\n\n\t\"github.com/zackbloom/goamz/s3\"\n)\n\nfunc Rollback(options Options, version string) {\n\tif s3Session == nil {\n\t\ts3Session = openS3(options.AWSKey, options.AWSSecret, options.AWSRegion, options.S3Host)\n\t}\n\n\tbucket := s3Session.Bucket(options.Bucket)\n\n\t// List files with the correct prefix in bucket\n\t// Remove their prefix with a copy.\n\n\tprefix := filepath.Join(options.Dest, version) + \"/\"\n\n\tlist, err := bucket.List(prefix, \"\", \"\", 1000)\n\tpanicIf(err)\n\n\tif list.IsTruncated {\n\t\tpanic(fmt.Sprintf(\"More than %d HTML files in version, rollback is not supported.  Consider filing a GitHub issue if you need support for this.\", list.MaxKeys))\n\t}\n\tif len(list.Contents) == 0 {\n\t\tlog.Printf(\"A deploy with the provided id (%s) was not found in the specified bucket\", version)\n\t\treturn\n\t}\n\n\twg := sync.WaitGroup{}\n\n\tcount := 0\n\tfor _, file := range list.Contents {\n\t\twg.Add(1)\n\t\tgo func(file s3.Key) {\n\t\t\tdefer wg.Done()\n\n\t\t\tpath := file.Key\n\t\t\tif filepath.Ext(path) != \".html\" {\n\t\t\t\tlog.Printf(\"Skipping non-html file %s\", path)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tnewPath := filepath.Join(options.Dest, path[len(prefix):])\n\n\t\t\tlog.Printf(\"Aliasing %s to %s\", path, newPath)\n\n\t\t\tcopyFile(bucket, path, newPath, \"text/html\", LIMITED)\n\n\t\t\tcount++\n\t\t}(file)\n\t}\n\n\twg.Wait()\n\n\tlog.Printf(\"Reverted %d HTML files to version %s\", count, version)\n}\n\nfunc rollbackCmd() {\n\toptions, set := parseOptions()\n\tversion := set.Arg(0)\n\n\tloadConfigFile(&options)\n\taddAWSConfig(&options)\n\n\tif options.Bucket == \"\" {\n\t\tpanic(\"You must specify a bucket\")\n\t}\n\tif options.AWSKey == \"\" || options.AWSSecret == \"\" {\n\t\tpanic(\"You must specify your AWS credentials\")\n\t}\n\tif version == \"\" {\n\t\tpanic(\"You must specify a version to rollback to\")\n\t}\n\n\tRollback(options, version)\n}\n"
  },
  {
    "path": "src/utils.go",
    "content": "package main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/imdario/mergo\"\n\thomedir \"github.com/mitchellh/go-homedir\"\n\tini \"github.com/sspencer/go-ini\"\n\t\"github.com/zackbloom/goamz/aws\"\n\t\"github.com/zackbloom/goamz/cloudfront\"\n\t\"github.com/zackbloom/goamz/iam\"\n\t\"github.com/zackbloom/goamz/route53\"\n\t\"github.com/zackbloom/goamz/s3\"\n\t\"gopkg.in/yaml.v1\"\n)\n\nconst (\n\tLIMITED = 60\n\tFOREVER = 31556926\n)\n\nvar s3Session *s3.S3\nvar iamSession *iam.IAM\nvar r53Session *route53.Route53\nvar cfSession *cloudfront.CloudFront\n\nfunc getRegion(region string, s3Host string) aws.Region {\n\tregionS, ok := aws.Regions[region]\n\tif !ok {\n\t\tpanic(\"Region not found\")\n\t}\n\n\tlog.Println(\"HOST\", s3Host)\n\tif s3Host != \"\" {\n\t\tregionS.S3Endpoint = \"https://\" + s3Host\n\t\tregionS.S3BucketEndpoint = \"https://${bucket}.\" + s3Host\n\t}\n\treturn regionS\n}\n\nfunc openS3(key, secret, region, s3Host string) *s3.S3 {\n\tregionS := getRegion(region, s3Host)\n\n\tauth := aws.Auth{\n\t\tAccessKey: key,\n\t\tSecretKey: secret,\n\t}\n\treturn s3.New(auth, regionS)\n}\n\nfunc openIAM(key, secret, region string) *iam.IAM {\n\tregionS := getRegion(region, \"\")\n\n\tauth := aws.Auth{\n\t\tAccessKey: key,\n\t\tSecretKey: secret,\n\t}\n\treturn iam.New(auth, regionS)\n}\n\nfunc openCloudFront(key, secret string) *cloudfront.CloudFront {\n\tauth := aws.Auth{\n\t\tAccessKey: key,\n\t\tSecretKey: secret,\n\t}\n\treturn cloudfront.NewCloudFront(auth)\n}\n\nfunc openRoute53(key, secret string) *route53.Route53 {\n\tauth := aws.Auth{\n\t\tAccessKey: key,\n\t\tSecretKey: secret,\n\t}\n\n\tr53, _ := route53.NewRoute53(auth)\n\treturn r53\n}\n\nfunc panicIf(err error) {\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\nfunc must(val interface{}, err error) interface{} {\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn val\n}\nfunc mustString(val string, err error) string {\n\tpanicIf(err)\n\treturn val\n}\nfunc mustInt(val int, err error) int {\n\tpanicIf(err)\n\treturn val\n}\n\ntype Options struct {\n\tFiles      string `yaml:\"files\"`\n\tRoot       string `yaml:\"root\"`\n\tDest       string `yaml:\"dest\"`\n\tConfigFile string `yaml:\"-\"`\n\tEnv        string `yaml:\"-\"`\n\tBucket     string `yaml:\"bucket\"`\n\tAWSKey     string `yaml:\"key\"`\n\tAWSSecret  string `yaml:\"secret\"`\n\tAWSRegion  string `yaml:\"region\"`\n\tS3Host     string `yaml:\"s3Host\"`\n\tNoUser     bool   `yaml:\"-\"`\n}\n\nfunc parseOptions() (o Options, set *flag.FlagSet) {\n\tset = flag.NewFlagSet(os.Args[1], flag.ExitOnError)\n\t//TODO: Set set.Usage\n\n\tset.StringVar(&o.Files, \"files\", \"*\", \"Comma-seperated glob patterns of files to deploy (within root)\")\n\tset.StringVar(&o.Root, \"root\", \"./\", \"The local directory to deploy\")\n\tset.StringVar(&o.Dest, \"dest\", \"./\", \"The destination directory to write files to in the S3 bucket\")\n\tset.StringVar(&o.ConfigFile, \"config\", \"\", \"A yaml file to read configuration from\")\n\tset.StringVar(&o.Env, \"env\", \"\", \"The env to read from the config file\")\n\tset.StringVar(&o.Bucket, \"bucket\", \"\", \"The bucket to deploy to\")\n\tset.StringVar(&o.AWSKey, \"key\", \"\", \"The AWS key to use\")\n\tset.StringVar(&o.AWSSecret, \"secret\", \"\", \"The AWS secret of the provided key\")\n\tset.StringVar(&o.AWSRegion, \"region\", \"us-east-1\", \"The AWS region the S3 bucket is in\")\n\tset.StringVar(&o.S3Host, \"s3-host\", \"s3.amazonaws.com\", \"The hostname of an S3 implementation, overrides region\")\n\tset.BoolVar(&o.NoUser, \"no-user\", false, \"When creating, should we make a user account?\")\n\n\tset.Parse(os.Args[2:])\n\n\treturn\n}\n\ntype ConfigFile map[string]Options\n\nfunc loadConfigFile(o *Options) {\n\tisDefault := false\n\tconfigPath := o.ConfigFile\n\tif o.ConfigFile == \"\" {\n\t\tisDefault = true\n\t\tconfigPath = \"./deploy.yaml\"\n\t}\n\n\tdata, err := ioutil.ReadFile(configPath)\n\tif err != nil {\n\t\tif os.IsNotExist(err) && isDefault {\n\t\t\treturn\n\t\t}\n\n\t\tpanic(err)\n\t}\n\n\tvar file ConfigFile\n\terr = yaml.Unmarshal(data, &file)\n\tpanicIf(err)\n\n\tvar envCfg Options\n\tif o.Env != \"\" {\n\t\tvar ok bool\n\t\tenvCfg, ok = file[o.Env]\n\t\tif !ok {\n\t\t\tpanic(\"Config for specified env not found\")\n\t\t}\n\t}\n\n\tdefCfg, _ := file[\"default\"]\n\n\tpanicIf(mergo.MergeWithOverwrite(o, defCfg))\n\tpanicIf(mergo.MergeWithOverwrite(o, envCfg))\n}\n\nfunc addAWSConfig(o *Options) {\n\tif o.AWSKey == \"\" && o.AWSSecret == \"\" {\n\t\to.AWSKey, o.AWSSecret = loadAWSConfig()\n\t}\n}\n\ntype AWSConfig struct {\n\tDefault struct {\n\t\tAccessKey string `ini:\"aws_access_key_id\"`\n\t\tSecretKey string `ini:\"aws_secret_access_key\"`\n\t} `ini:\"[default]\"`\n}\n\nfunc loadAWSConfig() (access string, secret string) {\n\tcfg := AWSConfig{}\n\n\tfor _, file := range []string{\"~/.aws/config\", \"~/.aws/credentials\"} {\n\t\tpath, err := homedir.Expand(file)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tcontent, err := ioutil.ReadFile(path)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tini.Unmarshal(content, &cfg)\n\n\t\tif cfg.Default.AccessKey != \"\" {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn cfg.Default.AccessKey, cfg.Default.SecretKey\n}\n\nfunc copyFile(bucket *s3.Bucket, from string, to string, contentType string, maxAge int) {\n\tcopyOpts := s3.CopyOptions{\n\t\tMetadataDirective: \"REPLACE\",\n\t\tContentType:       contentType,\n\t\tOptions: s3.Options{\n\t\t\tCacheControl:    fmt.Sprintf(\"public, max-age=%d\", maxAge),\n\t\t\tContentEncoding: \"gzip\",\n\t\t},\n\t}\n\n\t_, err := bucket.PutCopy(to, s3.PublicRead, copyOpts, joinPath(bucket.Name, from))\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\n\nvar pathRe = regexp.MustCompile(\"/{2,}\")\n\nfunc joinPath(parts ...string) string {\n\t// Like filepath.Join, but always uses '/'\n\tout := filepath.Join(parts...)\n\n\tif os.PathSeparator != '/' {\n\t\tout = strings.Replace(out, string(os.PathSeparator), \"/\", -1)\n\t}\n\n\treturn out\n}\n"
  },
  {
    "path": "utils/build.sh",
    "content": "GOOS=linux GOARCH=amd64 go build -o stout-linux src/* \nGOOS=darwin GOARCH=amd64 go build -o stout-osx src/* \nGOOS=windows GOARCH=amd64 go build -o stout-windows.exe src/* \n"
  },
  {
    "path": "utils/create_site.sh",
    "content": "#set -e\n\nexport HOST=$1\nexport DEPLOY_USER=${HOST}_deploy\n\naws s3 mb s3://$HOST --region us-east-1\n\naws s3 website s3://$HOST --index-document index.html --error-document error.html\n\naws s3api put-bucket-policy --bucket $HOST --policy \"{\n  \\\"Version\\\": \\\"2008-10-17\\\",\n  \\\"Statement\\\": [\n    {\n      \\\"Sid\\\": \\\"PublicReadForGetBucketObjects\\\",\n      \\\"Effect\\\": \\\"Allow\\\",\n      \\\"Principal\\\": {\n        \\\"AWS\\\": \\\"*\\\"\n      },\n      \\\"Action\\\": \\\"s3:GetObject\\\",\n      \\\"Resource\\\": \\\"arn:aws:s3:::$HOST/*\\\"\n    }\n  ]\n}\"\n\nexport CALLER=`date +\"%T\"`\n\naws cloudfront create-distribution --distribution-config \"\n{\n    \\\"CallerReference\\\": \\\"$CALLER\\\",\n    \\\"Comment\\\": null,\n    \\\"CacheBehaviors\\\": {\n        \\\"Quantity\\\": 0\n    },\n    \\\"Logging\\\": {\n        \\\"Bucket\\\": null,\n        \\\"Prefix\\\": null,\n        \\\"Enabled\\\": false,\n        \\\"IncludeCookies\\\": false\n    },\n    \\\"Origins\\\": {\n        \\\"Items\\\": [\n            {\n                \\\"S3OriginConfig\\\": {\n                    \\\"OriginAccessIdentity\\\": null\n                },\n                \\\"Id\\\": \\\"S3-$HOST\\\",\n                \\\"DomainName\\\": \\\"$HOST.s3.amazonaws.com\\\"\n            }\n        ],\n        \\\"Quantity\\\": 1\n    },\n    \\\"DefaultRootObject\\\": \\\"index.html\\\",\n    \\\"PriceClass\\\": \\\"PriceClass_All\\\",\n    \\\"Enabled\\\": true,\n    \\\"DefaultCacheBehavior\\\": {\n        \\\"TrustedSigners\\\": {\n            \\\"Enabled\\\": false,\n            \\\"Quantity\\\": 0\n        },\n        \\\"TargetOriginId\\\": \\\"S3-$HOST\\\",\n        \\\"ViewerProtocolPolicy\\\": \\\"allow-all\\\",\n        \\\"ForwardedValues\\\": {\n            \\\"Cookies\\\": {\n                \\\"Forward\\\": \\\"none\\\"\n            },\n            \\\"QueryString\\\": false\n        },\n        \\\"AllowedMethods\\\": {\n            \\\"Items\\\": [\n                \\\"GET\\\",\n                \\\"HEAD\\\"\n            ],\n            \\\"Quantity\\\": 2\n        },\n        \\\"MinTTL\\\": 0\n    },\n    \\\"ViewerCertificate\\\": {\n        \\\"CloudFrontDefaultCertificate\\\": true\n    },\n    \\\"CustomErrorResponses\\\": {\n        \\\"Quantity\\\": 0\n    },\n    \\\"Restrictions\\\": {\n        \\\"GeoRestriction\\\": {\n            \\\"RestrictionType\\\": \\\"none\\\",\n            \\\"Quantity\\\": 0\n        }\n    },\n    \\\"Aliases\\\": {\n        \\\"Items\\\": [\n            \\\"$HOST\\\"\n        ],\n        \\\"Quantity\\\": 1\n    }\n}\"\n\naws iam create-user --user-name $DEPLOY_USER\naws iam put-user-policy --user-name $DEPLOY_USER --policy-name $DEPLOY_USER --policy-document \"{\n  \\\"Version\\\": \\\"2012-10-17\\\",\n  \\\"Statement\\\": [\n    {\n      \\\"Effect\\\": \\\"Allow\\\",\n      \\\"Action\\\": [\n        \\\"s3:DeleteObject\\\",\n        \\\"s3:ListBucket\\\",\n        \\\"s3:PutObject\\\",\n        \\\"s3:PutObjectAcl\\\",\n        \\\"s3:GetObject\\\"\n      ],\n      \\\"Resource\\\": [\n        \\\"arn:aws:s3:::$HOST\\\", \\\"arn:aws:s3:::$HOST/*\\\"\n      ]\n    }\n  ]\n}\"\n\naws iam create-access-key --user-name $DEPLOY_USER | cat\n\necho \"Select a SSL Cert in CloudFront if applicable\"\n\necho \"Site set up. You must now manually add the cloudfront distribution to your DNS configuration.\"\n"
  },
  {
    "path": "utils/release.sh",
    "content": "set -e\n\n# Install jq with brew install jq\n\nRELEASE=$1\n\ngit tag $RELEASE\ngit push origin master --tags\n\nUPLOAD_URL=$(curl -X POST \"https://api.github.com/repos/EagerIO/Stout/releases\" \\\n  -H \"Accept: application/vnd.github.v3+json\" \\\n  -H \"Authorization: token $GITHUB_AUTH\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"\n{\n  \\\"tag_name\\\": \\\"$RELEASE\\\"\n}\" | jq -r '.upload_url' | cut -d { -f 1)\n\nmkdir -p debian\n\necho \"\nPackage: stout\nSource: stout\nVersion: $RELEASE\nArchitecture: all\nMaintainer: Zack Bloom <zack@eager.io>\nDescription: The reliable static website deploy tool\n\" > `dirname $0`/../control\n\n`dirname $0`/xc.sh\n\nupload () {\n  local archive=$1\n  local filename=$(basename \"$archive\")\n  local extension=\"${filename##*.}\"\n\n  if [ \"$extension\" == \"md\" ]; then\n    return\n  fi\n\n  curl -X POST \"$UPLOAD_URL?name=$filename\" \\\n    -H \"Content-Type: application/octet-stream\" \\\n    -H \"Authorization: token $GITHUB_AUTH\" \\\n    --data-binary @$archive\n}\n\nfor f in builds/snapshot/*; do upload \"$f\" & done\n\nwait\n"
  },
  {
    "path": "utils/xc.sh",
    "content": "goxc -tasks-=downloads-page -d=./builds\n"
  },
  {
    "path": "vendor/github.com/cenk/backoff/.gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n"
  },
  {
    "path": "vendor/github.com/cenk/backoff/.travis.yml",
    "content": "language: go\ngo:\n  - 1.3.3\n  - tip\nbefore_install:\n  - go get github.com/mattn/goveralls\n  - go get golang.org/x/tools/cmd/cover\nscript:\n  - $HOME/gopath/bin/goveralls -service=travis-ci\n"
  },
  {
    "path": "vendor/github.com/cenk/backoff/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Cenk Altı\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/cenk/backoff/README.md",
    "content": "# Exponential Backoff [![GoDoc][godoc image]][godoc] [![Build Status][travis image]][travis] [![Coverage Status][coveralls image]][coveralls]\n\nThis is a Go port of the exponential backoff algorithm from [Google's HTTP Client Library for Java][google-http-java-client].\n\n[Exponential backoff][exponential backoff wiki]\nis an algorithm that uses feedback to multiplicatively decrease the rate of some process,\nin order to gradually find an acceptable rate.\nThe retries exponentially increase and stop increasing when a certain threshold is met.\n\n## How To\n\nWe define two functions, `Retry()` and `RetryNotify()`.\nThey receive an `Operation` to execute, a `BackOff` algorithm,\nand an optional `Notify` error handler.\n\nThe operation will be executed, and will be retried on failure with delay\nas given by the backoff algorithm. The backoff algorithm can also decide when to stop\nretrying.\nIn addition, the notify error handler will be called after each failed attempt,\nexcept for the last time, whose error should be handled by the caller.\n\n```go\n// An Operation is executing by Retry() or RetryNotify().\n// The operation will be retried using a backoff policy if it returns an error.\ntype Operation func() error\n\n// Notify is a notify-on-error function. It receives an operation error and\n// backoff delay if the operation failed (with an error).\n//\n// NOTE that if the backoff policy stated to stop retrying,\n// the notify function isn't called.\ntype Notify func(error, time.Duration)\n\nfunc Retry(Operation, BackOff) error\nfunc RetryNotify(Operation, BackOff, Notify)\n```\n\n## Examples\n\n### Retry\n\nSimple retry helper that uses the default exponential backoff algorithm:\n\n```go\noperation := func() error {\n    // An operation that might fail.\n    return nil // or return errors.New(\"some error\")\n}\n\nerr := Retry(operation, NewExponentialBackOff())\nif err != nil {\n    // Handle error.\n    return err\n}\n\n// Operation is successful.\nreturn nil\n```\n\n### Ticker\n\nTicker is for using backoff algorithms with channels.\n\n```go\noperation := func() error {\n    // An operation that might fail\n    return nil // or return errors.New(\"some error\")\n}\n\nb := NewExponentialBackOff()\nticker := NewTicker(b)\n\nvar err error\n\n// Ticks will continue to arrive when the previous operation is still running,\n// so operations that take a while to fail could run in quick succession.\nfor range ticker.C {\n    if err = operation(); err != nil {\n        log.Println(err, \"will retry...\")\n        continue\n    }\n\n    ticker.Stop()\n    break\n}\n\nif err != nil {\n    // Operation has failed.\n    return err\n}\n\n// Operation is successful.\nreturn nil\n```\n\n## Getting Started\n\n```bash\n# install\n$ go get github.com/cenk/backoff\n\n# test\n$ cd $GOPATH/src/github.com/cenk/backoff\n$ go get -t ./...\n$ go test -v -cover\n```\n\n[godoc]: https://godoc.org/github.com/cenk/backoff\n[godoc image]: https://godoc.org/github.com/cenk/backoff?status.png\n[travis]: https://travis-ci.org/cenk/backoff\n[travis image]: https://travis-ci.org/cenk/backoff.png?branch=master\n[coveralls]: https://coveralls.io/github/cenk/backoff?branch=master\n[coveralls image]: https://coveralls.io/repos/github/cenk/backoff/badge.svg?branch=master\n\n[google-http-java-client]: https://github.com/google/google-http-java-client\n[exponential backoff wiki]: http://en.wikipedia.org/wiki/Exponential_backoff\n\n[advanced example]: https://godoc.org/github.com/cenk/backoff#example_\n"
  },
  {
    "path": "vendor/github.com/cenk/backoff/backoff.go",
    "content": "// Package backoff implements backoff algorithms for retrying operations.\n//\n// Also has a Retry() helper for retrying operations that may fail.\npackage backoff\n\nimport \"time\"\n\n// BackOff is a backoff policy for retrying an operation.\ntype BackOff interface {\n\t// NextBackOff returns the duration to wait before retrying the operation,\n\t// or backoff.Stop to indicate that no more retries should be made.\n\t//\n\t// Example usage:\n\t//\n\t// \tduration := backoff.NextBackOff();\n\t// \tif (duration == backoff.Stop) {\n\t// \t\t// Do not retry operation.\n\t// \t} else {\n\t// \t\t// Sleep for duration and retry operation.\n\t// \t}\n\t//\n\tNextBackOff() time.Duration\n\n\t// Reset to initial state.\n\tReset()\n}\n\n// Indicates that no more retries should be made for use in NextBackOff().\nconst Stop time.Duration = -1\n\n// ZeroBackOff is a fixed backoff policy whose backoff time is always zero,\n// meaning that the operation is retried immediately without waiting, indefinitely.\ntype ZeroBackOff struct{}\n\nfunc (b *ZeroBackOff) Reset() {}\n\nfunc (b *ZeroBackOff) NextBackOff() time.Duration { return 0 }\n\n// StopBackOff is a fixed backoff policy that always returns backoff.Stop for\n// NextBackOff(), meaning that the operation should never be retried.\ntype StopBackOff struct{}\n\nfunc (b *StopBackOff) Reset() {}\n\nfunc (b *StopBackOff) NextBackOff() time.Duration { return Stop }\n\n// ConstantBackOff is a backoff policy that always returns the same backoff delay.\n// This is in contrast to an exponential backoff policy,\n// which returns a delay that grows longer as you call NextBackOff() over and over again.\ntype ConstantBackOff struct {\n\tInterval time.Duration\n}\n\nfunc (b *ConstantBackOff) Reset()                     {}\nfunc (b *ConstantBackOff) NextBackOff() time.Duration { return b.Interval }\n\nfunc NewConstantBackOff(d time.Duration) *ConstantBackOff {\n\treturn &ConstantBackOff{Interval: d}\n}\n"
  },
  {
    "path": "vendor/github.com/cenk/backoff/exponential.go",
    "content": "package backoff\n\nimport (\n\t\"math/rand\"\n\t\"time\"\n)\n\n/*\nExponentialBackOff is a backoff implementation that increases the backoff\nperiod for each retry attempt using a randomization function that grows exponentially.\n\nNextBackOff() is calculated using the following formula:\n\n randomized interval =\n     RetryInterval * (random value in range [1 - RandomizationFactor, 1 + RandomizationFactor])\n\nIn other words NextBackOff() will range between the randomization factor\npercentage below and above the retry interval.\n\nFor example, given the following parameters:\n\n RetryInterval = 2\n RandomizationFactor = 0.5\n Multiplier = 2\n\nthe actual backoff period used in the next retry attempt will range between 1 and 3 seconds,\nmultiplied by the exponential, that is, between 2 and 6 seconds.\n\nNote: MaxInterval caps the RetryInterval and not the randomized interval.\n\nIf the time elapsed since an ExponentialBackOff instance is created goes past the\nMaxElapsedTime, then the method NextBackOff() starts returning backoff.Stop.\n\nThe elapsed time can be reset by calling Reset().\n\nExample: Given the following default arguments, for 10 tries the sequence will be,\nand assuming we go over the MaxElapsedTime on the 10th try:\n\n Request #  RetryInterval (seconds)  Randomized Interval (seconds)\n\n  1          0.5                     [0.25,   0.75]\n  2          0.75                    [0.375,  1.125]\n  3          1.125                   [0.562,  1.687]\n  4          1.687                   [0.8435, 2.53]\n  5          2.53                    [1.265,  3.795]\n  6          3.795                   [1.897,  5.692]\n  7          5.692                   [2.846,  8.538]\n  8          8.538                   [4.269, 12.807]\n  9         12.807                   [6.403, 19.210]\n 10         19.210                   backoff.Stop\n\nNote: Implementation is not thread-safe.\n*/\ntype ExponentialBackOff struct {\n\tInitialInterval     time.Duration\n\tRandomizationFactor float64\n\tMultiplier          float64\n\tMaxInterval         time.Duration\n\t// After MaxElapsedTime the ExponentialBackOff stops.\n\t// It never stops if MaxElapsedTime == 0.\n\tMaxElapsedTime time.Duration\n\tClock          Clock\n\n\tcurrentInterval time.Duration\n\tstartTime       time.Time\n}\n\n// Clock is an interface that returns current time for BackOff.\ntype Clock interface {\n\tNow() time.Time\n}\n\n// Default values for ExponentialBackOff.\nconst (\n\tDefaultInitialInterval     = 500 * time.Millisecond\n\tDefaultRandomizationFactor = 0.5\n\tDefaultMultiplier          = 1.5\n\tDefaultMaxInterval         = 60 * time.Second\n\tDefaultMaxElapsedTime      = 15 * time.Minute\n)\n\n// NewExponentialBackOff creates an instance of ExponentialBackOff using default values.\nfunc NewExponentialBackOff() *ExponentialBackOff {\n\tb := &ExponentialBackOff{\n\t\tInitialInterval:     DefaultInitialInterval,\n\t\tRandomizationFactor: DefaultRandomizationFactor,\n\t\tMultiplier:          DefaultMultiplier,\n\t\tMaxInterval:         DefaultMaxInterval,\n\t\tMaxElapsedTime:      DefaultMaxElapsedTime,\n\t\tClock:               SystemClock,\n\t}\n\tif b.RandomizationFactor < 0 {\n\t\tb.RandomizationFactor = 0\n\t} else if b.RandomizationFactor > 1 {\n\t\tb.RandomizationFactor = 1\n\t}\n\tb.Reset()\n\treturn b\n}\n\ntype systemClock struct{}\n\nfunc (t systemClock) Now() time.Time {\n\treturn time.Now()\n}\n\n// SystemClock implements Clock interface that uses time.Now().\nvar SystemClock = systemClock{}\n\n// Reset the interval back to the initial retry interval and restarts the timer.\nfunc (b *ExponentialBackOff) Reset() {\n\tb.currentInterval = b.InitialInterval\n\tb.startTime = b.Clock.Now()\n}\n\n// NextBackOff calculates the next backoff interval using the formula:\n// \tRandomized interval = RetryInterval +/- (RandomizationFactor * RetryInterval)\nfunc (b *ExponentialBackOff) NextBackOff() time.Duration {\n\t// Make sure we have not gone over the maximum elapsed time.\n\tif b.MaxElapsedTime != 0 && b.GetElapsedTime() > b.MaxElapsedTime {\n\t\treturn Stop\n\t}\n\tdefer b.incrementCurrentInterval()\n\treturn getRandomValueFromInterval(b.RandomizationFactor, rand.Float64(), b.currentInterval)\n}\n\n// GetElapsedTime returns the elapsed time since an ExponentialBackOff instance\n// is created and is reset when Reset() is called.\n//\n// The elapsed time is computed using time.Now().UnixNano().\nfunc (b *ExponentialBackOff) GetElapsedTime() time.Duration {\n\treturn b.Clock.Now().Sub(b.startTime)\n}\n\n// Increments the current interval by multiplying it with the multiplier.\nfunc (b *ExponentialBackOff) incrementCurrentInterval() {\n\t// Check for overflow, if overflow is detected set the current interval to the max interval.\n\tif float64(b.currentInterval) >= float64(b.MaxInterval)/b.Multiplier {\n\t\tb.currentInterval = b.MaxInterval\n\t} else {\n\t\tb.currentInterval = time.Duration(float64(b.currentInterval) * b.Multiplier)\n\t}\n}\n\n// Returns a random value from the following interval:\n// \t[randomizationFactor * currentInterval, randomizationFactor * currentInterval].\nfunc getRandomValueFromInterval(randomizationFactor, random float64, currentInterval time.Duration) time.Duration {\n\tvar delta = randomizationFactor * float64(currentInterval)\n\tvar minInterval = float64(currentInterval) - delta\n\tvar maxInterval = float64(currentInterval) + delta\n\n\t// Get a random value from the range [minInterval, maxInterval].\n\t// The formula used below has a +1 because if the minInterval is 1 and the maxInterval is 3 then\n\t// we want a 33% chance for selecting either 1, 2 or 3.\n\treturn time.Duration(minInterval + (random * (maxInterval - minInterval + 1)))\n}\n"
  },
  {
    "path": "vendor/github.com/cenk/backoff/retry.go",
    "content": "package backoff\n\nimport \"time\"\n\n// An Operation is executing by Retry() or RetryNotify().\n// The operation will be retried using a backoff policy if it returns an error.\ntype Operation func() error\n\n// Notify is a notify-on-error function. It receives an operation error and\n// backoff delay if the operation failed (with an error).\n//\n// NOTE that if the backoff policy stated to stop retrying,\n// the notify function isn't called.\ntype Notify func(error, time.Duration)\n\n// Retry the operation o until it does not return error or BackOff stops.\n// o is guaranteed to be run at least once.\n// It is the caller's responsibility to reset b after Retry returns.\n//\n// Retry sleeps the goroutine for the duration returned by BackOff after a\n// failed operation returns.\nfunc Retry(o Operation, b BackOff) error { return RetryNotify(o, b, nil) }\n\n// RetryNotify calls notify function with the error and wait duration\n// for each failed attempt before sleep.\nfunc RetryNotify(operation Operation, b BackOff, notify Notify) error {\n\tvar err error\n\tvar next time.Duration\n\n\tb.Reset()\n\tfor {\n\t\tif err = operation(); err == nil {\n\t\t\treturn nil\n\t\t}\n\n\t\tif next = b.NextBackOff(); next == Stop {\n\t\t\treturn err\n\t\t}\n\n\t\tif notify != nil {\n\t\t\tnotify(err, next)\n\t\t}\n\n\t\ttime.Sleep(next)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cenk/backoff/ticker.go",
    "content": "package backoff\n\nimport (\n\t\"runtime\"\n\t\"sync\"\n\t\"time\"\n)\n\n// Ticker holds a channel that delivers `ticks' of a clock at times reported by a BackOff.\n//\n// Ticks will continue to arrive when the previous operation is still running,\n// so operations that take a while to fail could run in quick succession.\ntype Ticker struct {\n\tC        <-chan time.Time\n\tc        chan time.Time\n\tb        BackOff\n\tstop     chan struct{}\n\tstopOnce sync.Once\n}\n\n// NewTicker returns a new Ticker containing a channel that will send the time at times\n// specified by the BackOff argument. Ticker is guaranteed to tick at least once.\n// The channel is closed when Stop method is called or BackOff stops.\nfunc NewTicker(b BackOff) *Ticker {\n\tc := make(chan time.Time)\n\tt := &Ticker{\n\t\tC:    c,\n\t\tc:    c,\n\t\tb:    b,\n\t\tstop: make(chan struct{}),\n\t}\n\tgo t.run()\n\truntime.SetFinalizer(t, (*Ticker).Stop)\n\treturn t\n}\n\n// Stop turns off a ticker. After Stop, no more ticks will be sent.\nfunc (t *Ticker) Stop() {\n\tt.stopOnce.Do(func() { close(t.stop) })\n}\n\nfunc (t *Ticker) run() {\n\tc := t.c\n\tdefer close(c)\n\tt.b.Reset()\n\n\t// Ticker is guaranteed to tick at least once.\n\tafterC := t.send(time.Now())\n\n\tfor {\n\t\tif afterC == nil {\n\t\t\treturn\n\t\t}\n\n\t\tselect {\n\t\tcase tick := <-afterC:\n\t\t\tafterC = t.send(tick)\n\t\tcase <-t.stop:\n\t\t\tt.c = nil // Prevent future ticks from being sent to the channel.\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (t *Ticker) send(tick time.Time) <-chan time.Time {\n\tselect {\n\tcase t.c <- tick:\n\tcase <-t.stop:\n\t\treturn nil\n\t}\n\n\tnext := t.b.NextBackOff()\n\tif next == Stop {\n\t\tt.Stop()\n\t\treturn nil\n\t}\n\n\treturn time.After(next)\n}\n"
  },
  {
    "path": "vendor/github.com/imdario/mergo/.travis.yml",
    "content": "language: go\ninstall: go get -t\n"
  },
  {
    "path": "vendor/github.com/imdario/mergo/LICENSE",
    "content": "Copyright (c) 2013 Dario Castañé. All rights reserved.\nCopyright (c) 2012 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/imdario/mergo/README.md",
    "content": "# Mergo\n\nA helper to merge structs and maps in Golang. Useful for configuration default values, avoiding messy if-statements.\n\nAlso a lovely [comune](http://en.wikipedia.org/wiki/Mergo) (municipality) in the Province of Ancona in the Italian region Marche.\n\n![Mergo dall'alto](http://www.comune.mergo.an.it/Siti/Mergo/Immagini/Foto/mergo_dall_alto.jpg)\n\n## Status\n\nIt is ready for production use. It works fine after extensive use in the wild.\n\n[![Build Status][1]][2]\n[![GoDoc][3]][4]\n[![GoCard][5]][6]\n\n[1]: https://travis-ci.org/imdario/mergo.png\n[2]: https://travis-ci.org/imdario/mergo\n[3]: https://godoc.org/github.com/imdario/mergo?status.svg\n[4]: https://godoc.org/github.com/imdario/mergo\n[5]: https://goreportcard.com/badge/imdario/mergo\n[6]: https://goreportcard.com/report/github.com/imdario/mergo\n\n### Important note\n\nMergo is intended to assign **only** zero value fields on destination with source value. Since April 6th it works like this. Before it didn't work properly, causing some random overwrites. After some issues and PRs I found it didn't merge as I designed it. Thanks to [imdario/mergo#8](https://github.com/imdario/mergo/pull/8) overwriting functions were added and the wrong behavior was clearly detected.\n\nIf you were using Mergo **before** April 6th 2015, please check your project works as intended after updating your local copy with ```go get -u github.com/imdario/mergo```. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause (I hope it won't!) in existing projects after the change (release 0.2.0).\n\n### Mergo in the wild\n\n- [docker/docker](https://github.com/docker/docker/)\n- [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes)\n- [imdario/zas](https://github.com/imdario/zas)\n- [soniah/dnsmadeeasy](https://github.com/soniah/dnsmadeeasy)\n- [EagerIO/Stout](https://github.com/EagerIO/Stout)\n- [lynndylanhurley/defsynth-api](https://github.com/lynndylanhurley/defsynth-api)\n- [russross/canvasassignments](https://github.com/russross/canvasassignments)\n- [rdegges/cryptly-api](https://github.com/rdegges/cryptly-api)\n- [casualjim/exeggutor](https://github.com/casualjim/exeggutor)\n- [divshot/gitling](https://github.com/divshot/gitling)\n- [RWJMurphy/gorl](https://github.com/RWJMurphy/gorl)\n- [andrerocker/deploy42](https://github.com/andrerocker/deploy42)\n- [elwinar/rambler](https://github.com/elwinar/rambler)\n- [tmaiaroto/gopartman](https://github.com/tmaiaroto/gopartman)\n- [jfbus/impressionist](https://github.com/jfbus/impressionist)\n- [Jmeyering/zealot](https://github.com/Jmeyering/zealot)\n- [godep-migrator/rigger-host](https://github.com/godep-migrator/rigger-host)\n- [Dronevery/MultiwaySwitch-Go](https://github.com/Dronevery/MultiwaySwitch-Go)\n- [thoas/picfit](https://github.com/thoas/picfit)\n- [mantasmatelis/whooplist-server](https://github.com/mantasmatelis/whooplist-server)\n- [jnuthong/item_search](https://github.com/jnuthong/item_search)\n- [Iris Web Framework](https://github.com/kataras/iris)\n\n## Installation\n\n    go get github.com/imdario/mergo\n\n    // use in your .go code\n    import (\n        \"github.com/imdario/mergo\"\n    )\n\n## Usage\n\nYou can only merge same-type structs with exported fields initialized as zero value of their type and same-types maps. Mergo won't merge unexported (private) fields but will do recursively any exported one. Also maps will be merged recursively except for structs inside maps (because they are not addressable using Go reflection).\n\n    if err := mergo.Merge(&dst, src); err != nil {\n        // ...\n    }\n\nAdditionally, you can map a map[string]interface{} to a struct (and otherwise, from struct to map), following the same restrictions as in Merge(). Keys are capitalized to find each corresponding exported field.\n\n    if err := mergo.Map(&dst, srcMap); err != nil {\n        // ...\n    }\n\nWarning: if you map a struct to map, it won't do it recursively. Don't expect Mergo to map struct members of your struct as map[string]interface{}. They will be just assigned as values.\n\nMore information and examples in [godoc documentation](http://godoc.org/github.com/imdario/mergo).\n\n### Nice example\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/imdario/mergo\"\n)\n\ntype Foo struct {\n\tA string\n\tB int64\n}\n\nfunc main() {\n\tsrc := Foo{\n\t\tA: \"one\",\n\t}\n\n\tdest := Foo{\n\t\tA: \"two\",\n\t\tB: 2,\n\t}\n\n\tmergo.Merge(&dest, src)\n\n\tfmt.Println(dest)\n\t// Will print\n\t// {two 2}\n}\n```\n\nNote: if test are failing due missing package, please execute:\n\n    go get gopkg.in/yaml.v1\n\n## Contact me\n\nIf I can help you, you have an idea or you are using Mergo in your projects, don't hesitate to drop me a line (or a pull request): [@im_dario](https://twitter.com/im_dario)\n\n## About\n\nWritten by [Dario Castañé](http://dario.im).\n\n## License\n\n[BSD 3-Clause](http://opensource.org/licenses/BSD-3-Clause) license, as [Go language](http://golang.org/LICENSE).\n"
  },
  {
    "path": "vendor/github.com/imdario/mergo/doc.go",
    "content": "// Copyright 2013 Dario Castañé. All rights reserved.\n// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n/*\nPackage mergo merges same-type structs and maps by setting default values in zero-value fields.\n\nMergo won't merge unexported (private) fields but will do recursively any exported one. It also won't merge structs inside maps (because they are not addressable using Go reflection).\n\nUsage\n\nFrom my own work-in-progress project:\n\n\ttype networkConfig struct {\n\t\tProtocol string\n\t\tAddress string\n\t\tServerType string `json: \"server_type\"`\n\t\tPort uint16\n\t}\n\n\ttype FssnConfig struct {\n\t\tNetwork networkConfig\n\t}\n\n\tvar fssnDefault = FssnConfig {\n\t\tnetworkConfig {\n\t\t\t\"tcp\",\n\t\t\t\"127.0.0.1\",\n\t\t\t\"http\",\n\t\t\t31560,\n\t\t},\n\t}\n\n\t// Inside a function [...]\n\n\tif err := mergo.Merge(&config, fssnDefault); err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\t// More code [...]\n\n*/\npackage mergo\n"
  },
  {
    "path": "vendor/github.com/imdario/mergo/map.go",
    "content": "// Copyright 2014 Dario Castañé. All rights reserved.\n// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Based on src/pkg/reflect/deepequal.go from official\n// golang's stdlib.\n\npackage mergo\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\nfunc changeInitialCase(s string, mapper func(rune) rune) string {\n\tif s == \"\" {\n\t\treturn s\n\t}\n\tr, n := utf8.DecodeRuneInString(s)\n\treturn string(mapper(r)) + s[n:]\n}\n\nfunc isExported(field reflect.StructField) bool {\n\tr, _ := utf8.DecodeRuneInString(field.Name)\n\treturn r >= 'A' && r <= 'Z'\n}\n\n// Traverses recursively both values, assigning src's fields values to dst.\n// The map argument tracks comparisons that have already been seen, which allows\n// short circuiting on recursive types.\nfunc deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth int, overwrite bool) (err error) {\n\tif dst.CanAddr() {\n\t\taddr := dst.UnsafeAddr()\n\t\th := 17 * addr\n\t\tseen := visited[h]\n\t\ttyp := dst.Type()\n\t\tfor p := seen; p != nil; p = p.next {\n\t\t\tif p.ptr == addr && p.typ == typ {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\t// Remember, remember...\n\t\tvisited[h] = &visit{addr, typ, seen}\n\t}\n\tzeroValue := reflect.Value{}\n\tswitch dst.Kind() {\n\tcase reflect.Map:\n\t\tdstMap := dst.Interface().(map[string]interface{})\n\t\tfor i, n := 0, src.NumField(); i < n; i++ {\n\t\t\tsrcType := src.Type()\n\t\t\tfield := srcType.Field(i)\n\t\t\tif !isExported(field) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfieldName := field.Name\n\t\t\tfieldName = changeInitialCase(fieldName, unicode.ToLower)\n\t\t\tif v, ok := dstMap[fieldName]; !ok || (isEmptyValue(reflect.ValueOf(v)) || overwrite) {\n\t\t\t\tdstMap[fieldName] = src.Field(i).Interface()\n\t\t\t}\n\t\t}\n\tcase reflect.Struct:\n\t\tsrcMap := src.Interface().(map[string]interface{})\n\t\tfor key := range srcMap {\n\t\t\tsrcValue := srcMap[key]\n\t\t\tfieldName := changeInitialCase(key, unicode.ToUpper)\n\t\t\tdstElement := dst.FieldByName(fieldName)\n\t\t\tif dstElement == zeroValue {\n\t\t\t\t// We discard it because the field doesn't exist.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsrcElement := reflect.ValueOf(srcValue)\n\t\t\tdstKind := dstElement.Kind()\n\t\t\tsrcKind := srcElement.Kind()\n\t\t\tif srcKind == reflect.Ptr && dstKind != reflect.Ptr {\n\t\t\t\tsrcElement = srcElement.Elem()\n\t\t\t\tsrcKind = reflect.TypeOf(srcElement.Interface()).Kind()\n\t\t\t} else if dstKind == reflect.Ptr {\n\t\t\t\t// Can this work? I guess it can't.\n\t\t\t\tif srcKind != reflect.Ptr && srcElement.CanAddr() {\n\t\t\t\t\tsrcPtr := srcElement.Addr()\n\t\t\t\t\tsrcElement = reflect.ValueOf(srcPtr)\n\t\t\t\t\tsrcKind = reflect.Ptr\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !srcElement.IsValid() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif srcKind == dstKind {\n\t\t\t\tif err = deepMerge(dstElement, srcElement, visited, depth+1, overwrite); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif srcKind == reflect.Map {\n\t\t\t\t\tif err = deepMap(dstElement, srcElement, visited, depth+1, overwrite); err != nil {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn fmt.Errorf(\"type mismatch on %s field: found %v, expected %v\", fieldName, srcKind, dstKind)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn\n}\n\n// Map sets fields' values in dst from src.\n// src can be a map with string keys or a struct. dst must be the opposite:\n// if src is a map, dst must be a valid pointer to struct. If src is a struct,\n// dst must be map[string]interface{}.\n// It won't merge unexported (private) fields and will do recursively\n// any exported field.\n// If dst is a map, keys will be src fields' names in lower camel case.\n// Missing key in src that doesn't match a field in dst will be skipped. This\n// doesn't apply if dst is a map.\n// This is separated method from Merge because it is cleaner and it keeps sane\n// semantics: merging equal types, mapping different (restricted) types.\nfunc Map(dst, src interface{}) error {\n\treturn _map(dst, src, false)\n}\n\n// MapWithOverwrite will do the same as Map except that non-empty dst attributes will be overriden by\n// non-empty src attribute values.\nfunc MapWithOverwrite(dst, src interface{}) error {\n\treturn _map(dst, src, true)\n}\n\nfunc _map(dst, src interface{}, overwrite bool) error {\n\tvar (\n\t\tvDst, vSrc reflect.Value\n\t\terr        error\n\t)\n\tif vDst, vSrc, err = resolveValues(dst, src); err != nil {\n\t\treturn err\n\t}\n\t// To be friction-less, we redirect equal-type arguments\n\t// to deepMerge. Only because arguments can be anything.\n\tif vSrc.Kind() == vDst.Kind() {\n\t\treturn deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, overwrite)\n\t}\n\tswitch vSrc.Kind() {\n\tcase reflect.Struct:\n\t\tif vDst.Kind() != reflect.Map {\n\t\t\treturn ErrExpectedMapAsDestination\n\t\t}\n\tcase reflect.Map:\n\t\tif vDst.Kind() != reflect.Struct {\n\t\t\treturn ErrExpectedStructAsDestination\n\t\t}\n\tdefault:\n\t\treturn ErrNotSupported\n\t}\n\treturn deepMap(vDst, vSrc, make(map[uintptr]*visit), 0, overwrite)\n}\n"
  },
  {
    "path": "vendor/github.com/imdario/mergo/merge.go",
    "content": "// Copyright 2013 Dario Castañé. All rights reserved.\n// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Based on src/pkg/reflect/deepequal.go from official\n// golang's stdlib.\n\npackage mergo\n\nimport (\n\t\"reflect\"\n)\n\n// Traverses recursively both values, assigning src's fields values to dst.\n// The map argument tracks comparisons that have already been seen, which allows\n// short circuiting on recursive types.\nfunc deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, overwrite bool) (err error) {\n\tif !src.IsValid() {\n\t\treturn\n\t}\n\tif dst.CanAddr() {\n\t\taddr := dst.UnsafeAddr()\n\t\th := 17 * addr\n\t\tseen := visited[h]\n\t\ttyp := dst.Type()\n\t\tfor p := seen; p != nil; p = p.next {\n\t\t\tif p.ptr == addr && p.typ == typ {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\t// Remember, remember...\n\t\tvisited[h] = &visit{addr, typ, seen}\n\t}\n\tswitch dst.Kind() {\n\tcase reflect.Struct:\n\t\tfor i, n := 0, dst.NumField(); i < n; i++ {\n\t\t\tif err = deepMerge(dst.Field(i), src.Field(i), visited, depth+1, overwrite); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\tcase reflect.Map:\n\t\tfor _, key := range src.MapKeys() {\n\t\t\tsrcElement := src.MapIndex(key)\n\t\t\tif !srcElement.IsValid() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tdstElement := dst.MapIndex(key)\n\t\t\tswitch srcElement.Kind() {\n\t\t\tcase reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.Interface, reflect.Slice:\n\t\t\t\tif srcElement.IsNil() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfallthrough\n\t\t\tdefault:\n\t\t\t\tif !srcElement.CanInterface() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tswitch reflect.TypeOf(srcElement.Interface()).Kind() {\n\t\t\t\tcase reflect.Struct:\n\t\t\t\t\tfallthrough\n\t\t\t\tcase reflect.Ptr:\n\t\t\t\t\tfallthrough\n\t\t\t\tcase reflect.Map:\n\t\t\t\t\tif err = deepMerge(dstElement, srcElement, visited, depth+1, overwrite); err != nil {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !isEmptyValue(srcElement) && (overwrite || (!dstElement.IsValid() || isEmptyValue(dst))) {\n\t\t\t\tif dst.IsNil() {\n\t\t\t\t\tdst.Set(reflect.MakeMap(dst.Type()))\n\t\t\t\t}\n\t\t\t\tdst.SetMapIndex(key, srcElement)\n\t\t\t}\n\t\t}\n\tcase reflect.Ptr:\n\t\tfallthrough\n\tcase reflect.Interface:\n\t\tif src.IsNil() {\n\t\t\tbreak\n\t\t} else if dst.IsNil() || overwrite {\n\t\t\tif dst.CanSet() && (overwrite || isEmptyValue(dst)) {\n\t\t\t\tdst.Set(src)\n\t\t\t}\n\t\t} else if err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, overwrite); err != nil {\n\t\t\treturn\n\t\t}\n\tdefault:\n\t\tif dst.CanSet() && !isEmptyValue(src) && (overwrite || isEmptyValue(dst)) {\n\t\t\tdst.Set(src)\n\t\t}\n\t}\n\treturn\n}\n\n// Merge will fill any empty for value type attributes on the dst struct using corresponding\n// src attributes if they themselves are not empty. dst and src must be valid same-type structs\n// and dst must be a pointer to struct.\n// It won't merge unexported (private) fields and will do recursively any exported field.\nfunc Merge(dst, src interface{}) error {\n\treturn merge(dst, src, false)\n}\n\n// MergeWithOverwrite will do the same as Merge except that non-empty dst attributes will be overriden by\n// non-empty src attribute values.\nfunc MergeWithOverwrite(dst, src interface{}) error {\n\treturn merge(dst, src, true)\n}\n\nfunc merge(dst, src interface{}, overwrite bool) error {\n\tvar (\n\t\tvDst, vSrc reflect.Value\n\t\terr        error\n\t)\n\tif vDst, vSrc, err = resolveValues(dst, src); err != nil {\n\t\treturn err\n\t}\n\tif vDst.Type() != vSrc.Type() {\n\t\treturn ErrDifferentArgumentsTypes\n\t}\n\treturn deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, overwrite)\n}\n"
  },
  {
    "path": "vendor/github.com/imdario/mergo/mergo.go",
    "content": "// Copyright 2013 Dario Castañé. All rights reserved.\n// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Based on src/pkg/reflect/deepequal.go from official\n// golang's stdlib.\n\npackage mergo\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n)\n\n// Errors reported by Mergo when it finds invalid arguments.\nvar (\n\tErrNilArguments                = errors.New(\"src and dst must not be nil\")\n\tErrDifferentArgumentsTypes     = errors.New(\"src and dst must be of same type\")\n\tErrNotSupported                = errors.New(\"only structs and maps are supported\")\n\tErrExpectedMapAsDestination    = errors.New(\"dst was expected to be a map\")\n\tErrExpectedStructAsDestination = errors.New(\"dst was expected to be a struct\")\n)\n\n// During deepMerge, must keep track of checks that are\n// in progress.  The comparison algorithm assumes that all\n// checks in progress are true when it reencounters them.\n// Visited are stored in a map indexed by 17 * a1 + a2;\ntype visit struct {\n\tptr  uintptr\n\ttyp  reflect.Type\n\tnext *visit\n}\n\n// From src/pkg/encoding/json.\nfunc isEmptyValue(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.Array, reflect.Map, reflect.Slice, reflect.String:\n\t\treturn v.Len() == 0\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn v.Uint() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.Interface, reflect.Ptr:\n\t\treturn v.IsNil()\n\t}\n\treturn false\n}\n\nfunc resolveValues(dst, src interface{}) (vDst, vSrc reflect.Value, err error) {\n\tif dst == nil || src == nil {\n\t\terr = ErrNilArguments\n\t\treturn\n\t}\n\tvDst = reflect.ValueOf(dst).Elem()\n\tif vDst.Kind() != reflect.Struct && vDst.Kind() != reflect.Map {\n\t\terr = ErrNotSupported\n\t\treturn\n\t}\n\tvSrc = reflect.ValueOf(src)\n\t// We check if vSrc is a pointer to dereference it.\n\tif vSrc.Kind() == reflect.Ptr {\n\t\tvSrc = vSrc.Elem()\n\t}\n\treturn\n}\n\n// Traverses recursively both values, assigning src's fields values to dst.\n// The map argument tracks comparisons that have already been seen, which allows\n// short circuiting on recursive types.\nfunc deeper(dst, src reflect.Value, visited map[uintptr]*visit, depth int) (err error) {\n\tif dst.CanAddr() {\n\t\taddr := dst.UnsafeAddr()\n\t\th := 17 * addr\n\t\tseen := visited[h]\n\t\ttyp := dst.Type()\n\t\tfor p := seen; p != nil; p = p.next {\n\t\t\tif p.ptr == addr && p.typ == typ {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\t// Remember, remember...\n\t\tvisited[h] = &visit{addr, typ, seen}\n\t}\n\treturn // TODO refactor\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/go-homedir/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Mitchell Hashimoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mitchellh/go-homedir/README.md",
    "content": "# go-homedir\n\nThis is a Go library for detecting the user's home directory without\nthe use of cgo, so the library can be used in cross-compilation environments.\n\nUsage is incredibly simple, just call `homedir.Dir()` to get the home directory\nfor a user, and `homedir.Expand()` to expand the `~` in a path to the home\ndirectory.\n\n**Why not just use `os/user`?** The built-in `os/user` package requires\ncgo on Darwin systems. This means that any Go code that uses that package\ncannot cross compile. But 99% of the time the use for `os/user` is just to\nretrieve the home directory, which we can do for the current user without\ncgo. This library does that, enabling cross-compilation.\n"
  },
  {
    "path": "vendor/github.com/mitchellh/go-homedir/homedir.go",
    "content": "package homedir\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\n// DisableCache will disable caching of the home directory. Caching is enabled\n// by default.\nvar DisableCache bool\n\nvar homedirCache string\nvar cacheLock sync.RWMutex\n\n// Dir returns the home directory for the executing user.\n//\n// This uses an OS-specific method for discovering the home directory.\n// An error is returned if a home directory cannot be detected.\nfunc Dir() (string, error) {\n\tif !DisableCache {\n\t\tcacheLock.RLock()\n\t\tcached := homedirCache\n\t\tcacheLock.RUnlock()\n\t\tif cached != \"\" {\n\t\t\treturn cached, nil\n\t\t}\n\t}\n\n\tcacheLock.Lock()\n\tdefer cacheLock.Unlock()\n\n\tvar result string\n\tvar err error\n\tif runtime.GOOS == \"windows\" {\n\t\tresult, err = dirWindows()\n\t} else {\n\t\t// Unix-like system, so just assume Unix\n\t\tresult, err = dirUnix()\n\t}\n\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\thomedirCache = result\n\treturn result, nil\n}\n\n// Expand expands the path to include the home directory if the path\n// is prefixed with `~`. If it isn't prefixed with `~`, the path is\n// returned as-is.\nfunc Expand(path string) (string, error) {\n\tif len(path) == 0 {\n\t\treturn path, nil\n\t}\n\n\tif path[0] != '~' {\n\t\treturn path, nil\n\t}\n\n\tif len(path) > 1 && path[1] != '/' && path[1] != '\\\\' {\n\t\treturn \"\", errors.New(\"cannot expand user-specific home dir\")\n\t}\n\n\tdir, err := Dir()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn filepath.Join(dir, path[1:]), nil\n}\n\nfunc dirUnix() (string, error) {\n\t// First prefer the HOME environmental variable\n\tif home := os.Getenv(\"HOME\"); home != \"\" {\n\t\treturn home, nil\n\t}\n\n\t// If that fails, try getent\n\tvar stdout bytes.Buffer\n\tcmd := exec.Command(\"getent\", \"passwd\", strconv.Itoa(os.Getuid()))\n\tcmd.Stdout = &stdout\n\tif err := cmd.Run(); err != nil {\n\t\t// If \"getent\" is missing, ignore it\n\t\tif err == exec.ErrNotFound {\n\t\t\treturn \"\", err\n\t\t}\n\t} else {\n\t\tif passwd := strings.TrimSpace(stdout.String()); passwd != \"\" {\n\t\t\t// username:password:uid:gid:gecos:home:shell\n\t\t\tpasswdParts := strings.SplitN(passwd, \":\", 7)\n\t\t\tif len(passwdParts) > 5 {\n\t\t\t\treturn passwdParts[5], nil\n\t\t\t}\n\t\t}\n\t}\n\n\t// If all else fails, try the shell\n\tstdout.Reset()\n\tcmd = exec.Command(\"sh\", \"-c\", \"cd && pwd\")\n\tcmd.Stdout = &stdout\n\tif err := cmd.Run(); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tresult := strings.TrimSpace(stdout.String())\n\tif result == \"\" {\n\t\treturn \"\", errors.New(\"blank output when reading home directory\")\n\t}\n\n\treturn result, nil\n}\n\nfunc dirWindows() (string, error) {\n\t// First prefer the HOME environmental variable\n\tif home := os.Getenv(\"HOME\"); home != \"\" {\n\t\treturn home, nil\n\t}\n\n\tdrive := os.Getenv(\"HOMEDRIVE\")\n\tpath := os.Getenv(\"HOMEPATH\")\n\thome := drive + path\n\tif drive == \"\" || path == \"\" {\n\t\thome = os.Getenv(\"USERPROFILE\")\n\t}\n\tif home == \"\" {\n\t\treturn \"\", errors.New(\"HOMEDRIVE, HOMEPATH, and USERPROFILE are blank\")\n\t}\n\n\treturn home, nil\n}\n"
  },
  {
    "path": "vendor/github.com/wsxiaoys/terminal/LICENSE",
    "content": "Copyright (c) 2013 Meng Zhang. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/wsxiaoys/terminal/color/color.go",
    "content": "// The colors package provide a simple way to bring colorful characters to terminal interface.\n//\n// This example will output the text with a Blue foreground and a Black background\n//      color.Println(\"@{bK}Example Text\")\n//\n// This one will output the text with a red foreground\n//      color.Println(\"@rExample Text\")\n//\n// This one will escape the @\n//      color.Println(\"@@\")\n//\n// Full color syntax code\n//      @{rgbcmykwRGBCMYKW}  foreground/background color\n//        r/R:  Red\n//        g/G:  Green\n//        b/B:  Blue\n//        c/C:  Cyan\n//        m/M:  Magenta\n//        y/Y:  Yellow\n//        k/K:  Black\n//        w/W:  White\n//      @{|}  Reset format style\n//      @{!./_} Bold / Dim / Italic / Underline\n//      @{^&} Blink / Fast blink\n//      @{*} High intensity foreground color\n//      @{?} Reverse the foreground and background color\n//      @{-} Hide the text\n// Note some of the functions are not widely supported, like \"Fast blink\" and \"Italic\".\npackage color\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n)\n\nconst (\n\tEscapeChar = '@'       // Escape character for color syntax\n\tResetCode  = \"\\033[0m\" // Short for reset to default style\n)\n\n// Mapping from character to concrete escape code.\nvar codeMap = map[int]int{\n\t'|': 0,\n\t'!': 1,\n\t'.': 2,\n\t'/': 3,\n\t'_': 4,\n\t'^': 5,\n\t'&': 6,\n\t'?': 7,\n\t'-': 8,\n\t'*': 60,\n\n\t'k': 30,\n\t'r': 31,\n\t'g': 32,\n\t'y': 33,\n\t'b': 34,\n\t'm': 35,\n\t'c': 36,\n\t'w': 37,\n\t'd': 39,\n\n\t'K': 40,\n\t'R': 41,\n\t'G': 42,\n\t'Y': 43,\n\t'B': 44,\n\t'M': 45,\n\t'C': 46,\n\t'W': 47,\n\t'D': 49,\n}\n\n// Compile color syntax string like \"rG\" to escape code.\nfunc Colorize(x string) string {\n\tattr := 0\n\tfg := 39\n\tbg := 49\n\n\tfor _, key := range x {\n\t\tc, ok := codeMap[int(key)]\n\t\tswitch {\n\t\tcase !ok:\n\t\t\tlog.Printf(\"Wrong color syntax: %c\", key)\n\t\tcase 0 <= c && c <= 8:\n\t\t\tattr = c\n\t\tcase 30 <= c && c <= 37:\n\t\t\tfg = c\n\t\tcase 40 <= c && c <= 47:\n\t\t\tbg = c\n\t\tcase c == 60:\n\t\t\tfg += c\n\t\t}\n\t}\n\treturn fmt.Sprintf(\"\\033[%d;%d;%dm\", attr, fg, bg)\n}\n\n// Handle state after meeting one '@'\nfunc compileColorSyntax(input, output *bytes.Buffer) {\n\ti, _, err := input.ReadRune()\n\tif err != nil {\n\t\t// EOF got\n\t\tlog.Print(\"Parse failed on color syntax\")\n\t\treturn\n\t}\n\n\tswitch i {\n\tdefault:\n\t\toutput.WriteString(Colorize(string(i)))\n\tcase '{':\n\t\tcolor := bytes.NewBufferString(\"\")\n\t\tfor {\n\t\t\ti, _, err := input.ReadRune()\n\t\t\tif err != nil {\n\t\t\t\tlog.Print(\"Parse failed on color syntax\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif i == '}' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcolor.WriteRune(i)\n\t\t}\n\t\toutput.WriteString(Colorize(color.String()))\n\tcase EscapeChar:\n\t\toutput.WriteRune(EscapeChar)\n\t}\n}\n\n// Compile the string and replace color syntax with concrete escape code.\nfunc compile(x string) string {\n\tif x == \"\" {\n\t\treturn \"\"\n\t}\n\n\tinput := bytes.NewBufferString(x)\n\toutput := bytes.NewBufferString(\"\")\n\n\tfor {\n\t\ti, _, err := input.ReadRune()\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch i {\n\t\tdefault:\n\t\t\toutput.WriteRune(i)\n\t\tcase EscapeChar:\n\t\t\tcompileColorSyntax(input, output)\n\t\t}\n\t}\n\treturn output.String()\n}\n\n// Compile multiple values, only do compiling on string type.\nfunc compileValues(a *[]interface{}) {\n\tfor i, x := range *a {\n\t\tif str, ok := x.(string); ok {\n\t\t\t(*a)[i] = compile(str)\n\t\t}\n\t}\n}\n\n// Similar to fmt.Print, will reset the color at the end.\nfunc Print(a ...interface{}) (int, error) {\n\ta = append(a, ResetCode)\n\tcompileValues(&a)\n\treturn fmt.Print(a...)\n}\n\n// Similar to fmt.Println, will reset the color at the end.\nfunc Println(a ...interface{}) (int, error) {\n\ta = append(a, ResetCode)\n\tcompileValues(&a)\n\treturn fmt.Println(a...)\n}\n\n// Similar to fmt.Printf, will reset the color at the end.\nfunc Printf(format string, a ...interface{}) (int, error) {\n\tformat += ResetCode\n\tformat = compile(format)\n\treturn fmt.Printf(format, a...)\n}\n\n// Similar to fmt.Fprint, will reset the color at the end.\nfunc Fprint(w io.Writer, a ...interface{}) (int, error) {\n\ta = append(a, ResetCode)\n\tcompileValues(&a)\n\treturn fmt.Fprint(w, a...)\n}\n\n// Similar to fmt.Fprintln, will reset the color at the end.\nfunc Fprintln(w io.Writer, a ...interface{}) (int, error) {\n\ta = append(a, ResetCode)\n\tcompileValues(&a)\n\treturn fmt.Fprintln(w, a...)\n}\n\n// Similar to fmt.Fprintf, will reset the color at the end.\nfunc Fprintf(w io.Writer, format string, a ...interface{}) (int, error) {\n\tformat += ResetCode\n\tformat = compile(format)\n\treturn fmt.Fprintf(w, format, a...)\n}\n\n// Similar to fmt.Sprint, will reset the color at the end.\nfunc Sprint(a ...interface{}) string {\n\ta = append(a, ResetCode)\n\tcompileValues(&a)\n\treturn fmt.Sprint(a...)\n}\n\n// Similar to fmt.Sprintf, will reset the color at the end.\nfunc Sprintf(format string, a ...interface{}) string {\n\tformat += ResetCode\n\tformat = compile(format)\n\treturn fmt.Sprintf(format, a...)\n}\n\n// Similar to fmt.Errorf, will reset the color at the end.\nfunc Errorf(format string, a ...interface{}) error {\n\treturn errors.New(Sprintf(format, a...))\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/go-ini/.gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n*.exe\n*.test\n*.prof\n*.nope\n"
  },
  {
    "path": "vendor/github.com/zackbloom/go-ini/README.md",
    "content": "go-ini\n======\n\nINI file decoder for Go lang.  Idea is to have an unmarshaller similar to JSON - specify parts of the file you want coded with structs and tags.\n\nFor example, for an INI file like this:\n\n    [Pod_mysql]\n    cache_size = 2000\n    default_socket = /tmp/mysql.sock\n\n    [Mysql]\n    default_socket = /tmp/mysql.sock\n\nDecode into a structure like this:\n\n    type MyIni struct {\n\n        PdoMysql struct {\n            CacheSize     int `ini:\"cache_size\"`\n            DefaultSocket string `ini:\"default_socket\"`\n        } `ini:\"[Pdo_myqsl]\"`\n\n        Mysql struct {\n            DefaultSocket string `ini:\"default_socket\"`\n        } `ini:\"[Myqsl]\"`\n    }\n\nWith code like this:\n\n    var config MyIni\n    var b []byte      // config file stored here\n    err := ini.Unmarshal(b, &config)\n\n\nAdvanced Types\n==============\n\nOver the years, INI files have grown from simple `name=value` lists of properties to files that support arrays and arrays of structures.  For example, to support playlists a music config file may look like this:\n\n    [CREATE SONG]\n    SongId=21348\n    Title=Long Way to Go\n    Artist=The Coach\n\n    [CREATE SONG]\n    SongId=9855\n    Title=The Falcon Lead\n    Artist=It Wasn't Safe\n\n    [CREATE PLAYLIST]\n    PlaylistId=438432\n    Title=Acid Jazz\n    Song=21348\n    Song=482\n    Song=9855\n\n    [CREATE PLAYLIST]\n    PlaylistId=2585\n    Title=Lounge\n    Song=7558\n    Song=25828\n\nWith GO-INI, parsing is as simple as defining the structure and unmarshalling it.\n\n    package main\n\n    import (\n        \"encoding/json\"\n        \"github.com/sspencer/go-ini\"\n        \"io/ioutil\"\n        \"log\"\n        \"os\"\n    )\n\n    type TunePlayer struct {\n        Songs []struct {\n            SongId int\n            Title string\n            Artist string\n        } `ini:\"[CREATE SONG]\"`\n\n        Playlists []struct {\n            PlaylistId int\n            Title string\n            SongIds []int `ini:\"Song\"`\n        } `ini:[CREATE PLAYLIST]`\n    }\n\n    func main() {\n        var player TunePlayer\n\n        content, err := ioutil.ReadFile(\"./tunes.ini\")\n        if err != nil {\n            log.Fatal(err)\n        }\n\n        err = ini.Unmarshal(content, &player)\n        if err != nil {\n            log.Fatal(err)\n        }\n\n        // Output same struct as JSON to verify parsing worked\n        enc := json.NewEncoder(os.Stdout)\n        if err := enc.Encode(&player); err != nil {\n            log.Println(err)\n        }\n    }\n\n\n\n\n\nTodo\n=====\n\nNeed to parse inner array of structs\n\n    struct {\n        Playlists []struct {\n            Id int\n            Title string\n            Programs []struct {\n                Id int\n                Mix string\n                Separation int\n            } `ini:\"Play Program\"`\n        } `ini:\"[CREATE PLAYLIST]\"`\n    }\n\n    [CREATE PLAYLIST]\n    ID=6524\n    Title=Pop\n    Start Schedule\n\n    Play Program\n    ID=391\n    Mix=RAND\n\n    Play Program\n    ID=3912\n    Separation=10\n    End Schedule\n"
  },
  {
    "path": "vendor/github.com/zackbloom/go-ini/decode.go",
    "content": "// Decode INI files with a syntax similar to JSON decoding\npackage ini\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype Unmatched struct {\n\tlineNum int\n\tline    string\n}\n\ntype IniError struct {\n\tlineNum int\n\tline    string\n\terror   string\n}\n\n// decodeState represents the state while decoding a INI value.\ntype decodeState struct {\n\tlineNum    int\n\tline       string\n\tscanner    *bufio.Scanner\n\tsavedError error\n\tunmatched  []Unmatched\n}\n\ntype property struct {\n\ttag      string\n\tvalue    reflect.Value\n\tchildren propertyMap\n\tisArray  bool\n\t//array         []interface{}\n\tisInitialized bool\n}\n\ntype propertyMap map[string]property\n\n//------------------------------------------------------------------\n\n// NewStack returns a new stack.\nfunc NewPropMapStack() *PropMapStack {\n\treturn &PropMapStack{}\n}\n\n// Stack is a basic LIFO stack that resizes as needed.\ntype PropMapStack struct {\n\titems []propertyMap\n\tcount int\n}\n\n// Push adds an iterm to the top of the stack\nfunc (s *PropMapStack) Push(item propertyMap) {\n\ts.items = append(s.items[:s.count], item)\n\ts.count++\n}\n\n// Pop removes the top item (LIFO) from the stack\nfunc (s *PropMapStack) Pop() propertyMap {\n\tif s.count == 0 {\n\t\treturn nil\n\t}\n\n\ts.count--\n\treturn s.items[s.count]\n}\n\n// Peek returns item at top of stack without removing it\nfunc (s *PropMapStack) Peek() propertyMap {\n\tif s.count == 0 {\n\t\treturn nil\n\t}\n\n\treturn s.items[s.count-1]\n}\n\n// Empty returns true when stack is empty, false otherwise\nfunc (s *PropMapStack) Empty() bool {\n\treturn s.count == 0\n}\n\n// Size returns the number of items in the stack\nfunc (s *PropMapStack) Size() int {\n\treturn s.count\n}\n\n/*\n * Unmarshal parses the INI-encoded data and stores the result\n * in the value pointed to by v.\n */\nfunc Unmarshal(data []byte, v interface{}) error {\n\tvar d decodeState\n\td.init(data)\n\treturn d.unmarshal(v)\n}\n\n/*\n * String interfacer for Unmatched\n */\nfunc (u Unmatched) String() string {\n\treturn fmt.Sprintf(\"%d %s\", u.lineNum, u.line)\n}\n\n/*\n * Conform to Error Interfacer\n */\nfunc (e *IniError) Error() string {\n\tif e.lineNum > 0 {\n\t\treturn fmt.Sprintf(\"%s on line %d: \\\"%s\\\"\", e.error, e.lineNum, e.line)\n\t} else {\n\t\treturn e.error\n\t}\n}\n\n/*\n * Stringer interface for property\n */\nfunc (p property) String() string {\n\treturn fmt.Sprintf(\"<property %s, isArray:%t>\", p.tag, p.isArray)\n}\n\n/*\n * Convenience function to prep for decoding byte array.\n */\nfunc (d *decodeState) init(data []byte) *decodeState {\n\n\td.lineNum = 0\n\td.line = \"\"\n\td.scanner = bufio.NewScanner(bytes.NewReader(data))\n\td.savedError = nil\n\n\treturn d\n}\n\n/*\n * saveError saves the first err it is called with,\n * for reporting at the end of the unmarshal.\n */\nfunc (d *decodeState) saveError(err error) {\n\tif d.savedError == nil {\n\t\td.savedError = err\n\t}\n}\n\n/*\n * Recursive function to map data types in the describing structs\n * to string markers (tags) in the INI file.\n */\nfunc (d *decodeState) generateMap(m propertyMap, v reflect.Value) {\n\n\tif v.Type().Kind() == reflect.Ptr {\n\t\td.generateMap(m, v.Elem())\n\t} else if v.Kind() == reflect.Struct {\n\t\ttyp := v.Type()\n\t\tfor i := 0; i < typ.NumField(); i++ {\n\n\t\t\tsf := typ.Field(i)\n\t\t\tf := v.Field(i)\n\t\t\tkind := f.Type().Kind()\n\n\t\t\ttag := sf.Tag.Get(\"ini\")\n\t\t\tif len(tag) == 0 {\n\t\t\t\ttag = sf.Name\n\t\t\t}\n\t\t\ttag = strings.TrimSpace(strings.ToLower(tag))\n\n\t\t\tst := property{tag, f, make(propertyMap), kind == reflect.Slice, true}\n\n\t\t\t// some structures are just for organizing data\n\t\t\tif tag != \"-\" {\n\t\t\t\tm[tag] = st\n\t\t\t}\n\n\t\t\tif kind == reflect.Struct {\n\t\t\t\tif tag == \"-\" {\n\t\t\t\t\td.generateMap(m, f)\n\t\t\t\t} else {\n\t\t\t\t\t// little namespacing here so property names can\n\t\t\t\t\t// be the same under different sections\n\t\t\t\t\t//fmt.Printf(\"Struct tag: %s, type: %s\\n\", tag, f.Type())\n\t\t\t\t\td.generateMap(st.children, f)\n\t\t\t\t}\n\t\t\t} else if kind == reflect.Slice {\n\t\t\t\td.generateMap(st.children, reflect.New(f.Type().Elem()))\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\n * Iterates line-by-line through INI file setting values into a struct.\n */\nfunc (d *decodeState) unmarshal(x interface{}) error {\n\n\tvar topMap propertyMap\n\ttopMap = make(propertyMap)\n\n\td.generateMap(topMap, reflect.ValueOf(x))\n\n\tpropStack := NewPropMapStack()\n\tpropStack.Push(topMap)\n\n\t// for every line in file\n\tfor d.scanner.Scan() {\n\n\t\tif d.savedError != nil {\n\t\t\tbreak // breaks on first error\n\t\t}\n\n\t\td.line = d.scanner.Text()\n\t\td.lineNum++\n\n\t\tline := strings.TrimSpace(d.line)\n\n\t\tif len(line) < 1 || line[0] == ';' || line[0] == '#' {\n\t\t\tcontinue // skip comments\n\t\t}\n\n\t\t// Two types of lines:\n\t\t//   1. NAME=VALUE   (at least one equal sign - breaks on first)\n\t\t//   2. [HEADER]     (no equals sign, square brackets NOT required)\n\t\tmatches := strings.SplitN(line, \"=\", 2)\n\t\tmatched := false\n\t\tpn := \"\"\n\t\tpv := \"\"\n\n\t\tif len(matches) == 2 {\n\t\t\t// NAME=VALUE\n\t\t\tpn = strings.ToLower(strings.TrimSpace(matches[0]))\n\t\t\tpv = strings.TrimSpace(matches[1])\n\t\t\tprop := propStack.Peek()[pn]\n\n\t\t\tif prop.isInitialized {\n\t\t\t\tif prop.isArray {\n\t\t\t\t\tvalue := reflect.New(prop.value.Type().Elem())\n\t\t\t\t\td.setValue(reflect.Indirect(value), pv)\n\t\t\t\t\tappendValue(prop.value, value)\n\n\t\t\t\t} else {\n\t\t\t\t\td.setValue(prop.value, pv)\n\t\t\t\t}\n\n\t\t\t\tmatched = true\n\t\t\t}\n\n\t\t\t// What if property is umatched - keep popping the stack\n\t\t\t// until a potential map is found or stay within current section?\n\t\t\t// Think answer is pop.\n\t\t\t// NOPE\n\t\t\t// Section could have unmatched name=value if user doesn't\n\t\t\t// care about certain values - only stack crawling happens\n\t\t\t// during numMatches==1 time?\n\t\t\t// This means if there is > 1 section, there needs to be\n\t\t\t// section breaks for everything\n\n\t\t} else {\n\t\t\t// [Header] section\n\t\t\tpn = strings.ToLower(strings.TrimSpace(matches[0]))\n\n\t\t\tfor propStack.Size() > 0 {\n\t\t\t\tprop := propStack.Peek()[pn]\n\t\t\t\tif prop.isInitialized {\n\t\t\t\t\tpropStack.Push(prop.children)\n\t\t\t\t\tmatched = true\n\t\t\t\t\tbreak\n\t\t\t\t} else if propStack.Size() > 1 {\n\t\t\t\t\t_ = propStack.Pop()\n\t\t\t\t} else {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif !matched {\n\t\t\td.unmatched = append(d.unmatched, Unmatched{d.lineNum, d.line})\n\t\t}\n\t}\n\n\treturn d.savedError\n}\n\nfunc (d *decodeState) unmarshal2(x interface{}) error {\n\n\tvar sectionMap propertyMap = make(propertyMap)\n\tvar tempMap propertyMap = make(propertyMap)\n\n\tvar section, nextSection property\n\tvar inSection, nextHasSection bool = false, false\n\tvar tempValue reflect.Value // \"temp\" is for filling in array of structs\n\tvar numTempValue int\n\n\td.generateMap(sectionMap, reflect.ValueOf(x))\n\n\tfor d.scanner.Scan() {\n\t\tif d.savedError != nil {\n\t\t\tbreak\n\t\t}\n\n\t\td.line = d.scanner.Text()\n\t\td.lineNum++\n\n\t\t//fmt.Printf(\"%03d: %s\\n\", d.lineNum, d.line)\n\n\t\tline := strings.ToLower(strings.TrimSpace(d.line))\n\n\t\tif len(line) < 1 || line[0] == ';' || line[0] == '#' {\n\t\t\tcontinue // skip comments\n\t\t}\n\n\t\t// [Sections] could appear at any time (square brackets not required)\n\t\t// When in a section, also look in children map\n\t\tnextSection, nextHasSection = sectionMap[line]\n\t\tif nextHasSection {\n\t\t\tif numTempValue > 0 && section.isArray {\n\t\t\t\tappendValue(section.value, tempValue)\n\t\t\t}\n\n\t\t\tsection = nextSection\n\t\t\tinSection = true\n\n\t\t\tif section.isArray {\n\t\t\t\ttempValue = reflect.New(section.value.Type().Elem())\n\t\t\t\td.generateMap(tempMap, tempValue)\n\t\t\t}\n\n\t\t\tnumTempValue = 0\n\t\t\tcontinue\n\t\t}\n\n\t\t// unrecognized section - exit out of current section\n\t\tif line[0] == '[' && line[len(line)-1] == ']' {\n\t\t\tinSection = false\n\t\t\tcontinue\n\t\t}\n\n\t\tmatches := strings.SplitN(d.line, \"=\", 2)\n\t\tmatched := false\n\n\t\t// potential property=value\n\t\tif len(matches) == 2 {\n\t\t\tn := strings.ToLower(strings.TrimSpace(matches[0]))\n\t\t\ts := strings.TrimSpace(matches[1])\n\n\t\t\tif inSection {\n\t\t\t\t// child property, within a section\n\t\t\t\tchildProperty, hasProp := section.children[n]\n\n\t\t\t\tif hasProp {\n\t\t\t\t\tif section.isArray {\n\t\t\t\t\t\ttempProperty := tempMap[n]\n\t\t\t\t\t\tnumTempValue++\n\t\t\t\t\t\td.setValue(tempProperty.value, s)\n\t\t\t\t\t} else {\n\t\t\t\t\t\td.setValue(childProperty.value, s)\n\t\t\t\t\t}\n\n\t\t\t\t\tmatched = true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif !matched {\n\t\t\t\t// top level property\n\t\t\t\ttopLevelProperty, hasProp := sectionMap[n]\n\t\t\t\tif hasProp {\n\t\t\t\t\t// just encountered a top level property - switch out of section mode\n\t\t\t\t\tinSection = false\n\t\t\t\t\tmatched = true\n\t\t\t\t\td.setValue(topLevelProperty.value, s)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif !matched {\n\t\t\td.unmatched = append(d.unmatched, Unmatched{d.lineNum, d.line})\n\t\t}\n\t}\n\n\tif numTempValue > 0 {\n\t\tappendValue(section.value, tempValue)\n\t}\n\n\treturn d.savedError\n}\n\nfunc appendValue(arr, val reflect.Value) {\n\tarr.Set(reflect.Append(arr, reflect.Indirect(val)))\n}\n\n// Set Value with given string\nfunc (d *decodeState) setValue(v reflect.Value, s string) {\n\t//fmt.Printf(\"SET(kind:%s, %s)\\n\", v.Kind(), s)\n\n\tswitch v.Kind() {\n\n\tcase reflect.String:\n\t\tv.SetString(s)\n\n\tcase reflect.Bool:\n\t\tv.SetBool(boolValue(s))\n\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tn, err := strconv.ParseInt(s, 10, 64)\n\t\tif err != nil || v.OverflowInt(n) {\n\t\t\td.saveError(&IniError{d.lineNum, d.line, \"Invalid int\"})\n\t\t\treturn\n\t\t}\n\t\tv.SetInt(n)\n\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tn, err := strconv.ParseUint(s, 10, 64)\n\t\tif err != nil || v.OverflowUint(n) {\n\t\t\td.saveError(&IniError{d.lineNum, d.line, \"Invalid uint\"})\n\t\t\treturn\n\t\t}\n\t\tv.SetUint(n)\n\n\tcase reflect.Float32, reflect.Float64:\n\t\tn, err := strconv.ParseFloat(s, v.Type().Bits())\n\t\tif err != nil || v.OverflowFloat(n) {\n\t\t\td.saveError(&IniError{d.lineNum, d.line, \"Invalid float\"})\n\t\t\treturn\n\t\t}\n\t\tv.SetFloat(n)\n\n\tcase reflect.Slice:\n\t\td.sliceValue(v, s)\n\n\tdefault:\n\t\td.saveError(&IniError{d.lineNum, d.line, fmt.Sprintf(\"Can't set value of type %s\", v.Kind())})\n\t}\n\n}\n\nfunc (d *decodeState) sliceValue(v reflect.Value, s string) {\n\t//fmt.Printf(\":SLICE(%s, %s)\\n\", v.Kind(), s)\n\n\tswitch v.Type().Elem().Kind() {\n\n\tcase reflect.String:\n\t\tv.Set(reflect.Append(v, reflect.ValueOf(s)))\n\n\tcase reflect.Bool:\n\t\tv.Set(reflect.Append(v, reflect.ValueOf(boolValue(s))))\n\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t// Hardcoding of []int temporarily\n\t\tn, err := strconv.ParseInt(s, 10, 64)\n\t\tif err != nil {\n\t\t\td.saveError(&IniError{d.lineNum, d.line, \"Invalid int\"})\n\t\t\treturn\n\t\t}\n\n\t\tn1 := reflect.ValueOf(n)\n\t\tn2 := n1.Convert(v.Type().Elem())\n\n\t\tv.Set(reflect.Append(v, n2))\n\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tn, err := strconv.ParseUint(s, 10, 64)\n\t\tif err != nil {\n\t\t\td.saveError(&IniError{d.lineNum, d.line, \"Invalid uint\"})\n\t\t\treturn\n\t\t}\n\n\t\tn1 := reflect.ValueOf(n)\n\t\tn2 := n1.Convert(v.Type().Elem())\n\n\t\tv.Set(reflect.Append(v, n2))\n\n\tcase reflect.Float32, reflect.Float64:\n\t\tn, err := strconv.ParseFloat(s, 64)\n\t\tif err != nil {\n\t\t\td.saveError(&IniError{d.lineNum, d.line, \"Invalid float\"})\n\t\t\treturn\n\t\t}\n\n\t\tn1 := reflect.ValueOf(n)\n\t\tn2 := n1.Convert(v.Type().Elem())\n\n\t\tv.Set(reflect.Append(v, n2))\n\n\tdefault:\n\t\td.saveError(&IniError{d.lineNum, d.line, fmt.Sprintf(\"Can't set value in array of type %s\",\n\t\t\tv.Type().Elem().Kind())})\n\t}\n\n}\n\n// Returns true for truthy values like t/true/y/yes/1, false otherwise\nfunc boolValue(s string) bool {\n\tv := false\n\tswitch strings.ToLower(s) {\n\tcase \"t\", \"true\", \"y\", \"yes\", \"1\":\n\t\tv = true\n\t}\n\n\treturn v\n}\n\n// A Decoder reads and decodes INI object from an input stream.\ntype Decoder struct {\n\tr io.Reader\n\td decodeState\n}\n\n// NewDecoder returns a new decoder that reads from r.\n//\n// The decoder introduces its own buffering and may\n// read data from r beyond the JSON values requested.\nfunc NewDecoder(r io.Reader) *Decoder {\n\treturn &Decoder{r: r}\n}\n\n// Decode reads the INI file and stores it in the value pointed to by v.\n//\n// See the documentation for Unmarshal for details about\n// the conversion of an INI into a Go value.\nfunc (dec *Decoder) Decode(v interface{}) error {\n\n\tbuf, readErr := ioutil.ReadAll(dec.r)\n\tif readErr != nil {\n\t\treturn readErr\n\t}\n\t// Don't save err from unmarshal into dec.err:\n\t// the connection is still usable since we read a complete JSON\n\t// object from it before the error happened.\n\tdec.d.init(buf)\n\terr := dec.d.unmarshal(v)\n\n\treturn err\n}\n\n// UnparsedLines returns an array of strings where each string is an\n// unparsed line from the file.\nfunc (dec *Decoder) Unmatched() []Unmatched {\n\treturn dec.d.unmatched\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/go-ini/stack.go",
    "content": "package ini\n\n// NewStack returns a new stack.\nfunc NewStack() *Stack {\n\treturn &Stack{}\n}\n\n// Stack is a basic LIFO stack that resizes as needed.\ntype Stack struct {\n\titems []interface{}\n\tcount int\n}\n\n// Push adds an iterm to the top of the stack\nfunc (s *Stack) Push(item interface{}) {\n\ts.items = append(s.items[:s.count], item)\n\ts.count++\n}\n\n// Pop removes the top item (LIFO) from the stack\nfunc (s *Stack) Pop() interface{} {\n\tif s.count == 0 {\n\t\treturn nil\n\t}\n\n\ts.count--\n\treturn s.items[s.count]\n}\n\n// Peek returns item at top of stack without removing it\nfunc (s *Stack) Peek() interface{} {\n\tif s.count == 0 {\n\t\treturn nil\n\t}\n\n\treturn s.items[s.count-1]\n}\n\n// Empty returns true when stack is empty, false otherwise\nfunc (s *Stack) Empty() bool {\n\treturn s.count == 0\n}\n\n// Size returns the number of items in the stack\nfunc (s *Stack) Size() int {\n\treturn s.count\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/LICENSE",
    "content": "This software is licensed under the LGPLv3, included below.\n\nAs a special exception to the GNU Lesser General Public License version 3\n(\"LGPL3\"), the copyright holders of this Library give you permission to\nconvey to a third party a Combined Work that links statically or dynamically\nto this Library without providing any Minimal Corresponding Source or\nMinimal Application Code as set out in 4d or providing the installation\ninformation set out in section 4e, provided that you comply with the other\nprovisions of LGPL3 and provided that you meet, for the Application the\nterms and conditions of the license(s) which apply to the Application.\n\nExcept as stated in this special exception, the provisions of LGPL3 will\ncontinue to comply in full to this Library. If you modify this Library, you\nmay apply this exception to your version of this Library, but you are not\nobliged to do so. If you do not wish to do so, delete this exception\nstatement from your version. This exception does not (and cannot) modify any\nlicense terms which apply to the Application, with which you must still\ncomply.\n\n\n                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions.\n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version.\n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/aws/attempt.go",
    "content": "package aws\n\nimport (\n\t\"time\"\n)\n\n// AttemptStrategy represents a strategy for waiting for an action\n// to complete successfully. This is an internal type used by the\n// implementation of other goamz packages.\ntype AttemptStrategy struct {\n\tTotal time.Duration // total duration of attempt.\n\tDelay time.Duration // interval between each try in the burst.\n\tMin   int           // minimum number of retries; overrides Total\n}\n\ntype Attempt struct {\n\tstrategy AttemptStrategy\n\tlast     time.Time\n\tend      time.Time\n\tforce    bool\n\tcount    int\n}\n\n// Start begins a new sequence of attempts for the given strategy.\nfunc (s AttemptStrategy) Start() *Attempt {\n\tnow := time.Now()\n\treturn &Attempt{\n\t\tstrategy: s,\n\t\tlast:     now,\n\t\tend:      now.Add(s.Total),\n\t\tforce:    true,\n\t}\n}\n\n// Next waits until it is time to perform the next attempt or returns\n// false if it is time to stop trying.\nfunc (a *Attempt) Next() bool {\n\tnow := time.Now()\n\tsleep := a.nextSleep(now)\n\tif !a.force && !now.Add(sleep).Before(a.end) && a.strategy.Min <= a.count {\n\t\treturn false\n\t}\n\ta.force = false\n\tif sleep > 0 && a.count > 0 {\n\t\ttime.Sleep(sleep)\n\t\tnow = time.Now()\n\t}\n\ta.count++\n\ta.last = now\n\treturn true\n}\n\nfunc (a *Attempt) nextSleep(now time.Time) time.Duration {\n\tsleep := a.strategy.Delay - now.Sub(a.last)\n\tif sleep < 0 {\n\t\treturn 0\n\t}\n\treturn sleep\n}\n\n// HasNext returns whether another attempt will be made if the current\n// one fails. If it returns true, the following call to Next is\n// guaranteed to return true.\nfunc (a *Attempt) HasNext() bool {\n\tif a.force || a.strategy.Min > a.count {\n\t\treturn true\n\t}\n\tnow := time.Now()\n\tif now.Add(a.nextSleep(now)).Before(a.end) {\n\t\ta.force = true\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/aws/aws.go",
    "content": "//\n// goamz - Go packages to interact with the Amazon Web Services.\n//\n//   https://wiki.ubuntu.com/goamz\n//\n// Copyright (c) 2011 Canonical Ltd.\n//\n// Written by Gustavo Niemeyer <gustavo.niemeyer@canonical.com>\n//\npackage aws\n\nimport (\n\t\"encoding/json\"\n\t\"encoding/xml\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/user\"\n\t\"path\"\n\t\"regexp\"\n\t\"strings\"\n\t\"time\"\n)\n\n// Regular expressions for INI files\nvar (\n\tiniSectionRegexp = regexp.MustCompile(`^\\s*\\[([^\\[\\]]+)\\]\\s*$`)\n\tiniSettingRegexp = regexp.MustCompile(`^\\s*(.+?)\\s*=\\s*(.*\\S)\\s*$`)\n)\n\n// Defines the valid signers\nconst (\n\tV2Signature      = iota\n\tV4Signature      = iota\n\tRoute53Signature = iota\n)\n\n// Defines the service endpoint and correct Signer implementation to use\n// to sign requests for this endpoint\ntype ServiceInfo struct {\n\tEndpoint string\n\tSigner   uint\n}\n\n// Region defines the URLs where AWS services may be accessed.\n//\n// See http://goo.gl/d8BP1 for more details.\ntype Region struct {\n\tName                   string // the canonical name of this region.\n\tEC2Endpoint            string\n\tS3Endpoint             string\n\tS3BucketEndpoint       string // Not needed by AWS S3. Use ${bucket} for bucket name.\n\tS3LocationConstraint   bool   // true if this region requires a LocationConstraint declaration.\n\tS3LowercaseBucket      bool   // true if the region requires bucket names to be lower case.\n\tSDBEndpoint            string\n\tSNSEndpoint            string\n\tSQSEndpoint            string\n\tSESEndpoint            string\n\tIAMEndpoint            string\n\tELBEndpoint            string\n\tDynamoDBEndpoint       string\n\tCloudWatchServicepoint ServiceInfo\n\tAutoScalingEndpoint    string\n\tRDSEndpoint            ServiceInfo\n\tKinesisEndpoint        string\n\tSTSEndpoint            string\n\tCloudFormationEndpoint string\n\tElastiCacheEndpoint    string\n}\n\nvar Regions = map[string]Region{\n\tAPNortheast.Name:  APNortheast,\n\tAPSoutheast.Name:  APSoutheast,\n\tAPSoutheast2.Name: APSoutheast2,\n\tEUCentral.Name:    EUCentral,\n\tEUWest.Name:       EUWest,\n\tUSEast.Name:       USEast,\n\tUSWest.Name:       USWest,\n\tUSWest2.Name:      USWest2,\n\tUSGovWest.Name:    USGovWest,\n\tSAEast.Name:       SAEast,\n}\n\n// Designates a signer interface suitable for signing AWS requests, params\n// should be appropriately encoded for the request before signing.\n//\n// A signer should be initialized with Auth and the appropriate endpoint.\ntype Signer interface {\n\tSign(method, path string, params map[string]string)\n}\n\n// An AWS Service interface with the API to query the AWS service\n//\n// Supplied as an easy way to mock out service calls during testing.\ntype AWSService interface {\n\t// Queries the AWS service at a given method/path with the params and\n\t// returns an http.Response and error\n\tQuery(method, path string, params map[string]string) (*http.Response, error)\n\t// Builds an error given an XML payload in the http.Response, can be used\n\t// to process an error if the status code is not 200 for example.\n\tBuildError(r *http.Response) error\n}\n\n// Implements a Server Query/Post API to easily query AWS services and build\n// errors when desired\ntype Service struct {\n\tservice ServiceInfo\n\tsigner  Signer\n}\n\n// Create a base set of params for an action\nfunc MakeParams(action string) map[string]string {\n\tparams := make(map[string]string)\n\tparams[\"Action\"] = action\n\treturn params\n}\n\n// Create a new AWS server to handle making requests\nfunc NewService(auth Auth, service ServiceInfo) (s *Service, err error) {\n\tvar signer Signer\n\tswitch service.Signer {\n\tcase V2Signature:\n\t\tsigner, err = NewV2Signer(auth, service)\n\t// case V4Signature:\n\t// \tsigner, err = NewV4Signer(auth, service, Regions[\"eu-west-1\"])\n\tdefault:\n\t\terr = fmt.Errorf(\"Unsupported signer for service\")\n\t}\n\tif err != nil {\n\t\treturn\n\t}\n\ts = &Service{service: service, signer: signer}\n\treturn\n}\n\nfunc (s *Service) Query(method, path string, params map[string]string) (resp *http.Response, err error) {\n\tparams[\"Timestamp\"] = time.Now().UTC().Format(time.RFC3339)\n\tu, err := url.Parse(s.service.Endpoint)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tu.Path = path\n\n\ts.signer.Sign(method, path, params)\n\tif method == \"GET\" {\n\t\tu.RawQuery = multimap(params).Encode()\n\t\tresp, err = http.Get(u.String())\n\t} else if method == \"POST\" {\n\t\tresp, err = http.PostForm(u.String(), multimap(params))\n\t}\n\n\treturn\n}\n\nfunc (s *Service) BuildError(r *http.Response) error {\n\terrors := ErrorResponse{}\n\txml.NewDecoder(r.Body).Decode(&errors)\n\tvar err Error\n\terr = errors.Errors\n\terr.RequestId = errors.RequestId\n\terr.StatusCode = r.StatusCode\n\tif err.Message == \"\" {\n\t\terr.Message = r.Status\n\t}\n\treturn &err\n}\n\ntype ServiceError interface {\n\terror\n\tErrorCode() string\n}\n\ntype ErrorResponse struct {\n\tErrors    Error  `xml:\"Error\"`\n\tRequestId string // A unique ID for tracking the request\n}\n\ntype Error struct {\n\tStatusCode int\n\tType       string\n\tCode       string\n\tMessage    string\n\tRequestId  string\n}\n\nfunc (err *Error) Error() string {\n\treturn fmt.Sprintf(\"Type: %s, Code: %s, Message: %s\",\n\t\terr.Type, err.Code, err.Message,\n\t)\n}\n\nfunc (err *Error) ErrorCode() string {\n\treturn err.Code\n}\n\ntype Auth struct {\n\tAccessKey, SecretKey string\n\ttoken                string\n\texpiration           time.Time\n}\n\nfunc (a *Auth) Token() string {\n\tif a.token == \"\" {\n\t\treturn \"\"\n\t}\n\tif time.Since(a.expiration) >= -30*time.Second { //in an ideal world this should be zero assuming the instance is synching it's clock\n\t\t*a, _ = GetAuth(\"\", \"\", \"\", time.Time{})\n\t}\n\treturn a.token\n}\n\nfunc (a *Auth) Expiration() time.Time {\n\treturn a.expiration\n}\n\n// To be used with other APIs that return auth credentials such as STS\nfunc NewAuth(accessKey, secretKey, token string, expiration time.Time) *Auth {\n\treturn &Auth{\n\t\tAccessKey:  accessKey,\n\t\tSecretKey:  secretKey,\n\t\ttoken:      token,\n\t\texpiration: expiration,\n\t}\n}\n\n// ResponseMetadata\ntype ResponseMetadata struct {\n\tRequestId string // A unique ID for tracking the request\n}\n\ntype BaseResponse struct {\n\tResponseMetadata ResponseMetadata\n}\n\nvar unreserved = make([]bool, 128)\nvar hex = \"0123456789ABCDEF\"\n\nfunc init() {\n\t// RFC3986\n\tu := \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890-_.~\"\n\tfor _, c := range u {\n\t\tunreserved[c] = true\n\t}\n}\n\nfunc multimap(p map[string]string) url.Values {\n\tq := make(url.Values, len(p))\n\tfor k, v := range p {\n\t\tq[k] = []string{v}\n\t}\n\treturn q\n}\n\ntype credentials struct {\n\tCode            string\n\tLastUpdated     string\n\tType            string\n\tAccessKeyId     string\n\tSecretAccessKey string\n\tToken           string\n\tExpiration      string\n}\n\n// GetMetaData retrieves instance metadata about the current machine.\n//\n// See http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html for more details.\nfunc GetMetaData(path string) (contents []byte, err error) {\n\tc := http.Client{\n\t\tTransport: &http.Transport{\n\t\t\tDial: func(netw, addr string) (net.Conn, error) {\n\t\t\t\tdeadline := time.Now().Add(5 * time.Second)\n\t\t\t\tc, err := net.DialTimeout(netw, addr, time.Second*2)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tc.SetDeadline(deadline)\n\t\t\t\treturn c, nil\n\t\t\t},\n\t\t},\n\t}\n\n\turl := \"http://169.254.169.254/latest/meta-data/\" + path\n\n\tresp, err := c.Get(url)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != 200 {\n\t\terr = fmt.Errorf(\"Code %d returned for url %s\", resp.StatusCode, url)\n\t\treturn\n\t}\n\n\tbody, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn []byte(body), err\n}\n\nfunc GetRegion(regionName string) (region Region) {\n\tregion = Regions[regionName]\n\treturn\n}\n\n// GetInstanceCredentials creates an Auth based on the instance's role credentials.\n// If the running instance is not in EC2 or does not have a valid IAM role, an error will be returned.\n// For more info about setting up IAM roles, see http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html\nfunc GetInstanceCredentials() (cred credentials, err error) {\n\tcredentialPath := \"iam/security-credentials/\"\n\n\t// Get the instance role\n\trole, err := GetMetaData(credentialPath)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t// Get the instance role credentials\n\tcredentialJSON, err := GetMetaData(credentialPath + string(role))\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = json.Unmarshal([]byte(credentialJSON), &cred)\n\treturn\n}\n\n// GetAuth creates an Auth based on either passed in credentials,\n// environment information or instance based role credentials.\nfunc GetAuth(accessKey string, secretKey, token string, expiration time.Time) (auth Auth, err error) {\n\t// First try passed in credentials\n\tif accessKey != \"\" && secretKey != \"\" {\n\t\treturn Auth{accessKey, secretKey, token, expiration}, nil\n\t}\n\n\t// Next try to get auth from the environment\n\tauth, err = EnvAuth()\n\tif err == nil {\n\t\t// Found auth, return\n\t\treturn\n\t}\n\n\t// Next try getting auth from the instance role\n\tcred, err := GetInstanceCredentials()\n\tif err == nil {\n\t\t// Found auth, return\n\t\tauth.AccessKey = cred.AccessKeyId\n\t\tauth.SecretKey = cred.SecretAccessKey\n\t\tauth.token = cred.Token\n\t\texptdate, err := time.Parse(\"2006-01-02T15:04:05Z\", cred.Expiration)\n\t\tif err != nil {\n\t\t\terr = fmt.Errorf(\"Error Parsing expiration date: cred.Expiration :%s , error: %s \\n\", cred.Expiration, err)\n\t\t}\n\t\tauth.expiration = exptdate\n\t\treturn auth, err\n\t}\n\n\t// Next try getting auth from the credentials file\n\tauth, err = CredentialFileAuth(\"\", \"\", time.Minute*5)\n\tif err == nil {\n\t\treturn\n\t}\n\n\t//err = errors.New(\"No valid AWS authentication found\")\n\terr = fmt.Errorf(\"No valid AWS authentication found: %s\", err)\n\treturn auth, err\n}\n\n// EnvAuth creates an Auth based on environment information.\n// The AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment\n// variables are used.\nfunc EnvAuth() (auth Auth, err error) {\n\tauth.AccessKey = os.Getenv(\"AWS_ACCESS_KEY_ID\")\n\tif auth.AccessKey == \"\" {\n\t\tauth.AccessKey = os.Getenv(\"AWS_ACCESS_KEY\")\n\t}\n\n\tauth.SecretKey = os.Getenv(\"AWS_SECRET_ACCESS_KEY\")\n\tif auth.SecretKey == \"\" {\n\t\tauth.SecretKey = os.Getenv(\"AWS_SECRET_KEY\")\n\t}\n\tif auth.AccessKey == \"\" {\n\t\terr = errors.New(\"AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment\")\n\t}\n\tif auth.SecretKey == \"\" {\n\t\terr = errors.New(\"AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY not found in environment\")\n\t}\n\treturn\n}\n\n// CredentialFileAuth creates and Auth based on a credentials file. The file\n// contains various authentication profiles for use with AWS.\n//\n// The credentials file, which is used by other AWS SDKs, is documented at\n// http://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs\nfunc CredentialFileAuth(filePath string, profile string, expiration time.Duration) (auth Auth, err error) {\n\tif profile == \"\" {\n\t\tprofile = \"default\"\n\t}\n\n\tif filePath == \"\" {\n\t\tu, err := user.Current()\n\t\tif err != nil {\n\t\t\treturn auth, err\n\t\t}\n\n\t\tfilePath = path.Join(u.HomeDir, \".aws\", \"credentials\")\n\t}\n\n\t// read the file, then parse the INI\n\tcontents, err := ioutil.ReadFile(filePath)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tprofiles := parseINI(string(contents))\n\tprofileData, ok := profiles[profile]\n\n\tif !ok {\n\t\terr = errors.New(\"The credentials file did not contain the profile\")\n\t\treturn\n\t}\n\n\tkeyId, ok := profileData[\"aws_access_key_id\"]\n\tif !ok {\n\t\terr = errors.New(\"The credentials file did not contain required attribute aws_access_key_id\")\n\t\treturn\n\t}\n\n\tsecretKey, ok := profileData[\"aws_secret_access_key\"]\n\tif !ok {\n\t\terr = errors.New(\"The credentials file did not contain required attribute aws_secret_access_key\")\n\t\treturn\n\t}\n\n\tauth.AccessKey = keyId\n\tauth.SecretKey = secretKey\n\n\tif token, ok := profileData[\"aws_session_token\"]; ok {\n\t\tauth.token = token\n\t}\n\n\tauth.expiration = time.Now().Add(expiration)\n\n\treturn\n}\n\n// parseINI takes the contents of a credentials file and returns a map, whose keys\n// are the various profiles, and whose values are maps of the settings for the\n// profiles\nfunc parseINI(fileContents string) map[string]map[string]string {\n\tprofiles := make(map[string]map[string]string)\n\n\tlines := strings.Split(fileContents, \"\\n\")\n\n\tvar currentSection map[string]string\n\tfor _, line := range lines {\n\t\t// remove comments, which start with a semi-colon\n\t\tif split := strings.Split(line, \";\"); len(split) > 1 {\n\t\t\tline = split[0]\n\t\t}\n\n\t\t// check if the line is the start of a profile.\n\t\t//\n\t\t// for example:\n\t\t//     [default]\n\t\t//\n\t\t// otherwise, check for the proper setting\n\t\t//     property=value\n\t\tif sectMatch := iniSectionRegexp.FindStringSubmatch(line); len(sectMatch) == 2 {\n\t\t\tcurrentSection = make(map[string]string)\n\t\t\tprofiles[sectMatch[1]] = currentSection\n\t\t} else if setMatch := iniSettingRegexp.FindStringSubmatch(line); len(setMatch) == 3 && currentSection != nil {\n\t\t\tcurrentSection[setMatch[1]] = setMatch[2]\n\t\t}\n\t}\n\n\treturn profiles\n}\n\n// Encode takes a string and URI-encodes it in a way suitable\n// to be used in AWS signatures.\nfunc Encode(s string) string {\n\tencode := false\n\tfor i := 0; i != len(s); i++ {\n\t\tc := s[i]\n\t\tif c > 127 || !unreserved[c] {\n\t\t\tencode = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif !encode {\n\t\treturn s\n\t}\n\te := make([]byte, len(s)*3)\n\tei := 0\n\tfor i := 0; i != len(s); i++ {\n\t\tc := s[i]\n\t\tif c > 127 || !unreserved[c] {\n\t\t\te[ei] = '%'\n\t\t\te[ei+1] = hex[c>>4]\n\t\t\te[ei+2] = hex[c&0xF]\n\t\t\tei += 3\n\t\t} else {\n\t\t\te[ei] = c\n\t\t\tei += 1\n\t\t}\n\t}\n\treturn string(e[:ei])\n}\n\nfunc dialTimeout(network, addr string) (net.Conn, error) {\n\treturn net.DialTimeout(network, addr, time.Duration(2*time.Second))\n}\n\nfunc AvailabilityZone() string {\n\ttransport := http.Transport{Dial: dialTimeout}\n\tclient := http.Client{\n\t\tTransport: &transport,\n\t}\n\tresp, err := client.Get(\"http://169.254.169.254/latest/meta-data/placement/availability-zone\")\n\tif err != nil {\n\t\treturn \"unknown\"\n\t} else {\n\t\tdefer resp.Body.Close()\n\t\tbody, err := ioutil.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\treturn \"unknown\"\n\t\t} else {\n\t\t\treturn string(body)\n\t\t}\n\t}\n}\n\nfunc InstanceRegion() string {\n\taz := AvailabilityZone()\n\tif az == \"unknown\" {\n\t\treturn az\n\t} else {\n\t\tregion := az[:len(az)-1]\n\t\treturn region\n\t}\n}\n\nfunc InstanceId() string {\n\ttransport := http.Transport{Dial: dialTimeout}\n\tclient := http.Client{\n\t\tTransport: &transport,\n\t}\n\tresp, err := client.Get(\"http://169.254.169.254/latest/meta-data/instance-id\")\n\tif err != nil {\n\t\treturn \"unknown\"\n\t} else {\n\t\tdefer resp.Body.Close()\n\t\tbody, err := ioutil.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\treturn \"unknown\"\n\t\t} else {\n\t\t\treturn string(body)\n\t\t}\n\t}\n}\n\nfunc InstanceType() string {\n\ttransport := http.Transport{Dial: dialTimeout}\n\tclient := http.Client{\n\t\tTransport: &transport,\n\t}\n\tresp, err := client.Get(\"http://169.254.169.254/latest/meta-data/instance-type\")\n\tif err != nil {\n\t\treturn \"unknown\"\n\t} else {\n\t\tdefer resp.Body.Close()\n\t\tbody, err := ioutil.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\treturn \"unknown\"\n\t\t} else {\n\t\t\treturn string(body)\n\t\t}\n\t}\n}\n\nfunc ServerLocalIp() string {\n\ttransport := http.Transport{Dial: dialTimeout}\n\tclient := http.Client{\n\t\tTransport: &transport,\n\t}\n\tresp, err := client.Get(\"http://169.254.169.254/latest/meta-data/local-ipv4\")\n\tif err != nil {\n\t\treturn \"127.0.0.1\"\n\t} else {\n\t\tdefer resp.Body.Close()\n\t\tbody, err := ioutil.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\treturn \"127.0.0.1\"\n\t\t} else {\n\t\t\treturn string(body)\n\t\t}\n\t}\n}\n\nfunc ServerPublicIp() string {\n\ttransport := http.Transport{Dial: dialTimeout}\n\tclient := http.Client{\n\t\tTransport: &transport,\n\t}\n\tresp, err := client.Get(\"http://169.254.169.254/latest/meta-data/public-ipv4\")\n\tif err != nil {\n\t\treturn \"127.0.0.1\"\n\t} else {\n\t\tdefer resp.Body.Close()\n\t\tbody, err := ioutil.ReadAll(resp.Body)\n\t\tif err != nil {\n\t\t\treturn \"127.0.0.1\"\n\t\t} else {\n\t\t\treturn string(body)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/aws/client.go",
    "content": "package aws\n\nimport (\n\t\"math\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n)\n\ntype RetryableFunc func(*http.Request, *http.Response, error) bool\ntype WaitFunc func(try int)\ntype DeadlineFunc func() time.Time\n\ntype ResilientTransport struct {\n\t// Timeout is the maximum amount of time a dial will wait for\n\t// a connect to complete.\n\t//\n\t// The default is no timeout.\n\t//\n\t// With or without a timeout, the operating system may impose\n\t// its own earlier timeout. For instance, TCP timeouts are\n\t// often around 3 minutes.\n\tDialTimeout time.Duration\n\n\t// MaxTries, if non-zero, specifies the number of times we will retry on\n\t// failure. Retries are only attempted for temporary network errors or known\n\t// safe failures.\n\tMaxTries    int\n\tDeadline    DeadlineFunc\n\tShouldRetry RetryableFunc\n\tWait        WaitFunc\n\ttransport   *http.Transport\n}\n\n// Convenience method for creating an http client\nfunc NewClient(rt *ResilientTransport) *http.Client {\n\trt.transport = &http.Transport{\n\t\tDial: func(netw, addr string) (net.Conn, error) {\n\t\t\tc, err := net.DialTimeout(netw, addr, rt.DialTimeout)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tc.SetDeadline(rt.Deadline())\n\t\t\treturn c, nil\n\t\t},\n\t\tProxy: http.ProxyFromEnvironment,\n\t}\n\t// TODO: Would be nice is ResilientTransport allowed clients to initialize\n\t// with http.Transport attributes.\n\treturn &http.Client{\n\t\tTransport: rt,\n\t}\n}\n\nvar retryingTransport = &ResilientTransport{\n\tDeadline: func() time.Time {\n\t\treturn time.Now().Add(5 * time.Second)\n\t},\n\tDialTimeout: 10 * time.Second,\n\tMaxTries:    3,\n\tShouldRetry: awsRetry,\n\tWait:        ExpBackoff,\n}\n\n// Exported default client\nvar RetryingClient = NewClient(retryingTransport)\n\nfunc (t *ResilientTransport) RoundTrip(req *http.Request) (*http.Response, error) {\n\treturn t.tries(req)\n}\n\n// Retry a request a maximum of t.MaxTries times.\n// We'll only retry if the proper criteria are met.\n// If a wait function is specified, wait that amount of time\n// In between requests.\nfunc (t *ResilientTransport) tries(req *http.Request) (res *http.Response, err error) {\n\tfor try := 0; try < t.MaxTries; try += 1 {\n\t\tres, err = t.transport.RoundTrip(req)\n\n\t\tif !t.ShouldRetry(req, res, err) {\n\t\t\tbreak\n\t\t}\n\t\tif res != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\tif t.Wait != nil {\n\t\t\tt.Wait(try)\n\t\t}\n\t}\n\n\treturn\n}\n\nfunc ExpBackoff(try int) {\n\ttime.Sleep(100 * time.Millisecond *\n\t\ttime.Duration(math.Exp2(float64(try))))\n}\n\nfunc LinearBackoff(try int) {\n\ttime.Sleep(time.Duration(try*100) * time.Millisecond)\n}\n\n// Decide if we should retry a request.\n// In general, the criteria for retrying a request is described here\n// http://docs.aws.amazon.com/general/latest/gr/api-retries.html\nfunc awsRetry(req *http.Request, res *http.Response, err error) bool {\n\tretry := false\n\n\t// Retry if there's a temporary network error.\n\tif neterr, ok := err.(net.Error); ok {\n\t\tif neterr.Temporary() {\n\t\t\tretry = true\n\t\t}\n\t}\n\n\t// Retry if we get a 5xx series error.\n\tif res != nil {\n\t\tif res.StatusCode >= 500 && res.StatusCode < 600 {\n\t\t\tretry = true\n\t\t}\n\t}\n\n\treturn retry\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/aws/regions.go",
    "content": "package aws\n\nvar USGovWest = Region{\n\t\"us-gov-west-1\",\n\t\"https://ec2.us-gov-west-1.amazonaws.com\",\n\t\"https://s3-fips-us-gov-west-1.amazonaws.com\",\n\t\"\",\n\ttrue,\n\ttrue,\n\t\"\",\n\t\"https://sns.us-gov-west-1.amazonaws.com\",\n\t\"https://sqs.us-gov-west-1.amazonaws.com\",\n\t\"\",\n\t\"https://iam.us-gov.amazonaws.com\",\n\t\"https://elasticloadbalancing.us-gov-west-1.amazonaws.com\",\n\t\"https://dynamodb.us-gov-west-1.amazonaws.com\",\n\tServiceInfo{\"https://monitoring.us-gov-west-1.amazonaws.com\", V2Signature},\n\t\"https://autoscaling.us-gov-west-1.amazonaws.com\",\n\tServiceInfo{\"https://rds.us-gov-west-1.amazonaws.com\", V2Signature},\n\t\"\",\n\t\"https://sts.amazonaws.com\",\n\t\"https://cloudformation.us-gov-west-1.amazonaws.com\",\n\t\"\",\n}\n\nvar USEast = Region{\n\t\"us-east-1\",\n\t\"https://ec2.us-east-1.amazonaws.com\",\n\t\"https://s3.amazonaws.com\",\n\t\"\",\n\tfalse,\n\tfalse,\n\t\"https://sdb.amazonaws.com\",\n\t\"https://sns.us-east-1.amazonaws.com\",\n\t\"https://sqs.us-east-1.amazonaws.com\",\n\t\"https://email.us-east-1.amazonaws.com\",\n\t\"https://iam.amazonaws.com\",\n\t\"https://elasticloadbalancing.us-east-1.amazonaws.com\",\n\t\"https://dynamodb.us-east-1.amazonaws.com\",\n\tServiceInfo{\"https://monitoring.us-east-1.amazonaws.com\", V2Signature},\n\t\"https://autoscaling.us-east-1.amazonaws.com\",\n\tServiceInfo{\"https://rds.us-east-1.amazonaws.com\", V2Signature},\n\t\"https://kinesis.us-east-1.amazonaws.com\",\n\t\"https://sts.amazonaws.com\",\n\t\"https://cloudformation.us-east-1.amazonaws.com\",\n\t\"https://elasticache.us-east-1.amazonaws.com\",\n}\n\nvar USWest = Region{\n\t\"us-west-1\",\n\t\"https://ec2.us-west-1.amazonaws.com\",\n\t\"https://s3-us-west-1.amazonaws.com\",\n\t\"\",\n\ttrue,\n\ttrue,\n\t\"https://sdb.us-west-1.amazonaws.com\",\n\t\"https://sns.us-west-1.amazonaws.com\",\n\t\"https://sqs.us-west-1.amazonaws.com\",\n\t\"\",\n\t\"https://iam.amazonaws.com\",\n\t\"https://elasticloadbalancing.us-west-1.amazonaws.com\",\n\t\"https://dynamodb.us-west-1.amazonaws.com\",\n\tServiceInfo{\"https://monitoring.us-west-1.amazonaws.com\", V2Signature},\n\t\"https://autoscaling.us-west-1.amazonaws.com\",\n\tServiceInfo{\"https://rds.us-west-1.amazonaws.com\", V2Signature},\n\t\"https://kinesis.us-west-1.amazonaws.com\",\n\t\"https://sts.amazonaws.com\",\n\t\"https://cloudformation.us-west-1.amazonaws.com\",\n\t\"https://elasticache.us-west-1.amazonaws.com\",\n}\n\nvar USWest2 = Region{\n\t\"us-west-2\",\n\t\"https://ec2.us-west-2.amazonaws.com\",\n\t\"https://s3-us-west-2.amazonaws.com\",\n\t\"\",\n\ttrue,\n\ttrue,\n\t\"https://sdb.us-west-2.amazonaws.com\",\n\t\"https://sns.us-west-2.amazonaws.com\",\n\t\"https://sqs.us-west-2.amazonaws.com\",\n\t\"https://email.us-west-2.amazonaws.com\",\n\t\"https://iam.amazonaws.com\",\n\t\"https://elasticloadbalancing.us-west-2.amazonaws.com\",\n\t\"https://dynamodb.us-west-2.amazonaws.com\",\n\tServiceInfo{\"https://monitoring.us-west-2.amazonaws.com\", V2Signature},\n\t\"https://autoscaling.us-west-2.amazonaws.com\",\n\tServiceInfo{\"https://rds.us-west-2.amazonaws.com\", V2Signature},\n\t\"https://kinesis.us-west-2.amazonaws.com\",\n\t\"https://sts.amazonaws.com\",\n\t\"https://cloudformation.us-west-2.amazonaws.com\",\n\t\"https://elasticache.us-west-2.amazonaws.com\",\n}\n\nvar EUWest = Region{\n\t\"eu-west-1\",\n\t\"https://ec2.eu-west-1.amazonaws.com\",\n\t\"https://s3-eu-west-1.amazonaws.com\",\n\t\"\",\n\ttrue,\n\ttrue,\n\t\"https://sdb.eu-west-1.amazonaws.com\",\n\t\"https://sns.eu-west-1.amazonaws.com\",\n\t\"https://sqs.eu-west-1.amazonaws.com\",\n\t\"https://email.eu-west-1.amazonaws.com\",\n\t\"https://iam.amazonaws.com\",\n\t\"https://elasticloadbalancing.eu-west-1.amazonaws.com\",\n\t\"https://dynamodb.eu-west-1.amazonaws.com\",\n\tServiceInfo{\"https://monitoring.eu-west-1.amazonaws.com\", V2Signature},\n\t\"https://autoscaling.eu-west-1.amazonaws.com\",\n\tServiceInfo{\"https://rds.eu-west-1.amazonaws.com\", V2Signature},\n\t\"https://kinesis.eu-west-1.amazonaws.com\",\n\t\"https://sts.amazonaws.com\",\n\t\"https://cloudformation.eu-west-1.amazonaws.com\",\n\t\"https://elasticache.eu-west-1.amazonaws.com\",\n}\n\nvar EUCentral = Region{\n\t\"eu-central-1\",\n\t\"https://ec2.eu-central-1.amazonaws.com\",\n\t\"https://s3-eu-central-1.amazonaws.com\",\n\t\"\",\n\ttrue,\n\ttrue,\n\t\"https://sdb.eu-central-1.amazonaws.com\",\n\t\"https://sns.eu-central-1.amazonaws.com\",\n\t\"https://sqs.eu-central-1.amazonaws.com\",\n\t\"\",\n\t\"https://iam.amazonaws.com\",\n\t\"https://elasticloadbalancing.eu-central-1.amazonaws.com\",\n\t\"https://dynamodb.eu-central-1.amazonaws.com\",\n\tServiceInfo{\"https://monitoring.eu-central-1.amazonaws.com\", V2Signature},\n\t\"https://autoscaling.eu-central-1.amazonaws.com\",\n\tServiceInfo{\"https://rds.eu-central-1.amazonaws.com\", V2Signature},\n\t\"https://kinesis.eu-central-1.amazonaws.com\",\n\t\"https://sts.amazonaws.com\",\n\t\"https://cloudformation.eu-central-1.amazonaws.com\",\n\t\"\",\n}\n\nvar APSoutheast = Region{\n\t\"ap-southeast-1\",\n\t\"https://ec2.ap-southeast-1.amazonaws.com\",\n\t\"https://s3-ap-southeast-1.amazonaws.com\",\n\t\"\",\n\ttrue,\n\ttrue,\n\t\"https://sdb.ap-southeast-1.amazonaws.com\",\n\t\"https://sns.ap-southeast-1.amazonaws.com\",\n\t\"https://sqs.ap-southeast-1.amazonaws.com\",\n\t\"\",\n\t\"https://iam.amazonaws.com\",\n\t\"https://elasticloadbalancing.ap-southeast-1.amazonaws.com\",\n\t\"https://dynamodb.ap-southeast-1.amazonaws.com\",\n\tServiceInfo{\"https://monitoring.ap-southeast-1.amazonaws.com\", V2Signature},\n\t\"https://autoscaling.ap-southeast-1.amazonaws.com\",\n\tServiceInfo{\"https://rds.ap-southeast-1.amazonaws.com\", V2Signature},\n\t\"https://kinesis.ap-southeast-1.amazonaws.com\",\n\t\"https://sts.amazonaws.com\",\n\t\"https://cloudformation.ap-southeast-1.amazonaws.com\",\n\t\"https://elasticache.ap-southeast-1.amazonaws.com\",\n}\n\nvar APSoutheast2 = Region{\n\t\"ap-southeast-2\",\n\t\"https://ec2.ap-southeast-2.amazonaws.com\",\n\t\"https://s3-ap-southeast-2.amazonaws.com\",\n\t\"\",\n\ttrue,\n\ttrue,\n\t\"https://sdb.ap-southeast-2.amazonaws.com\",\n\t\"https://sns.ap-southeast-2.amazonaws.com\",\n\t\"https://sqs.ap-southeast-2.amazonaws.com\",\n\t\"\",\n\t\"https://iam.amazonaws.com\",\n\t\"https://elasticloadbalancing.ap-southeast-2.amazonaws.com\",\n\t\"https://dynamodb.ap-southeast-2.amazonaws.com\",\n\tServiceInfo{\"https://monitoring.ap-southeast-2.amazonaws.com\", V2Signature},\n\t\"https://autoscaling.ap-southeast-2.amazonaws.com\",\n\tServiceInfo{\"https://rds.ap-southeast-2.amazonaws.com\", V2Signature},\n\t\"https://kinesis.ap-southeast-2.amazonaws.com\",\n\t\"https://sts.amazonaws.com\",\n\t\"https://cloudformation.ap-southeast-2.amazonaws.com\",\n\t\"https://elasticache.ap-southeast-2.amazonaws.com\",\n}\n\nvar APNortheast = Region{\n\t\"ap-northeast-1\",\n\t\"https://ec2.ap-northeast-1.amazonaws.com\",\n\t\"https://s3-ap-northeast-1.amazonaws.com\",\n\t\"\",\n\ttrue,\n\ttrue,\n\t\"https://sdb.ap-northeast-1.amazonaws.com\",\n\t\"https://sns.ap-northeast-1.amazonaws.com\",\n\t\"https://sqs.ap-northeast-1.amazonaws.com\",\n\t\"\",\n\t\"https://iam.amazonaws.com\",\n\t\"https://elasticloadbalancing.ap-northeast-1.amazonaws.com\",\n\t\"https://dynamodb.ap-northeast-1.amazonaws.com\",\n\tServiceInfo{\"https://monitoring.ap-northeast-1.amazonaws.com\", V2Signature},\n\t\"https://autoscaling.ap-northeast-1.amazonaws.com\",\n\tServiceInfo{\"https://rds.ap-northeast-1.amazonaws.com\", V2Signature},\n\t\"https://kinesis.ap-northeast-1.amazonaws.com\",\n\t\"https://sts.amazonaws.com\",\n\t\"https://cloudformation.ap-northeast-1.amazonaws.com\",\n\t\"https://elasticache.ap-northeast-1.amazonaws.com\",\n}\n\nvar SAEast = Region{\n\t\"sa-east-1\",\n\t\"https://ec2.sa-east-1.amazonaws.com\",\n\t\"https://s3-sa-east-1.amazonaws.com\",\n\t\"\",\n\ttrue,\n\ttrue,\n\t\"https://sdb.sa-east-1.amazonaws.com\",\n\t\"https://sns.sa-east-1.amazonaws.com\",\n\t\"https://sqs.sa-east-1.amazonaws.com\",\n\t\"\",\n\t\"https://iam.amazonaws.com\",\n\t\"https://elasticloadbalancing.sa-east-1.amazonaws.com\",\n\t\"https://dynamodb.sa-east-1.amazonaws.com\",\n\tServiceInfo{\"https://monitoring.sa-east-1.amazonaws.com\", V2Signature},\n\t\"https://autoscaling.sa-east-1.amazonaws.com\",\n\tServiceInfo{\"https://rds.sa-east-1.amazonaws.com\", V2Signature},\n\t\"\",\n\t\"https://sts.amazonaws.com\",\n\t\"https://cloudformation.sa-east-1.amazonaws.com\",\n\t\"https://elasticache.sa-east-1.amazonaws.com\",\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/aws/retry.go",
    "content": "package aws\n\nimport (\n\t\"math/rand\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n)\n\nconst (\n\tmaxDelay             = 20 * time.Second\n\tdefaultScale         = 300 * time.Millisecond\n\tthrottlingScale      = 500 * time.Millisecond\n\tthrottlingScaleRange = throttlingScale / 4\n\tdefaultMaxRetries    = 3\n\tdynamoDBScale        = 25 * time.Millisecond\n\tdynamoDBMaxRetries   = 10\n)\n\n// A RetryPolicy encapsulates a strategy for implementing client retries.\n//\n// Default implementations are provided which match the AWS SDKs.\ntype RetryPolicy interface {\n\t// ShouldRetry returns whether a client should retry a failed request.\n\tShouldRetry(target string, r *http.Response, err error, numRetries int) bool\n\n\t// Delay returns the time a client should wait before issuing a retry.\n\tDelay(target string, r *http.Response, err error, numRetries int) time.Duration\n}\n\n// DefaultRetryPolicy implements the AWS SDK default retry policy.\n//\n// It will retry up to 3 times, and uses an exponential backoff with a scale\n// factor of 300ms (300ms, 600ms, 1200ms). If the retry is because of\n// throttling, the delay will also include some randomness.\n//\n// See https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/retry/PredefinedRetryPolicies.java#L90.\ntype DefaultRetryPolicy struct {\n}\n\n// ShouldRetry implements the RetryPolicy ShouldRetry method.\nfunc (policy DefaultRetryPolicy) ShouldRetry(target string, r *http.Response, err error, numRetries int) bool {\n\treturn shouldRetry(r, err, numRetries, defaultMaxRetries)\n}\n\n// Delay implements the RetryPolicy Delay method.\nfunc (policy DefaultRetryPolicy) Delay(target string, r *http.Response, err error, numRetries int) time.Duration {\n\tscale := defaultScale\n\tif err, ok := err.(*Error); ok && isThrottlingException(err) {\n\t\tscale = throttlingScale + time.Duration(rand.Int63n(int64(throttlingScaleRange)))\n\t}\n\treturn exponentialBackoff(numRetries, scale)\n}\n\n// DynamoDBRetryPolicy implements the AWS SDK DynamoDB retry policy.\n//\n// It will retry up to 10 times, and uses an exponential backoff with a scale\n// factor of 25ms (25ms, 50ms, 100ms, ...).\n//\n// See https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-core/src/main/java/com/amazonaws/retry/PredefinedRetryPolicies.java#L103.\ntype DynamoDBRetryPolicy struct {\n}\n\n// ShouldRetry implements the RetryPolicy ShouldRetry method.\nfunc (policy DynamoDBRetryPolicy) ShouldRetry(target string, r *http.Response, err error, numRetries int) bool {\n\treturn shouldRetry(r, err, numRetries, dynamoDBMaxRetries)\n}\n\n// Delay implements the RetryPolicy Delay method.\nfunc (policy DynamoDBRetryPolicy) Delay(target string, r *http.Response, err error, numRetries int) time.Duration {\n\treturn exponentialBackoff(numRetries, dynamoDBScale)\n}\n\n// NeverRetryPolicy never retries requests and returns immediately on failure.\ntype NeverRetryPolicy struct {\n}\n\n// ShouldRetry implements the RetryPolicy ShouldRetry method.\nfunc (policy NeverRetryPolicy) ShouldRetry(target string, r *http.Response, err error, numRetries int) bool {\n\treturn false\n}\n\n// Delay implements the RetryPolicy Delay method.\nfunc (policy NeverRetryPolicy) Delay(target string, r *http.Response, err error, numRetries int) time.Duration {\n\treturn time.Duration(0)\n}\n\n// shouldRetry determines if we should retry the request.\n//\n// See http://docs.aws.amazon.com/general/latest/gr/api-retries.html.\nfunc shouldRetry(r *http.Response, err error, numRetries int, maxRetries int) bool {\n\t// Once we've exceeded the max retry attempts, game over.\n\tif numRetries >= maxRetries {\n\t\treturn false\n\t}\n\n\t// Always retry temporary network errors.\n\tif err, ok := err.(net.Error); ok && err.Temporary() {\n\t\treturn true\n\t}\n\n\t// Always retry 5xx responses.\n\tif r != nil && r.StatusCode >= 500 {\n\t\treturn true\n\t}\n\n\t// Always retry throttling exceptions.\n\tif err, ok := err.(ServiceError); ok && isThrottlingException(err) {\n\t\treturn true\n\t}\n\n\t// Other classes of failures indicate a problem with the request. Retrying\n\t// won't help.\n\treturn false\n}\n\nfunc exponentialBackoff(numRetries int, scale time.Duration) time.Duration {\n\tif numRetries < 0 {\n\t\treturn time.Duration(0)\n\t}\n\n\tdelay := (1 << uint(numRetries)) * scale\n\tif delay > maxDelay {\n\t\treturn maxDelay\n\t}\n\treturn delay\n}\n\nfunc isThrottlingException(err ServiceError) bool {\n\tswitch err.ErrorCode() {\n\tcase \"Throttling\", \"ThrottlingException\", \"ProvisionedThroughputExceededException\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/aws/sign.go",
    "content": "package aws\n\nimport (\n\t\"bytes\"\n\t\"crypto/hmac\"\n\t\"crypto/sha256\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"path\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype V2Signer struct {\n\tauth    Auth\n\tservice ServiceInfo\n\thost    string\n}\n\nvar b64 = base64.StdEncoding\n\nfunc NewV2Signer(auth Auth, service ServiceInfo) (*V2Signer, error) {\n\tu, err := url.Parse(service.Endpoint)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &V2Signer{auth: auth, service: service, host: u.Host}, nil\n}\n\nfunc (s *V2Signer) Sign(method, path string, params map[string]string) {\n\tparams[\"AWSAccessKeyId\"] = s.auth.AccessKey\n\tparams[\"SignatureVersion\"] = \"2\"\n\tparams[\"SignatureMethod\"] = \"HmacSHA256\"\n\tif s.auth.Token() != \"\" {\n\t\tparams[\"SecurityToken\"] = s.auth.Token()\n\t}\n\n\t// AWS specifies that the parameters in a signed request must\n\t// be provided in the natural order of the keys. This is distinct\n\t// from the natural order of the encoded value of key=value.\n\t// Percent and gocheck.Equals affect the sorting order.\n\tvar keys, sarray []string\n\tfor k, _ := range params {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\tfor _, k := range keys {\n\t\tsarray = append(sarray, Encode(k)+\"=\"+Encode(params[k]))\n\t}\n\tjoined := strings.Join(sarray, \"&\")\n\tpayload := method + \"\\n\" + s.host + \"\\n\" + path + \"\\n\" + joined\n\thash := hmac.New(sha256.New, []byte(s.auth.SecretKey))\n\thash.Write([]byte(payload))\n\tsignature := make([]byte, b64.EncodedLen(hash.Size()))\n\tb64.Encode(signature, hash.Sum(nil))\n\n\tparams[\"Signature\"] = string(signature)\n}\n\n// Common date formats for signing requests\nconst (\n\tISO8601BasicFormat      = \"20060102T150405Z\"\n\tISO8601BasicFormatShort = \"20060102\"\n)\n\ntype Route53Signer struct {\n\tauth Auth\n}\n\nfunc NewRoute53Signer(auth Auth) *Route53Signer {\n\treturn &Route53Signer{auth: auth}\n}\n\n// getCurrentDate fetches the date stamp from the aws servers to\n// ensure the auth headers are within 5 minutes of the server time\nfunc (s *Route53Signer) getCurrentDate() string {\n\tresponse, err := http.Get(\"https://route53.amazonaws.com/date\")\n\tif err != nil {\n\t\tfmt.Print(\"Unable to get date from amazon: \", err)\n\t\treturn \"\"\n\t}\n\n\tresponse.Body.Close()\n\treturn response.Header.Get(\"Date\")\n}\n\n// Creates the authorize signature based on the date stamp and secret key\nfunc (s *Route53Signer) getHeaderAuthorize(message string) string {\n\thmacSha256 := hmac.New(sha256.New, []byte(s.auth.SecretKey))\n\thmacSha256.Write([]byte(message))\n\tcryptedString := hmacSha256.Sum(nil)\n\n\treturn base64.StdEncoding.EncodeToString(cryptedString)\n}\n\n// Adds all the required headers for AWS Route53 API to the request\n// including the authorization\nfunc (s *Route53Signer) Sign(req *http.Request) {\n\tdate := s.getCurrentDate()\n\tauthHeader := fmt.Sprintf(\"AWS3-HTTPS AWSAccessKeyId=%s,Algorithm=%s,Signature=%s\",\n\t\ts.auth.AccessKey, \"HmacSHA256\", s.getHeaderAuthorize(date))\n\n\treq.Header.Set(\"Host\", req.Host)\n\treq.Header.Set(\"X-Amzn-Authorization\", authHeader)\n\treq.Header.Set(\"X-Amz-Date\", date)\n\treq.Header.Set(\"Content-Type\", \"application/xml\")\n\tif s.auth.Token() != \"\" {\n\t\treq.Header.Set(\"X-Amzn-Security-Token\", s.auth.Token())\n\t}\n}\n\n/*\nThe V4Signer encapsulates all of the functionality to sign a request with the AWS\nSignature Version 4 Signing Process. (http://goo.gl/u1OWZz)\n*/\ntype V4Signer struct {\n\tauth        Auth\n\tserviceName string\n\tregion      Region\n\t// Add the x-amz-content-sha256 header\n\tIncludeXAmzContentSha256 bool\n}\n\n/*\nReturn a new instance of a V4Signer capable of signing AWS requests.\n*/\nfunc NewV4Signer(auth Auth, serviceName string, region Region) *V4Signer {\n\treturn &V4Signer{\n\t\tauth:        auth,\n\t\tserviceName: serviceName,\n\t\tregion:      region,\n\t\tIncludeXAmzContentSha256: false,\n\t}\n}\n\n/*\nSign a request according to the AWS Signature Version 4 Signing Process. (http://goo.gl/u1OWZz)\n\nThe signed request will include an \"x-amz-date\" header with a current timestamp if a valid \"x-amz-date\"\nor \"date\" header was not available in the original request. In addition, AWS Signature Version 4 requires\nthe \"host\" header to be a signed header, therefor the Sign method will manually set a \"host\" header from\nthe request.Host.\n\nThe signed request will include a new \"Authorization\" header indicating that the request has been signed.\n\nAny changes to the request after signing the request will invalidate the signature.\n*/\nfunc (s *V4Signer) Sign(req *http.Request) {\n\treq.Header.Set(\"host\", req.Host) // host header must be included as a signed header\n\tt := s.requestTime(req)          // Get request time\n\n\tpayloadHash := \"\"\n\n\tif _, ok := req.Form[\"X-Amz-Expires\"]; ok {\n\t\t// We are authenticating the the request by using query params\n\t\t// (also known as pre-signing a url, http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html)\n\t\tpayloadHash = \"UNSIGNED-PAYLOAD\"\n\t\treq.Header.Del(\"x-amz-date\")\n\n\t\treq.Form[\"X-Amz-SignedHeaders\"] = []string{s.signedHeaders(req.Header)}\n\t\treq.Form[\"X-Amz-Algorithm\"] = []string{\"AWS4-HMAC-SHA256\"}\n\t\treq.Form[\"X-Amz-Credential\"] = []string{s.auth.AccessKey + \"/\" + s.credentialScope(t)}\n\t\treq.Form[\"X-Amz-Date\"] = []string{t.Format(ISO8601BasicFormat)}\n\t\treq.URL.RawQuery = req.Form.Encode()\n\t} else {\n\t\tpayloadHash = s.payloadHash(req)\n\t\tif s.IncludeXAmzContentSha256 {\n\t\t\treq.Header.Set(\"x-amz-content-sha256\", payloadHash) // x-amz-content-sha256 contains the payload hash\n\t\t}\n\t}\n\tcreq := s.canonicalRequest(req, payloadHash)      // Build canonical request\n\tsts := s.stringToSign(t, creq)                    // Build string to sign\n\tsignature := s.signature(t, sts)                  // Calculate the AWS Signature Version 4\n\tauth := s.authorization(req.Header, t, signature) // Create Authorization header value\n\n\tif _, ok := req.Form[\"X-Amz-Expires\"]; ok {\n\t\treq.Form[\"X-Amz-Signature\"] = []string{signature}\n\t} else {\n\t\treq.Header.Set(\"Authorization\", auth) // Add Authorization header to request\n\t}\n\treturn\n}\n\n/*\nrequestTime method will parse the time from the request \"x-amz-date\" or \"date\" headers.\nIf the \"x-amz-date\" header is present, that will take priority over the \"date\" header.\nIf neither header is defined or we are unable to parse either header as a valid date\nthen we will create a new \"x-amz-date\" header with the current time.\n*/\nfunc (s *V4Signer) requestTime(req *http.Request) time.Time {\n\n\t// Get \"x-amz-date\" header\n\tdate := req.Header.Get(\"x-amz-date\")\n\n\t// Attempt to parse as ISO8601BasicFormat\n\tt, err := time.Parse(ISO8601BasicFormat, date)\n\tif err == nil {\n\t\treturn t\n\t}\n\n\t// Attempt to parse as http.TimeFormat\n\tt, err = time.Parse(http.TimeFormat, date)\n\tif err == nil {\n\t\treq.Header.Set(\"x-amz-date\", t.Format(ISO8601BasicFormat))\n\t\treturn t\n\t}\n\n\t// Get \"date\" header\n\tdate = req.Header.Get(\"date\")\n\n\t// Attempt to parse as http.TimeFormat\n\tt, err = time.Parse(http.TimeFormat, date)\n\tif err == nil {\n\t\treturn t\n\t}\n\n\t// Create a current time header to be used\n\tt = time.Now().UTC()\n\treq.Header.Set(\"x-amz-date\", t.Format(ISO8601BasicFormat))\n\treturn t\n}\n\n/*\ncanonicalRequest method creates the canonical request according to Task 1 of the AWS Signature Version 4 Signing Process. (http://goo.gl/eUUZ3S)\n\n    CanonicalRequest =\n      HTTPRequestMethod + '\\n' +\n      CanonicalURI + '\\n' +\n      CanonicalQueryString + '\\n' +\n      CanonicalHeaders + '\\n' +\n      SignedHeaders + '\\n' +\n      HexEncode(Hash(Payload))\n\npayloadHash is optional; use the empty string and it will be calculated from the request\n*/\nfunc (s *V4Signer) canonicalRequest(req *http.Request, payloadHash string) string {\n\tif payloadHash == \"\" {\n\t\tpayloadHash = s.payloadHash(req)\n\t}\n\tc := new(bytes.Buffer)\n\tfmt.Fprintf(c, \"%s\\n\", req.Method)\n\tfmt.Fprintf(c, \"%s\\n\", s.canonicalURI(req.URL))\n\tfmt.Fprintf(c, \"%s\\n\", s.canonicalQueryString(req.URL))\n\tfmt.Fprintf(c, \"%s\\n\\n\", s.canonicalHeaders(req.Header))\n\tfmt.Fprintf(c, \"%s\\n\", s.signedHeaders(req.Header))\n\tfmt.Fprintf(c, \"%s\", payloadHash)\n\treturn c.String()\n}\n\nfunc (s *V4Signer) canonicalURI(u *url.URL) string {\n\tu = &url.URL{Path: u.Path}\n\tcanonicalPath := u.String()\n\n\tslash := strings.HasSuffix(canonicalPath, \"/\")\n\tcanonicalPath = path.Clean(canonicalPath)\n\n\tif canonicalPath == \"\" || canonicalPath == \".\" {\n\t\tcanonicalPath = \"/\"\n\t}\n\n\tif canonicalPath != \"/\" && slash {\n\t\tcanonicalPath += \"/\"\n\t}\n\n\treturn canonicalPath\n}\n\nfunc (s *V4Signer) canonicalQueryString(u *url.URL) string {\n\tvar a []string\n\tfor k, vs := range u.Query() {\n\t\tk = url.QueryEscape(k)\n\t\tfor _, v := range vs {\n\t\t\tif v == \"\" {\n\t\t\t\ta = append(a, k+\"=\")\n\t\t\t} else {\n\t\t\t\tv = url.QueryEscape(v)\n\t\t\t\ta = append(a, k+\"=\"+v)\n\t\t\t}\n\t\t}\n\t}\n\tsort.Strings(a)\n\treturn strings.Join(a, \"&\")\n}\n\nfunc (s *V4Signer) canonicalHeaders(h http.Header) string {\n\ti, a, lowerCase := 0, make([]string, len(h)), make(map[string][]string)\n\n\tfor k, v := range h {\n\t\tlowerCase[strings.ToLower(k)] = v\n\t}\n\n\tvar keys []string\n\tfor k := range lowerCase {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\n\tfor _, k := range keys {\n\t\tv := lowerCase[k]\n\t\tfor j, w := range v {\n\t\t\tv[j] = strings.Trim(w, \" \")\n\t\t}\n\t\tsort.Strings(v)\n\t\ta[i] = strings.ToLower(k) + \":\" + strings.Join(v, \",\")\n\t\ti++\n\t}\n\treturn strings.Join(a, \"\\n\")\n}\n\nfunc (s *V4Signer) signedHeaders(h http.Header) string {\n\ti, a := 0, make([]string, len(h))\n\tfor k, _ := range h {\n\t\ta[i] = strings.ToLower(k)\n\t\ti++\n\t}\n\tsort.Strings(a)\n\treturn strings.Join(a, \";\")\n}\n\nfunc (s *V4Signer) payloadHash(req *http.Request) string {\n\tvar b []byte\n\tif req.Body == nil {\n\t\tb = []byte(\"\")\n\t} else {\n\t\tvar err error\n\t\tb, err = ioutil.ReadAll(req.Body)\n\t\tif err != nil {\n\t\t\t// TODO: I REALLY DON'T LIKE THIS PANIC!!!!\n\t\t\tpanic(err)\n\t\t}\n\t}\n\treq.Body = ioutil.NopCloser(bytes.NewBuffer(b))\n\treturn s.hash(string(b))\n}\n\n/*\nstringToSign method creates the string to sign accorting to Task 2 of the AWS Signature Version 4 Signing Process. (http://goo.gl/es1PAu)\n\n    StringToSign  =\n      Algorithm + '\\n' +\n      RequestDate + '\\n' +\n      CredentialScope + '\\n' +\n      HexEncode(Hash(CanonicalRequest))\n*/\nfunc (s *V4Signer) stringToSign(t time.Time, creq string) string {\n\tw := new(bytes.Buffer)\n\tfmt.Fprint(w, \"AWS4-HMAC-SHA256\\n\")\n\tfmt.Fprintf(w, \"%s\\n\", t.Format(ISO8601BasicFormat))\n\tfmt.Fprintf(w, \"%s\\n\", s.credentialScope(t))\n\tfmt.Fprintf(w, \"%s\", s.hash(creq))\n\treturn w.String()\n}\n\nfunc (s *V4Signer) credentialScope(t time.Time) string {\n\treturn fmt.Sprintf(\"%s/%s/%s/aws4_request\", t.Format(ISO8601BasicFormatShort), s.region.Name, s.serviceName)\n}\n\n/*\nsignature method calculates the AWS Signature Version 4 according to Task 3 of the AWS Signature Version 4 Signing Process. (http://goo.gl/j0Yqe1)\n\n\tsignature = HexEncode(HMAC(derived-signing-key, string-to-sign))\n*/\nfunc (s *V4Signer) signature(t time.Time, sts string) string {\n\th := s.hmac(s.derivedKey(t), []byte(sts))\n\treturn fmt.Sprintf(\"%x\", h)\n}\n\n/*\nderivedKey method derives a signing key to be used for signing a request.\n\n\tkSecret = Your AWS Secret Access Key\n    kDate = HMAC(\"AWS4\" + kSecret, Date)\n    kRegion = HMAC(kDate, Region)\n    kService = HMAC(kRegion, Service)\n    kSigning = HMAC(kService, \"aws4_request\")\n*/\nfunc (s *V4Signer) derivedKey(t time.Time) []byte {\n\th := s.hmac([]byte(\"AWS4\"+s.auth.SecretKey), []byte(t.Format(ISO8601BasicFormatShort)))\n\th = s.hmac(h, []byte(s.region.Name))\n\th = s.hmac(h, []byte(s.serviceName))\n\th = s.hmac(h, []byte(\"aws4_request\"))\n\treturn h\n}\n\n/*\nauthorization method generates the authorization header value.\n*/\nfunc (s *V4Signer) authorization(header http.Header, t time.Time, signature string) string {\n\tw := new(bytes.Buffer)\n\tfmt.Fprint(w, \"AWS4-HMAC-SHA256 \")\n\tfmt.Fprintf(w, \"Credential=%s/%s, \", s.auth.AccessKey, s.credentialScope(t))\n\tfmt.Fprintf(w, \"SignedHeaders=%s, \", s.signedHeaders(header))\n\tfmt.Fprintf(w, \"Signature=%s\", signature)\n\treturn w.String()\n}\n\n// hash method calculates the sha256 hash for a given string\nfunc (s *V4Signer) hash(in string) string {\n\th := sha256.New()\n\tfmt.Fprintf(h, \"%s\", in)\n\treturn fmt.Sprintf(\"%x\", h.Sum(nil))\n}\n\n// hmac method calculates the sha256 hmac for a given slice of bytes\nfunc (s *V4Signer) hmac(key, data []byte) []byte {\n\th := hmac.New(sha256.New, key)\n\th.Write(data)\n\treturn h.Sum(nil)\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/cloudfront/cloudfront.go",
    "content": "package cloudfront\n\nimport (\n\t\"bytes\"\n\t\"crypto\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/zackbloom/goamz/aws\"\n)\n\nconst (\n\tServiceName = \"cloudfront\"\n\tApiVersion  = \"2014-11-06\"\n)\n\n// TODO Reconcile with 'New' fn below\nfunc NewCloudFront(auth aws.Auth) *CloudFront {\n\tsigner := aws.NewV4Signer(auth, \"cloudfront\", aws.USEast)\n\n\treturn &CloudFront{\n\t\tSigner: signer,\n\t\tAuth:   auth,\n\t}\n}\n\ntype CloudFront struct {\n\tSigner    *aws.V4Signer\n\tAuth      aws.Auth\n\tBaseURL   string\n\tkeyPairId string\n\tkey       *rsa.PrivateKey\n}\n\ntype DistributionConfig struct {\n\tXMLName              xml.Name `xml:\"DistributionConfig\"`\n\tCallerReference      string\n\tAliases              Aliases\n\tDefaultRootObject    string\n\tOrigins              Origins\n\tDefaultCacheBehavior CacheBehavior\n\tComment              string\n\tCacheBehaviors       CacheBehaviors\n\tCustomErrorResponses CustomErrorResponses\n\tRestrictions         *GeoRestriction `xml:\"Restrictions>GeoRestriction,omitempty\"`\n\tLogging              Logging\n\tViewerCertificate    *ViewerCertificate `xml:\",omitempty\"`\n\tPriceClass           string\n\tEnabled              bool\n}\n\ntype DistributionSummary struct {\n\tXMLName xml.Name `xml:\"Distribution\"`\n\tDistributionConfig\n\tDomainName       string\n\tStatus           string\n\tId               string\n\tLastModifiedTime time.Time\n}\n\ntype Aliases []string\n\ntype EncodedAliases struct {\n\tQuantity int\n\tItems    []string `xml:\"Items>CNAME\"`\n}\n\nfunc (a Aliases) MarshalXML(e *xml.Encoder, start xml.StartElement) error {\n\tenc := EncodedAliases{\n\t\tQuantity: len(a),\n\t\tItems:    []string(a),\n\t}\n\n\treturn e.EncodeElement(enc, start)\n}\n\nfunc (n *Aliases) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {\n\tenc := EncodedAliases{}\n\terr := d.DecodeElement(&enc, &start)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*n = enc.Items\n\treturn nil\n}\n\ntype CustomErrorResponses []CustomErrorResponse\n\ntype EncodedCustomErrorResponses struct {\n\tQuantity int\n\tItems    []CustomErrorResponse `xml:\"Items>CustomErrorResponse\"`\n}\n\nfunc (a CustomErrorResponses) MarshalXML(e *xml.Encoder, start xml.StartElement) error {\n\tenc := EncodedCustomErrorResponses{\n\t\tQuantity: len(a),\n\t\tItems:    []CustomErrorResponse(a),\n\t}\n\n\treturn e.EncodeElement(enc, start)\n}\n\nfunc (n *CustomErrorResponses) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {\n\tenc := EncodedCustomErrorResponses{}\n\terr := d.DecodeElement(&enc, &start)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*n = enc.Items\n\treturn nil\n}\n\ntype CacheBehaviors []CacheBehavior\n\ntype EncodedCacheBehaviors struct {\n\tQuantity int\n\tItems    []CacheBehavior `xml:\"Items>CacheBehavior\"`\n}\n\nfunc (a CacheBehaviors) MarshalXML(e *xml.Encoder, start xml.StartElement) error {\n\tenc := EncodedCacheBehaviors{\n\t\tQuantity: len(a),\n\t\tItems:    []CacheBehavior(a),\n\t}\n\n\treturn e.EncodeElement(enc, start)\n}\n\nfunc (n *CacheBehaviors) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {\n\tenc := EncodedCacheBehaviors{}\n\terr := d.DecodeElement(&enc, &start)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*n = enc.Items\n\treturn nil\n}\n\ntype Logging struct {\n\tEnabled        bool\n\tIncludeCookies bool\n\tBucket         string\n\tPrefix         string\n}\n\ntype ViewerCertificate struct {\n\tIAMCertificateId             string `xml:\",omitempty\"`\n\tCloudFrontDefaultCertificate bool   `xml:\",omitempty\"`\n\tSSLSupportMethod             string\n\tMinimumProtocolVersion       string\n}\n\ntype GeoRestriction struct {\n\tRestrictionType string\n\tLocations       []string\n}\n\ntype EncodedGeoRestriction struct {\n\tRestrictionType string\n\tQuantity        int\n\tLocations       []string `xml:\"Items>Location\"`\n}\n\nfunc (a GeoRestriction) MarshalXML(e *xml.Encoder, start xml.StartElement) error {\n\tenc := EncodedGeoRestriction{\n\t\tRestrictionType: a.RestrictionType,\n\t\tQuantity:        len(a.Locations),\n\t\tLocations:       []string(a.Locations),\n\t}\n\n\treturn e.EncodeElement(enc, start)\n}\n\nfunc (n *GeoRestriction) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {\n\tenc := EncodedGeoRestriction{}\n\terr := d.DecodeElement(&enc, &start)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tn.Locations = enc.Locations\n\tn.RestrictionType = enc.RestrictionType\n\treturn nil\n}\n\ntype CustomErrorResponse struct {\n\tXMLName            xml.Name `xml:\"CustomErrorResponse\"`\n\tErrorCode          int\n\tResponsePagePath   string\n\tResponseCode       int\n\tErrorCachingMinTTL int\n}\n\ntype Origin struct {\n\tXMLName            xml.Name `xml:\"Origin\"`\n\tId                 string\n\tDomainName         string\n\tOriginPath         string              `xml:\"OriginPath,omitempty\"`\n\tS3OriginConfig     *S3OriginConfig     `xml:\",omitempty\"`\n\tCustomOriginConfig *CustomOriginConfig `xml:\",omitempty\"`\n}\n\ntype S3OriginConfig struct {\n\tOriginAccessIdentity string\n}\n\ntype CustomOriginConfig struct {\n\tHTTPPort             int\n\tHTTPSPort            int\n\tOriginProtocolPolicy string\n}\n\ntype Origins []Origin\n\ntype EncodedOrigins struct {\n\tQuantity int\n\tItems    []Origin `xml:\"Items>Origin\"`\n}\n\nfunc (o Origins) MarshalXML(e *xml.Encoder, start xml.StartElement) error {\n\tenc := EncodedOrigins{\n\t\tQuantity: len(o),\n\t\tItems:    []Origin(o),\n\t}\n\n\treturn e.EncodeElement(enc, start)\n}\n\nfunc (o *Origins) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {\n\tenc := EncodedOrigins{}\n\terr := d.DecodeElement(&enc, &start)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*o = Origins(enc.Items)\n\treturn nil\n}\n\ntype CacheBehavior struct {\n\tTargetOriginId       string\n\tPathPattern          string `xml:\",omitempty\"`\n\tForwardedValues      ForwardedValues\n\tTrustedSigners       TrustedSigners\n\tViewerProtocolPolicy string\n\tMinTTL               int\n\tAllowedMethods       AllowedMethods\n\tSmoothStreaming      bool\n}\n\ntype ForwardedValues struct {\n\tQueryString bool\n\tCookies     *Cookies\n\tHeaders     Names\n}\n\ntype Cookies struct {\n\tForward          string\n\tWhitelistedNames Names\n}\n\nvar CookiesDefault = Cookies{\n\tForward:          \"none\",\n\tWhitelistedNames: Names{},\n}\n\nfunc cacheBehaviorDefault(cache *CacheBehavior) {\n\tif cache.ForwardedValues.Cookies == nil {\n\t\tclone := CookiesDefault\n\t\tcache.ForwardedValues.Cookies = &clone\n\t}\n}\n\ntype Names []string\n\ntype EncodedNames struct {\n\tQuantity int\n\tItems    []string `xml:\"Items>Name\"`\n}\n\nfunc (w Names) MarshalXML(e *xml.Encoder, start xml.StartElement) error {\n\tenc := EncodedNames{\n\t\tQuantity: len(w),\n\t\tItems:    []string(w),\n\t}\n\n\treturn e.EncodeElement(enc, start)\n}\n\nfunc (n *Names) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {\n\tenc := EncodedNames{}\n\terr := d.DecodeElement(&enc, &start)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*n = Names(enc.Items)\n\treturn nil\n}\n\ntype ItemsList []string\n\ntype TrustedSigners struct {\n\tEnabled           bool\n\tAWSAccountNumbers []string\n}\n\ntype EncodedTrustedSigners struct {\n\tEnabled  bool\n\tQuantity int\n\tItems    []string `xml:\"Items>AWSAccountNumber\"`\n}\n\nfunc (n TrustedSigners) MarshalXML(e *xml.Encoder, start xml.StartElement) error {\n\tenc := EncodedTrustedSigners{\n\t\tEnabled:  n.Enabled,\n\t\tQuantity: len(n.AWSAccountNumbers),\n\t\tItems:    n.AWSAccountNumbers,\n\t}\n\n\treturn e.EncodeElement(enc, start)\n}\n\nfunc (n *TrustedSigners) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {\n\tenc := EncodedTrustedSigners{}\n\terr := d.DecodeElement(&enc, &start)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tn.AWSAccountNumbers = enc.Items\n\tn.Enabled = enc.Enabled\n\treturn nil\n}\n\ntype AllowedMethods struct {\n\tAllowed []string `xml:\"Items\"`\n\tCached  []string `xml:\"CachedMethods>Items,omitempty\"`\n}\n\ntype EncodedAllowedMethods struct {\n\tAllowedQuantity int      `xml:\"Quantity\"`\n\tAllowed         []string `xml:\"Items>Method\"`\n\tCachedQuantity  int      `xml:\"CachedMethods>Quantity\"`\n\tCached          []string `xml:\"CachedMethods>Items>Method\"`\n}\n\nfunc (n AllowedMethods) MarshalXML(e *xml.Encoder, start xml.StartElement) error {\n\tenc := EncodedAllowedMethods{\n\t\tAllowedQuantity: len(n.Allowed),\n\t\tAllowed:         n.Allowed,\n\t\tCachedQuantity:  len(n.Cached),\n\t\tCached:          n.Cached,\n\t}\n\n\treturn e.EncodeElement(enc, start)\n}\n\nfunc (n *AllowedMethods) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {\n\tenc := EncodedAllowedMethods{}\n\terr := d.DecodeElement(&enc, &start)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tn.Allowed = enc.Allowed\n\tn.Cached = enc.Cached\n\treturn nil\n}\n\nvar base64Replacer = strings.NewReplacer(\"=\", \"_\", \"+\", \"-\", \"/\", \"~\")\n\nfunc NewKeyLess(auth aws.Auth, baseurl string) *CloudFront {\n\treturn &CloudFront{keyPairId: auth.AccessKey, BaseURL: baseurl}\n}\n\nfunc New(baseurl string, key *rsa.PrivateKey, keyPairId string) *CloudFront {\n\treturn &CloudFront{\n\t\tBaseURL:   baseurl,\n\t\tkeyPairId: keyPairId,\n\t\tkey:       key,\n\t}\n}\n\ntype epochTime struct {\n\tEpochTime int64 `json:\"AWS:EpochTime\"`\n}\n\ntype condition struct {\n\tDateLessThan epochTime\n}\n\ntype statement struct {\n\tResource  string\n\tCondition condition\n}\n\ntype policy struct {\n\tStatement []statement\n}\n\nfunc buildPolicy(resource string, expireTime time.Time) ([]byte, error) {\n\tp := &policy{\n\t\tStatement: []statement{\n\t\t\tstatement{\n\t\t\t\tResource: resource,\n\t\t\t\tCondition: condition{\n\t\t\t\t\tDateLessThan: epochTime{\n\t\t\t\t\t\tEpochTime: expireTime.Truncate(time.Millisecond).Unix(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n\n\treturn json.Marshal(p)\n}\n\nfunc (cf *CloudFront) generateSignature(policy []byte) (string, error) {\n\thash := sha1.New()\n\t_, err := hash.Write(policy)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\thashed := hash.Sum(nil)\n\tvar signed []byte\n\tif cf.key.Validate() == nil {\n\t\tsigned, err = rsa.SignPKCS1v15(nil, cf.key, crypto.SHA1, hashed)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t} else {\n\t\tsigned = hashed\n\t}\n\tencoded := base64Replacer.Replace(base64.StdEncoding.EncodeToString(signed))\n\n\treturn encoded, nil\n}\n\n// Create a CloudFront distribution\n//\n// Usage:\n//\tconf := cloudfront.DistributionConfig{\n//    Enabled: true,\n//\n//\t\tOrigins: cloudfront.Origins{\n//\t\t\tcloudfront.Origin{\n//\t\t\t\tId:         \"test\",\n//\t\t\t\tDomainName: \"example.com\",\n//\t\t\t\tCustomOriginConfig: &cloudfront.CustomOriginConfig{\n//\t\t\t\t\tHTTPPort:             80,\n//\t\t\t\t\tHTTPSPort:            443,\n//\t\t\t\t\tOriginProtocolPolicy: \"http-only\",\n//\t\t\t\t},\n//\t\t\t},\n//\t\t},\n//\n//\t\tDefaultCacheBehavior: cloudfront.CacheBehavior{\n//\t\t\tTargetOriginId: \"test\",\n//\t\t\tPathPattern:    \"/test\",\n//\t\t\tForwardedValues: cloudfront.ForwardedValues{\n//\t\t\t\tQueryString: true,\n//\t\t\t\tCookies: cloudfront.Cookies{\n//\t\t\t\t\tForward: \"whitelist\",\n//\t\t\t\t\tWhitelistedNames: cloudfront.Names{\n//\t\t\t\t\t\t\"cat\",\n//\t\t\t\t\t\t\"dog\",\n//\t\t\t\t\t},\n//\t\t\t\t},\n//\t\t\t\tHeaders: cloudfront.Names{\n//\t\t\t\t\t\"horse\",\n//\t\t\t\t\t\"pig\",\n//\t\t\t\t},\n//\t\t\t},\n//\t\t\tViewerProtocolPolicy: \"allow-all\",\n//\t\t\tMinTTL:               300,\n//\t\t\tAllowedMethods: cloudfront.AllowedMethods{\n//\t\t\t\tAllowed: []string{\"GET\", \"HEAD\"},\n//\t\t\t\tCached:  []string{\"GET\", \"HEAD\"},\n//\t\t\t},\n//\t\t},\n//\n//\t\tRestrictions: cloudfront.GeoRestriction{\n//\t\t\tRestrictionType: \"blacklist\",\n//\t\t\tLocations: []string{\n//\t\t\t\t\"CA\",\n//\t\t\t\t\"DE\",\n//\t\t\t},\n//\t\t},\n//\n//\t\tCustomErrorResponses: cloudfront.CustomErrorResponses{\n//\t\t\tcloudfront.CustomErrorResponse{\n//\t\t\t\tErrorCode:        404,\n//\t\t\t\tResponseCode:     403,\n//\t\t\t\tResponsePagePath: \"/index.html\",\n//\t\t\t},\n//\t\t},\n//\n//\t\tPriceClass: \"PriceClass_All\",\n//\t}\n//\n//\tcf := cloudfront.NewCloudFront(aws.Auth{\n//\t\tAccessKey: // ...\n//\t\tSecretKey: // ...\n//\t})\n//\tcf.CreateDistribution(conf)\nfunc (cf *CloudFront) Create(config DistributionConfig) (summary DistributionSummary, err error) {\n\tif config.CallerReference == \"\" {\n\t\tconfig.CallerReference = strconv.FormatInt(time.Now().Unix(), 10)\n\t}\n\n\tcacheBehaviorDefault(&config.DefaultCacheBehavior)\n\tfor i, _ := range config.CacheBehaviors {\n\t\tcacheBehaviorDefault(&(config.CacheBehaviors[i]))\n\t}\n\n\tbody, err := xml.Marshal(config)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tclient := http.Client{}\n\treq, err := http.NewRequest(\"POST\", \"https://\"+ServiceName+\".amazonaws.com/\"+ApiVersion+\"/distribution\", bytes.NewReader(body))\n\tif err != nil {\n\t\treturn\n\t}\n\n\tcf.Signer.Sign(req)\n\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode >= 400 {\n\t\terrors := aws.ErrorResponse{}\n\t\txml.NewDecoder(resp.Body).Decode(&errors)\n\n\t\terr := errors.Errors\n\t\terr.RequestId = errors.RequestId\n\t\terr.StatusCode = resp.StatusCode\n\t\tif err.Message == \"\" {\n\t\t\terr.Message = resp.Status\n\t\t}\n\t\treturn summary, &err\n\t} else {\n\t\terr = xml.NewDecoder(resp.Body).Decode(&summary)\n\t}\n\n\treturn\n}\n\ntype DistributionItem struct {\n\tXMLName xml.Name `xml:\"DistributionSummary\"`\n\tDistributionSummary\n}\n\ntype DistributionsResp struct {\n\tItems       []DistributionItem `xml:\"Items>DistributionSummary\"`\n\tIsTruncated bool\n\tMarker      string\n\n\t// Use this to get the next page of results if IsTruncated is true\n\tNextMarker string\n\n\t// Total number in account\n\tQuantity int\n\tMaxItems int\n}\n\n// Marker is an optional pointer to the NextMarker from the previous page of results\n// Max is the maximum number of results to return, max 100\nfunc (cf *CloudFront) List(marker string, max int) (items *DistributionsResp, err error) {\n\tparams := url.Values{\n\t\t\"MaxItems\": []string{strconv.FormatInt(int64(max), 10)},\n\t}\n\n\tif marker != \"\" {\n\t\tparams[\"Marker\"] = []string{marker}\n\t}\n\n\turi, _ := url.Parse(\"https://\" + ServiceName + \".amazonaws.com/\" + ApiVersion + \"/distribution\")\n\turi.RawQuery = params.Encode()\n\n\tclient := http.Client{}\n\treq, err := http.NewRequest(\"GET\", uri.String(), nil)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tcf.Signer.Sign(req)\n\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode >= 400 {\n\t\terrors := aws.ErrorResponse{}\n\t\txml.NewDecoder(resp.Body).Decode(&errors)\n\n\t\terrors.Errors.RequestId = errors.RequestId\n\t\terrors.Errors.StatusCode = resp.StatusCode\n\t\tif errors.Errors.Message == \"\" {\n\t\t\terrors.Errors.Message = resp.Status\n\t\t}\n\t\terr = &errors.Errors\n\t} else {\n\t\titems = &DistributionsResp{}\n\t\terr = xml.NewDecoder(resp.Body).Decode(items)\n\t}\n\n\treturn\n}\n\nfunc (cf *CloudFront) FindDistributionByAlias(alias string) (dist *DistributionSummary, err error) {\n\tmarker := \"\"\n\tfor page := 0; page < 10; page++ {\n\t\tvar resp *DistributionsResp\n\t\tresp, err = cf.List(marker, 100)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\n\t\tif resp.Quantity > 1000 {\n\t\t\tpanic(\"More than 1000 CloudFront distributions in account, not all will be correctly searched\")\n\t\t}\n\n\t\tvar item DistributionItem\n\t\tfor _, item = range resp.Items {\n\t\t\tfor _, _alias := range item.Aliases {\n\t\t\t\tif _alias == alias {\n\t\t\t\t\tdist = &(item.DistributionSummary)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tmarker = resp.NextMarker\n\t\tif !resp.IsTruncated {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn\n}\n\n// Creates a signed url using RSAwithSHA1 as specified by\n// http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html#private-content-canned-policy-creating-signature\nfunc (cf *CloudFront) CannedSignedURL(path, queryString string, expires time.Time) (string, error) {\n\tresource := cf.BaseURL + path\n\tif queryString != \"\" {\n\t\tresource = path + \"?\" + queryString\n\t}\n\n\tpolicy, err := buildPolicy(resource, expires)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tsignature, err := cf.generateSignature(policy)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// TOOD: Do this once\n\turi, err := url.Parse(cf.BaseURL)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\turi.RawQuery = queryString\n\tif queryString != \"\" {\n\t\turi.RawQuery += \"&\"\n\t}\n\n\texpireTime := expires.Truncate(time.Millisecond).Unix()\n\n\turi.Path = path\n\turi.RawQuery += fmt.Sprintf(\"Expires=%d&Signature=%s&Key-Pair-Id=%s\", expireTime, signature, cf.keyPairId)\n\n\treturn uri.String(), nil\n}\n\nfunc (cloudfront *CloudFront) SignedURL(path, querystrings string, expires time.Time) string {\n\tpolicy := `{\"Statement\":[{\"Resource\":\"` + path + \"?\" + querystrings + `,\"Condition\":{\"DateLessThan\":{\"AWS:EpochTime\":` + strconv.FormatInt(expires.Truncate(time.Millisecond).Unix(), 10) + `}}}]}`\n\n\thash := sha1.New()\n\thash.Write([]byte(policy))\n\tb := hash.Sum(nil)\n\the := base64.StdEncoding.EncodeToString(b)\n\n\tpolicySha1 := he\n\n\turl := cloudfront.BaseURL + path + \"?\" + querystrings + \"&Expires=\" + strconv.FormatInt(expires.Unix(), 10) + \"&Signature=\" + policySha1 + \"&Key-Pair-Id=\" + cloudfront.keyPairId\n\n\treturn url\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/iam/iam.go",
    "content": "// The iam package provides types and functions for interaction with the AWS\n// Identity and Access Management (IAM) service.\npackage iam\n\nimport (\n\t\"encoding/xml\"\n\t\"github.com/zackbloom/goamz/aws\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// The IAM type encapsulates operations operations with the IAM endpoint.\ntype IAM struct {\n\taws.Auth\n\taws.Region\n}\n\n// New creates a new IAM instance.\nfunc New(auth aws.Auth, region aws.Region) *IAM {\n\treturn &IAM{auth, region}\n}\n\nfunc (iam *IAM) query(params map[string]string, resp interface{}) error {\n\tparams[\"Version\"] = \"2010-05-08\"\n\tparams[\"Timestamp\"] = time.Now().In(time.UTC).Format(time.RFC3339)\n\tendpoint, err := url.Parse(iam.IAMEndpoint)\n\tif err != nil {\n\t\treturn err\n\t}\n\tsign(iam.Auth, \"GET\", \"/\", params, endpoint.Host)\n\tendpoint.RawQuery = multimap(params).Encode()\n\tr, err := http.Get(endpoint.String())\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer r.Body.Close()\n\tif r.StatusCode > 200 {\n\t\treturn buildError(r)\n\t}\n\treturn xml.NewDecoder(r.Body).Decode(resp)\n}\n\nfunc (iam *IAM) postQuery(params map[string]string, resp interface{}) error {\n\tendpoint, err := url.Parse(iam.IAMEndpoint)\n\tif err != nil {\n\t\treturn err\n\t}\n\tparams[\"Version\"] = \"2010-05-08\"\n\tparams[\"Timestamp\"] = time.Now().In(time.UTC).Format(time.RFC3339)\n\tsign(iam.Auth, \"POST\", \"/\", params, endpoint.Host)\n\tencoded := multimap(params).Encode()\n\tbody := strings.NewReader(encoded)\n\treq, err := http.NewRequest(\"POST\", endpoint.String(), body)\n\tif err != nil {\n\t\treturn err\n\t}\n\treq.Header.Set(\"Host\", endpoint.Host)\n\treq.Header.Set(\"Content-Type\", \"application/x-www-form-urlencoded\")\n\treq.Header.Set(\"Content-Length\", strconv.Itoa(len(encoded)))\n\tr, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer r.Body.Close()\n\tif r.StatusCode > 200 {\n\t\treturn buildError(r)\n\t}\n\treturn xml.NewDecoder(r.Body).Decode(resp)\n}\n\nfunc buildError(r *http.Response) error {\n\tvar (\n\t\terr    Error\n\t\terrors xmlErrors\n\t)\n\txml.NewDecoder(r.Body).Decode(&errors)\n\tif len(errors.Errors) > 0 {\n\t\terr = errors.Errors[0]\n\t}\n\terr.StatusCode = r.StatusCode\n\tif err.Message == \"\" {\n\t\terr.Message = r.Status\n\t}\n\treturn &err\n}\n\nfunc multimap(p map[string]string) url.Values {\n\tq := make(url.Values, len(p))\n\tfor k, v := range p {\n\t\tq[k] = []string{v}\n\t}\n\treturn q\n}\n\n// Response to a CreateUser request.\n//\n// See http://goo.gl/JS9Gz for more details.\ntype CreateUserResp struct {\n\tRequestId string `xml:\"ResponseMetadata>RequestId\"`\n\tUser      User   `xml:\"CreateUserResult>User\"`\n}\n\n// User encapsulates a user managed by IAM.\n//\n// See http://goo.gl/BwIQ3 for more details.\ntype User struct {\n\tArn  string\n\tPath string\n\tId   string `xml:\"UserId\"`\n\tName string `xml:\"UserName\"`\n}\n\n// CreateUser creates a new user in IAM.\n//\n// See http://goo.gl/JS9Gz for more details.\nfunc (iam *IAM) CreateUser(name, path string) (*CreateUserResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\":   \"CreateUser\",\n\t\t\"Path\":     path,\n\t\t\"UserName\": name,\n\t}\n\tresp := new(CreateUserResp)\n\tif err := iam.query(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n}\n\n// Response for GetUser requests.\n//\n// See http://goo.gl/ZnzRN for more details.\ntype GetUserResp struct {\n\tRequestId string `xml:\"ResponseMetadata>RequestId\"`\n\tUser      User   `xml:\"GetUserResult>User\"`\n}\n\n// GetUser gets a user from IAM.\n//\n// See http://goo.gl/ZnzRN for more details.\nfunc (iam *IAM) GetUser(name string) (*GetUserResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\": \"GetUser\",\n\t}\n\tif name != \"\" {\n\t\tparams[\"UserName\"] = name\n\t}\n\tresp := new(GetUserResp)\n\tif err := iam.query(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n}\n\n// DeleteUser deletes a user from IAM.\n//\n// See http://goo.gl/jBuCG for more details.\nfunc (iam *IAM) DeleteUser(name string) (*SimpleResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\":   \"DeleteUser\",\n\t\t\"UserName\": name,\n\t}\n\tresp := new(SimpleResp)\n\tif err := iam.query(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n}\n\n// Response to a CreateGroup request.\n//\n// See http://goo.gl/n7NNQ for more details.\ntype CreateGroupResp struct {\n\tGroup     Group  `xml:\"CreateGroupResult>Group\"`\n\tRequestId string `xml:\"ResponseMetadata>RequestId\"`\n}\n\n// Group encapsulates a group managed by IAM.\n//\n// See http://goo.gl/ae7Vs for more details.\ntype Group struct {\n\tArn  string\n\tId   string `xml:\"GroupId\"`\n\tName string `xml:\"GroupName\"`\n\tPath string\n}\n\n// CreateGroup creates a new group in IAM.\n//\n// The path parameter can be used to identify which division or part of the\n// organization the user belongs to.\n//\n// If path is unset (\"\") it defaults to \"/\".\n//\n// See http://goo.gl/n7NNQ for more details.\nfunc (iam *IAM) CreateGroup(name string, path string) (*CreateGroupResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\":    \"CreateGroup\",\n\t\t\"GroupName\": name,\n\t}\n\tif path != \"\" {\n\t\tparams[\"Path\"] = path\n\t}\n\tresp := new(CreateGroupResp)\n\tif err := iam.query(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n}\n\n// Response to a ListGroups request.\n//\n// See http://goo.gl/W2TRj for more details.\ntype GroupsResp struct {\n\tGroups    []Group `xml:\"ListGroupsResult>Groups>member\"`\n\tRequestId string  `xml:\"ResponseMetadata>RequestId\"`\n}\n\n// Groups list the groups that have the specified path prefix.\n//\n// The parameter pathPrefix is optional. If pathPrefix is \"\", all groups are\n// returned.\n//\n// See http://goo.gl/W2TRj for more details.\nfunc (iam *IAM) Groups(pathPrefix string) (*GroupsResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\": \"ListGroups\",\n\t}\n\tif pathPrefix != \"\" {\n\t\tparams[\"PathPrefix\"] = pathPrefix\n\t}\n\tresp := new(GroupsResp)\n\tif err := iam.query(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n}\n\n// DeleteGroup deletes a group from IAM.\n//\n// See http://goo.gl/d5i2i for more details.\nfunc (iam *IAM) DeleteGroup(name string) (*SimpleResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\":    \"DeleteGroup\",\n\t\t\"GroupName\": name,\n\t}\n\tresp := new(SimpleResp)\n\tif err := iam.query(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n}\n\n// Response to a CreateAccessKey request.\n//\n// See http://goo.gl/L46Py for more details.\ntype CreateAccessKeyResp struct {\n\tRequestId string    `xml:\"ResponseMetadata>RequestId\"`\n\tAccessKey AccessKey `xml:\"CreateAccessKeyResult>AccessKey\"`\n}\n\n// AccessKey encapsulates an access key generated for a user.\n//\n// See http://goo.gl/LHgZR for more details.\ntype AccessKey struct {\n\tUserName string\n\tId       string `xml:\"AccessKeyId\"`\n\tSecret   string `xml:\"SecretAccessKey,omitempty\"`\n\tStatus   string\n}\n\n// CreateAccessKey creates a new access key in IAM.\n//\n// See http://goo.gl/L46Py for more details.\nfunc (iam *IAM) CreateAccessKey(userName string) (*CreateAccessKeyResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\":   \"CreateAccessKey\",\n\t\t\"UserName\": userName,\n\t}\n\tresp := new(CreateAccessKeyResp)\n\tif err := iam.query(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n}\n\n// Response to AccessKeys request.\n//\n// See http://goo.gl/Vjozx for more details.\ntype AccessKeysResp struct {\n\tRequestId  string      `xml:\"ResponseMetadata>RequestId\"`\n\tAccessKeys []AccessKey `xml:\"ListAccessKeysResult>AccessKeyMetadata>member\"`\n}\n\n// AccessKeys lists all acccess keys associated with a user.\n//\n// The userName parameter is optional. If set to \"\", the userName is determined\n// implicitly based on the AWS Access Key ID used to sign the request.\n//\n// See http://goo.gl/Vjozx for more details.\nfunc (iam *IAM) AccessKeys(userName string) (*AccessKeysResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\": \"ListAccessKeys\",\n\t}\n\tif userName != \"\" {\n\t\tparams[\"UserName\"] = userName\n\t}\n\tresp := new(AccessKeysResp)\n\tif err := iam.query(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n}\n\n// DeleteAccessKey deletes an access key from IAM.\n//\n// The userName parameter is optional. If set to \"\", the userName is determined\n// implicitly based on the AWS Access Key ID used to sign the request.\n//\n// See http://goo.gl/hPGhw for more details.\nfunc (iam *IAM) DeleteAccessKey(id, userName string) (*SimpleResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\":      \"DeleteAccessKey\",\n\t\t\"AccessKeyId\": id,\n\t}\n\tif userName != \"\" {\n\t\tparams[\"UserName\"] = userName\n\t}\n\tresp := new(SimpleResp)\n\tif err := iam.query(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n}\n\n// Response to a GetUserPolicy request.\n//\n// See http://goo.gl/BH04O for more details.\ntype GetUserPolicyResp struct {\n\tPolicy    UserPolicy `xml:\"GetUserPolicyResult\"`\n\tRequestId string     `xml:\"ResponseMetadata>RequestId\"`\n}\n\n// UserPolicy encapsulates an IAM group policy.\n//\n// See http://goo.gl/C7hgS for more details.\ntype UserPolicy struct {\n\tName     string `xml:\"PolicyName\"`\n\tUserName string `xml:\"UserName\"`\n\tDocument string `xml:\"PolicyDocument\"`\n}\n\n// GetUserPolicy gets a user policy in IAM.\n//\n// See http://goo.gl/BH04O for more details.\nfunc (iam *IAM) GetUserPolicy(userName, policyName string) (*GetUserPolicyResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\":     \"GetUserPolicy\",\n\t\t\"UserName\":   userName,\n\t\t\"PolicyName\": policyName,\n\t}\n\tresp := new(GetUserPolicyResp)\n\tif err := iam.query(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n\treturn nil, nil\n}\n\n// PutUserPolicy creates a user policy in IAM.\n//\n// See http://goo.gl/ldCO8 for more details.\nfunc (iam *IAM) PutUserPolicy(userName, policyName, policyDocument string) (*SimpleResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\":         \"PutUserPolicy\",\n\t\t\"UserName\":       userName,\n\t\t\"PolicyName\":     policyName,\n\t\t\"PolicyDocument\": policyDocument,\n\t}\n\tresp := new(SimpleResp)\n\tif err := iam.postQuery(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n}\n\n// DeleteUserPolicy deletes a user policy from IAM.\n//\n// See http://goo.gl/7Jncn for more details.\nfunc (iam *IAM) DeleteUserPolicy(userName, policyName string) (*SimpleResp, error) {\n\tparams := map[string]string{\n\t\t\"Action\":     \"DeleteUserPolicy\",\n\t\t\"PolicyName\": policyName,\n\t\t\"UserName\":   userName,\n\t}\n\tresp := new(SimpleResp)\n\tif err := iam.query(params, resp); err != nil {\n\t\treturn nil, err\n\t}\n\treturn resp, nil\n}\n\ntype SimpleResp struct {\n\tRequestId string `xml:\"ResponseMetadata>RequestId\"`\n}\n\ntype xmlErrors struct {\n\tErrors []Error `xml:\"Error\"`\n}\n\n// Error encapsulates an IAM error.\ntype Error struct {\n\t// HTTP status code of the error.\n\tStatusCode int\n\n\t// AWS code of the error.\n\tCode string\n\n\t// Message explaining the error.\n\tMessage string\n}\n\nfunc (e *Error) Error() string {\n\tvar prefix string\n\tif e.Code != \"\" {\n\t\tprefix = e.Code + \": \"\n\t}\n\tif prefix == \"\" && e.StatusCode > 0 {\n\t\tprefix = strconv.Itoa(e.StatusCode) + \": \"\n\t}\n\treturn prefix + e.Message\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/iam/sign.go",
    "content": "package iam\n\nimport (\n\t\"crypto/hmac\"\n\t\"crypto/sha256\"\n\t\"encoding/base64\"\n\t\"github.com/zackbloom/goamz/aws\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// ----------------------------------------------------------------------------\n// Version 2 signing (http://goo.gl/RSRp5)\n\nvar b64 = base64.StdEncoding\n\nfunc sign(auth aws.Auth, method, path string, params map[string]string, host string) {\n\tparams[\"AWSAccessKeyId\"] = auth.AccessKey\n\tparams[\"SignatureVersion\"] = \"2\"\n\tparams[\"SignatureMethod\"] = \"HmacSHA256\"\n\tif auth.Token() != \"\" {\n\t\tparams[\"SecurityToken\"] = auth.Token()\n\t}\n\n\tvar sarray []string\n\tfor k, v := range params {\n\t\tsarray = append(sarray, aws.Encode(k)+\"=\"+aws.Encode(v))\n\t}\n\tsort.StringSlice(sarray).Sort()\n\tjoined := strings.Join(sarray, \"&\")\n\tpayload := method + \"\\n\" + host + \"\\n\" + path + \"\\n\" + joined\n\thash := hmac.New(sha256.New, []byte(auth.SecretKey))\n\thash.Write([]byte(payload))\n\tsignature := make([]byte, b64.EncodedLen(hash.Size()))\n\tb64.Encode(signature, hash.Sum(nil))\n\n\tparams[\"Signature\"] = string(signature)\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/route53/route53.go",
    "content": "package route53\n\nimport (\n\t\"bytes\"\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\n\t\"github.com/zackbloom/goamz/aws\"\n)\n\ntype Route53 struct {\n\tAuth     aws.Auth\n\tEndpoint string\n\tSigner   *aws.Route53Signer\n\tService  *aws.Service\n}\n\nconst route53_host = \"https://route53.amazonaws.com\"\nconst route53_ver = \"2013-04-01\"\n\n// Factory for the route53 type\nfunc NewRoute53(auth aws.Auth) (*Route53, error) {\n\tsigner := aws.NewRoute53Signer(auth)\n\n\treturn &Route53{\n\t\tAuth:     auth,\n\t\tSigner:   signer,\n\t\tEndpoint: route53_host + \"/\" + route53_ver + \"/hostedzone\",\n\t}, nil\n}\n\n// General Structs used in all types of requests\ntype HostedZone struct {\n\tXMLName                xml.Name `xml:\"HostedZone\"`\n\tId                     string\n\tName                   string\n\tVPC                    HostedZoneVPC `xml:\"VPC,omitempty\"` // used on CreateHostedZone\n\tCallerReference        string\n\tConfig                 Config\n\tResourceRecordSetCount int\n}\n\ntype Config struct {\n\tXMLName     xml.Name `xml:\"Config\"`\n\tComment     string\n\tPrivateZone bool\n}\n\n// Structs for getting the existing Hosted Zones\ntype ListHostedZonesResponse struct {\n\tXMLName     xml.Name     `xml:\"ListHostedZonesResponse\"`\n\tHostedZones []HostedZone `xml:\"HostedZones>HostedZone\"`\n\tMarker      string\n\tIsTruncated bool\n\tNextMarker  string\n\tMaxItems    int\n}\n\ntype ListHostedZonesByNameResponse struct {\n\tXMLName          xml.Name     `xml:\"ListHostedZonesResponse\"`\n\tHostedZones      []HostedZone `xml:\"HostedZones>HostedZone\"`\n\tDNSName          string\n\tHostedZoneId     string\n\tNextDNSName      string\n\tNextHostedZoneId string\n\tIsTruncated      bool\n\tMaxItems         int\n}\n\n// Structs for Creating a New Host\ntype CreateHostedZoneRequest struct {\n\tXMLName          xml.Name `xml:\"CreateHostedZoneRequest\"`\n\tXmlns            string   `xml:\"xmlns,attr\"`\n\tName             string\n\tCallerReference  string\n\tVPC              HostedZoneVPC\n\tHostedZoneConfig HostedZoneConfig\n}\n\ntype ResourceRecordValue struct {\n\tValue string `xml:\"ResourceRecord>Value\"`\n}\n\ntype Change struct {\n\tAction      string                `xml:\"Action\"`\n\tName        string                `xml:\"ResourceRecordSet>Name\"`\n\tType        string                `xml:\"ResourceRecordSet>Type\"`\n\tTTL         int                   `xml:\"ResourceRecordSet>TTL,omitempty\"`\n\tAliasTarget AliasTarget           `xml:\"ResourceRecordSet>AliasTarget,omitempty\"`\n\tValues      []ResourceRecordValue `xml:\"ResourceRecordSet>ResourceRecords,omitempty\"`\n}\n\ntype ChangeResourceRecordSetsRequest struct {\n\tXMLName xml.Name `xml:\"ChangeResourceRecordSetsRequest\"`\n\tXmlns   string   `xml:\"xmlns,attr\"`\n\tChanges []Change `xml:\"ChangeBatch>Changes>Change\"`\n}\n\ntype AssociateVPCWithHostedZoneRequest struct {\n\tXMLName xml.Name `xml:\"AssociateVPCWithHostedZoneRequest\"`\n\tXmlns   string   `xml:\"xmlns,attr\"`\n\tVPC     HostedZoneVPC\n\tComment string\n}\n\ntype DisassociateVPCWithHostedZoneRequest struct {\n\tXMLName xml.Name `xml:\"DisassociateVPCWithHostedZoneRequest\"`\n\tXmlns   string   `xml:\"xmlns,attr\"`\n\tVPC     HostedZoneVPC\n\tComment string\n}\n\ntype HostedZoneConfig struct {\n\tXMLName xml.Name `xml:\"HostedZoneConfig\"`\n\tComment string\n}\n\ntype HostedZoneVPC struct {\n\tXMLName   xml.Name `xml:\"VPC\"`\n\tVPCId     string\n\tVPCRegion string\n}\n\ntype CreateHostedZoneResponse struct {\n\tXMLName       xml.Name `xml:\"CreateHostedZoneResponse\"`\n\tHostedZone    HostedZone\n\tChangeInfo    ChangeInfo\n\tDelegationSet DelegationSet\n}\n\ntype AliasTarget struct {\n\tHostedZoneId         string\n\tDNSName              string\n\tEvaluateTargetHealth bool\n}\n\ntype ResourceRecord struct {\n\tXMLName xml.Name `xml:\"ResourceRecord\"`\n\tValue   string\n}\n\ntype ResourceRecords struct {\n\tXMLName        xml.Name `xml:\"ResourceRecords\"`\n\tResourceRecord []ResourceRecord\n}\n\ntype ResourceRecordSet struct {\n\tXMLName         xml.Name `xml:\"ResourceRecordSet\"`\n\tName            string\n\tType            string\n\tTTL             int\n\tResourceRecords []ResourceRecords\n\tHealthCheckId   string\n\tRegion          string\n\tFailover        string\n\tAliasTarget     AliasTarget\n}\n\ntype ResourceRecordSets struct {\n\tXMLName           xml.Name `xml:\"ResourceRecordSets\"`\n\tResourceRecordSet []ResourceRecordSet\n}\n\ntype ListResourceRecordSetsResponse struct {\n\tXMLName              xml.Name `xml:\"ListResourceRecordSetsResponse\"`\n\tResourceRecordSets   []ResourceRecordSets\n\tIsTruncated          bool\n\tMaxItems             int\n\tNextRecordName       string\n\tNextRecordType       string\n\tNextRecordIdentifier string\n}\n\ntype ChangeResourceRecordSetsResponse struct {\n\tXMLName     xml.Name `xml:\"ChangeResourceRecordSetsResponse\"`\n\tId          string   `xml:\"ChangeInfo>Id\"`\n\tStatus      string   `xml:\"ChangeInfo>Status\"`\n\tSubmittedAt string   `xml:\"ChangeInfo>SubmittedAt\"`\n}\n\ntype ChangeInfo struct {\n\tXMLName     xml.Name `xml:\"ChangeInfo\"`\n\tId          string\n\tStatus      string\n\tSubmittedAt string\n}\n\ntype DelegationSet struct {\n\tXMLName     xml.Name `xml:\"DelegationSet`\n\tNameServers NameServers\n}\n\ntype NameServers struct {\n\tXMLName    xml.Name `xml:\"NameServers`\n\tNameServer []string\n}\n\ntype GetHostedZoneResponse struct {\n\tXMLName       xml.Name `xml:\"GetHostedZoneResponse\"`\n\tHostedZone    HostedZone\n\tDelegationSet DelegationSet\n\tVPCs          []HostedZoneVPC `xml:\"VPCs>VPC\"`\n}\n\ntype DeleteHostedZoneResponse struct {\n\tXMLName    xml.Name `xml:\"DeleteHostedZoneResponse\"`\n\tXmlns      string   `xml:\"xmlns,attr\"`\n\tChangeInfo ChangeInfo\n}\n\ntype AssociateVPCWithHostedZoneResponse struct {\n\tXMLName    xml.Name `xml:\"AssociateVPCWithHostedZoneResponse\"`\n\tXmlns      string   `xml:\"xmlns,attr\"`\n\tChangeInfo ChangeInfo\n}\n\ntype DisassociateVPCWithHostedZoneResponse struct {\n\tXMLName    xml.Name `xml:\"DisassociateVPCWithHostedZoneResponse\"`\n\tXmlns      string   `xml:\"xmlns,attr\"`\n\tChangeInfo ChangeInfo\n}\n\n// query sends the specified HTTP request to the path and signs the request\n// with the required authentication and headers based on the Auth.\n//\n// Automatically decodes the response into the the result interface\nfunc (r *Route53) query(method string, path string, body io.Reader, result interface{}) error {\n\tvar err error\n\n\t// Create the POST request and sign the headers\n\treq, err := http.NewRequest(method, path, body)\n\tr.Signer.Sign(req)\n\n\t// Send the request and capture the response\n\tclient := &http.Client{}\n\tres, err := client.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif method == \"POST\" {\n\t\tdefer req.Body.Close()\n\t}\n\n\tif res.StatusCode != 201 && res.StatusCode != 200 {\n\t\terr = r.Service.BuildError(res)\n\t\treturn err\n\t}\n\n\terr = xml.NewDecoder(res.Body).Decode(result)\n\n\treturn err\n}\n\n// CreateHostedZone send a creation request to the AWS Route53 API\nfunc (r *Route53) CreateHostedZone(hostedZoneReq *CreateHostedZoneRequest) (*CreateHostedZoneResponse, error) {\n\txmlBytes, err := xml.Marshal(hostedZoneReq)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresult := new(CreateHostedZoneResponse)\n\terr = r.query(\"POST\", r.Endpoint, bytes.NewBuffer(xmlBytes), result)\n\n\treturn result, err\n}\n\n// ListResourceRecordSets fetches a collection of ResourceRecordSets through the AWS Route53 API\nfunc (r *Route53) ListResourceRecordSets(hostedZone string, name string, _type string, identifier string, maxitems int) (result *ListResourceRecordSetsResponse, err error) {\n\tvar buffer bytes.Buffer\n\taddParam(&buffer, \"name\", name)\n\taddParam(&buffer, \"type\", _type)\n\taddParam(&buffer, \"identifier\", identifier)\n\tif maxitems > 0 {\n\t\taddParam(&buffer, \"maxitems\", strconv.Itoa(maxitems))\n\t}\n\tpath := fmt.Sprintf(\"%s/%s/rrset?%s\", r.Endpoint, hostedZone, buffer.String())\n\n\tfmt.Println(path)\n\tresult = new(ListResourceRecordSetsResponse)\n\terr = r.query(\"GET\", path, nil, result)\n\n\treturn\n}\n\nfunc (response *ListResourceRecordSetsResponse) GetResourceRecordSets() []ResourceRecordSet {\n\treturn response.ResourceRecordSets[0].ResourceRecordSet\n}\n\nfunc (recordset *ResourceRecordSet) GetValues() []string {\n\tif len(recordset.ResourceRecords) > 0 {\n\t\tresult := make([]string, len(recordset.ResourceRecords[0].ResourceRecord))\n\t\tfor i, record := range recordset.ResourceRecords[0].ResourceRecord {\n\t\t\tresult[i] = record.Value\n\t\t}\n\t\treturn result\n\t}\n\treturn make([]string, 0)\n}\n\n// ChangeResourceRecordSet send a change resource record request to the AWS Route53 API\nfunc (r *Route53) ChangeResourceRecordSet(req *ChangeResourceRecordSetsRequest, zoneId string) (*ChangeResourceRecordSetsResponse, error) {\n\treq.Xmlns = \"https://route53.amazonaws.com/doc/\" + route53_ver + \"/\"\n\n\txmlBytes, err := xml.Marshal(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\txmlBytes = []byte(xml.Header + string(xmlBytes))\n\n\tresult := new(ChangeResourceRecordSetsResponse)\n\tpath := fmt.Sprintf(\"%s/%s/rrset\", r.Endpoint, zoneId)\n\terr = r.query(\"POST\", path, bytes.NewBuffer(xmlBytes), result)\n\n\treturn result, err\n}\n\n// ListedHostedZones fetches a collection of HostedZones through the AWS Route53 API\nfunc (r *Route53) ListHostedZones(marker string, maxItems int) (result *ListHostedZonesResponse, err error) {\n\tpath := \"\"\n\n\tif marker == \"\" {\n\t\tpath = fmt.Sprintf(\"%s?maxitems=%d\", r.Endpoint, maxItems)\n\t} else {\n\t\tpath = fmt.Sprintf(\"%s?marker=%v&maxitems=%d\", r.Endpoint, marker, maxItems)\n\t}\n\n\tresult = new(ListHostedZonesResponse)\n\terr = r.query(\"GET\", path, nil, result)\n\n\treturn\n}\n\n// ListedHostedZonesByName fetches a collection of HostedZones through the AWS Route53 API ordered, and optionally filtered by, a DNS name\nfunc (r *Route53) ListHostedZonesByName(DNSName string, nextHostedZoneId string, maxItems int) (result *ListHostedZonesByNameResponse, err error) {\n\tparams := url.Values{}\n\tif DNSName != \"\" {\n\t\tparams.Add(\"dnsname\", DNSName)\n\t}\n\tif nextHostedZoneId != \"\" {\n\t\tparams.Add(\"hostedzoneid\", nextHostedZoneId)\n\t}\n\tif maxItems != 0 {\n\t\tparams.Add(\"maxitems\", strconv.FormatInt(int64(maxItems), 10))\n\t}\n\tpath := fmt.Sprintf(\"%s?%s\", r.Endpoint, params.Encode())\n\n\tresult = new(ListHostedZonesByNameResponse)\n\terr = r.query(\"GET\", path, nil, result)\n\n\treturn\n}\n\n// GetHostedZone fetches a particular hostedzones DelegationSet by id\nfunc (r *Route53) GetHostedZone(id string) (result *GetHostedZoneResponse, err error) {\n\tresult = new(GetHostedZoneResponse)\n\terr = r.query(\"GET\", fmt.Sprintf(\"%s/%v\", r.Endpoint, id), nil, result)\n\n\treturn\n}\n\n// DeleteHostedZone deletes the hosted zone with the given id\nfunc (r *Route53) DeleteHostedZone(id string) (result *DeleteHostedZoneResponse, err error) {\n\tpath := fmt.Sprintf(\"%s/%s\", r.Endpoint, id)\n\n\tresult = new(DeleteHostedZoneResponse)\n\terr = r.query(\"DELETE\", path, nil, result)\n\n\treturn\n}\n\n// AssociateVPCWithHostedZone associates a VPC with specified private hosted zone\nfunc (r *Route53) AssociateVPCWithHostedZone(zoneid string, req *AssociateVPCWithHostedZoneRequest) (result *AssociateVPCWithHostedZoneResponse, err error) {\n\txmlBytes, err := xml.Marshal(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\txmlBytes = []byte(xml.Header + string(xmlBytes))\n\tpath := fmt.Sprintf(\"%s/%s/associatevpc\", r.Endpoint, zoneid)\n\tresult = new(AssociateVPCWithHostedZoneResponse)\n\terr = r.query(\"POST\", path, bytes.NewBuffer(xmlBytes), result)\n\n\treturn\n}\n\n// DisassociateVPCWithHostedZone disassociates a VPC from specified private hosted zone\nfunc (r *Route53) DisassociateVPCWithHostedZone(zoneid string, req *DisassociateVPCWithHostedZoneRequest) (result *DisassociateVPCWithHostedZoneResponse, err error) {\n\txmlBytes, err := xml.Marshal(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\txmlBytes = []byte(xml.Header + string(xmlBytes))\n\tpath := fmt.Sprintf(\"%s/%s/disassociatevpc\", r.Endpoint, zoneid)\n\tresult = new(DisassociateVPCWithHostedZoneResponse)\n\terr = r.query(\"POST\", path, bytes.NewBuffer(xmlBytes), result)\n\n\treturn\n}\n\nfunc addParam(buffer *bytes.Buffer, name, value string) {\n\tif value != \"\" {\n\t\tif buffer.Len() > 0 {\n\t\t\tbuffer.WriteString(\"&\")\n\t\t}\n\t\tbuffer.WriteString(fmt.Sprintf(\"%s=%s\", name, value))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/s3/lifecycle.go",
    "content": "package s3\n\nimport (\n\t\"crypto/md5\"\n\t\"encoding/base64\"\n\t\"encoding/xml\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"time\"\n)\n\n// Implements an interface for s3 bucket lifecycle configuration\n// See goo.gl/d0bbDf for details.\n\nconst (\n\tLifecycleRuleStatusEnabled  = \"Enabled\"\n\tLifecycleRuleStatusDisabled = \"Disabled\"\n\tLifecycleRuleDateFormat     = \"2006-01-02\"\n\tStorageClassGlacier         = \"GLACIER\"\n)\n\ntype Expiration struct {\n\tDays *uint  `xml:\"Days,omitempty\"`\n\tDate string `xml:\"Date,omitempty\"`\n}\n\n// Returns Date as a time.Time.\nfunc (r *Expiration) ParseDate() (time.Time, error) {\n\treturn time.Parse(LifecycleRuleDateFormat, r.Date)\n}\n\ntype Transition struct {\n\tDays         *uint  `xml:\"Days,omitempty\"`\n\tDate         string `xml:\"Date,omitempty\"`\n\tStorageClass string `xml:\"StorageClass\"`\n}\n\n// Returns Date as a time.Time.\nfunc (r *Transition) ParseDate() (time.Time, error) {\n\treturn time.Parse(LifecycleRuleDateFormat, r.Date)\n}\n\ntype NoncurrentVersionExpiration struct {\n\tDays *uint `xml:\"NoncurrentDays,omitempty\"`\n}\n\ntype NoncurrentVersionTransition struct {\n\tDays         *uint  `xml:\"NoncurrentDays,omitempty\"`\n\tStorageClass string `xml:\"StorageClass\"`\n}\n\ntype LifecycleRule struct {\n\tID                          string                       `xml:\"ID\"`\n\tPrefix                      string                       `xml:\"Prefix\"`\n\tStatus                      string                       `xml:\"Status\"`\n\tNoncurrentVersionTransition *NoncurrentVersionTransition `xml:\"NoncurrentVersionTransition,omitempty\"`\n\tNoncurrentVersionExpiration *NoncurrentVersionExpiration `xml:\"NoncurrentVersionExpiration,omitempty\"`\n\tTransition                  *Transition                  `xml:\"Transition,omitempty\"`\n\tExpiration                  *Expiration                  `xml:\"Expiration,omitempty\"`\n}\n\n// Create a lifecycle rule with arbitrary identifier id and object name prefix\n// for which the rules should apply.\nfunc NewLifecycleRule(id, prefix string) *LifecycleRule {\n\trule := &LifecycleRule{\n\t\tID:     id,\n\t\tPrefix: prefix,\n\t\tStatus: LifecycleRuleStatusEnabled,\n\t}\n\treturn rule\n}\n\n// Adds a transition rule in days.  Overwrites any previous transition rule.\nfunc (r *LifecycleRule) SetTransitionDays(days uint) {\n\tr.Transition = &Transition{\n\t\tDays:         &days,\n\t\tStorageClass: StorageClassGlacier,\n\t}\n}\n\n// Adds a transition rule as a date.  Overwrites any previous transition rule.\nfunc (r *LifecycleRule) SetTransitionDate(date time.Time) {\n\tr.Transition = &Transition{\n\t\tDate:         date.Format(LifecycleRuleDateFormat),\n\t\tStorageClass: StorageClassGlacier,\n\t}\n}\n\n// Adds an expiration rule in days.  Overwrites any previous expiration rule.\n// Days must be > 0.\nfunc (r *LifecycleRule) SetExpirationDays(days uint) {\n\tr.Expiration = &Expiration{\n\t\tDays: &days,\n\t}\n}\n\n// Adds an expiration rule as a date.  Overwrites any previous expiration rule.\nfunc (r *LifecycleRule) SetExpirationDate(date time.Time) {\n\tr.Expiration = &Expiration{\n\t\tDate: date.Format(LifecycleRuleDateFormat),\n\t}\n}\n\n// Adds a noncurrent version transition rule.  Overwrites any previous\n// noncurrent version transition rule.\nfunc (r *LifecycleRule) SetNoncurrentVersionTransitionDays(days uint) {\n\tr.NoncurrentVersionTransition = &NoncurrentVersionTransition{\n\t\tDays:         &days,\n\t\tStorageClass: StorageClassGlacier,\n\t}\n}\n\n// Adds a noncurrent version expiration rule. Days must be > 0.  Overwrites\n// any previous noncurrent version expiration rule.\nfunc (r *LifecycleRule) SetNoncurrentVersionExpirationDays(days uint) {\n\tr.NoncurrentVersionExpiration = &NoncurrentVersionExpiration{\n\t\tDays: &days,\n\t}\n}\n\n// Marks the rule as disabled.\nfunc (r *LifecycleRule) Disable() {\n\tr.Status = LifecycleRuleStatusDisabled\n}\n\n// Marks the rule as enabled (default).\nfunc (r *LifecycleRule) Enable() {\n\tr.Status = LifecycleRuleStatusEnabled\n}\n\ntype LifecycleConfiguration struct {\n\tXMLName xml.Name          `xml:\"LifecycleConfiguration\"`\n\tRules   *[]*LifecycleRule `xml:\"Rule,omitempty\"`\n}\n\n// Adds a LifecycleRule to the configuration.\nfunc (c *LifecycleConfiguration) AddRule(r *LifecycleRule) {\n\tvar rules []*LifecycleRule\n\tif c.Rules != nil {\n\t\trules = *c.Rules\n\t}\n\trules = append(rules, r)\n\tc.Rules = &rules\n}\n\n// Sets the bucket's lifecycle configuration.\nfunc (b *Bucket) PutLifecycleConfiguration(c *LifecycleConfiguration) error {\n\tdoc, err := xml.Marshal(c)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbuf := makeXmlBuffer(doc)\n\tdigest := md5.New()\n\tsize, err := digest.Write(buf.Bytes())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\theaders := map[string][]string{\n\t\t\"Content-Length\": {strconv.FormatInt(int64(size), 10)},\n\t\t\"Content-MD5\":    {base64.StdEncoding.EncodeToString(digest.Sum(nil))},\n\t}\n\n\treq := &request{\n\t\tpath:    \"/\",\n\t\tmethod:  \"PUT\",\n\t\tbucket:  b.Name,\n\t\theaders: headers,\n\t\tpayload: buf,\n\t\tparams:  url.Values{\"lifecycle\": {\"\"}},\n\t}\n\n\treturn b.S3.queryV4Sign(req, nil)\n}\n\n// Retrieves the lifecycle configuration for the bucket.  AWS returns an error\n// if no lifecycle found.\nfunc (b *Bucket) GetLifecycleConfiguration() (*LifecycleConfiguration, error) {\n\treq := &request{\n\t\tmethod: \"GET\",\n\t\tbucket: b.Name,\n\t\tpath:   \"/\",\n\t\tparams: url.Values{\"lifecycle\": {\"\"}},\n\t}\n\n\tconf := &LifecycleConfiguration{}\n\terr := b.S3.queryV4Sign(req, conf)\n\treturn conf, err\n}\n\n// Delete the bucket's lifecycle configuration.\nfunc (b *Bucket) DeleteLifecycleConfiguration() error {\n\treq := &request{\n\t\tmethod: \"DELETE\",\n\t\tbucket: b.Name,\n\t\tpath:   \"/\",\n\t\tparams: url.Values{\"lifecycle\": {\"\"}},\n\t}\n\n\treturn b.S3.queryV4Sign(req, nil)\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/s3/multi.go",
    "content": "package s3\n\nimport (\n\t\"bytes\"\n\t\"crypto/md5\"\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"encoding/xml\"\n\t\"errors\"\n\t\"io\"\n\t\"net/url\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Multi represents an unfinished multipart upload.\n//\n// Multipart uploads allow sending big objects in smaller chunks.\n// After all parts have been sent, the upload must be explicitly\n// completed by calling Complete with the list of parts.\n//\n// See http://goo.gl/vJfTG for an overview of multipart uploads.\ntype Multi struct {\n\tBucket   *Bucket\n\tKey      string\n\tUploadId string\n}\n\n// That's the default. Here just for testing.\nvar listMultiMax = 1000\n\ntype listMultiResp struct {\n\tNextKeyMarker      string\n\tNextUploadIdMarker string\n\tIsTruncated        bool\n\tUpload             []Multi\n\tCommonPrefixes     []string `xml:\"CommonPrefixes>Prefix\"`\n}\n\n// ListMulti returns the list of unfinished multipart uploads in b.\n//\n// The prefix parameter limits the response to keys that begin with the\n// specified prefix. You can use prefixes to separate a bucket into different\n// groupings of keys (to get the feeling of folders, for example).\n//\n// The delim parameter causes the response to group all of the keys that\n// share a common prefix up to the next delimiter in a single entry within\n// the CommonPrefixes field. You can use delimiters to separate a bucket\n// into different groupings of keys, similar to how folders would work.\n//\n// See http://goo.gl/ePioY for details.\nfunc (b *Bucket) ListMulti(prefix, delim string) (multis []*Multi, prefixes []string, err error) {\n\tparams := map[string][]string{\n\t\t\"uploads\":     {\"\"},\n\t\t\"max-uploads\": {strconv.FormatInt(int64(listMultiMax), 10)},\n\t\t\"prefix\":      {prefix},\n\t\t\"delimiter\":   {delim},\n\t}\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\treq := &request{\n\t\t\tmethod: \"GET\",\n\t\t\tbucket: b.Name,\n\t\t\tparams: params,\n\t\t}\n\t\tvar resp listMultiResp\n\t\terr := b.S3.query(req, &resp)\n\t\tif shouldRetry(err) && attempt.HasNext() {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\t\tfor i := range resp.Upload {\n\t\t\tmulti := &resp.Upload[i]\n\t\t\tmulti.Bucket = b\n\t\t\tmultis = append(multis, multi)\n\t\t}\n\t\tprefixes = append(prefixes, resp.CommonPrefixes...)\n\t\tif !resp.IsTruncated {\n\t\t\treturn multis, prefixes, nil\n\t\t}\n\t\tparams[\"key-marker\"] = []string{resp.NextKeyMarker}\n\t\tparams[\"upload-id-marker\"] = []string{resp.NextUploadIdMarker}\n\t\tattempt = attempts.Start() // Last request worked.\n\t}\n\tpanic(\"unreachable\")\n}\n\n// Multi returns a multipart upload handler for the provided key\n// inside b. If a multipart upload exists for key, it is returned,\n// otherwise a new multipart upload is initiated with contType and perm.\nfunc (b *Bucket) Multi(key, contType string, perm ACL, options Options) (*Multi, error) {\n\tmultis, _, err := b.ListMulti(key, \"\")\n\tif err != nil && !hasCode(err, \"NoSuchUpload\") {\n\t\treturn nil, err\n\t}\n\tfor _, m := range multis {\n\t\tif m.Key == key {\n\t\t\treturn m, nil\n\t\t}\n\t}\n\treturn b.InitMulti(key, contType, perm, options)\n}\n\n// InitMulti initializes a new multipart upload at the provided\n// key inside b and returns a value for manipulating it.\n//\n// See http://goo.gl/XP8kL for details.\nfunc (b *Bucket) InitMulti(key string, contType string, perm ACL, options Options) (*Multi, error) {\n\theaders := map[string][]string{\n\t\t\"Content-Type\":   {contType},\n\t\t\"Content-Length\": {\"0\"},\n\t\t\"x-amz-acl\":      {string(perm)},\n\t}\n\toptions.addHeaders(headers)\n\tparams := map[string][]string{\n\t\t\"uploads\": {\"\"},\n\t}\n\treq := &request{\n\t\tmethod:  \"POST\",\n\t\tbucket:  b.Name,\n\t\tpath:    key,\n\t\theaders: headers,\n\t\tparams:  params,\n\t}\n\tvar err error\n\tvar resp struct {\n\t\tUploadId string `xml:\"UploadId\"`\n\t}\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\terr = b.S3.query(req, &resp)\n\t\tif !shouldRetry(err) {\n\t\t\tbreak\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Multi{Bucket: b, Key: key, UploadId: resp.UploadId}, nil\n}\n\nfunc (m *Multi) PutPartCopy(n int, options CopyOptions, source string) (*CopyObjectResult, Part, error) {\n\theaders := map[string][]string{\n\t\t\"x-amz-copy-source\": {url.QueryEscape(source)},\n\t}\n\toptions.addHeaders(headers)\n\tparams := map[string][]string{\n\t\t\"uploadId\":   {m.UploadId},\n\t\t\"partNumber\": {strconv.FormatInt(int64(n), 10)},\n\t}\n\n\tsourceBucket := m.Bucket.S3.Bucket(strings.TrimRight(strings.SplitAfterN(source, \"/\", 2)[0], \"/\"))\n\tsourceMeta, err := sourceBucket.Head(strings.SplitAfterN(source, \"/\", 2)[1], nil)\n\tif err != nil {\n\t\treturn nil, Part{}, err\n\t}\n\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\treq := &request{\n\t\t\tmethod:  \"PUT\",\n\t\t\tbucket:  m.Bucket.Name,\n\t\t\tpath:    m.Key,\n\t\t\theaders: headers,\n\t\t\tparams:  params,\n\t\t}\n\t\tresp := &CopyObjectResult{}\n\t\terr = m.Bucket.S3.query(req, resp)\n\t\tif shouldRetry(err) && attempt.HasNext() {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, Part{}, err\n\t\t}\n\t\tif resp.ETag == \"\" {\n\t\t\treturn nil, Part{}, errors.New(\"part upload succeeded with no ETag\")\n\t\t}\n\t\treturn resp, Part{n, resp.ETag, sourceMeta.ContentLength}, nil\n\t}\n\tpanic(\"unreachable\")\n}\n\n// PutPart sends part n of the multipart upload, reading all the content from r.\n// Each part, except for the last one, must be at least 5MB in size.\n//\n// See http://goo.gl/pqZer for details.\nfunc (m *Multi) PutPart(n int, r io.ReadSeeker) (Part, error) {\n\tpartSize, _, md5b64, err := seekerInfo(r)\n\tif err != nil {\n\t\treturn Part{}, err\n\t}\n\treturn m.putPart(n, r, partSize, md5b64)\n}\n\nfunc (m *Multi) putPart(n int, r io.ReadSeeker, partSize int64, md5b64 string) (Part, error) {\n\theaders := map[string][]string{\n\t\t\"Content-Length\": {strconv.FormatInt(partSize, 10)},\n\t\t\"Content-MD5\":    {md5b64},\n\t}\n\tparams := map[string][]string{\n\t\t\"uploadId\":   {m.UploadId},\n\t\t\"partNumber\": {strconv.FormatInt(int64(n), 10)},\n\t}\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\t_, err := r.Seek(0, 0)\n\t\tif err != nil {\n\t\t\treturn Part{}, err\n\t\t}\n\t\treq := &request{\n\t\t\tmethod:  \"PUT\",\n\t\t\tbucket:  m.Bucket.Name,\n\t\t\tpath:    m.Key,\n\t\t\theaders: headers,\n\t\t\tparams:  params,\n\t\t\tpayload: r,\n\t\t}\n\t\terr = m.Bucket.S3.prepare(req)\n\t\tif err != nil {\n\t\t\treturn Part{}, err\n\t\t}\n\t\tresp, err := m.Bucket.S3.run(req, nil)\n\t\tif shouldRetry(err) && attempt.HasNext() {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn Part{}, err\n\t\t}\n\t\tetag := resp.Header.Get(\"ETag\")\n\t\tif etag == \"\" {\n\t\t\treturn Part{}, errors.New(\"part upload succeeded with no ETag\")\n\t\t}\n\t\treturn Part{n, etag, partSize}, nil\n\t}\n\tpanic(\"unreachable\")\n}\n\nfunc seekerInfo(r io.ReadSeeker) (size int64, md5hex string, md5b64 string, err error) {\n\t_, err = r.Seek(0, 0)\n\tif err != nil {\n\t\treturn 0, \"\", \"\", err\n\t}\n\tdigest := md5.New()\n\tsize, err = io.Copy(digest, r)\n\tif err != nil {\n\t\treturn 0, \"\", \"\", err\n\t}\n\tsum := digest.Sum(nil)\n\tmd5hex = hex.EncodeToString(sum)\n\tmd5b64 = base64.StdEncoding.EncodeToString(sum)\n\treturn size, md5hex, md5b64, nil\n}\n\ntype Part struct {\n\tN    int `xml:\"PartNumber\"`\n\tETag string\n\tSize int64\n}\n\ntype partSlice []Part\n\nfunc (s partSlice) Len() int           { return len(s) }\nfunc (s partSlice) Less(i, j int) bool { return s[i].N < s[j].N }\nfunc (s partSlice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }\n\ntype listPartsResp struct {\n\tNextPartNumberMarker string\n\tIsTruncated          bool\n\tPart                 []Part\n}\n\n// That's the default. Here just for testing.\nvar listPartsMax = 1000\n\n// Kept for backcompatability. See the documentation for ListPartsFull\nfunc (m *Multi) ListParts() ([]Part, error) {\n\treturn m.ListPartsFull(0, listPartsMax)\n}\n\n// ListParts returns the list of previously uploaded parts in m,\n// ordered by part number (Only parts with higher part numbers than\n// partNumberMarker will be listed). Only up to maxParts parts will be\n// returned.\n//\n// See http://goo.gl/ePioY for details.\nfunc (m *Multi) ListPartsFull(partNumberMarker int, maxParts int) ([]Part, error) {\n\tif maxParts > listPartsMax {\n\t\tmaxParts = listPartsMax\n\t}\n\n\tparams := map[string][]string{\n\t\t\"uploadId\":           {m.UploadId},\n\t\t\"max-parts\":          {strconv.FormatInt(int64(maxParts), 10)},\n\t\t\"part-number-marker\": {strconv.FormatInt(int64(partNumberMarker), 10)},\n\t}\n\tvar parts partSlice\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\treq := &request{\n\t\t\tmethod: \"GET\",\n\t\t\tbucket: m.Bucket.Name,\n\t\t\tpath:   m.Key,\n\t\t\tparams: params,\n\t\t}\n\t\tvar resp listPartsResp\n\t\terr := m.Bucket.S3.query(req, &resp)\n\t\tif shouldRetry(err) && attempt.HasNext() {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tparts = append(parts, resp.Part...)\n\t\tif !resp.IsTruncated {\n\t\t\tsort.Sort(parts)\n\t\t\treturn parts, nil\n\t\t}\n\t\tparams[\"part-number-marker\"] = []string{resp.NextPartNumberMarker}\n\t\tattempt = attempts.Start() // Last request worked.\n\t}\n\tpanic(\"unreachable\")\n}\n\ntype ReaderAtSeeker interface {\n\tio.ReaderAt\n\tio.ReadSeeker\n}\n\n// PutAll sends all of r via a multipart upload with parts no larger\n// than partSize bytes, which must be set to at least 5MB.\n// Parts previously uploaded are either reused if their checksum\n// and size match the new part, or otherwise overwritten with the\n// new content.\n// PutAll returns all the parts of m (reused or not).\nfunc (m *Multi) PutAll(r ReaderAtSeeker, partSize int64) ([]Part, error) {\n\told, err := m.ListParts()\n\tif err != nil && !hasCode(err, \"NoSuchUpload\") {\n\t\treturn nil, err\n\t}\n\treuse := 0   // Index of next old part to consider reusing.\n\tcurrent := 1 // Part number of latest good part handled.\n\ttotalSize, err := r.Seek(0, 2)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfirst := true // Must send at least one empty part if the file is empty.\n\tvar result []Part\nNextSection:\n\tfor offset := int64(0); offset < totalSize || first; offset += partSize {\n\t\tfirst = false\n\t\tif offset+partSize > totalSize {\n\t\t\tpartSize = totalSize - offset\n\t\t}\n\t\tsection := io.NewSectionReader(r, offset, partSize)\n\t\t_, md5hex, md5b64, err := seekerInfo(section)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor reuse < len(old) && old[reuse].N <= current {\n\t\t\t// Looks like this part was already sent.\n\t\t\tpart := &old[reuse]\n\t\t\tetag := `\"` + md5hex + `\"`\n\t\t\tif part.N == current && part.Size == partSize && part.ETag == etag {\n\t\t\t\t// Checksum matches. Reuse the old part.\n\t\t\t\tresult = append(result, *part)\n\t\t\t\tcurrent++\n\t\t\t\tcontinue NextSection\n\t\t\t}\n\t\t\treuse++\n\t\t}\n\n\t\t// Part wasn't found or doesn't match. Send it.\n\t\tpart, err := m.putPart(current, section, partSize, md5b64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tresult = append(result, part)\n\t\tcurrent++\n\t}\n\treturn result, nil\n}\n\ntype completeUpload struct {\n\tXMLName xml.Name      `xml:\"CompleteMultipartUpload\"`\n\tParts   completeParts `xml:\"Part\"`\n}\n\ntype completePart struct {\n\tPartNumber int\n\tETag       string\n}\n\ntype completeParts []completePart\n\nfunc (p completeParts) Len() int           { return len(p) }\nfunc (p completeParts) Less(i, j int) bool { return p[i].PartNumber < p[j].PartNumber }\nfunc (p completeParts) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }\n\n// Complete assembles the given previously uploaded parts into the\n// final object. This operation may take several minutes.\n//\n// See http://goo.gl/2Z7Tw for details.\nfunc (m *Multi) Complete(parts []Part) error {\n\tparams := map[string][]string{\n\t\t\"uploadId\": {m.UploadId},\n\t}\n\tc := completeUpload{}\n\tfor _, p := range parts {\n\t\tc.Parts = append(c.Parts, completePart{p.N, p.ETag})\n\t}\n\tsort.Sort(c.Parts)\n\tdata, err := xml.Marshal(&c)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\treq := &request{\n\t\t\tmethod:  \"POST\",\n\t\t\tbucket:  m.Bucket.Name,\n\t\t\tpath:    m.Key,\n\t\t\tparams:  params,\n\t\t\tpayload: bytes.NewReader(data),\n\t\t}\n\t\terr := m.Bucket.S3.query(req, nil)\n\t\tif shouldRetry(err) && attempt.HasNext() {\n\t\t\tcontinue\n\t\t}\n\t\treturn err\n\t}\n\tpanic(\"unreachable\")\n}\n\n// Abort deletes an unifinished multipart upload and any previously\n// uploaded parts for it.\n//\n// After a multipart upload is aborted, no additional parts can be\n// uploaded using it. However, if any part uploads are currently in\n// progress, those part uploads might or might not succeed. As a result,\n// it might be necessary to abort a given multipart upload multiple\n// times in order to completely free all storage consumed by all parts.\n//\n// NOTE: If the described scenario happens to you, please report back to\n// the goamz authors with details. In the future such retrying should be\n// handled internally, but it's not clear what happens precisely (Is an\n// error returned? Is the issue completely undetectable?).\n//\n// See http://goo.gl/dnyJw for details.\nfunc (m *Multi) Abort() error {\n\tparams := map[string][]string{\n\t\t\"uploadId\": {m.UploadId},\n\t}\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\treq := &request{\n\t\t\tmethod: \"DELETE\",\n\t\t\tbucket: m.Bucket.Name,\n\t\t\tpath:   m.Key,\n\t\t\tparams: params,\n\t\t}\n\t\terr := m.Bucket.S3.query(req, nil)\n\t\tif shouldRetry(err) && attempt.HasNext() {\n\t\t\tcontinue\n\t\t}\n\t\treturn err\n\t}\n\tpanic(\"unreachable\")\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/s3/s3.go",
    "content": "//\n// goamz - Go packages to interact with the Amazon Web Services.\n//\n//   https://wiki.ubuntu.com/goamz\n//\n// Copyright (c) 2011 Canonical Ltd.\n//\n// Written by Gustavo Niemeyer <gustavo.niemeyer@canonical.com>\n//\n\npackage s3\n\nimport (\n\t\"bytes\"\n\t\"crypto/hmac\"\n\t\"crypto/md5\"\n\t\"crypto/sha1\"\n\t\"encoding/base64\"\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/http/httputil\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/zackbloom/goamz/aws\"\n)\n\nconst debug = false\n\n// The S3 type encapsulates operations with an S3 region.\ntype S3 struct {\n\taws.Auth\n\taws.Region\n\tConnectTimeout time.Duration\n\tReadTimeout    time.Duration\n\tSignature      int\n\tprivate        byte // Reserve the right of using private data.\n}\n\n// The Bucket type encapsulates operations with an S3 bucket.\ntype Bucket struct {\n\t*S3\n\tName string\n}\n\n// The Owner type represents the owner of the object in an S3 bucket.\ntype Owner struct {\n\tID          string\n\tDisplayName string\n}\n\n// Fold options into an Options struct\n//\ntype Options struct {\n\tSSE                  bool\n\tSSECustomerAlgorithm string\n\tSSECustomerKey       string\n\tSSECustomerKeyMD5    string\n\tMeta                 map[string][]string\n\tContentEncoding      string\n\tCacheControl         string\n\tRedirectLocation     string\n\tContentMD5           string\n\tContentDisposition   string\n\tRange                string\n\t// What else?\n\t//// The following become headers so they are []strings rather than strings... I think\n\t// x-amz-storage-class []string\n}\n\ntype CopyOptions struct {\n\tOptions\n\tCopySourceOptions string\n\tMetadataDirective string\n\tContentType       string\n}\n\n// CopyObjectResult is the output from a Copy request\ntype CopyObjectResult struct {\n\tETag         string\n\tLastModified string\n}\n\nvar attempts = aws.AttemptStrategy{\n\tMin:   5,\n\tTotal: 5 * time.Second,\n\tDelay: 200 * time.Millisecond,\n}\n\n// New creates a new S3.\nfunc New(auth aws.Auth, region aws.Region) *S3 {\n\treturn &S3{auth, region, 0, 0, 0, aws.V2Signature}\n}\n\n// Bucket returns a Bucket with the given name.\nfunc (s3 *S3) Bucket(name string) *Bucket {\n\tif s3.Region.S3BucketEndpoint != \"\" || s3.Region.S3LowercaseBucket {\n\t\tname = strings.ToLower(name)\n\t}\n\treturn &Bucket{s3, name}\n}\n\ntype BucketInfo struct {\n\tName         string\n\tCreationDate string\n}\n\ntype GetServiceResp struct {\n\tOwner   Owner\n\tBuckets []BucketInfo `xml:\">Bucket\"`\n}\n\n// GetService gets a list of all buckets owned by an account.\n//\n// See http://goo.gl/wbHkGj for details.\nfunc (s3 *S3) GetService() (*GetServiceResp, error) {\n\tbucket := s3.Bucket(\"\")\n\n\tr, err := bucket.Get(\"\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Parse the XML response.\n\tvar resp GetServiceResp\n\tif err = xml.Unmarshal(r, &resp); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &resp, nil\n}\n\nvar createBucketConfiguration = `<CreateBucketConfiguration xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">\n  <LocationConstraint>%s</LocationConstraint>\n</CreateBucketConfiguration>`\n\n// locationConstraint returns an io.Reader specifying a LocationConstraint if\n// required for the region.\n//\n// See http://goo.gl/bh9Kq for details.\nfunc (s3 *S3) locationConstraint() io.Reader {\n\tconstraint := \"\"\n\tif s3.Region.S3LocationConstraint {\n\t\tconstraint = fmt.Sprintf(createBucketConfiguration, s3.Region.Name)\n\t}\n\treturn strings.NewReader(constraint)\n}\n\ntype ACL string\n\nconst (\n\tPrivate           = ACL(\"private\")\n\tPublicRead        = ACL(\"public-read\")\n\tPublicReadWrite   = ACL(\"public-read-write\")\n\tAuthenticatedRead = ACL(\"authenticated-read\")\n\tBucketOwnerRead   = ACL(\"bucket-owner-read\")\n\tBucketOwnerFull   = ACL(\"bucket-owner-full-control\")\n)\n\n// PutBucket creates a new bucket.\n//\n// See http://goo.gl/ndjnR for details.\nfunc (b *Bucket) PutBucket(perm ACL) error {\n\theaders := map[string][]string{\n\t\t\"x-amz-acl\": {string(perm)},\n\t}\n\treq := &request{\n\t\tmethod:  \"PUT\",\n\t\tbucket:  b.Name,\n\t\tpath:    \"/\",\n\t\theaders: headers,\n\t\tpayload: b.locationConstraint(),\n\t}\n\treturn b.S3.query(req, nil)\n}\n\n// DelBucket removes an existing S3 bucket. All objects in the bucket must\n// be removed before the bucket itself can be removed.\n//\n// See http://goo.gl/GoBrY for details.\nfunc (b *Bucket) DelBucket() (err error) {\n\treq := &request{\n\t\tmethod: \"DELETE\",\n\t\tbucket: b.Name,\n\t\tpath:   \"/\",\n\t}\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\terr = b.S3.query(req, nil)\n\t\tif !shouldRetry(err) {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn err\n}\n\n// Get retrieves an object from an S3 bucket.\n//\n// See http://goo.gl/isCO7 for details.\nfunc (b *Bucket) Get(path string) (data []byte, err error) {\n\tbody, err := b.GetReader(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdata, err = ioutil.ReadAll(body)\n\tbody.Close()\n\treturn data, err\n}\n\n// GetReader retrieves an object from an S3 bucket,\n// returning the body of the HTTP response.\n// It is the caller's responsibility to call Close on rc when\n// finished reading.\nfunc (b *Bucket) GetReader(path string) (rc io.ReadCloser, err error) {\n\tresp, err := b.GetResponse(path)\n\tif resp != nil {\n\t\treturn resp.Body, err\n\t}\n\treturn nil, err\n}\n\n// GetResponse retrieves an object from an S3 bucket,\n// returning the HTTP response.\n// It is the caller's responsibility to call Close on rc when\n// finished reading\nfunc (b *Bucket) GetResponse(path string) (resp *http.Response, err error) {\n\treturn b.GetResponseWithHeaders(path, make(http.Header))\n}\n\n// GetReaderWithHeaders retrieves an object from an S3 bucket\n// Accepts custom headers to be sent as the second parameter\n// returning the body of the HTTP response.\n// It is the caller's responsibility to call Close on rc when\n// finished reading\nfunc (b *Bucket) GetResponseWithHeaders(path string, headers map[string][]string) (resp *http.Response, err error) {\n\treq := &request{\n\t\tbucket:  b.Name,\n\t\tpath:    path,\n\t\theaders: headers,\n\t}\n\terr = b.S3.prepare(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\tresp, err := b.S3.run(req, nil)\n\t\tif shouldRetry(err) && attempt.HasNext() {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn resp, nil\n\t}\n\tpanic(\"unreachable\")\n}\n\n// Exists checks whether or not an object exists on an S3 bucket using a HEAD request.\nfunc (b *Bucket) Exists(path string) (exists bool, err error) {\n\treq := &request{\n\t\tmethod: \"HEAD\",\n\t\tbucket: b.Name,\n\t\tpath:   path,\n\t}\n\terr = b.S3.prepare(req)\n\tif err != nil {\n\t\treturn\n\t}\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\tresp, err := b.S3.run(req, nil)\n\n\t\tif shouldRetry(err) && attempt.HasNext() {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err != nil {\n\t\t\t// We can treat a 403 or 404 as non existance\n\t\t\tif e, ok := err.(*Error); ok && (e.StatusCode == 403 || e.StatusCode == 404) {\n\t\t\t\treturn false, nil\n\t\t\t}\n\t\t\treturn false, err\n\t\t}\n\n\t\tif resp.StatusCode/100 == 2 {\n\t\t\texists = true\n\t\t}\n\t\tif resp.Body != nil {\n\t\t\tresp.Body.Close()\n\t\t}\n\t\treturn exists, err\n\t}\n\treturn false, fmt.Errorf(\"S3 Currently Unreachable\")\n}\n\n// Head HEADs an object in the S3 bucket, returns the response with\n// no body see http://bit.ly/17K1ylI\nfunc (b *Bucket) Head(path string, headers map[string][]string) (*http.Response, error) {\n\treq := &request{\n\t\tmethod:  \"HEAD\",\n\t\tbucket:  b.Name,\n\t\tpath:    path,\n\t\theaders: headers,\n\t}\n\terr := b.S3.prepare(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\tresp, err := b.S3.run(req, nil)\n\t\tif shouldRetry(err) && attempt.HasNext() {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn resp, err\n\t}\n\treturn nil, fmt.Errorf(\"S3 Currently Unreachable\")\n}\n\n// Put inserts an object into the S3 bucket.\n//\n// See http://goo.gl/FEBPD for details.\nfunc (b *Bucket) Put(path string, data []byte, contType string, perm ACL, options Options) error {\n\tbody := bytes.NewBuffer(data)\n\treturn b.PutReader(path, body, int64(len(data)), contType, perm, options)\n}\n\n// PutCopy puts a copy of an object given by the key path into bucket b using b.Path as the target key\nfunc (b *Bucket) PutCopy(path string, perm ACL, options CopyOptions, source string) (*CopyObjectResult, error) {\n\theaders := map[string][]string{\n\t\t\"x-amz-acl\":         {string(perm)},\n\t\t\"x-amz-copy-source\": {url.QueryEscape(source)},\n\t}\n\toptions.addHeaders(headers)\n\treq := &request{\n\t\tmethod:  \"PUT\",\n\t\tbucket:  b.Name,\n\t\tpath:    path,\n\t\theaders: headers,\n\t}\n\tresp := &CopyObjectResult{}\n\terr := b.S3.query(req, resp)\n\tif err != nil {\n\t\treturn resp, err\n\t}\n\treturn resp, nil\n}\n\n// PutReader inserts an object into the S3 bucket by consuming data\n// from r until EOF.\nfunc (b *Bucket) PutReader(path string, r io.Reader, length int64, contType string, perm ACL, options Options) error {\n\theaders := map[string][]string{\n\t\t\"Content-Length\": {strconv.FormatInt(length, 10)},\n\t\t\"Content-Type\":   {contType},\n\t\t\"x-amz-acl\":      {string(perm)},\n\t}\n\toptions.addHeaders(headers)\n\treq := &request{\n\t\tmethod:  \"PUT\",\n\t\tbucket:  b.Name,\n\t\tpath:    path,\n\t\theaders: headers,\n\t\tpayload: r,\n\t}\n\treturn b.S3.query(req, nil)\n}\n\n// addHeaders adds o's specified fields to headers\nfunc (o Options) addHeaders(headers map[string][]string) {\n\tif o.SSE {\n\t\theaders[\"x-amz-server-side-encryption\"] = []string{\"AES256\"}\n\t} else if len(o.SSECustomerAlgorithm) != 0 && len(o.SSECustomerKey) != 0 && len(o.SSECustomerKeyMD5) != 0 {\n\t\t// Amazon-managed keys and customer-managed keys are mutually exclusive\n\t\theaders[\"x-amz-server-side-encryption-customer-algorithm\"] = []string{o.SSECustomerAlgorithm}\n\t\theaders[\"x-amz-server-side-encryption-customer-key\"] = []string{o.SSECustomerKey}\n\t\theaders[\"x-amz-server-side-encryption-customer-key-MD5\"] = []string{o.SSECustomerKeyMD5}\n\t}\n\tif len(o.Range) != 0 {\n\t\theaders[\"Range\"] = []string{o.Range}\n\t}\n\tif len(o.ContentEncoding) != 0 {\n\t\theaders[\"Content-Encoding\"] = []string{o.ContentEncoding}\n\t}\n\tif len(o.CacheControl) != 0 {\n\t\theaders[\"Cache-Control\"] = []string{o.CacheControl}\n\t}\n\tif len(o.ContentMD5) != 0 {\n\t\theaders[\"Content-MD5\"] = []string{o.ContentMD5}\n\t}\n\tif len(o.RedirectLocation) != 0 {\n\t\theaders[\"x-amz-website-redirect-location\"] = []string{o.RedirectLocation}\n\t}\n\tif len(o.ContentDisposition) != 0 {\n\t\theaders[\"Content-Disposition\"] = []string{o.ContentDisposition}\n\t}\n\tfor k, v := range o.Meta {\n\t\theaders[\"x-amz-meta-\"+k] = v\n\t}\n}\n\n// addHeaders adds o's specified fields to headers\nfunc (o CopyOptions) addHeaders(headers map[string][]string) {\n\to.Options.addHeaders(headers)\n\tif len(o.MetadataDirective) != 0 {\n\t\theaders[\"x-amz-metadata-directive\"] = []string{o.MetadataDirective}\n\t}\n\tif len(o.CopySourceOptions) != 0 {\n\t\theaders[\"x-amz-copy-source-range\"] = []string{o.CopySourceOptions}\n\t}\n\tif len(o.ContentType) != 0 {\n\t\theaders[\"Content-Type\"] = []string{o.ContentType}\n\t}\n}\n\nfunc makeXmlBuffer(doc []byte) *bytes.Buffer {\n\tbuf := new(bytes.Buffer)\n\tbuf.WriteString(xml.Header)\n\tbuf.Write(doc)\n\treturn buf\n}\n\ntype IndexDocument struct {\n\tSuffix string `xml:\"Suffix\"`\n}\n\ntype ErrorDocument struct {\n\tKey string `xml:\"Key\"`\n}\n\ntype RoutingRule struct {\n\tConditionKeyPrefixEquals     string `xml:\"Condition>KeyPrefixEquals\"`\n\tRedirectReplaceKeyPrefixWith string `xml:\"Redirect>ReplaceKeyPrefixWith,omitempty\"`\n\tRedirectReplaceKeyWith       string `xml:\"Redirect>ReplaceKeyWith,omitempty\"`\n}\n\ntype RedirectAllRequestsTo struct {\n\tHostName string `xml:\"HostName\"`\n\tProtocol string `xml:\"Protocol,omitempty\"`\n}\n\ntype WebsiteConfiguration struct {\n\tXMLName               xml.Name               `xml:\"http://s3.amazonaws.com/doc/2006-03-01/ WebsiteConfiguration\"`\n\tIndexDocument         *IndexDocument         `xml:\"IndexDocument,omitempty\"`\n\tErrorDocument         *ErrorDocument         `xml:\"ErrorDocument,omitempty\"`\n\tRoutingRules          *[]RoutingRule         `xml:\"RoutingRules>RoutingRule,omitempty\"`\n\tRedirectAllRequestsTo *RedirectAllRequestsTo `xml:\"RedirectAllRequestsTo,omitempty\"`\n}\n\n// PutBucketWebsite configures a bucket as a website.\n//\n// See http://goo.gl/TpRlUy for details.\nfunc (b *Bucket) PutBucketWebsite(configuration WebsiteConfiguration) error {\n\tdoc, err := xml.Marshal(configuration)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbuf := makeXmlBuffer(doc)\n\n\treturn b.PutBucketSubresource(\"website\", buf, int64(buf.Len()))\n}\n\nfunc (b *Bucket) PutBucketSubresource(subresource string, r io.Reader, length int64) error {\n\theaders := map[string][]string{\n\t\t\"Content-Length\": {strconv.FormatInt(length, 10)},\n\t}\n\treq := &request{\n\t\tpath:    \"/\",\n\t\tmethod:  \"PUT\",\n\t\tbucket:  b.Name,\n\t\theaders: headers,\n\t\tpayload: r,\n\t\tparams:  url.Values{subresource: {\"\"}},\n\t}\n\n\treturn b.S3.query(req, nil)\n}\n\n// Del removes an object from the S3 bucket.\n//\n// See http://goo.gl/APeTt for details.\nfunc (b *Bucket) Del(path string) error {\n\treq := &request{\n\t\tmethod: \"DELETE\",\n\t\tbucket: b.Name,\n\t\tpath:   path,\n\t}\n\treturn b.S3.query(req, nil)\n}\n\ntype Delete struct {\n\tQuiet   bool     `xml:\"Quiet,omitempty\"`\n\tObjects []Object `xml:\"Object\"`\n}\n\ntype Object struct {\n\tKey       string `xml:\"Key\"`\n\tVersionId string `xml:\"VersionId,omitempty\"`\n}\n\n// DelMulti removes up to 1000 objects from the S3 bucket.\n//\n// See http://goo.gl/jx6cWK for details.\nfunc (b *Bucket) DelMulti(objects Delete) error {\n\tdoc, err := xml.Marshal(objects)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbuf := makeXmlBuffer(doc)\n\tdigest := md5.New()\n\tsize, err := digest.Write(buf.Bytes())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\theaders := map[string][]string{\n\t\t\"Content-Length\": {strconv.FormatInt(int64(size), 10)},\n\t\t\"Content-MD5\":    {base64.StdEncoding.EncodeToString(digest.Sum(nil))},\n\t\t\"Content-Type\":   {\"text/xml\"},\n\t}\n\treq := &request{\n\t\tpath:    \"/\",\n\t\tmethod:  \"POST\",\n\t\tparams:  url.Values{\"delete\": {\"\"}},\n\t\tbucket:  b.Name,\n\t\theaders: headers,\n\t\tpayload: buf,\n\t}\n\n\treturn b.S3.query(req, nil)\n}\n\n// The ListResp type holds the results of a List bucket operation.\ntype ListResp struct {\n\tName      string\n\tPrefix    string\n\tDelimiter string\n\tMarker    string\n\tMaxKeys   int\n\t// IsTruncated is true if the results have been truncated because\n\t// there are more keys and prefixes than can fit in MaxKeys.\n\t// N.B. this is the opposite sense to that documented (incorrectly) in\n\t// http://goo.gl/YjQTc\n\tIsTruncated    bool\n\tContents       []Key\n\tCommonPrefixes []string `xml:\">Prefix\"`\n\t// if IsTruncated is true, pass NextMarker as marker argument to List()\n\t// to get the next set of keys\n\tNextMarker string\n}\n\n// The Key type represents an item stored in an S3 bucket.\ntype Key struct {\n\tKey          string\n\tLastModified string\n\tSize         int64\n\t// ETag gives the hex-encoded MD5 sum of the contents,\n\t// surrounded with double-quotes.\n\tETag         string\n\tStorageClass string\n\tOwner        Owner\n}\n\n// List returns information about objects in an S3 bucket.\n//\n// The prefix parameter limits the response to keys that begin with the\n// specified prefix.\n//\n// The delim parameter causes the response to group all of the keys that\n// share a common prefix up to the next delimiter in a single entry within\n// the CommonPrefixes field. You can use delimiters to separate a bucket\n// into different groupings of keys, similar to how folders would work.\n//\n// The marker parameter specifies the key to start with when listing objects\n// in a bucket. Amazon S3 lists objects in alphabetical order and\n// will return keys alphabetically greater than the marker.\n//\n// The max parameter specifies how many keys + common prefixes to return in\n// the response. The default is 1000.\n//\n// For example, given these keys in a bucket:\n//\n//     index.html\n//     index2.html\n//     photos/2006/January/sample.jpg\n//     photos/2006/February/sample2.jpg\n//     photos/2006/February/sample3.jpg\n//     photos/2006/February/sample4.jpg\n//\n// Listing this bucket with delimiter set to \"/\" would yield the\n// following result:\n//\n//     &ListResp{\n//         Name:      \"sample-bucket\",\n//         MaxKeys:   1000,\n//         Delimiter: \"/\",\n//         Contents:  []Key{\n//             {Key: \"index.html\", \"index2.html\"},\n//         },\n//         CommonPrefixes: []string{\n//             \"photos/\",\n//         },\n//     }\n//\n// Listing the same bucket with delimiter set to \"/\" and prefix set to\n// \"photos/2006/\" would yield the following result:\n//\n//     &ListResp{\n//         Name:      \"sample-bucket\",\n//         MaxKeys:   1000,\n//         Delimiter: \"/\",\n//         Prefix:    \"photos/2006/\",\n//         CommonPrefixes: []string{\n//             \"photos/2006/February/\",\n//             \"photos/2006/January/\",\n//         },\n//     }\n//\n// See http://goo.gl/YjQTc for details.\nfunc (b *Bucket) List(prefix, delim, marker string, max int) (result *ListResp, err error) {\n\tparams := map[string][]string{\n\t\t\"prefix\":    {prefix},\n\t\t\"delimiter\": {delim},\n\t\t\"marker\":    {marker},\n\t}\n\tif max != 0 {\n\t\tparams[\"max-keys\"] = []string{strconv.FormatInt(int64(max), 10)}\n\t}\n\treq := &request{\n\t\tbucket: b.Name,\n\t\tparams: params,\n\t}\n\tresult = &ListResp{}\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\terr = b.S3.query(req, result)\n\t\tif !shouldRetry(err) {\n\t\t\tbreak\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// if NextMarker is not returned, it should be set to the name of last key,\n\t// so let's do it so that each caller doesn't have to\n\tif result.IsTruncated && result.NextMarker == \"\" {\n\t\tn := len(result.Contents)\n\t\tif n > 0 {\n\t\t\tresult.NextMarker = result.Contents[n-1].Key\n\t\t}\n\t}\n\treturn result, nil\n}\n\n// The VersionsResp type holds the results of a list bucket Versions operation.\ntype VersionsResp struct {\n\tName            string\n\tPrefix          string\n\tKeyMarker       string\n\tVersionIdMarker string\n\tMaxKeys         int\n\tDelimiter       string\n\tIsTruncated     bool\n\tVersions        []Version `xml:\"Version\"`\n\tCommonPrefixes  []string  `xml:\">Prefix\"`\n}\n\n// The Version type represents an object version stored in an S3 bucket.\ntype Version struct {\n\tKey          string\n\tVersionId    string\n\tIsLatest     bool\n\tLastModified string\n\t// ETag gives the hex-encoded MD5 sum of the contents,\n\t// surrounded with double-quotes.\n\tETag         string\n\tSize         int64\n\tOwner        Owner\n\tStorageClass string\n}\n\nfunc (b *Bucket) Versions(prefix, delim, keyMarker string, versionIdMarker string, max int) (result *VersionsResp, err error) {\n\tparams := map[string][]string{\n\t\t\"versions\":  {\"\"},\n\t\t\"prefix\":    {prefix},\n\t\t\"delimiter\": {delim},\n\t}\n\n\tif len(versionIdMarker) != 0 {\n\t\tparams[\"version-id-marker\"] = []string{versionIdMarker}\n\t}\n\tif len(keyMarker) != 0 {\n\t\tparams[\"key-marker\"] = []string{keyMarker}\n\t}\n\n\tif max != 0 {\n\t\tparams[\"max-keys\"] = []string{strconv.FormatInt(int64(max), 10)}\n\t}\n\treq := &request{\n\t\tbucket: b.Name,\n\t\tparams: params,\n\t}\n\tresult = &VersionsResp{}\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\terr = b.S3.query(req, result)\n\t\tif !shouldRetry(err) {\n\t\t\tbreak\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn result, nil\n}\n\ntype GetLocationResp struct {\n\tLocation string `xml:\",innerxml\"`\n}\n\nfunc (b *Bucket) Location() (string, error) {\n\tr, err := b.Get(\"/?location\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Parse the XML response.\n\tvar resp GetLocationResp\n\tif err = xml.Unmarshal(r, &resp); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif resp.Location == \"\" {\n\t\treturn \"us-east-1\", nil\n\t} else {\n\t\treturn resp.Location, nil\n\t}\n}\n\n// Get bucket policy\nfunc (b *Bucket) GetPolicy() ([]byte, error) {\n\treq := &request{\n\t\tbucket: b.Name,\n\t\tpath:   \"/\",\n\t\tmethod: \"GET\",\n\t\tparams: url.Values{\"policy\": {\"\"}},\n\t}\n\terr := b.S3.prepare(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor attempt := attempts.Start(); attempt.Next(); {\n\t\tresp, err := b.S3.run(req, nil)\n\t\tif shouldRetry(err) && attempt.HasNext() {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstr, err := ioutil.ReadAll(resp.Body)\n\t\treturn str, nil\n\t}\n\tpanic(\"unreachable\")\n}\n\n// Put bucket policy\nfunc (b *Bucket) PutPolicy(data []byte) error {\n\treq := &request{\n\t\tbucket:  b.Name,\n\t\tpath:    \"/\",\n\t\tmethod:  \"PUT\",\n\t\tparams:  url.Values{\"policy\": {\"\"}},\n\t\tpayload: bytes.NewReader(data),\n\t}\n\treturn b.S3.query(req, nil)\n}\n\n// URL returns a non-signed URL that allows retriving the\n// object at path. It only works if the object is publicly\n// readable (see SignedURL).\nfunc (b *Bucket) URL(path string) string {\n\treq := &request{\n\t\tbucket: b.Name,\n\t\tpath:   path,\n\t}\n\terr := b.S3.prepare(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tu, err := req.url()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tu.RawQuery = \"\"\n\treturn u.String()\n}\n\n// SignedURL returns a signed URL that allows anyone holding the URL\n// to retrieve the object at path. The signature is valid until expires.\nfunc (b *Bucket) SignedURL(path string, expires time.Time) string {\n\treturn b.SignedURLWithArgs(path, expires, nil, nil)\n}\n\n// SignedURLWithArgs returns a signed URL that allows anyone holding the URL\n// to retrieve the object at path. The signature is valid until expires.\nfunc (b *Bucket) SignedURLWithArgs(path string, expires time.Time, params url.Values, headers http.Header) string {\n\treturn b.SignedURLWithMethod(\"GET\", path, expires, params, headers)\n}\n\n// SignedURLWithMethod returns a signed URL that allows anyone holding the URL\n// to either retrieve the object at path or make a HEAD request against it. The signature is valid until expires.\nfunc (b *Bucket) SignedURLWithMethod(method, path string, expires time.Time, params url.Values, headers http.Header) string {\n\tvar uv = url.Values{}\n\n\tif params != nil {\n\t\tuv = params\n\t}\n\n\tif b.S3.Signature == aws.V2Signature {\n\t\tuv.Set(\"Expires\", strconv.FormatInt(expires.Unix(), 10))\n\t} else {\n\t\tuv.Set(\"X-Amz-Expires\", strconv.FormatInt(expires.Unix()-time.Now().Unix(), 10))\n\t}\n\n\treq := &request{\n\t\tmethod:  method,\n\t\tbucket:  b.Name,\n\t\tpath:    path,\n\t\tparams:  uv,\n\t\theaders: headers,\n\t}\n\terr := b.S3.prepare(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tu, err := req.url()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tif b.S3.Auth.Token() != \"\" && b.S3.Signature == aws.V2Signature {\n\t\treturn u.String() + \"&x-amz-security-token=\" + url.QueryEscape(req.headers[\"X-Amz-Security-Token\"][0])\n\t} else {\n\t\treturn u.String()\n\t}\n}\n\n// UploadSignedURL returns a signed URL that allows anyone holding the URL\n// to upload the object at path. The signature is valid until expires.\n// contenttype is a string like image/png\n// path is the resource name in s3 terminalogy like images/ali.png [obviously exclusing the bucket name itself]\nfunc (b *Bucket) UploadSignedURL(path, method, content_type string, expires time.Time) string {\n\texpire_date := expires.Unix()\n\tif method != \"POST\" {\n\t\tmethod = \"PUT\"\n\t}\n\n\ta := b.S3.Auth\n\ttokenData := \"\"\n\n\tif a.Token() != \"\" {\n\t\ttokenData = \"x-amz-security-token:\" + a.Token() + \"\\n\"\n\t}\n\n\tstringToSign := method + \"\\n\\n\" + content_type + \"\\n\" + strconv.FormatInt(expire_date, 10) + \"\\n\" + tokenData + \"/\" + b.Name + \"/\" + path\n\tsecretKey := a.SecretKey\n\taccessId := a.AccessKey\n\tmac := hmac.New(sha1.New, []byte(secretKey))\n\tmac.Write([]byte(stringToSign))\n\tmacsum := mac.Sum(nil)\n\tsignature := base64.StdEncoding.EncodeToString([]byte(macsum))\n\tsignature = strings.TrimSpace(signature)\n\n\tsignedurl, err := url.Parse(\"https://\" + b.Name + \".s3.amazonaws.com/\")\n\tif err != nil {\n\t\tlog.Println(\"ERROR sining url for S3 upload\", err)\n\t\treturn \"\"\n\t}\n\tsignedurl.Path += path\n\tparams := url.Values{}\n\tparams.Add(\"AWSAccessKeyId\", accessId)\n\tparams.Add(\"Expires\", strconv.FormatInt(expire_date, 10))\n\tparams.Add(\"Signature\", signature)\n\tif a.Token() != \"\" {\n\t\tparams.Add(\"x-amz-security-token\", a.Token())\n\t}\n\n\tsignedurl.RawQuery = params.Encode()\n\treturn signedurl.String()\n}\n\n// PostFormArgs returns the action and input fields needed to allow anonymous\n// uploads to a bucket within the expiration limit\n// Additional conditions can be specified with conds\nfunc (b *Bucket) PostFormArgsEx(path string, expires time.Time, redirect string, conds []string) (action string, fields map[string]string) {\n\tconditions := make([]string, 0)\n\tfields = map[string]string{\n\t\t\"AWSAccessKeyId\": b.Auth.AccessKey,\n\t\t\"key\":            path,\n\t}\n\n\tif conds != nil {\n\t\tconditions = append(conditions, conds...)\n\t}\n\n\tconditions = append(conditions, fmt.Sprintf(\"{\\\"key\\\": \\\"%s\\\"}\", path))\n\tconditions = append(conditions, fmt.Sprintf(\"{\\\"bucket\\\": \\\"%s\\\"}\", b.Name))\n\tif redirect != \"\" {\n\t\tconditions = append(conditions, fmt.Sprintf(\"{\\\"success_action_redirect\\\": \\\"%s\\\"}\", redirect))\n\t\tfields[\"success_action_redirect\"] = redirect\n\t}\n\n\tvExpiration := expires.Format(\"2006-01-02T15:04:05Z\")\n\tvConditions := strings.Join(conditions, \",\")\n\tpolicy := fmt.Sprintf(\"{\\\"expiration\\\": \\\"%s\\\", \\\"conditions\\\": [%s]}\", vExpiration, vConditions)\n\tpolicy64 := base64.StdEncoding.EncodeToString([]byte(policy))\n\tfields[\"policy\"] = policy64\n\n\tsigner := hmac.New(sha1.New, []byte(b.Auth.SecretKey))\n\tsigner.Write([]byte(policy64))\n\tfields[\"signature\"] = base64.StdEncoding.EncodeToString(signer.Sum(nil))\n\n\taction = fmt.Sprintf(\"%s/%s/\", b.S3.Region.S3Endpoint, b.Name)\n\treturn\n}\n\n// PostFormArgs returns the action and input fields needed to allow anonymous\n// uploads to a bucket within the expiration limit\nfunc (b *Bucket) PostFormArgs(path string, expires time.Time, redirect string) (action string, fields map[string]string) {\n\treturn b.PostFormArgsEx(path, expires, redirect, nil)\n}\n\ntype request struct {\n\tmethod   string\n\tbucket   string\n\tpath     string\n\tparams   url.Values\n\theaders  http.Header\n\tbaseurl  string\n\tpayload  io.Reader\n\tprepared bool\n}\n\nfunc (req *request) url() (*url.URL, error) {\n\tu, err := url.Parse(req.baseurl)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"bad S3 endpoint URL %q: %v\", req.baseurl, err)\n\t}\n\tu.RawQuery = req.params.Encode()\n\tu.Path = req.path\n\treturn u, nil\n}\n\n// query prepares and runs the req request.\n// If resp is not nil, the XML data contained in the response\n// body will be unmarshalled on it.\nfunc (s3 *S3) query(req *request, resp interface{}) error {\n\terr := s3.prepare(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr, err := s3.run(req, resp)\n\tif r != nil && r.Body != nil {\n\t\tr.Body.Close()\n\t}\n\treturn err\n}\n\n// queryV4Signprepares and runs the req request, signed with aws v4 signatures.\n// If resp is not nil, the XML data contained in the response\n// body will be unmarshalled on it.\nfunc (s3 *S3) queryV4Sign(req *request, resp interface{}) error {\n\tif req.headers == nil {\n\t\treq.headers = map[string][]string{}\n\t}\n\n\terr := s3.setBaseURL(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\threq, err := s3.setupHttpRequest(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// req.Host must be set for V4 signature calculation\n\threq.Host = hreq.URL.Host\n\n\tsigner := aws.NewV4Signer(s3.Auth, \"s3\", s3.Region)\n\tsigner.IncludeXAmzContentSha256 = true\n\tsigner.Sign(hreq)\n\n\t_, err = s3.doHttpRequest(hreq, resp)\n\treturn err\n}\n\n// Sets baseurl on req from bucket name and the region endpoint\nfunc (s3 *S3) setBaseURL(req *request) error {\n\tif req.bucket == \"\" {\n\t\treq.baseurl = s3.Region.S3Endpoint\n\t} else {\n\t\treq.baseurl = s3.Region.S3BucketEndpoint\n\t\tif req.baseurl == \"\" {\n\t\t\t// Use the path method to address the bucket.\n\t\t\treq.baseurl = s3.Region.S3Endpoint\n\t\t\treq.path = \"/\" + req.bucket + req.path\n\t\t} else {\n\t\t\t// Just in case, prevent injection.\n\t\t\tif strings.IndexAny(req.bucket, \"/:@\") >= 0 {\n\t\t\t\treturn fmt.Errorf(\"bad S3 bucket: %q\", req.bucket)\n\t\t\t}\n\t\t\treq.baseurl = strings.Replace(req.baseurl, \"${bucket}\", req.bucket, -1)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// partiallyEscapedPath partially escapes the S3 path allowing for all S3 REST API calls.\n//\n// Some commands including:\n//      GET Bucket acl              http://goo.gl/aoXflF\n//      GET Bucket cors             http://goo.gl/UlmBdx\n//      GET Bucket lifecycle        http://goo.gl/8Fme7M\n//      GET Bucket policy           http://goo.gl/ClXIo3\n//      GET Bucket location         http://goo.gl/5lh8RD\n//      GET Bucket Logging          http://goo.gl/sZ5ckF\n//      GET Bucket notification     http://goo.gl/qSSZKD\n//      GET Bucket tagging          http://goo.gl/QRvxnM\n// require the first character after the bucket name in the path to be a literal '?' and\n// not the escaped hex representation '%3F'.\nfunc partiallyEscapedPath(path string) string {\n\tpathEscapedAndSplit := strings.Split((&url.URL{Path: path}).String(), \"/\")\n\tif len(pathEscapedAndSplit) >= 3 {\n\t\tif len(pathEscapedAndSplit[2]) >= 3 {\n\t\t\t// Check for the one \"?\" that should not be escaped.\n\t\t\tif pathEscapedAndSplit[2][0:3] == \"%3F\" {\n\t\t\t\tpathEscapedAndSplit[2] = \"?\" + pathEscapedAndSplit[2][3:]\n\t\t\t}\n\t\t}\n\t}\n\treturn strings.Replace(strings.Join(pathEscapedAndSplit, \"/\"), \"+\", \"%2B\", -1)\n}\n\n// prepare sets up req to be delivered to S3.\nfunc (s3 *S3) prepare(req *request) error {\n\t// Copy so they can be mutated without affecting on retries.\n\tparams := make(url.Values)\n\theaders := make(http.Header)\n\tfor k, v := range req.params {\n\t\tparams[k] = v\n\t}\n\tfor k, v := range req.headers {\n\t\theaders[k] = v\n\t}\n\treq.params = params\n\treq.headers = headers\n\n\tif !req.prepared {\n\t\treq.prepared = true\n\t\tif req.method == \"\" {\n\t\t\treq.method = \"GET\"\n\t\t}\n\n\t\tif !strings.HasPrefix(req.path, \"/\") {\n\t\t\treq.path = \"/\" + req.path\n\t\t}\n\n\t\terr := s3.setBaseURL(req)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif s3.Signature == aws.V2Signature && s3.Auth.Token() != \"\" {\n\t\treq.headers[\"X-Amz-Security-Token\"] = []string{s3.Auth.Token()}\n\t} else if s3.Auth.Token() != \"\" {\n\t\treq.params.Set(\"X-Amz-Security-Token\", s3.Auth.Token())\n\t}\n\n\tif s3.Signature == aws.V2Signature {\n\t\t// Always sign again as it's not clear how far the\n\t\t// server has handled a previous attempt.\n\t\tu, err := url.Parse(req.baseurl)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tsignpathPatiallyEscaped := partiallyEscapedPath(req.path)\n\t\treq.headers[\"Host\"] = []string{u.Host}\n\t\treq.headers[\"Date\"] = []string{time.Now().In(time.UTC).Format(time.RFC1123)}\n\n\t\tsign(s3.Auth, req.method, signpathPatiallyEscaped, req.params, req.headers)\n\t} else {\n\t\threq, err := s3.setupHttpRequest(req)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\threq.Host = hreq.URL.Host\n\t\tsigner := aws.NewV4Signer(s3.Auth, \"s3\", s3.Region)\n\t\tsigner.IncludeXAmzContentSha256 = true\n\t\tsigner.Sign(hreq)\n\n\t\treq.payload = hreq.Body\n\t\tif _, ok := headers[\"Content-Length\"]; ok {\n\t\t\treq.headers[\"Content-Length\"] = headers[\"Content-Length\"]\n\t\t}\n\t}\n\treturn nil\n}\n\n// Prepares an *http.Request for doHttpRequest\nfunc (s3 *S3) setupHttpRequest(req *request) (*http.Request, error) {\n\t// Copy so that signing the http request will not mutate it\n\theaders := make(http.Header)\n\tfor k, v := range req.headers {\n\t\theaders[k] = v\n\t}\n\treq.headers = headers\n\n\tu, err := req.url()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tu.Opaque = fmt.Sprintf(\"//%s%s\", u.Host, partiallyEscapedPath(u.Path))\n\n\threq := http.Request{\n\t\tURL:        u,\n\t\tMethod:     req.method,\n\t\tProtoMajor: 1,\n\t\tProtoMinor: 1,\n\t\tClose:      true,\n\t\tHeader:     req.headers,\n\t\tForm:       req.params,\n\t}\n\n\tif v, ok := req.headers[\"Content-Length\"]; ok {\n\t\threq.ContentLength, _ = strconv.ParseInt(v[0], 10, 64)\n\t\tdelete(req.headers, \"Content-Length\")\n\t}\n\tif req.payload != nil {\n\t\threq.Body = ioutil.NopCloser(req.payload)\n\t}\n\n\treturn &hreq, nil\n}\n\n// doHttpRequest sends hreq and returns the http response from the server.\n// If resp is not nil, the XML data contained in the response\n// body will be unmarshalled on it.\nfunc (s3 *S3) doHttpRequest(hreq *http.Request, resp interface{}) (*http.Response, error) {\n\tc := http.Client{\n\t\tTransport: &http.Transport{\n\t\t\tDial: func(netw, addr string) (c net.Conn, err error) {\n\t\t\t\tdeadline := time.Now().Add(s3.ReadTimeout)\n\t\t\t\tif s3.ConnectTimeout > 0 {\n\t\t\t\t\tc, err = net.DialTimeout(netw, addr, s3.ConnectTimeout)\n\t\t\t\t} else {\n\t\t\t\t\tc, err = net.Dial(netw, addr)\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif s3.ReadTimeout > 0 {\n\t\t\t\t\terr = c.SetDeadline(deadline)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t},\n\t\t\tProxy: http.ProxyFromEnvironment,\n\t\t},\n\t}\n\n\thresp, err := c.Do(hreq)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif debug {\n\t\tdump, _ := httputil.DumpResponse(hresp, true)\n\t\tlog.Printf(\"} -> %s\\n\", dump)\n\t}\n\tif hresp.StatusCode != 200 && hresp.StatusCode != 204 && hresp.StatusCode != 206 {\n\t\treturn nil, buildError(hresp)\n\t}\n\tif resp != nil {\n\t\terr = xml.NewDecoder(hresp.Body).Decode(resp)\n\t\thresp.Body.Close()\n\n\t\tif debug {\n\t\t\tlog.Printf(\"goamz.s3> decoded xml into %#v\", resp)\n\t\t}\n\n\t}\n\treturn hresp, err\n}\n\n// run sends req and returns the http response from the server.\n// If resp is not nil, the XML data contained in the response\n// body will be unmarshalled on it.\nfunc (s3 *S3) run(req *request, resp interface{}) (*http.Response, error) {\n\tif debug {\n\t\tlog.Printf(\"Running S3 request: %#v\", req)\n\t}\n\n\threq, err := s3.setupHttpRequest(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn s3.doHttpRequest(hreq, resp)\n}\n\n// Error represents an error in an operation with S3.\ntype Error struct {\n\tStatusCode int    // HTTP status code (200, 403, ...)\n\tCode       string // EC2 error code (\"UnsupportedOperation\", ...)\n\tMessage    string // The human-oriented error message\n\tBucketName string\n\tRequestId  string\n\tHostId     string\n}\n\nfunc (e *Error) Error() string {\n\treturn e.Message\n}\n\nfunc buildError(r *http.Response) error {\n\tif debug {\n\t\tlog.Printf(\"got error (status code %v)\", r.StatusCode)\n\t\tdata, err := ioutil.ReadAll(r.Body)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"\\tread error: %v\", err)\n\t\t} else {\n\t\t\tlog.Printf(\"\\tdata:\\n%s\\n\\n\", data)\n\t\t}\n\t\tr.Body = ioutil.NopCloser(bytes.NewBuffer(data))\n\t}\n\n\terr := Error{}\n\t// TODO return error if Unmarshal fails?\n\txml.NewDecoder(r.Body).Decode(&err)\n\tr.Body.Close()\n\terr.StatusCode = r.StatusCode\n\tif err.Message == \"\" {\n\t\terr.Message = r.Status\n\t}\n\tif debug {\n\t\tlog.Printf(\"err: %#v\\n\", err)\n\t}\n\treturn &err\n}\n\nfunc shouldRetry(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tswitch err {\n\tcase io.ErrUnexpectedEOF, io.EOF:\n\t\treturn true\n\t}\n\tswitch e := err.(type) {\n\tcase *net.DNSError:\n\t\treturn true\n\tcase *net.OpError:\n\t\tswitch e.Op {\n\t\tcase \"read\", \"write\":\n\t\t\treturn true\n\t\t}\n\tcase *url.Error:\n\t\t// url.Error can be returned either by net/url if a URL cannot be\n\t\t// parsed, or by net/http if the response is closed before the headers\n\t\t// are received or parsed correctly. In that later case, e.Op is set to\n\t\t// the HTTP method name with the first letter uppercased. We don't want\n\t\t// to retry on POST operations, since those are not idempotent, all the\n\t\t// other ones should be safe to retry.\n\t\tswitch e.Op {\n\t\tcase \"Get\", \"Put\", \"Delete\", \"Head\":\n\t\t\treturn shouldRetry(e.Err)\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\tcase *Error:\n\t\tswitch e.Code {\n\t\tcase \"InternalError\", \"NoSuchUpload\", \"NoSuchBucket\":\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc hasCode(err error, code string) bool {\n\ts3err, ok := err.(*Error)\n\treturn ok && s3err.Code == code\n}\n"
  },
  {
    "path": "vendor/github.com/zackbloom/goamz/s3/sign.go",
    "content": "package s3\n\nimport (\n\t\"crypto/hmac\"\n\t\"crypto/sha1\"\n\t\"encoding/base64\"\n\t\"github.com/zackbloom/goamz/aws\"\n\t\"log\"\n\t\"sort\"\n\t\"strings\"\n)\n\nvar b64 = base64.StdEncoding\n\n// ----------------------------------------------------------------------------\n// S3 signing (http://goo.gl/G1LrK)\n\nvar s3ParamsToSign = map[string]bool{\n\t\"acl\":                          true,\n\t\"location\":                     true,\n\t\"logging\":                      true,\n\t\"notification\":                 true,\n\t\"partNumber\":                   true,\n\t\"policy\":                       true,\n\t\"requestPayment\":               true,\n\t\"torrent\":                      true,\n\t\"uploadId\":                     true,\n\t\"uploads\":                      true,\n\t\"versionId\":                    true,\n\t\"versioning\":                   true,\n\t\"versions\":                     true,\n\t\"response-content-type\":        true,\n\t\"response-content-language\":    true,\n\t\"response-expires\":             true,\n\t\"response-cache-control\":       true,\n\t\"response-content-disposition\": true,\n\t\"response-content-encoding\":    true,\n\t\"website\":                      true,\n\t\"delete\":                       true,\n}\n\nfunc sign(auth aws.Auth, method, canonicalPath string, params, headers map[string][]string) {\n\tvar md5, ctype, date, xamz string\n\tvar xamzDate bool\n\tvar keys, sarray []string\n\txheaders := make(map[string]string)\n\tfor k, v := range headers {\n\t\tk = strings.ToLower(k)\n\t\tswitch k {\n\t\tcase \"content-md5\":\n\t\t\tmd5 = v[0]\n\t\tcase \"content-type\":\n\t\t\tctype = v[0]\n\t\tcase \"date\":\n\t\t\tif !xamzDate {\n\t\t\t\tdate = v[0]\n\t\t\t}\n\t\tdefault:\n\t\t\tif strings.HasPrefix(k, \"x-amz-\") {\n\t\t\t\tkeys = append(keys, k)\n\t\t\t\txheaders[k] = strings.Join(v, \",\")\n\t\t\t\tif k == \"x-amz-date\" {\n\t\t\t\t\txamzDate = true\n\t\t\t\t\tdate = \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif len(keys) > 0 {\n\t\tsort.StringSlice(keys).Sort()\n\t\tfor i := range keys {\n\t\t\tkey := keys[i]\n\t\t\tvalue := xheaders[key]\n\t\t\tsarray = append(sarray, key+\":\"+value)\n\t\t}\n\t\txamz = strings.Join(sarray, \"\\n\") + \"\\n\"\n\t}\n\n\texpires := false\n\tif v, ok := params[\"Expires\"]; ok {\n\t\t// Query string request authentication alternative.\n\t\texpires = true\n\t\tdate = v[0]\n\t\tparams[\"AWSAccessKeyId\"] = []string{auth.AccessKey}\n\t}\n\n\tsarray = sarray[0:0]\n\tfor k, v := range params {\n\t\tif s3ParamsToSign[k] {\n\t\t\tfor _, vi := range v {\n\t\t\t\tif vi == \"\" {\n\t\t\t\t\tsarray = append(sarray, k)\n\t\t\t\t} else {\n\t\t\t\t\t// \"When signing you do not encode these values.\"\n\t\t\t\t\tsarray = append(sarray, k+\"=\"+vi)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif len(sarray) > 0 {\n\t\tsort.StringSlice(sarray).Sort()\n\t\tcanonicalPath = canonicalPath + \"?\" + strings.Join(sarray, \"&\")\n\t}\n\n\tpayload := method + \"\\n\" + md5 + \"\\n\" + ctype + \"\\n\" + date + \"\\n\" + xamz + canonicalPath\n\thash := hmac.New(sha1.New, []byte(auth.SecretKey))\n\thash.Write([]byte(payload))\n\tsignature := make([]byte, b64.EncodedLen(hash.Size()))\n\tb64.Encode(signature, hash.Sum(nil))\n\n\tif expires {\n\t\tparams[\"Signature\"] = []string{string(signature)}\n\t} else {\n\t\theaders[\"Authorization\"] = []string{\"AWS \" + auth.AccessKey + \":\" + string(signature)}\n\t}\n\tif debug {\n\t\tlog.Printf(\"Signature payload: %q\", payload)\n\t\tlog.Printf(\"Signature: %q\", signature)\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/LICENSE",
    "content": "Copyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/terminal/terminal.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage terminal\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"sync\"\n\t\"unicode/utf8\"\n)\n\n// EscapeCodes contains escape sequences that can be written to the terminal in\n// order to achieve different styles of text.\ntype EscapeCodes struct {\n\t// Foreground colors\n\tBlack, Red, Green, Yellow, Blue, Magenta, Cyan, White []byte\n\n\t// Reset all attributes\n\tReset []byte\n}\n\nvar vt100EscapeCodes = EscapeCodes{\n\tBlack:   []byte{keyEscape, '[', '3', '0', 'm'},\n\tRed:     []byte{keyEscape, '[', '3', '1', 'm'},\n\tGreen:   []byte{keyEscape, '[', '3', '2', 'm'},\n\tYellow:  []byte{keyEscape, '[', '3', '3', 'm'},\n\tBlue:    []byte{keyEscape, '[', '3', '4', 'm'},\n\tMagenta: []byte{keyEscape, '[', '3', '5', 'm'},\n\tCyan:    []byte{keyEscape, '[', '3', '6', 'm'},\n\tWhite:   []byte{keyEscape, '[', '3', '7', 'm'},\n\n\tReset: []byte{keyEscape, '[', '0', 'm'},\n}\n\n// Terminal contains the state for running a VT100 terminal that is capable of\n// reading lines of input.\ntype Terminal struct {\n\t// AutoCompleteCallback, if non-null, is called for each keypress with\n\t// the full input line and the current position of the cursor (in\n\t// bytes, as an index into |line|). If it returns ok=false, the key\n\t// press is processed normally. Otherwise it returns a replacement line\n\t// and the new cursor position.\n\tAutoCompleteCallback func(line string, pos int, key rune) (newLine string, newPos int, ok bool)\n\n\t// Escape contains a pointer to the escape codes for this terminal.\n\t// It's always a valid pointer, although the escape codes themselves\n\t// may be empty if the terminal doesn't support them.\n\tEscape *EscapeCodes\n\n\t// lock protects the terminal and the state in this object from\n\t// concurrent processing of a key press and a Write() call.\n\tlock sync.Mutex\n\n\tc      io.ReadWriter\n\tprompt []rune\n\n\t// line is the current line being entered.\n\tline []rune\n\t// pos is the logical position of the cursor in line\n\tpos int\n\t// echo is true if local echo is enabled\n\techo bool\n\t// pasteActive is true iff there is a bracketed paste operation in\n\t// progress.\n\tpasteActive bool\n\n\t// cursorX contains the current X value of the cursor where the left\n\t// edge is 0. cursorY contains the row number where the first row of\n\t// the current line is 0.\n\tcursorX, cursorY int\n\t// maxLine is the greatest value of cursorY so far.\n\tmaxLine int\n\n\ttermWidth, termHeight int\n\n\t// outBuf contains the terminal data to be sent.\n\toutBuf []byte\n\t// remainder contains the remainder of any partial key sequences after\n\t// a read. It aliases into inBuf.\n\tremainder []byte\n\tinBuf     [256]byte\n\n\t// history contains previously entered commands so that they can be\n\t// accessed with the up and down keys.\n\thistory stRingBuffer\n\t// historyIndex stores the currently accessed history entry, where zero\n\t// means the immediately previous entry.\n\thistoryIndex int\n\t// When navigating up and down the history it's possible to return to\n\t// the incomplete, initial line. That value is stored in\n\t// historyPending.\n\thistoryPending string\n}\n\n// NewTerminal runs a VT100 terminal on the given ReadWriter. If the ReadWriter is\n// a local terminal, that terminal must first have been put into raw mode.\n// prompt is a string that is written at the start of each input line (i.e.\n// \"> \").\nfunc NewTerminal(c io.ReadWriter, prompt string) *Terminal {\n\treturn &Terminal{\n\t\tEscape:       &vt100EscapeCodes,\n\t\tc:            c,\n\t\tprompt:       []rune(prompt),\n\t\ttermWidth:    80,\n\t\ttermHeight:   24,\n\t\techo:         true,\n\t\thistoryIndex: -1,\n\t}\n}\n\nconst (\n\tkeyCtrlD     = 4\n\tkeyCtrlU     = 21\n\tkeyEnter     = '\\r'\n\tkeyEscape    = 27\n\tkeyBackspace = 127\n\tkeyUnknown   = 0xd800 /* UTF-16 surrogate area */ + iota\n\tkeyUp\n\tkeyDown\n\tkeyLeft\n\tkeyRight\n\tkeyAltLeft\n\tkeyAltRight\n\tkeyHome\n\tkeyEnd\n\tkeyDeleteWord\n\tkeyDeleteLine\n\tkeyClearScreen\n\tkeyPasteStart\n\tkeyPasteEnd\n)\n\nvar pasteStart = []byte{keyEscape, '[', '2', '0', '0', '~'}\nvar pasteEnd = []byte{keyEscape, '[', '2', '0', '1', '~'}\n\n// bytesToKey tries to parse a key sequence from b. If successful, it returns\n// the key and the remainder of the input. Otherwise it returns utf8.RuneError.\nfunc bytesToKey(b []byte, pasteActive bool) (rune, []byte) {\n\tif len(b) == 0 {\n\t\treturn utf8.RuneError, nil\n\t}\n\n\tif !pasteActive {\n\t\tswitch b[0] {\n\t\tcase 1: // ^A\n\t\t\treturn keyHome, b[1:]\n\t\tcase 5: // ^E\n\t\t\treturn keyEnd, b[1:]\n\t\tcase 8: // ^H\n\t\t\treturn keyBackspace, b[1:]\n\t\tcase 11: // ^K\n\t\t\treturn keyDeleteLine, b[1:]\n\t\tcase 12: // ^L\n\t\t\treturn keyClearScreen, b[1:]\n\t\tcase 23: // ^W\n\t\t\treturn keyDeleteWord, b[1:]\n\t\t}\n\t}\n\n\tif b[0] != keyEscape {\n\t\tif !utf8.FullRune(b) {\n\t\t\treturn utf8.RuneError, b\n\t\t}\n\t\tr, l := utf8.DecodeRune(b)\n\t\treturn r, b[l:]\n\t}\n\n\tif !pasteActive && len(b) >= 3 && b[0] == keyEscape && b[1] == '[' {\n\t\tswitch b[2] {\n\t\tcase 'A':\n\t\t\treturn keyUp, b[3:]\n\t\tcase 'B':\n\t\t\treturn keyDown, b[3:]\n\t\tcase 'C':\n\t\t\treturn keyRight, b[3:]\n\t\tcase 'D':\n\t\t\treturn keyLeft, b[3:]\n\t\tcase 'H':\n\t\t\treturn keyHome, b[3:]\n\t\tcase 'F':\n\t\t\treturn keyEnd, b[3:]\n\t\t}\n\t}\n\n\tif !pasteActive && len(b) >= 6 && b[0] == keyEscape && b[1] == '[' && b[2] == '1' && b[3] == ';' && b[4] == '3' {\n\t\tswitch b[5] {\n\t\tcase 'C':\n\t\t\treturn keyAltRight, b[6:]\n\t\tcase 'D':\n\t\t\treturn keyAltLeft, b[6:]\n\t\t}\n\t}\n\n\tif !pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteStart) {\n\t\treturn keyPasteStart, b[6:]\n\t}\n\n\tif pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteEnd) {\n\t\treturn keyPasteEnd, b[6:]\n\t}\n\n\t// If we get here then we have a key that we don't recognise, or a\n\t// partial sequence. It's not clear how one should find the end of a\n\t// sequence without knowing them all, but it seems that [a-zA-Z~] only\n\t// appears at the end of a sequence.\n\tfor i, c := range b[0:] {\n\t\tif c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c == '~' {\n\t\t\treturn keyUnknown, b[i+1:]\n\t\t}\n\t}\n\n\treturn utf8.RuneError, b\n}\n\n// queue appends data to the end of t.outBuf\nfunc (t *Terminal) queue(data []rune) {\n\tt.outBuf = append(t.outBuf, []byte(string(data))...)\n}\n\nvar eraseUnderCursor = []rune{' ', keyEscape, '[', 'D'}\nvar space = []rune{' '}\n\nfunc isPrintable(key rune) bool {\n\tisInSurrogateArea := key >= 0xd800 && key <= 0xdbff\n\treturn key >= 32 && !isInSurrogateArea\n}\n\n// moveCursorToPos appends data to t.outBuf which will move the cursor to the\n// given, logical position in the text.\nfunc (t *Terminal) moveCursorToPos(pos int) {\n\tif !t.echo {\n\t\treturn\n\t}\n\n\tx := visualLength(t.prompt) + pos\n\ty := x / t.termWidth\n\tx = x % t.termWidth\n\n\tup := 0\n\tif y < t.cursorY {\n\t\tup = t.cursorY - y\n\t}\n\n\tdown := 0\n\tif y > t.cursorY {\n\t\tdown = y - t.cursorY\n\t}\n\n\tleft := 0\n\tif x < t.cursorX {\n\t\tleft = t.cursorX - x\n\t}\n\n\tright := 0\n\tif x > t.cursorX {\n\t\tright = x - t.cursorX\n\t}\n\n\tt.cursorX = x\n\tt.cursorY = y\n\tt.move(up, down, left, right)\n}\n\nfunc (t *Terminal) move(up, down, left, right int) {\n\tmovement := make([]rune, 3*(up+down+left+right))\n\tm := movement\n\tfor i := 0; i < up; i++ {\n\t\tm[0] = keyEscape\n\t\tm[1] = '['\n\t\tm[2] = 'A'\n\t\tm = m[3:]\n\t}\n\tfor i := 0; i < down; i++ {\n\t\tm[0] = keyEscape\n\t\tm[1] = '['\n\t\tm[2] = 'B'\n\t\tm = m[3:]\n\t}\n\tfor i := 0; i < left; i++ {\n\t\tm[0] = keyEscape\n\t\tm[1] = '['\n\t\tm[2] = 'D'\n\t\tm = m[3:]\n\t}\n\tfor i := 0; i < right; i++ {\n\t\tm[0] = keyEscape\n\t\tm[1] = '['\n\t\tm[2] = 'C'\n\t\tm = m[3:]\n\t}\n\n\tt.queue(movement)\n}\n\nfunc (t *Terminal) clearLineToRight() {\n\top := []rune{keyEscape, '[', 'K'}\n\tt.queue(op)\n}\n\nconst maxLineLength = 4096\n\nfunc (t *Terminal) setLine(newLine []rune, newPos int) {\n\tif t.echo {\n\t\tt.moveCursorToPos(0)\n\t\tt.writeLine(newLine)\n\t\tfor i := len(newLine); i < len(t.line); i++ {\n\t\t\tt.writeLine(space)\n\t\t}\n\t\tt.moveCursorToPos(newPos)\n\t}\n\tt.line = newLine\n\tt.pos = newPos\n}\n\nfunc (t *Terminal) advanceCursor(places int) {\n\tt.cursorX += places\n\tt.cursorY += t.cursorX / t.termWidth\n\tif t.cursorY > t.maxLine {\n\t\tt.maxLine = t.cursorY\n\t}\n\tt.cursorX = t.cursorX % t.termWidth\n\n\tif places > 0 && t.cursorX == 0 {\n\t\t// Normally terminals will advance the current position\n\t\t// when writing a character. But that doesn't happen\n\t\t// for the last character in a line. However, when\n\t\t// writing a character (except a new line) that causes\n\t\t// a line wrap, the position will be advanced two\n\t\t// places.\n\t\t//\n\t\t// So, if we are stopping at the end of a line, we\n\t\t// need to write a newline so that our cursor can be\n\t\t// advanced to the next line.\n\t\tt.outBuf = append(t.outBuf, '\\n')\n\t}\n}\n\nfunc (t *Terminal) eraseNPreviousChars(n int) {\n\tif n == 0 {\n\t\treturn\n\t}\n\n\tif t.pos < n {\n\t\tn = t.pos\n\t}\n\tt.pos -= n\n\tt.moveCursorToPos(t.pos)\n\n\tcopy(t.line[t.pos:], t.line[n+t.pos:])\n\tt.line = t.line[:len(t.line)-n]\n\tif t.echo {\n\t\tt.writeLine(t.line[t.pos:])\n\t\tfor i := 0; i < n; i++ {\n\t\t\tt.queue(space)\n\t\t}\n\t\tt.advanceCursor(n)\n\t\tt.moveCursorToPos(t.pos)\n\t}\n}\n\n// countToLeftWord returns then number of characters from the cursor to the\n// start of the previous word.\nfunc (t *Terminal) countToLeftWord() int {\n\tif t.pos == 0 {\n\t\treturn 0\n\t}\n\n\tpos := t.pos - 1\n\tfor pos > 0 {\n\t\tif t.line[pos] != ' ' {\n\t\t\tbreak\n\t\t}\n\t\tpos--\n\t}\n\tfor pos > 0 {\n\t\tif t.line[pos] == ' ' {\n\t\t\tpos++\n\t\t\tbreak\n\t\t}\n\t\tpos--\n\t}\n\n\treturn t.pos - pos\n}\n\n// countToRightWord returns then number of characters from the cursor to the\n// start of the next word.\nfunc (t *Terminal) countToRightWord() int {\n\tpos := t.pos\n\tfor pos < len(t.line) {\n\t\tif t.line[pos] == ' ' {\n\t\t\tbreak\n\t\t}\n\t\tpos++\n\t}\n\tfor pos < len(t.line) {\n\t\tif t.line[pos] != ' ' {\n\t\t\tbreak\n\t\t}\n\t\tpos++\n\t}\n\treturn pos - t.pos\n}\n\n// visualLength returns the number of visible glyphs in s.\nfunc visualLength(runes []rune) int {\n\tinEscapeSeq := false\n\tlength := 0\n\n\tfor _, r := range runes {\n\t\tswitch {\n\t\tcase inEscapeSeq:\n\t\t\tif (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') {\n\t\t\t\tinEscapeSeq = false\n\t\t\t}\n\t\tcase r == '\\x1b':\n\t\t\tinEscapeSeq = true\n\t\tdefault:\n\t\t\tlength++\n\t\t}\n\t}\n\n\treturn length\n}\n\n// handleKey processes the given key and, optionally, returns a line of text\n// that the user has entered.\nfunc (t *Terminal) handleKey(key rune) (line string, ok bool) {\n\tif t.pasteActive && key != keyEnter {\n\t\tt.addKeyToLine(key)\n\t\treturn\n\t}\n\n\tswitch key {\n\tcase keyBackspace:\n\t\tif t.pos == 0 {\n\t\t\treturn\n\t\t}\n\t\tt.eraseNPreviousChars(1)\n\tcase keyAltLeft:\n\t\t// move left by a word.\n\t\tt.pos -= t.countToLeftWord()\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyAltRight:\n\t\t// move right by a word.\n\t\tt.pos += t.countToRightWord()\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyLeft:\n\t\tif t.pos == 0 {\n\t\t\treturn\n\t\t}\n\t\tt.pos--\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyRight:\n\t\tif t.pos == len(t.line) {\n\t\t\treturn\n\t\t}\n\t\tt.pos++\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyHome:\n\t\tif t.pos == 0 {\n\t\t\treturn\n\t\t}\n\t\tt.pos = 0\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyEnd:\n\t\tif t.pos == len(t.line) {\n\t\t\treturn\n\t\t}\n\t\tt.pos = len(t.line)\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyUp:\n\t\tentry, ok := t.history.NthPreviousEntry(t.historyIndex + 1)\n\t\tif !ok {\n\t\t\treturn \"\", false\n\t\t}\n\t\tif t.historyIndex == -1 {\n\t\t\tt.historyPending = string(t.line)\n\t\t}\n\t\tt.historyIndex++\n\t\trunes := []rune(entry)\n\t\tt.setLine(runes, len(runes))\n\tcase keyDown:\n\t\tswitch t.historyIndex {\n\t\tcase -1:\n\t\t\treturn\n\t\tcase 0:\n\t\t\trunes := []rune(t.historyPending)\n\t\t\tt.setLine(runes, len(runes))\n\t\t\tt.historyIndex--\n\t\tdefault:\n\t\t\tentry, ok := t.history.NthPreviousEntry(t.historyIndex - 1)\n\t\t\tif ok {\n\t\t\t\tt.historyIndex--\n\t\t\t\trunes := []rune(entry)\n\t\t\t\tt.setLine(runes, len(runes))\n\t\t\t}\n\t\t}\n\tcase keyEnter:\n\t\tt.moveCursorToPos(len(t.line))\n\t\tt.queue([]rune(\"\\r\\n\"))\n\t\tline = string(t.line)\n\t\tok = true\n\t\tt.line = t.line[:0]\n\t\tt.pos = 0\n\t\tt.cursorX = 0\n\t\tt.cursorY = 0\n\t\tt.maxLine = 0\n\tcase keyDeleteWord:\n\t\t// Delete zero or more spaces and then one or more characters.\n\t\tt.eraseNPreviousChars(t.countToLeftWord())\n\tcase keyDeleteLine:\n\t\t// Delete everything from the current cursor position to the\n\t\t// end of line.\n\t\tfor i := t.pos; i < len(t.line); i++ {\n\t\t\tt.queue(space)\n\t\t\tt.advanceCursor(1)\n\t\t}\n\t\tt.line = t.line[:t.pos]\n\t\tt.moveCursorToPos(t.pos)\n\tcase keyCtrlD:\n\t\t// Erase the character under the current position.\n\t\t// The EOF case when the line is empty is handled in\n\t\t// readLine().\n\t\tif t.pos < len(t.line) {\n\t\t\tt.pos++\n\t\t\tt.eraseNPreviousChars(1)\n\t\t}\n\tcase keyCtrlU:\n\t\tt.eraseNPreviousChars(t.pos)\n\tcase keyClearScreen:\n\t\t// Erases the screen and moves the cursor to the home position.\n\t\tt.queue([]rune(\"\\x1b[2J\\x1b[H\"))\n\t\tt.queue(t.prompt)\n\t\tt.cursorX, t.cursorY = 0, 0\n\t\tt.advanceCursor(visualLength(t.prompt))\n\t\tt.setLine(t.line, t.pos)\n\tdefault:\n\t\tif t.AutoCompleteCallback != nil {\n\t\t\tprefix := string(t.line[:t.pos])\n\t\t\tsuffix := string(t.line[t.pos:])\n\n\t\t\tt.lock.Unlock()\n\t\t\tnewLine, newPos, completeOk := t.AutoCompleteCallback(prefix+suffix, len(prefix), key)\n\t\t\tt.lock.Lock()\n\n\t\t\tif completeOk {\n\t\t\t\tt.setLine([]rune(newLine), utf8.RuneCount([]byte(newLine)[:newPos]))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tif !isPrintable(key) {\n\t\t\treturn\n\t\t}\n\t\tif len(t.line) == maxLineLength {\n\t\t\treturn\n\t\t}\n\t\tt.addKeyToLine(key)\n\t}\n\treturn\n}\n\n// addKeyToLine inserts the given key at the current position in the current\n// line.\nfunc (t *Terminal) addKeyToLine(key rune) {\n\tif len(t.line) == cap(t.line) {\n\t\tnewLine := make([]rune, len(t.line), 2*(1+len(t.line)))\n\t\tcopy(newLine, t.line)\n\t\tt.line = newLine\n\t}\n\tt.line = t.line[:len(t.line)+1]\n\tcopy(t.line[t.pos+1:], t.line[t.pos:])\n\tt.line[t.pos] = key\n\tif t.echo {\n\t\tt.writeLine(t.line[t.pos:])\n\t}\n\tt.pos++\n\tt.moveCursorToPos(t.pos)\n}\n\nfunc (t *Terminal) writeLine(line []rune) {\n\tfor len(line) != 0 {\n\t\tremainingOnLine := t.termWidth - t.cursorX\n\t\ttodo := len(line)\n\t\tif todo > remainingOnLine {\n\t\t\ttodo = remainingOnLine\n\t\t}\n\t\tt.queue(line[:todo])\n\t\tt.advanceCursor(visualLength(line[:todo]))\n\t\tline = line[todo:]\n\t}\n}\n\nfunc (t *Terminal) Write(buf []byte) (n int, err error) {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\tif t.cursorX == 0 && t.cursorY == 0 {\n\t\t// This is the easy case: there's nothing on the screen that we\n\t\t// have to move out of the way.\n\t\treturn t.c.Write(buf)\n\t}\n\n\t// We have a prompt and possibly user input on the screen. We\n\t// have to clear it first.\n\tt.move(0 /* up */, 0 /* down */, t.cursorX /* left */, 0 /* right */)\n\tt.cursorX = 0\n\tt.clearLineToRight()\n\n\tfor t.cursorY > 0 {\n\t\tt.move(1 /* up */, 0, 0, 0)\n\t\tt.cursorY--\n\t\tt.clearLineToRight()\n\t}\n\n\tif _, err = t.c.Write(t.outBuf); err != nil {\n\t\treturn\n\t}\n\tt.outBuf = t.outBuf[:0]\n\n\tif n, err = t.c.Write(buf); err != nil {\n\t\treturn\n\t}\n\n\tt.writeLine(t.prompt)\n\tif t.echo {\n\t\tt.writeLine(t.line)\n\t}\n\n\tt.moveCursorToPos(t.pos)\n\n\tif _, err = t.c.Write(t.outBuf); err != nil {\n\t\treturn\n\t}\n\tt.outBuf = t.outBuf[:0]\n\treturn\n}\n\n// ReadPassword temporarily changes the prompt and reads a password, without\n// echo, from the terminal.\nfunc (t *Terminal) ReadPassword(prompt string) (line string, err error) {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\toldPrompt := t.prompt\n\tt.prompt = []rune(prompt)\n\tt.echo = false\n\n\tline, err = t.readLine()\n\n\tt.prompt = oldPrompt\n\tt.echo = true\n\n\treturn\n}\n\n// ReadLine returns a line of input from the terminal.\nfunc (t *Terminal) ReadLine() (line string, err error) {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\treturn t.readLine()\n}\n\nfunc (t *Terminal) readLine() (line string, err error) {\n\t// t.lock must be held at this point\n\n\tif t.cursorX == 0 && t.cursorY == 0 {\n\t\tt.writeLine(t.prompt)\n\t\tt.c.Write(t.outBuf)\n\t\tt.outBuf = t.outBuf[:0]\n\t}\n\n\tlineIsPasted := t.pasteActive\n\n\tfor {\n\t\trest := t.remainder\n\t\tlineOk := false\n\t\tfor !lineOk {\n\t\t\tvar key rune\n\t\t\tkey, rest = bytesToKey(rest, t.pasteActive)\n\t\t\tif key == utf8.RuneError {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif !t.pasteActive {\n\t\t\t\tif key == keyCtrlD {\n\t\t\t\t\tif len(t.line) == 0 {\n\t\t\t\t\t\treturn \"\", io.EOF\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif key == keyPasteStart {\n\t\t\t\t\tt.pasteActive = true\n\t\t\t\t\tif len(t.line) == 0 {\n\t\t\t\t\t\tlineIsPasted = true\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t} else if key == keyPasteEnd {\n\t\t\t\tt.pasteActive = false\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !t.pasteActive {\n\t\t\t\tlineIsPasted = false\n\t\t\t}\n\t\t\tline, lineOk = t.handleKey(key)\n\t\t}\n\t\tif len(rest) > 0 {\n\t\t\tn := copy(t.inBuf[:], rest)\n\t\t\tt.remainder = t.inBuf[:n]\n\t\t} else {\n\t\t\tt.remainder = nil\n\t\t}\n\t\tt.c.Write(t.outBuf)\n\t\tt.outBuf = t.outBuf[:0]\n\t\tif lineOk {\n\t\t\tif t.echo {\n\t\t\t\tt.historyIndex = -1\n\t\t\t\tt.history.Add(line)\n\t\t\t}\n\t\t\tif lineIsPasted {\n\t\t\t\terr = ErrPasteIndicator\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\t// t.remainder is a slice at the beginning of t.inBuf\n\t\t// containing a partial key sequence\n\t\treadBuf := t.inBuf[len(t.remainder):]\n\t\tvar n int\n\n\t\tt.lock.Unlock()\n\t\tn, err = t.c.Read(readBuf)\n\t\tt.lock.Lock()\n\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\n\t\tt.remainder = t.inBuf[:n+len(t.remainder)]\n\t}\n\n\tpanic(\"unreachable\") // for Go 1.0.\n}\n\n// SetPrompt sets the prompt to be used when reading subsequent lines.\nfunc (t *Terminal) SetPrompt(prompt string) {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\tt.prompt = []rune(prompt)\n}\n\nfunc (t *Terminal) clearAndRepaintLinePlusNPrevious(numPrevLines int) {\n\t// Move cursor to column zero at the start of the line.\n\tt.move(t.cursorY, 0, t.cursorX, 0)\n\tt.cursorX, t.cursorY = 0, 0\n\tt.clearLineToRight()\n\tfor t.cursorY < numPrevLines {\n\t\t// Move down a line\n\t\tt.move(0, 1, 0, 0)\n\t\tt.cursorY++\n\t\tt.clearLineToRight()\n\t}\n\t// Move back to beginning.\n\tt.move(t.cursorY, 0, 0, 0)\n\tt.cursorX, t.cursorY = 0, 0\n\n\tt.queue(t.prompt)\n\tt.advanceCursor(visualLength(t.prompt))\n\tt.writeLine(t.line)\n\tt.moveCursorToPos(t.pos)\n}\n\nfunc (t *Terminal) SetSize(width, height int) error {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\tif width == 0 {\n\t\twidth = 1\n\t}\n\n\toldWidth := t.termWidth\n\tt.termWidth, t.termHeight = width, height\n\n\tswitch {\n\tcase width == oldWidth:\n\t\t// If the width didn't change then nothing else needs to be\n\t\t// done.\n\t\treturn nil\n\tcase len(t.line) == 0 && t.cursorX == 0 && t.cursorY == 0:\n\t\t// If there is nothing on current line and no prompt printed,\n\t\t// just do nothing\n\t\treturn nil\n\tcase width < oldWidth:\n\t\t// Some terminals (e.g. xterm) will truncate lines that were\n\t\t// too long when shinking. Others, (e.g. gnome-terminal) will\n\t\t// attempt to wrap them. For the former, repainting t.maxLine\n\t\t// works great, but that behaviour goes badly wrong in the case\n\t\t// of the latter because they have doubled every full line.\n\n\t\t// We assume that we are working on a terminal that wraps lines\n\t\t// and adjust the cursor position based on every previous line\n\t\t// wrapping and turning into two. This causes the prompt on\n\t\t// xterms to move upwards, which isn't great, but it avoids a\n\t\t// huge mess with gnome-terminal.\n\t\tif t.cursorX >= t.termWidth {\n\t\t\tt.cursorX = t.termWidth - 1\n\t\t}\n\t\tt.cursorY *= 2\n\t\tt.clearAndRepaintLinePlusNPrevious(t.maxLine * 2)\n\tcase width > oldWidth:\n\t\t// If the terminal expands then our position calculations will\n\t\t// be wrong in the future because we think the cursor is\n\t\t// |t.pos| chars into the string, but there will be a gap at\n\t\t// the end of any wrapped line.\n\t\t//\n\t\t// But the position will actually be correct until we move, so\n\t\t// we can move back to the beginning and repaint everything.\n\t\tt.clearAndRepaintLinePlusNPrevious(t.maxLine)\n\t}\n\n\t_, err := t.c.Write(t.outBuf)\n\tt.outBuf = t.outBuf[:0]\n\treturn err\n}\n\ntype pasteIndicatorError struct{}\n\nfunc (pasteIndicatorError) Error() string {\n\treturn \"terminal: ErrPasteIndicator not correctly handled\"\n}\n\n// ErrPasteIndicator may be returned from ReadLine as the error, in addition\n// to valid line data. It indicates that bracketed paste mode is enabled and\n// that the returned line consists only of pasted data. Programs may wish to\n// interpret pasted data more literally than typed data.\nvar ErrPasteIndicator = pasteIndicatorError{}\n\n// SetBracketedPasteMode requests that the terminal bracket paste operations\n// with markers. Not all terminals support this but, if it is supported, then\n// enabling this mode will stop any autocomplete callback from running due to\n// pastes. Additionally, any lines that are completely pasted will be returned\n// from ReadLine with the error set to ErrPasteIndicator.\nfunc (t *Terminal) SetBracketedPasteMode(on bool) {\n\tif on {\n\t\tio.WriteString(t.c, \"\\x1b[?2004h\")\n\t} else {\n\t\tio.WriteString(t.c, \"\\x1b[?2004l\")\n\t}\n}\n\n// stRingBuffer is a ring buffer of strings.\ntype stRingBuffer struct {\n\t// entries contains max elements.\n\tentries []string\n\tmax     int\n\t// head contains the index of the element most recently added to the ring.\n\thead int\n\t// size contains the number of elements in the ring.\n\tsize int\n}\n\nfunc (s *stRingBuffer) Add(a string) {\n\tif s.entries == nil {\n\t\tconst defaultNumEntries = 100\n\t\ts.entries = make([]string, defaultNumEntries)\n\t\ts.max = defaultNumEntries\n\t}\n\n\ts.head = (s.head + 1) % s.max\n\ts.entries[s.head] = a\n\tif s.size < s.max {\n\t\ts.size++\n\t}\n}\n\n// NthPreviousEntry returns the value passed to the nth previous call to Add.\n// If n is zero then the immediately prior value is returned, if one, then the\n// next most recent, and so on. If such an element doesn't exist then ok is\n// false.\nfunc (s *stRingBuffer) NthPreviousEntry(n int) (value string, ok bool) {\n\tif n >= s.size {\n\t\treturn \"\", false\n\t}\n\tindex := s.head - n\n\tif index < 0 {\n\t\tindex += s.max\n\t}\n\treturn s.entries[index], true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/terminal/util.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd\n\n// Package terminal provides support functions for dealing with terminals, as\n// commonly found on UNIX systems.\n//\n// Putting a terminal into raw mode is the most common requirement:\n//\n// \toldState, err := terminal.MakeRaw(0)\n// \tif err != nil {\n// \t        panic(err)\n// \t}\n// \tdefer terminal.Restore(0, oldState)\npackage terminal\n\nimport (\n\t\"io\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// State contains the state of a terminal.\ntype State struct {\n\ttermios syscall.Termios\n}\n\n// IsTerminal returns true if the given file descriptor is a terminal.\nfunc IsTerminal(fd int) bool {\n\tvar termios syscall.Termios\n\t_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)\n\treturn err == 0\n}\n\n// MakeRaw put the terminal connected to the given file descriptor into raw\n// mode and returns the previous state of the terminal so that it can be\n// restored.\nfunc MakeRaw(fd int) (*State, error) {\n\tvar oldState State\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 {\n\t\treturn nil, err\n\t}\n\n\tnewState := oldState.termios\n\tnewState.Iflag &^= syscall.ISTRIP | syscall.INLCR | syscall.ICRNL | syscall.IGNCR | syscall.IXON | syscall.IXOFF\n\tnewState.Lflag &^= syscall.ECHO | syscall.ICANON | syscall.ISIG\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 {\n\t\treturn nil, err\n\t}\n\n\treturn &oldState, nil\n}\n\n// GetState returns the current state of a terminal which may be useful to\n// restore the terminal after a signal.\nfunc GetState(fd int) (*State, error) {\n\tvar oldState State\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 {\n\t\treturn nil, err\n\t}\n\n\treturn &oldState, nil\n}\n\n// Restore restores the terminal connected to the given file descriptor to a\n// previous state.\nfunc Restore(fd int, state *State) error {\n\t_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&state.termios)), 0, 0, 0)\n\treturn err\n}\n\n// GetSize returns the dimensions of the given terminal.\nfunc GetSize(fd int) (width, height int, err error) {\n\tvar dimensions [4]uint16\n\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&dimensions)), 0, 0, 0); err != 0 {\n\t\treturn -1, -1, err\n\t}\n\treturn int(dimensions[1]), int(dimensions[0]), nil\n}\n\n// ReadPassword reads a line of input from a terminal without local echo.  This\n// is commonly used for inputting passwords and other sensitive data. The slice\n// returned does not include the \\n.\nfunc ReadPassword(fd int) ([]byte, error) {\n\tvar oldState syscall.Termios\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0); err != 0 {\n\t\treturn nil, err\n\t}\n\n\tnewState := oldState\n\tnewState.Lflag &^= syscall.ECHO\n\tnewState.Lflag |= syscall.ICANON | syscall.ISIG\n\tnewState.Iflag |= syscall.ICRNL\n\tif _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 {\n\t\treturn nil, err\n\t}\n\n\tdefer func() {\n\t\tsyscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0)\n\t}()\n\n\tvar buf [16]byte\n\tvar ret []byte\n\tfor {\n\t\tn, err := syscall.Read(fd, buf[:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif n == 0 {\n\t\t\tif len(ret) == 0 {\n\t\t\t\treturn nil, io.EOF\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tif buf[n-1] == '\\n' {\n\t\t\tn--\n\t\t}\n\t\tret = append(ret, buf[:n]...)\n\t\tif n < len(buf) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build darwin dragonfly freebsd netbsd openbsd\n\npackage terminal\n\nimport \"syscall\"\n\nconst ioctlReadTermios = syscall.TIOCGETA\nconst ioctlWriteTermios = syscall.TIOCSETA\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/terminal/util_linux.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage terminal\n\n// These constants are declared here, rather than importing\n// them from the syscall package as some syscall packages, even\n// on linux, for example gccgo, do not declare them.\nconst ioctlReadTermios = 0x5401  // syscall.TCGETS\nconst ioctlWriteTermios = 0x5402 // syscall.TCSETS\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package terminal provides support functions for dealing with terminals, as\n// commonly found on UNIX systems.\n//\n// Putting a terminal into raw mode is the most common requirement:\n//\n// \toldState, err := terminal.MakeRaw(0)\n// \tif err != nil {\n// \t        panic(err)\n// \t}\n// \tdefer terminal.Restore(0, oldState)\npackage terminal\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\ntype State struct{}\n\n// IsTerminal returns true if the given file descriptor is a terminal.\nfunc IsTerminal(fd int) bool {\n\treturn false\n}\n\n// MakeRaw put the terminal connected to the given file descriptor into raw\n// mode and returns the previous state of the terminal so that it can be\n// restored.\nfunc MakeRaw(fd int) (*State, error) {\n\treturn nil, fmt.Errorf(\"terminal: MakeRaw not implemented on %s/%s\", runtime.GOOS, runtime.GOARCH)\n}\n\n// GetState returns the current state of a terminal which may be useful to\n// restore the terminal after a signal.\nfunc GetState(fd int) (*State, error) {\n\treturn nil, fmt.Errorf(\"terminal: GetState not implemented on %s/%s\", runtime.GOOS, runtime.GOARCH)\n}\n\n// Restore restores the terminal connected to the given file descriptor to a\n// previous state.\nfunc Restore(fd int, state *State) error {\n\treturn fmt.Errorf(\"terminal: Restore not implemented on %s/%s\", runtime.GOOS, runtime.GOARCH)\n}\n\n// GetSize returns the dimensions of the given terminal.\nfunc GetSize(fd int) (width, height int, err error) {\n\treturn 0, 0, fmt.Errorf(\"terminal: GetSize not implemented on %s/%s\", runtime.GOOS, runtime.GOARCH)\n}\n\n// ReadPassword reads a line of input from a terminal without local echo.  This\n// is commonly used for inputting passwords and other sensitive data. The slice\n// returned does not include the \\n.\nfunc ReadPassword(fd int) ([]byte, error) {\n\treturn nil, fmt.Errorf(\"terminal: ReadPassword not implemented on %s/%s\", runtime.GOOS, runtime.GOARCH)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/ssh/terminal/util_windows.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build windows\n\n// Package terminal provides support functions for dealing with terminals, as\n// commonly found on UNIX systems.\n//\n// Putting a terminal into raw mode is the most common requirement:\n//\n// \toldState, err := terminal.MakeRaw(0)\n// \tif err != nil {\n// \t        panic(err)\n// \t}\n// \tdefer terminal.Restore(0, oldState)\npackage terminal\n\nimport (\n\t\"io\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nconst (\n\tenableLineInput       = 2\n\tenableEchoInput       = 4\n\tenableProcessedInput  = 1\n\tenableWindowInput     = 8\n\tenableMouseInput      = 16\n\tenableInsertMode      = 32\n\tenableQuickEditMode   = 64\n\tenableExtendedFlags   = 128\n\tenableAutoPosition    = 256\n\tenableProcessedOutput = 1\n\tenableWrapAtEolOutput = 2\n)\n\nvar kernel32 = syscall.NewLazyDLL(\"kernel32.dll\")\n\nvar (\n\tprocGetConsoleMode             = kernel32.NewProc(\"GetConsoleMode\")\n\tprocSetConsoleMode             = kernel32.NewProc(\"SetConsoleMode\")\n\tprocGetConsoleScreenBufferInfo = kernel32.NewProc(\"GetConsoleScreenBufferInfo\")\n)\n\ntype (\n\tshort int16\n\tword  uint16\n\n\tcoord struct {\n\t\tx short\n\t\ty short\n\t}\n\tsmallRect struct {\n\t\tleft   short\n\t\ttop    short\n\t\tright  short\n\t\tbottom short\n\t}\n\tconsoleScreenBufferInfo struct {\n\t\tsize              coord\n\t\tcursorPosition    coord\n\t\tattributes        word\n\t\twindow            smallRect\n\t\tmaximumWindowSize coord\n\t}\n)\n\ntype State struct {\n\tmode uint32\n}\n\n// IsTerminal returns true if the given file descriptor is a terminal.\nfunc IsTerminal(fd int) bool {\n\tvar st uint32\n\tr, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0)\n\treturn r != 0 && e == 0\n}\n\n// MakeRaw put the terminal connected to the given file descriptor into raw\n// mode and returns the previous state of the terminal so that it can be\n// restored.\nfunc MakeRaw(fd int) (*State, error) {\n\tvar st uint32\n\t_, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0)\n\tif e != 0 {\n\t\treturn nil, error(e)\n\t}\n\traw := st &^ (enableEchoInput | enableProcessedInput | enableLineInput | enableProcessedOutput)\n\t_, _, e = syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(raw), 0)\n\tif e != 0 {\n\t\treturn nil, error(e)\n\t}\n\treturn &State{st}, nil\n}\n\n// GetState returns the current state of a terminal which may be useful to\n// restore the terminal after a signal.\nfunc GetState(fd int) (*State, error) {\n\tvar st uint32\n\t_, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0)\n\tif e != 0 {\n\t\treturn nil, error(e)\n\t}\n\treturn &State{st}, nil\n}\n\n// Restore restores the terminal connected to the given file descriptor to a\n// previous state.\nfunc Restore(fd int, state *State) error {\n\t_, _, err := syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(state.mode), 0)\n\treturn err\n}\n\n// GetSize returns the dimensions of the given terminal.\nfunc GetSize(fd int) (width, height int, err error) {\n\tvar info consoleScreenBufferInfo\n\t_, _, e := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&info)), 0)\n\tif e != 0 {\n\t\treturn 0, 0, error(e)\n\t}\n\treturn int(info.size.x), int(info.size.y), nil\n}\n\n// ReadPassword reads a line of input from a terminal without local echo.  This\n// is commonly used for inputting passwords and other sensitive data. The slice\n// returned does not include the \\n.\nfunc ReadPassword(fd int) ([]byte, error) {\n\tvar st uint32\n\t_, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0)\n\tif e != 0 {\n\t\treturn nil, error(e)\n\t}\n\told := st\n\n\tst &^= (enableEchoInput)\n\tst |= (enableProcessedInput | enableLineInput | enableProcessedOutput)\n\t_, _, e = syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(st), 0)\n\tif e != 0 {\n\t\treturn nil, error(e)\n\t}\n\n\tdefer func() {\n\t\tsyscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(old), 0)\n\t}()\n\n\tvar buf [16]byte\n\tvar ret []byte\n\tfor {\n\t\tn, err := syscall.Read(syscall.Handle(fd), buf[:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif n == 0 {\n\t\t\tif len(ret) == 0 {\n\t\t\t\treturn nil, io.EOF\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tif buf[n-1] == '\\n' {\n\t\t\tn--\n\t\t}\n\t\tif n > 0 && buf[n-1] == '\\r' {\n\t\t\tn--\n\t\t}\n\t\tret = append(ret, buf[:n]...)\n\t\tif n < len(buf) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/LICENSE",
    "content": "Copyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/net/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/atom/atom.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package atom provides integer codes (also known as atoms) for a fixed set of\n// frequently occurring HTML strings: tag names and attribute keys such as \"p\"\n// and \"id\".\n//\n// Sharing an atom's name between all elements with the same tag can result in\n// fewer string allocations when tokenizing and parsing HTML. Integer\n// comparisons are also generally faster than string comparisons.\n//\n// The value of an atom's particular code is not guaranteed to stay the same\n// between versions of this package. Neither is any ordering guaranteed:\n// whether atom.H1 < atom.H2 may also change. The codes are not guaranteed to\n// be dense. The only guarantees are that e.g. looking up \"div\" will yield\n// atom.Div, calling atom.Div.String will return \"div\", and atom.Div != 0.\npackage atom\n\n// Atom is an integer code for a string. The zero value maps to \"\".\ntype Atom uint32\n\n// String returns the atom's name.\nfunc (a Atom) String() string {\n\tstart := uint32(a >> 8)\n\tn := uint32(a & 0xff)\n\tif start+n > uint32(len(atomText)) {\n\t\treturn \"\"\n\t}\n\treturn atomText[start : start+n]\n}\n\nfunc (a Atom) string() string {\n\treturn atomText[a>>8 : a>>8+a&0xff]\n}\n\n// fnv computes the FNV hash with an arbitrary starting value h.\nfunc fnv(h uint32, s []byte) uint32 {\n\tfor i := range s {\n\t\th ^= uint32(s[i])\n\t\th *= 16777619\n\t}\n\treturn h\n}\n\nfunc match(s string, t []byte) bool {\n\tfor i, c := range t {\n\t\tif s[i] != c {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Lookup returns the atom whose name is s. It returns zero if there is no\n// such atom. The lookup is case sensitive.\nfunc Lookup(s []byte) Atom {\n\tif len(s) == 0 || len(s) > maxAtomLen {\n\t\treturn 0\n\t}\n\th := fnv(hash0, s)\n\tif a := table[h&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {\n\t\treturn a\n\t}\n\tif a := table[(h>>16)&uint32(len(table)-1)]; int(a&0xff) == len(s) && match(a.string(), s) {\n\t\treturn a\n\t}\n\treturn 0\n}\n\n// String returns a string whose contents are equal to s. In that sense, it is\n// equivalent to string(s) but may be more efficient.\nfunc String(s []byte) string {\n\tif a := Lookup(s); a != 0 {\n\t\treturn a.String()\n\t}\n\treturn string(s)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/atom/gen.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\npackage main\n\n// This program generates table.go and table_test.go.\n// Invoke as\n//\n//\tgo run gen.go |gofmt >table.go\n//\tgo run gen.go -test |gofmt >table_test.go\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"os\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// identifier converts s to a Go exported identifier.\n// It converts \"div\" to \"Div\" and \"accept-charset\" to \"AcceptCharset\".\nfunc identifier(s string) string {\n\tb := make([]byte, 0, len(s))\n\tcap := true\n\tfor _, c := range s {\n\t\tif c == '-' {\n\t\t\tcap = true\n\t\t\tcontinue\n\t\t}\n\t\tif cap && 'a' <= c && c <= 'z' {\n\t\t\tc -= 'a' - 'A'\n\t\t}\n\t\tcap = false\n\t\tb = append(b, byte(c))\n\t}\n\treturn string(b)\n}\n\nvar test = flag.Bool(\"test\", false, \"generate table_test.go\")\n\nfunc main() {\n\tflag.Parse()\n\n\tvar all []string\n\tall = append(all, elements...)\n\tall = append(all, attributes...)\n\tall = append(all, eventHandlers...)\n\tall = append(all, extra...)\n\tsort.Strings(all)\n\n\tif *test {\n\t\tfmt.Printf(\"// generated by go run gen.go -test; DO NOT EDIT\\n\\n\")\n\t\tfmt.Printf(\"package atom\\n\\n\")\n\t\tfmt.Printf(\"var testAtomList = []string{\\n\")\n\t\tfor _, s := range all {\n\t\t\tfmt.Printf(\"\\t%q,\\n\", s)\n\t\t}\n\t\tfmt.Printf(\"}\\n\")\n\t\treturn\n\t}\n\n\t// uniq - lists have dups\n\t// compute max len too\n\tmaxLen := 0\n\tw := 0\n\tfor _, s := range all {\n\t\tif w == 0 || all[w-1] != s {\n\t\t\tif maxLen < len(s) {\n\t\t\t\tmaxLen = len(s)\n\t\t\t}\n\t\t\tall[w] = s\n\t\t\tw++\n\t\t}\n\t}\n\tall = all[:w]\n\n\t// Find hash that minimizes table size.\n\tvar best *table\n\tfor i := 0; i < 1000000; i++ {\n\t\tif best != nil && 1<<(best.k-1) < len(all) {\n\t\t\tbreak\n\t\t}\n\t\th := rand.Uint32()\n\t\tfor k := uint(0); k <= 16; k++ {\n\t\t\tif best != nil && k >= best.k {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tvar t table\n\t\t\tif t.init(h, k, all) {\n\t\t\t\tbest = &t\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif best == nil {\n\t\tfmt.Fprintf(os.Stderr, \"failed to construct string table\\n\")\n\t\tos.Exit(1)\n\t}\n\n\t// Lay out strings, using overlaps when possible.\n\tlayout := append([]string{}, all...)\n\n\t// Remove strings that are substrings of other strings\n\tfor changed := true; changed; {\n\t\tchanged = false\n\t\tfor i, s := range layout {\n\t\t\tif s == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor j, t := range layout {\n\t\t\t\tif i != j && t != \"\" && strings.Contains(s, t) {\n\t\t\t\t\tchanged = true\n\t\t\t\t\tlayout[j] = \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Join strings where one suffix matches another prefix.\n\tfor {\n\t\t// Find best i, j, k such that layout[i][len-k:] == layout[j][:k],\n\t\t// maximizing overlap length k.\n\t\tbesti := -1\n\t\tbestj := -1\n\t\tbestk := 0\n\t\tfor i, s := range layout {\n\t\t\tif s == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor j, t := range layout {\n\t\t\t\tif i == j {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor k := bestk + 1; k <= len(s) && k <= len(t); k++ {\n\t\t\t\t\tif s[len(s)-k:] == t[:k] {\n\t\t\t\t\t\tbesti = i\n\t\t\t\t\t\tbestj = j\n\t\t\t\t\t\tbestk = k\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif bestk > 0 {\n\t\t\tlayout[besti] += layout[bestj][bestk:]\n\t\t\tlayout[bestj] = \"\"\n\t\t\tcontinue\n\t\t}\n\t\tbreak\n\t}\n\n\ttext := strings.Join(layout, \"\")\n\n\tatom := map[string]uint32{}\n\tfor _, s := range all {\n\t\toff := strings.Index(text, s)\n\t\tif off < 0 {\n\t\t\tpanic(\"lost string \" + s)\n\t\t}\n\t\tatom[s] = uint32(off<<8 | len(s))\n\t}\n\n\t// Generate the Go code.\n\tfmt.Printf(\"// generated by go run gen.go; DO NOT EDIT\\n\\n\")\n\tfmt.Printf(\"package atom\\n\\nconst (\\n\")\n\tfor _, s := range all {\n\t\tfmt.Printf(\"\\t%s Atom = %#x\\n\", identifier(s), atom[s])\n\t}\n\tfmt.Printf(\")\\n\\n\")\n\n\tfmt.Printf(\"const hash0 = %#x\\n\\n\", best.h0)\n\tfmt.Printf(\"const maxAtomLen = %d\\n\\n\", maxLen)\n\n\tfmt.Printf(\"var table = [1<<%d]Atom{\\n\", best.k)\n\tfor i, s := range best.tab {\n\t\tif s == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tfmt.Printf(\"\\t%#x: %#x, // %s\\n\", i, atom[s], s)\n\t}\n\tfmt.Printf(\"}\\n\")\n\tdatasize := (1 << best.k) * 4\n\n\tfmt.Printf(\"const atomText =\\n\")\n\ttextsize := len(text)\n\tfor len(text) > 60 {\n\t\tfmt.Printf(\"\\t%q +\\n\", text[:60])\n\t\ttext = text[60:]\n\t}\n\tfmt.Printf(\"\\t%q\\n\\n\", text)\n\n\tfmt.Fprintf(os.Stderr, \"%d atoms; %d string bytes + %d tables = %d total data\\n\", len(all), textsize, datasize, textsize+datasize)\n}\n\ntype byLen []string\n\nfunc (x byLen) Less(i, j int) bool { return len(x[i]) > len(x[j]) }\nfunc (x byLen) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }\nfunc (x byLen) Len() int           { return len(x) }\n\n// fnv computes the FNV hash with an arbitrary starting value h.\nfunc fnv(h uint32, s string) uint32 {\n\tfor i := 0; i < len(s); i++ {\n\t\th ^= uint32(s[i])\n\t\th *= 16777619\n\t}\n\treturn h\n}\n\n// A table represents an attempt at constructing the lookup table.\n// The lookup table uses cuckoo hashing, meaning that each string\n// can be found in one of two positions.\ntype table struct {\n\th0   uint32\n\tk    uint\n\tmask uint32\n\ttab  []string\n}\n\n// hash returns the two hashes for s.\nfunc (t *table) hash(s string) (h1, h2 uint32) {\n\th := fnv(t.h0, s)\n\th1 = h & t.mask\n\th2 = (h >> 16) & t.mask\n\treturn\n}\n\n// init initializes the table with the given parameters.\n// h0 is the initial hash value,\n// k is the number of bits of hash value to use, and\n// x is the list of strings to store in the table.\n// init returns false if the table cannot be constructed.\nfunc (t *table) init(h0 uint32, k uint, x []string) bool {\n\tt.h0 = h0\n\tt.k = k\n\tt.tab = make([]string, 1<<k)\n\tt.mask = 1<<k - 1\n\tfor _, s := range x {\n\t\tif !t.insert(s) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// insert inserts s in the table.\nfunc (t *table) insert(s string) bool {\n\th1, h2 := t.hash(s)\n\tif t.tab[h1] == \"\" {\n\t\tt.tab[h1] = s\n\t\treturn true\n\t}\n\tif t.tab[h2] == \"\" {\n\t\tt.tab[h2] = s\n\t\treturn true\n\t}\n\tif t.push(h1, 0) {\n\t\tt.tab[h1] = s\n\t\treturn true\n\t}\n\tif t.push(h2, 0) {\n\t\tt.tab[h2] = s\n\t\treturn true\n\t}\n\treturn false\n}\n\n// push attempts to push aside the entry in slot i.\nfunc (t *table) push(i uint32, depth int) bool {\n\tif depth > len(t.tab) {\n\t\treturn false\n\t}\n\ts := t.tab[i]\n\th1, h2 := t.hash(s)\n\tj := h1 + h2 - i\n\tif t.tab[j] != \"\" && !t.push(j, depth+1) {\n\t\treturn false\n\t}\n\tt.tab[j] = s\n\treturn true\n}\n\n// The lists of element names and attribute keys were taken from\n// https://html.spec.whatwg.org/multipage/indices.html#index\n// as of the \"HTML Living Standard - Last Updated 21 February 2015\" version.\n\nvar elements = []string{\n\t\"a\",\n\t\"abbr\",\n\t\"address\",\n\t\"area\",\n\t\"article\",\n\t\"aside\",\n\t\"audio\",\n\t\"b\",\n\t\"base\",\n\t\"bdi\",\n\t\"bdo\",\n\t\"blockquote\",\n\t\"body\",\n\t\"br\",\n\t\"button\",\n\t\"canvas\",\n\t\"caption\",\n\t\"cite\",\n\t\"code\",\n\t\"col\",\n\t\"colgroup\",\n\t\"command\",\n\t\"data\",\n\t\"datalist\",\n\t\"dd\",\n\t\"del\",\n\t\"details\",\n\t\"dfn\",\n\t\"dialog\",\n\t\"div\",\n\t\"dl\",\n\t\"dt\",\n\t\"em\",\n\t\"embed\",\n\t\"fieldset\",\n\t\"figcaption\",\n\t\"figure\",\n\t\"footer\",\n\t\"form\",\n\t\"h1\",\n\t\"h2\",\n\t\"h3\",\n\t\"h4\",\n\t\"h5\",\n\t\"h6\",\n\t\"head\",\n\t\"header\",\n\t\"hgroup\",\n\t\"hr\",\n\t\"html\",\n\t\"i\",\n\t\"iframe\",\n\t\"img\",\n\t\"input\",\n\t\"ins\",\n\t\"kbd\",\n\t\"keygen\",\n\t\"label\",\n\t\"legend\",\n\t\"li\",\n\t\"link\",\n\t\"map\",\n\t\"mark\",\n\t\"menu\",\n\t\"menuitem\",\n\t\"meta\",\n\t\"meter\",\n\t\"nav\",\n\t\"noscript\",\n\t\"object\",\n\t\"ol\",\n\t\"optgroup\",\n\t\"option\",\n\t\"output\",\n\t\"p\",\n\t\"param\",\n\t\"pre\",\n\t\"progress\",\n\t\"q\",\n\t\"rp\",\n\t\"rt\",\n\t\"ruby\",\n\t\"s\",\n\t\"samp\",\n\t\"script\",\n\t\"section\",\n\t\"select\",\n\t\"small\",\n\t\"source\",\n\t\"span\",\n\t\"strong\",\n\t\"style\",\n\t\"sub\",\n\t\"summary\",\n\t\"sup\",\n\t\"table\",\n\t\"tbody\",\n\t\"td\",\n\t\"template\",\n\t\"textarea\",\n\t\"tfoot\",\n\t\"th\",\n\t\"thead\",\n\t\"time\",\n\t\"title\",\n\t\"tr\",\n\t\"track\",\n\t\"u\",\n\t\"ul\",\n\t\"var\",\n\t\"video\",\n\t\"wbr\",\n}\n\n// https://html.spec.whatwg.org/multipage/indices.html#attributes-3\n\nvar attributes = []string{\n\t\"abbr\",\n\t\"accept\",\n\t\"accept-charset\",\n\t\"accesskey\",\n\t\"action\",\n\t\"alt\",\n\t\"async\",\n\t\"autocomplete\",\n\t\"autofocus\",\n\t\"autoplay\",\n\t\"challenge\",\n\t\"charset\",\n\t\"checked\",\n\t\"cite\",\n\t\"class\",\n\t\"cols\",\n\t\"colspan\",\n\t\"command\",\n\t\"content\",\n\t\"contenteditable\",\n\t\"contextmenu\",\n\t\"controls\",\n\t\"coords\",\n\t\"crossorigin\",\n\t\"data\",\n\t\"datetime\",\n\t\"default\",\n\t\"defer\",\n\t\"dir\",\n\t\"dirname\",\n\t\"disabled\",\n\t\"download\",\n\t\"draggable\",\n\t\"dropzone\",\n\t\"enctype\",\n\t\"for\",\n\t\"form\",\n\t\"formaction\",\n\t\"formenctype\",\n\t\"formmethod\",\n\t\"formnovalidate\",\n\t\"formtarget\",\n\t\"headers\",\n\t\"height\",\n\t\"hidden\",\n\t\"high\",\n\t\"href\",\n\t\"hreflang\",\n\t\"http-equiv\",\n\t\"icon\",\n\t\"id\",\n\t\"inputmode\",\n\t\"ismap\",\n\t\"itemid\",\n\t\"itemprop\",\n\t\"itemref\",\n\t\"itemscope\",\n\t\"itemtype\",\n\t\"keytype\",\n\t\"kind\",\n\t\"label\",\n\t\"lang\",\n\t\"list\",\n\t\"loop\",\n\t\"low\",\n\t\"manifest\",\n\t\"max\",\n\t\"maxlength\",\n\t\"media\",\n\t\"mediagroup\",\n\t\"method\",\n\t\"min\",\n\t\"minlength\",\n\t\"multiple\",\n\t\"muted\",\n\t\"name\",\n\t\"novalidate\",\n\t\"open\",\n\t\"optimum\",\n\t\"pattern\",\n\t\"ping\",\n\t\"placeholder\",\n\t\"poster\",\n\t\"preload\",\n\t\"radiogroup\",\n\t\"readonly\",\n\t\"rel\",\n\t\"required\",\n\t\"reversed\",\n\t\"rows\",\n\t\"rowspan\",\n\t\"sandbox\",\n\t\"spellcheck\",\n\t\"scope\",\n\t\"scoped\",\n\t\"seamless\",\n\t\"selected\",\n\t\"shape\",\n\t\"size\",\n\t\"sizes\",\n\t\"sortable\",\n\t\"sorted\",\n\t\"span\",\n\t\"src\",\n\t\"srcdoc\",\n\t\"srclang\",\n\t\"start\",\n\t\"step\",\n\t\"style\",\n\t\"tabindex\",\n\t\"target\",\n\t\"title\",\n\t\"translate\",\n\t\"type\",\n\t\"typemustmatch\",\n\t\"usemap\",\n\t\"value\",\n\t\"width\",\n\t\"wrap\",\n}\n\nvar eventHandlers = []string{\n\t\"onabort\",\n\t\"onautocomplete\",\n\t\"onautocompleteerror\",\n\t\"onafterprint\",\n\t\"onbeforeprint\",\n\t\"onbeforeunload\",\n\t\"onblur\",\n\t\"oncancel\",\n\t\"oncanplay\",\n\t\"oncanplaythrough\",\n\t\"onchange\",\n\t\"onclick\",\n\t\"onclose\",\n\t\"oncontextmenu\",\n\t\"oncuechange\",\n\t\"ondblclick\",\n\t\"ondrag\",\n\t\"ondragend\",\n\t\"ondragenter\",\n\t\"ondragleave\",\n\t\"ondragover\",\n\t\"ondragstart\",\n\t\"ondrop\",\n\t\"ondurationchange\",\n\t\"onemptied\",\n\t\"onended\",\n\t\"onerror\",\n\t\"onfocus\",\n\t\"onhashchange\",\n\t\"oninput\",\n\t\"oninvalid\",\n\t\"onkeydown\",\n\t\"onkeypress\",\n\t\"onkeyup\",\n\t\"onlanguagechange\",\n\t\"onload\",\n\t\"onloadeddata\",\n\t\"onloadedmetadata\",\n\t\"onloadstart\",\n\t\"onmessage\",\n\t\"onmousedown\",\n\t\"onmousemove\",\n\t\"onmouseout\",\n\t\"onmouseover\",\n\t\"onmouseup\",\n\t\"onmousewheel\",\n\t\"onoffline\",\n\t\"ononline\",\n\t\"onpagehide\",\n\t\"onpageshow\",\n\t\"onpause\",\n\t\"onplay\",\n\t\"onplaying\",\n\t\"onpopstate\",\n\t\"onprogress\",\n\t\"onratechange\",\n\t\"onreset\",\n\t\"onresize\",\n\t\"onscroll\",\n\t\"onseeked\",\n\t\"onseeking\",\n\t\"onselect\",\n\t\"onshow\",\n\t\"onsort\",\n\t\"onstalled\",\n\t\"onstorage\",\n\t\"onsubmit\",\n\t\"onsuspend\",\n\t\"ontimeupdate\",\n\t\"ontoggle\",\n\t\"onunload\",\n\t\"onvolumechange\",\n\t\"onwaiting\",\n}\n\n// extra are ad-hoc values not covered by any of the lists above.\nvar extra = []string{\n\t\"align\",\n\t\"annotation\",\n\t\"annotation-xml\",\n\t\"applet\",\n\t\"basefont\",\n\t\"bgsound\",\n\t\"big\",\n\t\"blink\",\n\t\"center\",\n\t\"color\",\n\t\"desc\",\n\t\"face\",\n\t\"font\",\n\t\"foreignObject\", // HTML is case-insensitive, but SVG-embedded-in-HTML is case-sensitive.\n\t\"foreignobject\",\n\t\"frame\",\n\t\"frameset\",\n\t\"image\",\n\t\"isindex\",\n\t\"listing\",\n\t\"malignmark\",\n\t\"marquee\",\n\t\"math\",\n\t\"mglyph\",\n\t\"mi\",\n\t\"mn\",\n\t\"mo\",\n\t\"ms\",\n\t\"mtext\",\n\t\"nobr\",\n\t\"noembed\",\n\t\"noframes\",\n\t\"plaintext\",\n\t\"prompt\",\n\t\"public\",\n\t\"spacer\",\n\t\"strike\",\n\t\"svg\",\n\t\"system\",\n\t\"tt\",\n\t\"xmp\",\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/atom/table.go",
    "content": "// generated by go run gen.go; DO NOT EDIT\n\npackage atom\n\nconst (\n\tA                   Atom = 0x1\n\tAbbr                Atom = 0x4\n\tAccept              Atom = 0x2106\n\tAcceptCharset       Atom = 0x210e\n\tAccesskey           Atom = 0x3309\n\tAction              Atom = 0x1f606\n\tAddress             Atom = 0x4f307\n\tAlign               Atom = 0x1105\n\tAlt                 Atom = 0x4503\n\tAnnotation          Atom = 0x1670a\n\tAnnotationXml       Atom = 0x1670e\n\tApplet              Atom = 0x2b306\n\tArea                Atom = 0x2fa04\n\tArticle             Atom = 0x38807\n\tAside               Atom = 0x8305\n\tAsync               Atom = 0x7b05\n\tAudio               Atom = 0xa605\n\tAutocomplete        Atom = 0x1fc0c\n\tAutofocus           Atom = 0xb309\n\tAutoplay            Atom = 0xce08\n\tB                   Atom = 0x101\n\tBase                Atom = 0xd604\n\tBasefont            Atom = 0xd608\n\tBdi                 Atom = 0x1a03\n\tBdo                 Atom = 0xe703\n\tBgsound             Atom = 0x11807\n\tBig                 Atom = 0x12403\n\tBlink               Atom = 0x12705\n\tBlockquote          Atom = 0x12c0a\n\tBody                Atom = 0x2f04\n\tBr                  Atom = 0x202\n\tButton              Atom = 0x13606\n\tCanvas              Atom = 0x7f06\n\tCaption             Atom = 0x1bb07\n\tCenter              Atom = 0x5b506\n\tChallenge           Atom = 0x21f09\n\tCharset             Atom = 0x2807\n\tChecked             Atom = 0x32807\n\tCite                Atom = 0x3c804\n\tClass               Atom = 0x4de05\n\tCode                Atom = 0x14904\n\tCol                 Atom = 0x15003\n\tColgroup            Atom = 0x15008\n\tColor               Atom = 0x15d05\n\tCols                Atom = 0x16204\n\tColspan             Atom = 0x16207\n\tCommand             Atom = 0x17507\n\tContent             Atom = 0x42307\n\tContenteditable     Atom = 0x4230f\n\tContextmenu         Atom = 0x3310b\n\tControls            Atom = 0x18808\n\tCoords              Atom = 0x19406\n\tCrossorigin         Atom = 0x19f0b\n\tData                Atom = 0x44a04\n\tDatalist            Atom = 0x44a08\n\tDatetime            Atom = 0x23c08\n\tDd                  Atom = 0x26702\n\tDefault             Atom = 0x8607\n\tDefer               Atom = 0x14b05\n\tDel                 Atom = 0x3ef03\n\tDesc                Atom = 0x4db04\n\tDetails             Atom = 0x4807\n\tDfn                 Atom = 0x6103\n\tDialog              Atom = 0x1b06\n\tDir                 Atom = 0x6903\n\tDirname             Atom = 0x6907\n\tDisabled            Atom = 0x10c08\n\tDiv                 Atom = 0x11303\n\tDl                  Atom = 0x11e02\n\tDownload            Atom = 0x40008\n\tDraggable           Atom = 0x17b09\n\tDropzone            Atom = 0x39108\n\tDt                  Atom = 0x50902\n\tEm                  Atom = 0x6502\n\tEmbed               Atom = 0x6505\n\tEnctype             Atom = 0x21107\n\tFace                Atom = 0x5b304\n\tFieldset            Atom = 0x1b008\n\tFigcaption          Atom = 0x1b80a\n\tFigure              Atom = 0x1cc06\n\tFont                Atom = 0xda04\n\tFooter              Atom = 0x8d06\n\tFor                 Atom = 0x1d803\n\tForeignObject       Atom = 0x1d80d\n\tForeignobject       Atom = 0x1e50d\n\tForm                Atom = 0x1f204\n\tFormaction          Atom = 0x1f20a\n\tFormenctype         Atom = 0x20d0b\n\tFormmethod          Atom = 0x2280a\n\tFormnovalidate      Atom = 0x2320e\n\tFormtarget          Atom = 0x2470a\n\tFrame               Atom = 0x9a05\n\tFrameset            Atom = 0x9a08\n\tH1                  Atom = 0x26e02\n\tH2                  Atom = 0x29402\n\tH3                  Atom = 0x2a702\n\tH4                  Atom = 0x2e902\n\tH5                  Atom = 0x2f302\n\tH6                  Atom = 0x50b02\n\tHead                Atom = 0x2d504\n\tHeader              Atom = 0x2d506\n\tHeaders             Atom = 0x2d507\n\tHeight              Atom = 0x25106\n\tHgroup              Atom = 0x25906\n\tHidden              Atom = 0x26506\n\tHigh                Atom = 0x26b04\n\tHr                  Atom = 0x27002\n\tHref                Atom = 0x27004\n\tHreflang            Atom = 0x27008\n\tHtml                Atom = 0x25504\n\tHttpEquiv           Atom = 0x2780a\n\tI                   Atom = 0x601\n\tIcon                Atom = 0x42204\n\tId                  Atom = 0x8502\n\tIframe              Atom = 0x29606\n\tImage               Atom = 0x29c05\n\tImg                 Atom = 0x2a103\n\tInput               Atom = 0x3e805\n\tInputmode           Atom = 0x3e809\n\tIns                 Atom = 0x1a803\n\tIsindex             Atom = 0x2a907\n\tIsmap               Atom = 0x2b005\n\tItemid              Atom = 0x33c06\n\tItemprop            Atom = 0x3c908\n\tItemref             Atom = 0x5ad07\n\tItemscope           Atom = 0x2b909\n\tItemtype            Atom = 0x2c308\n\tKbd                 Atom = 0x1903\n\tKeygen              Atom = 0x3906\n\tKeytype             Atom = 0x53707\n\tKind                Atom = 0x10904\n\tLabel               Atom = 0xf005\n\tLang                Atom = 0x27404\n\tLegend              Atom = 0x18206\n\tLi                  Atom = 0x1202\n\tLink                Atom = 0x12804\n\tList                Atom = 0x44e04\n\tListing             Atom = 0x44e07\n\tLoop                Atom = 0xf404\n\tLow                 Atom = 0x11f03\n\tMalignmark          Atom = 0x100a\n\tManifest            Atom = 0x5f108\n\tMap                 Atom = 0x2b203\n\tMark                Atom = 0x1604\n\tMarquee             Atom = 0x2cb07\n\tMath                Atom = 0x2d204\n\tMax                 Atom = 0x2e103\n\tMaxlength           Atom = 0x2e109\n\tMedia               Atom = 0x6e05\n\tMediagroup          Atom = 0x6e0a\n\tMenu                Atom = 0x33804\n\tMenuitem            Atom = 0x33808\n\tMeta                Atom = 0x45d04\n\tMeter               Atom = 0x24205\n\tMethod              Atom = 0x22c06\n\tMglyph              Atom = 0x2a206\n\tMi                  Atom = 0x2eb02\n\tMin                 Atom = 0x2eb03\n\tMinlength           Atom = 0x2eb09\n\tMn                  Atom = 0x23502\n\tMo                  Atom = 0x3ed02\n\tMs                  Atom = 0x2bc02\n\tMtext               Atom = 0x2f505\n\tMultiple            Atom = 0x30308\n\tMuted               Atom = 0x30b05\n\tName                Atom = 0x6c04\n\tNav                 Atom = 0x3e03\n\tNobr                Atom = 0x5704\n\tNoembed             Atom = 0x6307\n\tNoframes            Atom = 0x9808\n\tNoscript            Atom = 0x3d208\n\tNovalidate          Atom = 0x2360a\n\tObject              Atom = 0x1ec06\n\tOl                  Atom = 0xc902\n\tOnabort             Atom = 0x13a07\n\tOnafterprint        Atom = 0x1c00c\n\tOnautocomplete      Atom = 0x1fa0e\n\tOnautocompleteerror Atom = 0x1fa13\n\tOnbeforeprint       Atom = 0x6040d\n\tOnbeforeunload      Atom = 0x4e70e\n\tOnblur              Atom = 0xaa06\n\tOncancel            Atom = 0xe908\n\tOncanplay           Atom = 0x28509\n\tOncanplaythrough    Atom = 0x28510\n\tOnchange            Atom = 0x3a708\n\tOnclick             Atom = 0x31007\n\tOnclose             Atom = 0x31707\n\tOncontextmenu       Atom = 0x32f0d\n\tOncuechange         Atom = 0x3420b\n\tOndblclick          Atom = 0x34d0a\n\tOndrag              Atom = 0x35706\n\tOndragend           Atom = 0x35709\n\tOndragenter         Atom = 0x3600b\n\tOndragleave         Atom = 0x36b0b\n\tOndragover          Atom = 0x3760a\n\tOndragstart         Atom = 0x3800b\n\tOndrop              Atom = 0x38f06\n\tOndurationchange    Atom = 0x39f10\n\tOnemptied           Atom = 0x39609\n\tOnended             Atom = 0x3af07\n\tOnerror             Atom = 0x3b607\n\tOnfocus             Atom = 0x3bd07\n\tOnhashchange        Atom = 0x3da0c\n\tOninput             Atom = 0x3e607\n\tOninvalid           Atom = 0x3f209\n\tOnkeydown           Atom = 0x3fb09\n\tOnkeypress          Atom = 0x4080a\n\tOnkeyup             Atom = 0x41807\n\tOnlanguagechange    Atom = 0x43210\n\tOnload              Atom = 0x44206\n\tOnloadeddata        Atom = 0x4420c\n\tOnloadedmetadata    Atom = 0x45510\n\tOnloadstart         Atom = 0x46b0b\n\tOnmessage           Atom = 0x47609\n\tOnmousedown         Atom = 0x47f0b\n\tOnmousemove         Atom = 0x48a0b\n\tOnmouseout          Atom = 0x4950a\n\tOnmouseover         Atom = 0x4a20b\n\tOnmouseup           Atom = 0x4ad09\n\tOnmousewheel        Atom = 0x4b60c\n\tOnoffline           Atom = 0x4c209\n\tOnonline            Atom = 0x4cb08\n\tOnpagehide          Atom = 0x4d30a\n\tOnpageshow          Atom = 0x4fe0a\n\tOnpause             Atom = 0x50d07\n\tOnplay              Atom = 0x51706\n\tOnplaying           Atom = 0x51709\n\tOnpopstate          Atom = 0x5200a\n\tOnprogress          Atom = 0x52a0a\n\tOnratechange        Atom = 0x53e0c\n\tOnreset             Atom = 0x54a07\n\tOnresize            Atom = 0x55108\n\tOnscroll            Atom = 0x55f08\n\tOnseeked            Atom = 0x56708\n\tOnseeking           Atom = 0x56f09\n\tOnselect            Atom = 0x57808\n\tOnshow              Atom = 0x58206\n\tOnsort              Atom = 0x58b06\n\tOnstalled           Atom = 0x59509\n\tOnstorage           Atom = 0x59e09\n\tOnsubmit            Atom = 0x5a708\n\tOnsuspend           Atom = 0x5bb09\n\tOntimeupdate        Atom = 0xdb0c\n\tOntoggle            Atom = 0x5c408\n\tOnunload            Atom = 0x5cc08\n\tOnvolumechange      Atom = 0x5d40e\n\tOnwaiting           Atom = 0x5e209\n\tOpen                Atom = 0x3cf04\n\tOptgroup            Atom = 0xf608\n\tOptimum             Atom = 0x5eb07\n\tOption              Atom = 0x60006\n\tOutput              Atom = 0x49c06\n\tP                   Atom = 0xc01\n\tParam               Atom = 0xc05\n\tPattern             Atom = 0x5107\n\tPing                Atom = 0x7704\n\tPlaceholder         Atom = 0xc30b\n\tPlaintext           Atom = 0xfd09\n\tPoster              Atom = 0x15706\n\tPre                 Atom = 0x25e03\n\tPreload             Atom = 0x25e07\n\tProgress            Atom = 0x52c08\n\tPrompt              Atom = 0x5fa06\n\tPublic              Atom = 0x41e06\n\tQ                   Atom = 0x13101\n\tRadiogroup          Atom = 0x30a\n\tReadonly            Atom = 0x2fb08\n\tRel                 Atom = 0x25f03\n\tRequired            Atom = 0x1d008\n\tReversed            Atom = 0x5a08\n\tRows                Atom = 0x9204\n\tRowspan             Atom = 0x9207\n\tRp                  Atom = 0x1c602\n\tRt                  Atom = 0x13f02\n\tRuby                Atom = 0xaf04\n\tS                   Atom = 0x2c01\n\tSamp                Atom = 0x4e04\n\tSandbox             Atom = 0xbb07\n\tScope               Atom = 0x2bd05\n\tScoped              Atom = 0x2bd06\n\tScript              Atom = 0x3d406\n\tSeamless            Atom = 0x31c08\n\tSection             Atom = 0x4e207\n\tSelect              Atom = 0x57a06\n\tSelected            Atom = 0x57a08\n\tShape               Atom = 0x4f905\n\tSize                Atom = 0x55504\n\tSizes               Atom = 0x55505\n\tSmall               Atom = 0x18f05\n\tSortable            Atom = 0x58d08\n\tSorted              Atom = 0x19906\n\tSource              Atom = 0x1aa06\n\tSpacer              Atom = 0x2db06\n\tSpan                Atom = 0x9504\n\tSpellcheck          Atom = 0x3230a\n\tSrc                 Atom = 0x3c303\n\tSrcdoc              Atom = 0x3c306\n\tSrclang             Atom = 0x41107\n\tStart               Atom = 0x38605\n\tStep                Atom = 0x5f704\n\tStrike              Atom = 0x53306\n\tStrong              Atom = 0x55906\n\tStyle               Atom = 0x61105\n\tSub                 Atom = 0x5a903\n\tSummary             Atom = 0x61607\n\tSup                 Atom = 0x61d03\n\tSvg                 Atom = 0x62003\n\tSystem              Atom = 0x62306\n\tTabindex            Atom = 0x46308\n\tTable               Atom = 0x42d05\n\tTarget              Atom = 0x24b06\n\tTbody               Atom = 0x2e05\n\tTd                  Atom = 0x4702\n\tTemplate            Atom = 0x62608\n\tTextarea            Atom = 0x2f608\n\tTfoot               Atom = 0x8c05\n\tTh                  Atom = 0x22e02\n\tThead               Atom = 0x2d405\n\tTime                Atom = 0xdd04\n\tTitle               Atom = 0xa105\n\tTr                  Atom = 0x10502\n\tTrack               Atom = 0x10505\n\tTranslate           Atom = 0x14009\n\tTt                  Atom = 0x5302\n\tType                Atom = 0x21404\n\tTypemustmatch       Atom = 0x2140d\n\tU                   Atom = 0xb01\n\tUl                  Atom = 0x8a02\n\tUsemap              Atom = 0x51106\n\tValue               Atom = 0x4005\n\tVar                 Atom = 0x11503\n\tVideo               Atom = 0x28105\n\tWbr                 Atom = 0x12103\n\tWidth               Atom = 0x50705\n\tWrap                Atom = 0x58704\n\tXmp                 Atom = 0xc103\n)\n\nconst hash0 = 0xc17da63e\n\nconst maxAtomLen = 19\n\nvar table = [1 << 9]Atom{\n\t0x1:   0x48a0b, // onmousemove\n\t0x2:   0x5e209, // onwaiting\n\t0x3:   0x1fa13, // onautocompleteerror\n\t0x4:   0x5fa06, // prompt\n\t0x7:   0x5eb07, // optimum\n\t0x8:   0x1604,  // mark\n\t0xa:   0x5ad07, // itemref\n\t0xb:   0x4fe0a, // onpageshow\n\t0xc:   0x57a06, // select\n\t0xd:   0x17b09, // draggable\n\t0xe:   0x3e03,  // nav\n\t0xf:   0x17507, // command\n\t0x11:  0xb01,   // u\n\t0x14:  0x2d507, // headers\n\t0x15:  0x44a08, // datalist\n\t0x17:  0x4e04,  // samp\n\t0x1a:  0x3fb09, // onkeydown\n\t0x1b:  0x55f08, // onscroll\n\t0x1c:  0x15003, // col\n\t0x20:  0x3c908, // itemprop\n\t0x21:  0x2780a, // http-equiv\n\t0x22:  0x61d03, // sup\n\t0x24:  0x1d008, // required\n\t0x2b:  0x25e07, // preload\n\t0x2c:  0x6040d, // onbeforeprint\n\t0x2d:  0x3600b, // ondragenter\n\t0x2e:  0x50902, // dt\n\t0x2f:  0x5a708, // onsubmit\n\t0x30:  0x27002, // hr\n\t0x31:  0x32f0d, // oncontextmenu\n\t0x33:  0x29c05, // image\n\t0x34:  0x50d07, // onpause\n\t0x35:  0x25906, // hgroup\n\t0x36:  0x7704,  // ping\n\t0x37:  0x57808, // onselect\n\t0x3a:  0x11303, // div\n\t0x3b:  0x1fa0e, // onautocomplete\n\t0x40:  0x2eb02, // mi\n\t0x41:  0x31c08, // seamless\n\t0x42:  0x2807,  // charset\n\t0x43:  0x8502,  // id\n\t0x44:  0x5200a, // onpopstate\n\t0x45:  0x3ef03, // del\n\t0x46:  0x2cb07, // marquee\n\t0x47:  0x3309,  // accesskey\n\t0x49:  0x8d06,  // footer\n\t0x4a:  0x44e04, // list\n\t0x4b:  0x2b005, // ismap\n\t0x51:  0x33804, // menu\n\t0x52:  0x2f04,  // body\n\t0x55:  0x9a08,  // frameset\n\t0x56:  0x54a07, // onreset\n\t0x57:  0x12705, // blink\n\t0x58:  0xa105,  // title\n\t0x59:  0x38807, // article\n\t0x5b:  0x22e02, // th\n\t0x5d:  0x13101, // q\n\t0x5e:  0x3cf04, // open\n\t0x5f:  0x2fa04, // area\n\t0x61:  0x44206, // onload\n\t0x62:  0xda04,  // font\n\t0x63:  0xd604,  // base\n\t0x64:  0x16207, // colspan\n\t0x65:  0x53707, // keytype\n\t0x66:  0x11e02, // dl\n\t0x68:  0x1b008, // fieldset\n\t0x6a:  0x2eb03, // min\n\t0x6b:  0x11503, // var\n\t0x6f:  0x2d506, // header\n\t0x70:  0x13f02, // rt\n\t0x71:  0x15008, // colgroup\n\t0x72:  0x23502, // mn\n\t0x74:  0x13a07, // onabort\n\t0x75:  0x3906,  // keygen\n\t0x76:  0x4c209, // onoffline\n\t0x77:  0x21f09, // challenge\n\t0x78:  0x2b203, // map\n\t0x7a:  0x2e902, // h4\n\t0x7b:  0x3b607, // onerror\n\t0x7c:  0x2e109, // maxlength\n\t0x7d:  0x2f505, // mtext\n\t0x7e:  0xbb07,  // sandbox\n\t0x7f:  0x58b06, // onsort\n\t0x80:  0x100a,  // malignmark\n\t0x81:  0x45d04, // meta\n\t0x82:  0x7b05,  // async\n\t0x83:  0x2a702, // h3\n\t0x84:  0x26702, // dd\n\t0x85:  0x27004, // href\n\t0x86:  0x6e0a,  // mediagroup\n\t0x87:  0x19406, // coords\n\t0x88:  0x41107, // srclang\n\t0x89:  0x34d0a, // ondblclick\n\t0x8a:  0x4005,  // value\n\t0x8c:  0xe908,  // oncancel\n\t0x8e:  0x3230a, // spellcheck\n\t0x8f:  0x9a05,  // frame\n\t0x91:  0x12403, // big\n\t0x94:  0x1f606, // action\n\t0x95:  0x6903,  // dir\n\t0x97:  0x2fb08, // readonly\n\t0x99:  0x42d05, // table\n\t0x9a:  0x61607, // summary\n\t0x9b:  0x12103, // wbr\n\t0x9c:  0x30a,   // radiogroup\n\t0x9d:  0x6c04,  // name\n\t0x9f:  0x62306, // system\n\t0xa1:  0x15d05, // color\n\t0xa2:  0x7f06,  // canvas\n\t0xa3:  0x25504, // html\n\t0xa5:  0x56f09, // onseeking\n\t0xac:  0x4f905, // shape\n\t0xad:  0x25f03, // rel\n\t0xae:  0x28510, // oncanplaythrough\n\t0xaf:  0x3760a, // ondragover\n\t0xb0:  0x62608, // template\n\t0xb1:  0x1d80d, // foreignObject\n\t0xb3:  0x9204,  // rows\n\t0xb6:  0x44e07, // listing\n\t0xb7:  0x49c06, // output\n\t0xb9:  0x3310b, // contextmenu\n\t0xbb:  0x11f03, // low\n\t0xbc:  0x1c602, // rp\n\t0xbd:  0x5bb09, // onsuspend\n\t0xbe:  0x13606, // button\n\t0xbf:  0x4db04, // desc\n\t0xc1:  0x4e207, // section\n\t0xc2:  0x52a0a, // onprogress\n\t0xc3:  0x59e09, // onstorage\n\t0xc4:  0x2d204, // math\n\t0xc5:  0x4503,  // alt\n\t0xc7:  0x8a02,  // ul\n\t0xc8:  0x5107,  // pattern\n\t0xc9:  0x4b60c, // onmousewheel\n\t0xca:  0x35709, // ondragend\n\t0xcb:  0xaf04,  // ruby\n\t0xcc:  0xc01,   // p\n\t0xcd:  0x31707, // onclose\n\t0xce:  0x24205, // meter\n\t0xcf:  0x11807, // bgsound\n\t0xd2:  0x25106, // height\n\t0xd4:  0x101,   // b\n\t0xd5:  0x2c308, // itemtype\n\t0xd8:  0x1bb07, // caption\n\t0xd9:  0x10c08, // disabled\n\t0xdb:  0x33808, // menuitem\n\t0xdc:  0x62003, // svg\n\t0xdd:  0x18f05, // small\n\t0xde:  0x44a04, // data\n\t0xe0:  0x4cb08, // ononline\n\t0xe1:  0x2a206, // mglyph\n\t0xe3:  0x6505,  // embed\n\t0xe4:  0x10502, // tr\n\t0xe5:  0x46b0b, // onloadstart\n\t0xe7:  0x3c306, // srcdoc\n\t0xeb:  0x5c408, // ontoggle\n\t0xed:  0xe703,  // bdo\n\t0xee:  0x4702,  // td\n\t0xef:  0x8305,  // aside\n\t0xf0:  0x29402, // h2\n\t0xf1:  0x52c08, // progress\n\t0xf2:  0x12c0a, // blockquote\n\t0xf4:  0xf005,  // label\n\t0xf5:  0x601,   // i\n\t0xf7:  0x9207,  // rowspan\n\t0xfb:  0x51709, // onplaying\n\t0xfd:  0x2a103, // img\n\t0xfe:  0xf608,  // optgroup\n\t0xff:  0x42307, // content\n\t0x101: 0x53e0c, // onratechange\n\t0x103: 0x3da0c, // onhashchange\n\t0x104: 0x4807,  // details\n\t0x106: 0x40008, // download\n\t0x109: 0x14009, // translate\n\t0x10b: 0x4230f, // contenteditable\n\t0x10d: 0x36b0b, // ondragleave\n\t0x10e: 0x2106,  // accept\n\t0x10f: 0x57a08, // selected\n\t0x112: 0x1f20a, // formaction\n\t0x113: 0x5b506, // center\n\t0x115: 0x45510, // onloadedmetadata\n\t0x116: 0x12804, // link\n\t0x117: 0xdd04,  // time\n\t0x118: 0x19f0b, // crossorigin\n\t0x119: 0x3bd07, // onfocus\n\t0x11a: 0x58704, // wrap\n\t0x11b: 0x42204, // icon\n\t0x11d: 0x28105, // video\n\t0x11e: 0x4de05, // class\n\t0x121: 0x5d40e, // onvolumechange\n\t0x122: 0xaa06,  // onblur\n\t0x123: 0x2b909, // itemscope\n\t0x124: 0x61105, // style\n\t0x127: 0x41e06, // public\n\t0x129: 0x2320e, // formnovalidate\n\t0x12a: 0x58206, // onshow\n\t0x12c: 0x51706, // onplay\n\t0x12d: 0x3c804, // cite\n\t0x12e: 0x2bc02, // ms\n\t0x12f: 0xdb0c,  // ontimeupdate\n\t0x130: 0x10904, // kind\n\t0x131: 0x2470a, // formtarget\n\t0x135: 0x3af07, // onended\n\t0x136: 0x26506, // hidden\n\t0x137: 0x2c01,  // s\n\t0x139: 0x2280a, // formmethod\n\t0x13a: 0x3e805, // input\n\t0x13c: 0x50b02, // h6\n\t0x13d: 0xc902,  // ol\n\t0x13e: 0x3420b, // oncuechange\n\t0x13f: 0x1e50d, // foreignobject\n\t0x143: 0x4e70e, // onbeforeunload\n\t0x144: 0x2bd05, // scope\n\t0x145: 0x39609, // onemptied\n\t0x146: 0x14b05, // defer\n\t0x147: 0xc103,  // xmp\n\t0x148: 0x39f10, // ondurationchange\n\t0x149: 0x1903,  // kbd\n\t0x14c: 0x47609, // onmessage\n\t0x14d: 0x60006, // option\n\t0x14e: 0x2eb09, // minlength\n\t0x14f: 0x32807, // checked\n\t0x150: 0xce08,  // autoplay\n\t0x152: 0x202,   // br\n\t0x153: 0x2360a, // novalidate\n\t0x156: 0x6307,  // noembed\n\t0x159: 0x31007, // onclick\n\t0x15a: 0x47f0b, // onmousedown\n\t0x15b: 0x3a708, // onchange\n\t0x15e: 0x3f209, // oninvalid\n\t0x15f: 0x2bd06, // scoped\n\t0x160: 0x18808, // controls\n\t0x161: 0x30b05, // muted\n\t0x162: 0x58d08, // sortable\n\t0x163: 0x51106, // usemap\n\t0x164: 0x1b80a, // figcaption\n\t0x165: 0x35706, // ondrag\n\t0x166: 0x26b04, // high\n\t0x168: 0x3c303, // src\n\t0x169: 0x15706, // poster\n\t0x16b: 0x1670e, // annotation-xml\n\t0x16c: 0x5f704, // step\n\t0x16d: 0x4,     // abbr\n\t0x16e: 0x1b06,  // dialog\n\t0x170: 0x1202,  // li\n\t0x172: 0x3ed02, // mo\n\t0x175: 0x1d803, // for\n\t0x176: 0x1a803, // ins\n\t0x178: 0x55504, // size\n\t0x179: 0x43210, // onlanguagechange\n\t0x17a: 0x8607,  // default\n\t0x17b: 0x1a03,  // bdi\n\t0x17c: 0x4d30a, // onpagehide\n\t0x17d: 0x6907,  // dirname\n\t0x17e: 0x21404, // type\n\t0x17f: 0x1f204, // form\n\t0x181: 0x28509, // oncanplay\n\t0x182: 0x6103,  // dfn\n\t0x183: 0x46308, // tabindex\n\t0x186: 0x6502,  // em\n\t0x187: 0x27404, // lang\n\t0x189: 0x39108, // dropzone\n\t0x18a: 0x4080a, // onkeypress\n\t0x18b: 0x23c08, // datetime\n\t0x18c: 0x16204, // cols\n\t0x18d: 0x1,     // a\n\t0x18e: 0x4420c, // onloadeddata\n\t0x190: 0xa605,  // audio\n\t0x192: 0x2e05,  // tbody\n\t0x193: 0x22c06, // method\n\t0x195: 0xf404,  // loop\n\t0x196: 0x29606, // iframe\n\t0x198: 0x2d504, // head\n\t0x19e: 0x5f108, // manifest\n\t0x19f: 0xb309,  // autofocus\n\t0x1a0: 0x14904, // code\n\t0x1a1: 0x55906, // strong\n\t0x1a2: 0x30308, // multiple\n\t0x1a3: 0xc05,   // param\n\t0x1a6: 0x21107, // enctype\n\t0x1a7: 0x5b304, // face\n\t0x1a8: 0xfd09,  // plaintext\n\t0x1a9: 0x26e02, // h1\n\t0x1aa: 0x59509, // onstalled\n\t0x1ad: 0x3d406, // script\n\t0x1ae: 0x2db06, // spacer\n\t0x1af: 0x55108, // onresize\n\t0x1b0: 0x4a20b, // onmouseover\n\t0x1b1: 0x5cc08, // onunload\n\t0x1b2: 0x56708, // onseeked\n\t0x1b4: 0x2140d, // typemustmatch\n\t0x1b5: 0x1cc06, // figure\n\t0x1b6: 0x4950a, // onmouseout\n\t0x1b7: 0x25e03, // pre\n\t0x1b8: 0x50705, // width\n\t0x1b9: 0x19906, // sorted\n\t0x1bb: 0x5704,  // nobr\n\t0x1be: 0x5302,  // tt\n\t0x1bf: 0x1105,  // align\n\t0x1c0: 0x3e607, // oninput\n\t0x1c3: 0x41807, // onkeyup\n\t0x1c6: 0x1c00c, // onafterprint\n\t0x1c7: 0x210e,  // accept-charset\n\t0x1c8: 0x33c06, // itemid\n\t0x1c9: 0x3e809, // inputmode\n\t0x1cb: 0x53306, // strike\n\t0x1cc: 0x5a903, // sub\n\t0x1cd: 0x10505, // track\n\t0x1ce: 0x38605, // start\n\t0x1d0: 0xd608,  // basefont\n\t0x1d6: 0x1aa06, // source\n\t0x1d7: 0x18206, // legend\n\t0x1d8: 0x2d405, // thead\n\t0x1da: 0x8c05,  // tfoot\n\t0x1dd: 0x1ec06, // object\n\t0x1de: 0x6e05,  // media\n\t0x1df: 0x1670a, // annotation\n\t0x1e0: 0x20d0b, // formenctype\n\t0x1e2: 0x3d208, // noscript\n\t0x1e4: 0x55505, // sizes\n\t0x1e5: 0x1fc0c, // autocomplete\n\t0x1e6: 0x9504,  // span\n\t0x1e7: 0x9808,  // noframes\n\t0x1e8: 0x24b06, // target\n\t0x1e9: 0x38f06, // ondrop\n\t0x1ea: 0x2b306, // applet\n\t0x1ec: 0x5a08,  // reversed\n\t0x1f0: 0x2a907, // isindex\n\t0x1f3: 0x27008, // hreflang\n\t0x1f5: 0x2f302, // h5\n\t0x1f6: 0x4f307, // address\n\t0x1fa: 0x2e103, // max\n\t0x1fb: 0xc30b,  // placeholder\n\t0x1fc: 0x2f608, // textarea\n\t0x1fe: 0x4ad09, // onmouseup\n\t0x1ff: 0x3800b, // ondragstart\n}\n\nconst atomText = \"abbradiogrouparamalignmarkbdialogaccept-charsetbodyaccesskey\" +\n\t\"genavaluealtdetailsampatternobreversedfnoembedirnamediagroup\" +\n\t\"ingasyncanvasidefaultfooterowspanoframesetitleaudionblurubya\" +\n\t\"utofocusandboxmplaceholderautoplaybasefontimeupdatebdoncance\" +\n\t\"labelooptgrouplaintextrackindisabledivarbgsoundlowbrbigblink\" +\n\t\"blockquotebuttonabortranslatecodefercolgroupostercolorcolspa\" +\n\t\"nnotation-xmlcommandraggablegendcontrolsmallcoordsortedcross\" +\n\t\"originsourcefieldsetfigcaptionafterprintfigurequiredforeignO\" +\n\t\"bjectforeignobjectformactionautocompleteerrorformenctypemust\" +\n\t\"matchallengeformmethodformnovalidatetimeterformtargetheightm\" +\n\t\"lhgroupreloadhiddenhigh1hreflanghttp-equivideoncanplaythroug\" +\n\t\"h2iframeimageimglyph3isindexismappletitemscopeditemtypemarqu\" +\n\t\"eematheaderspacermaxlength4minlength5mtextareadonlymultiplem\" +\n\t\"utedonclickoncloseamlesspellcheckedoncontextmenuitemidoncuec\" +\n\t\"hangeondblclickondragendondragenterondragleaveondragoverondr\" +\n\t\"agstarticleondropzonemptiedondurationchangeonendedonerroronf\" +\n\t\"ocusrcdocitempropenoscriptonhashchangeoninputmodeloninvalido\" +\n\t\"nkeydownloadonkeypressrclangonkeyupublicontenteditableonlang\" +\n\t\"uagechangeonloadeddatalistingonloadedmetadatabindexonloadsta\" +\n\t\"rtonmessageonmousedownonmousemoveonmouseoutputonmouseoveronm\" +\n\t\"ouseuponmousewheelonofflineononlineonpagehidesclassectionbef\" +\n\t\"oreunloaddresshapeonpageshowidth6onpausemaponplayingonpopsta\" +\n\t\"teonprogresstrikeytypeonratechangeonresetonresizestrongonscr\" +\n\t\"ollonseekedonseekingonselectedonshowraponsortableonstalledon\" +\n\t\"storageonsubmitemrefacenteronsuspendontoggleonunloadonvolume\" +\n\t\"changeonwaitingoptimumanifestepromptoptionbeforeprintstylesu\" +\n\t\"mmarysupsvgsystemplate\"\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/const.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage html\n\n// Section 12.2.3.2 of the HTML5 specification says \"The following elements\n// have varying levels of special parsing rules\".\n// https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements\nvar isSpecialElementMap = map[string]bool{\n\t\"address\":    true,\n\t\"applet\":     true,\n\t\"area\":       true,\n\t\"article\":    true,\n\t\"aside\":      true,\n\t\"base\":       true,\n\t\"basefont\":   true,\n\t\"bgsound\":    true,\n\t\"blockquote\": true,\n\t\"body\":       true,\n\t\"br\":         true,\n\t\"button\":     true,\n\t\"caption\":    true,\n\t\"center\":     true,\n\t\"col\":        true,\n\t\"colgroup\":   true,\n\t\"dd\":         true,\n\t\"details\":    true,\n\t\"dir\":        true,\n\t\"div\":        true,\n\t\"dl\":         true,\n\t\"dt\":         true,\n\t\"embed\":      true,\n\t\"fieldset\":   true,\n\t\"figcaption\": true,\n\t\"figure\":     true,\n\t\"footer\":     true,\n\t\"form\":       true,\n\t\"frame\":      true,\n\t\"frameset\":   true,\n\t\"h1\":         true,\n\t\"h2\":         true,\n\t\"h3\":         true,\n\t\"h4\":         true,\n\t\"h5\":         true,\n\t\"h6\":         true,\n\t\"head\":       true,\n\t\"header\":     true,\n\t\"hgroup\":     true,\n\t\"hr\":         true,\n\t\"html\":       true,\n\t\"iframe\":     true,\n\t\"img\":        true,\n\t\"input\":      true,\n\t\"isindex\":    true,\n\t\"li\":         true,\n\t\"link\":       true,\n\t\"listing\":    true,\n\t\"marquee\":    true,\n\t\"menu\":       true,\n\t\"meta\":       true,\n\t\"nav\":        true,\n\t\"noembed\":    true,\n\t\"noframes\":   true,\n\t\"noscript\":   true,\n\t\"object\":     true,\n\t\"ol\":         true,\n\t\"p\":          true,\n\t\"param\":      true,\n\t\"plaintext\":  true,\n\t\"pre\":        true,\n\t\"script\":     true,\n\t\"section\":    true,\n\t\"select\":     true,\n\t\"source\":     true,\n\t\"style\":      true,\n\t\"summary\":    true,\n\t\"table\":      true,\n\t\"tbody\":      true,\n\t\"td\":         true,\n\t\"template\":   true,\n\t\"textarea\":   true,\n\t\"tfoot\":      true,\n\t\"th\":         true,\n\t\"thead\":      true,\n\t\"title\":      true,\n\t\"tr\":         true,\n\t\"track\":      true,\n\t\"ul\":         true,\n\t\"wbr\":        true,\n\t\"xmp\":        true,\n}\n\nfunc isSpecialElement(element *Node) bool {\n\tswitch element.Namespace {\n\tcase \"\", \"html\":\n\t\treturn isSpecialElementMap[element.Data]\n\tcase \"svg\":\n\t\treturn element.Data == \"foreignObject\"\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/doc.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n/*\nPackage html implements an HTML5-compliant tokenizer and parser.\n\nTokenization is done by creating a Tokenizer for an io.Reader r. It is the\ncaller's responsibility to ensure that r provides UTF-8 encoded HTML.\n\n\tz := html.NewTokenizer(r)\n\nGiven a Tokenizer z, the HTML is tokenized by repeatedly calling z.Next(),\nwhich parses the next token and returns its type, or an error:\n\n\tfor {\n\t\ttt := z.Next()\n\t\tif tt == html.ErrorToken {\n\t\t\t// ...\n\t\t\treturn ...\n\t\t}\n\t\t// Process the current token.\n\t}\n\nThere are two APIs for retrieving the current token. The high-level API is to\ncall Token; the low-level API is to call Text or TagName / TagAttr. Both APIs\nallow optionally calling Raw after Next but before Token, Text, TagName, or\nTagAttr. In EBNF notation, the valid call sequence per token is:\n\n\tNext {Raw} [ Token | Text | TagName {TagAttr} ]\n\nToken returns an independent data structure that completely describes a token.\nEntities (such as \"&lt;\") are unescaped, tag names and attribute keys are\nlower-cased, and attributes are collected into a []Attribute. For example:\n\n\tfor {\n\t\tif z.Next() == html.ErrorToken {\n\t\t\t// Returning io.EOF indicates success.\n\t\t\treturn z.Err()\n\t\t}\n\t\temitToken(z.Token())\n\t}\n\nThe low-level API performs fewer allocations and copies, but the contents of\nthe []byte values returned by Text, TagName and TagAttr may change on the next\ncall to Next. For example, to extract an HTML page's anchor text:\n\n\tdepth := 0\n\tfor {\n\t\ttt := z.Next()\n\t\tswitch tt {\n\t\tcase ErrorToken:\n\t\t\treturn z.Err()\n\t\tcase TextToken:\n\t\t\tif depth > 0 {\n\t\t\t\t// emitBytes should copy the []byte it receives,\n\t\t\t\t// if it doesn't process it immediately.\n\t\t\t\temitBytes(z.Text())\n\t\t\t}\n\t\tcase StartTagToken, EndTagToken:\n\t\t\ttn, _ := z.TagName()\n\t\t\tif len(tn) == 1 && tn[0] == 'a' {\n\t\t\t\tif tt == StartTagToken {\n\t\t\t\t\tdepth++\n\t\t\t\t} else {\n\t\t\t\t\tdepth--\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\nParsing is done by calling Parse with an io.Reader, which returns the root of\nthe parse tree (the document element) as a *Node. It is the caller's\nresponsibility to ensure that the Reader provides UTF-8 encoded HTML. For\nexample, to process each anchor node in depth-first order:\n\n\tdoc, err := html.Parse(r)\n\tif err != nil {\n\t\t// ...\n\t}\n\tvar f func(*html.Node)\n\tf = func(n *html.Node) {\n\t\tif n.Type == html.ElementNode && n.Data == \"a\" {\n\t\t\t// Do something with n...\n\t\t}\n\t\tfor c := n.FirstChild; c != nil; c = c.NextSibling {\n\t\t\tf(c)\n\t\t}\n\t}\n\tf(doc)\n\nThe relevant specifications include:\nhttps://html.spec.whatwg.org/multipage/syntax.html and\nhttps://html.spec.whatwg.org/multipage/syntax.html#tokenization\n*/\npackage html\n\n// The tokenization algorithm implemented by this package is not a line-by-line\n// transliteration of the relatively verbose state-machine in the WHATWG\n// specification. A more direct approach is used instead, where the program\n// counter implies the state, such as whether it is tokenizing a tag or a text\n// node. Specification compliance is verified by checking expected and actual\n// outputs over a test suite rather than aiming for algorithmic fidelity.\n\n// TODO(nigeltao): Does a DOM API belong in this package or a separate one?\n// TODO(nigeltao): How does parsing interact with a JavaScript engine?\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/doctype.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage html\n\nimport (\n\t\"strings\"\n)\n\n// parseDoctype parses the data from a DoctypeToken into a name,\n// public identifier, and system identifier. It returns a Node whose Type\n// is DoctypeNode, whose Data is the name, and which has attributes\n// named \"system\" and \"public\" for the two identifiers if they were present.\n// quirks is whether the document should be parsed in \"quirks mode\".\nfunc parseDoctype(s string) (n *Node, quirks bool) {\n\tn = &Node{Type: DoctypeNode}\n\n\t// Find the name.\n\tspace := strings.IndexAny(s, whitespace)\n\tif space == -1 {\n\t\tspace = len(s)\n\t}\n\tn.Data = s[:space]\n\t// The comparison to \"html\" is case-sensitive.\n\tif n.Data != \"html\" {\n\t\tquirks = true\n\t}\n\tn.Data = strings.ToLower(n.Data)\n\ts = strings.TrimLeft(s[space:], whitespace)\n\n\tif len(s) < 6 {\n\t\t// It can't start with \"PUBLIC\" or \"SYSTEM\".\n\t\t// Ignore the rest of the string.\n\t\treturn n, quirks || s != \"\"\n\t}\n\n\tkey := strings.ToLower(s[:6])\n\ts = s[6:]\n\tfor key == \"public\" || key == \"system\" {\n\t\ts = strings.TrimLeft(s, whitespace)\n\t\tif s == \"\" {\n\t\t\tbreak\n\t\t}\n\t\tquote := s[0]\n\t\tif quote != '\"' && quote != '\\'' {\n\t\t\tbreak\n\t\t}\n\t\ts = s[1:]\n\t\tq := strings.IndexRune(s, rune(quote))\n\t\tvar id string\n\t\tif q == -1 {\n\t\t\tid = s\n\t\t\ts = \"\"\n\t\t} else {\n\t\t\tid = s[:q]\n\t\t\ts = s[q+1:]\n\t\t}\n\t\tn.Attr = append(n.Attr, Attribute{Key: key, Val: id})\n\t\tif key == \"public\" {\n\t\t\tkey = \"system\"\n\t\t} else {\n\t\t\tkey = \"\"\n\t\t}\n\t}\n\n\tif key != \"\" || s != \"\" {\n\t\tquirks = true\n\t} else if len(n.Attr) > 0 {\n\t\tif n.Attr[0].Key == \"public\" {\n\t\t\tpublic := strings.ToLower(n.Attr[0].Val)\n\t\t\tswitch public {\n\t\t\tcase \"-//w3o//dtd w3 html strict 3.0//en//\", \"-/w3d/dtd html 4.0 transitional/en\", \"html\":\n\t\t\t\tquirks = true\n\t\t\tdefault:\n\t\t\t\tfor _, q := range quirkyIDs {\n\t\t\t\t\tif strings.HasPrefix(public, q) {\n\t\t\t\t\t\tquirks = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// The following two public IDs only cause quirks mode if there is no system ID.\n\t\t\tif len(n.Attr) == 1 && (strings.HasPrefix(public, \"-//w3c//dtd html 4.01 frameset//\") ||\n\t\t\t\tstrings.HasPrefix(public, \"-//w3c//dtd html 4.01 transitional//\")) {\n\t\t\t\tquirks = true\n\t\t\t}\n\t\t}\n\t\tif lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == \"system\" &&\n\t\t\tstrings.ToLower(lastAttr.Val) == \"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\" {\n\t\t\tquirks = true\n\t\t}\n\t}\n\n\treturn n, quirks\n}\n\n// quirkyIDs is a list of public doctype identifiers that cause a document\n// to be interpreted in quirks mode. The identifiers should be in lower case.\nvar quirkyIDs = []string{\n\t\"+//silmaril//dtd html pro v0r11 19970101//\",\n\t\"-//advasoft ltd//dtd html 3.0 aswedit + extensions//\",\n\t\"-//as//dtd html 3.0 aswedit + extensions//\",\n\t\"-//ietf//dtd html 2.0 level 1//\",\n\t\"-//ietf//dtd html 2.0 level 2//\",\n\t\"-//ietf//dtd html 2.0 strict level 1//\",\n\t\"-//ietf//dtd html 2.0 strict level 2//\",\n\t\"-//ietf//dtd html 2.0 strict//\",\n\t\"-//ietf//dtd html 2.0//\",\n\t\"-//ietf//dtd html 2.1e//\",\n\t\"-//ietf//dtd html 3.0//\",\n\t\"-//ietf//dtd html 3.2 final//\",\n\t\"-//ietf//dtd html 3.2//\",\n\t\"-//ietf//dtd html 3//\",\n\t\"-//ietf//dtd html level 0//\",\n\t\"-//ietf//dtd html level 1//\",\n\t\"-//ietf//dtd html level 2//\",\n\t\"-//ietf//dtd html level 3//\",\n\t\"-//ietf//dtd html strict level 0//\",\n\t\"-//ietf//dtd html strict level 1//\",\n\t\"-//ietf//dtd html strict level 2//\",\n\t\"-//ietf//dtd html strict level 3//\",\n\t\"-//ietf//dtd html strict//\",\n\t\"-//ietf//dtd html//\",\n\t\"-//metrius//dtd metrius presentational//\",\n\t\"-//microsoft//dtd internet explorer 2.0 html strict//\",\n\t\"-//microsoft//dtd internet explorer 2.0 html//\",\n\t\"-//microsoft//dtd internet explorer 2.0 tables//\",\n\t\"-//microsoft//dtd internet explorer 3.0 html strict//\",\n\t\"-//microsoft//dtd internet explorer 3.0 html//\",\n\t\"-//microsoft//dtd internet explorer 3.0 tables//\",\n\t\"-//netscape comm. corp.//dtd html//\",\n\t\"-//netscape comm. corp.//dtd strict html//\",\n\t\"-//o'reilly and associates//dtd html 2.0//\",\n\t\"-//o'reilly and associates//dtd html extended 1.0//\",\n\t\"-//o'reilly and associates//dtd html extended relaxed 1.0//\",\n\t\"-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//\",\n\t\"-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//\",\n\t\"-//spyglass//dtd html 2.0 extended//\",\n\t\"-//sq//dtd html 2.0 hotmetal + extensions//\",\n\t\"-//sun microsystems corp.//dtd hotjava html//\",\n\t\"-//sun microsystems corp.//dtd hotjava strict html//\",\n\t\"-//w3c//dtd html 3 1995-03-24//\",\n\t\"-//w3c//dtd html 3.2 draft//\",\n\t\"-//w3c//dtd html 3.2 final//\",\n\t\"-//w3c//dtd html 3.2//\",\n\t\"-//w3c//dtd html 3.2s draft//\",\n\t\"-//w3c//dtd html 4.0 frameset//\",\n\t\"-//w3c//dtd html 4.0 transitional//\",\n\t\"-//w3c//dtd html experimental 19960712//\",\n\t\"-//w3c//dtd html experimental 970421//\",\n\t\"-//w3c//dtd w3 html//\",\n\t\"-//w3o//dtd w3 html 3.0//\",\n\t\"-//webtechs//dtd mozilla html 2.0//\",\n\t\"-//webtechs//dtd mozilla html//\",\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/entity.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage html\n\n// All entities that do not end with ';' are 6 or fewer bytes long.\nconst longestEntityWithoutSemicolon = 6\n\n// entity is a map from HTML entity names to their values. The semicolon matters:\n// https://html.spec.whatwg.org/multipage/syntax.html#named-character-references\n// lists both \"amp\" and \"amp;\" as two separate entries.\n//\n// Note that the HTML5 list is larger than the HTML4 list at\n// http://www.w3.org/TR/html4/sgml/entities.html\nvar entity = map[string]rune{\n\t\"AElig;\":                           '\\U000000C6',\n\t\"AMP;\":                             '\\U00000026',\n\t\"Aacute;\":                          '\\U000000C1',\n\t\"Abreve;\":                          '\\U00000102',\n\t\"Acirc;\":                           '\\U000000C2',\n\t\"Acy;\":                             '\\U00000410',\n\t\"Afr;\":                             '\\U0001D504',\n\t\"Agrave;\":                          '\\U000000C0',\n\t\"Alpha;\":                           '\\U00000391',\n\t\"Amacr;\":                           '\\U00000100',\n\t\"And;\":                             '\\U00002A53',\n\t\"Aogon;\":                           '\\U00000104',\n\t\"Aopf;\":                            '\\U0001D538',\n\t\"ApplyFunction;\":                   '\\U00002061',\n\t\"Aring;\":                           '\\U000000C5',\n\t\"Ascr;\":                            '\\U0001D49C',\n\t\"Assign;\":                          '\\U00002254',\n\t\"Atilde;\":                          '\\U000000C3',\n\t\"Auml;\":                            '\\U000000C4',\n\t\"Backslash;\":                       '\\U00002216',\n\t\"Barv;\":                            '\\U00002AE7',\n\t\"Barwed;\":                          '\\U00002306',\n\t\"Bcy;\":                             '\\U00000411',\n\t\"Because;\":                         '\\U00002235',\n\t\"Bernoullis;\":                      '\\U0000212C',\n\t\"Beta;\":                            '\\U00000392',\n\t\"Bfr;\":                             '\\U0001D505',\n\t\"Bopf;\":                            '\\U0001D539',\n\t\"Breve;\":                           '\\U000002D8',\n\t\"Bscr;\":                            '\\U0000212C',\n\t\"Bumpeq;\":                          '\\U0000224E',\n\t\"CHcy;\":                            '\\U00000427',\n\t\"COPY;\":                            '\\U000000A9',\n\t\"Cacute;\":                          '\\U00000106',\n\t\"Cap;\":                             '\\U000022D2',\n\t\"CapitalDifferentialD;\":            '\\U00002145',\n\t\"Cayleys;\":                         '\\U0000212D',\n\t\"Ccaron;\":                          '\\U0000010C',\n\t\"Ccedil;\":                          '\\U000000C7',\n\t\"Ccirc;\":                           '\\U00000108',\n\t\"Cconint;\":                         '\\U00002230',\n\t\"Cdot;\":                            '\\U0000010A',\n\t\"Cedilla;\":                         '\\U000000B8',\n\t\"CenterDot;\":                       '\\U000000B7',\n\t\"Cfr;\":                             '\\U0000212D',\n\t\"Chi;\":                             '\\U000003A7',\n\t\"CircleDot;\":                       '\\U00002299',\n\t\"CircleMinus;\":                     '\\U00002296',\n\t\"CirclePlus;\":                      '\\U00002295',\n\t\"CircleTimes;\":                     '\\U00002297',\n\t\"ClockwiseContourIntegral;\":        '\\U00002232',\n\t\"CloseCurlyDoubleQuote;\":           '\\U0000201D',\n\t\"CloseCurlyQuote;\":                 '\\U00002019',\n\t\"Colon;\":                           '\\U00002237',\n\t\"Colone;\":                          '\\U00002A74',\n\t\"Congruent;\":                       '\\U00002261',\n\t\"Conint;\":                          '\\U0000222F',\n\t\"ContourIntegral;\":                 '\\U0000222E',\n\t\"Copf;\":                            '\\U00002102',\n\t\"Coproduct;\":                       '\\U00002210',\n\t\"CounterClockwiseContourIntegral;\": '\\U00002233',\n\t\"Cross;\":                    '\\U00002A2F',\n\t\"Cscr;\":                     '\\U0001D49E',\n\t\"Cup;\":                      '\\U000022D3',\n\t\"CupCap;\":                   '\\U0000224D',\n\t\"DD;\":                       '\\U00002145',\n\t\"DDotrahd;\":                 '\\U00002911',\n\t\"DJcy;\":                     '\\U00000402',\n\t\"DScy;\":                     '\\U00000405',\n\t\"DZcy;\":                     '\\U0000040F',\n\t\"Dagger;\":                   '\\U00002021',\n\t\"Darr;\":                     '\\U000021A1',\n\t\"Dashv;\":                    '\\U00002AE4',\n\t\"Dcaron;\":                   '\\U0000010E',\n\t\"Dcy;\":                      '\\U00000414',\n\t\"Del;\":                      '\\U00002207',\n\t\"Delta;\":                    '\\U00000394',\n\t\"Dfr;\":                      '\\U0001D507',\n\t\"DiacriticalAcute;\":         '\\U000000B4',\n\t\"DiacriticalDot;\":           '\\U000002D9',\n\t\"DiacriticalDoubleAcute;\":   '\\U000002DD',\n\t\"DiacriticalGrave;\":         '\\U00000060',\n\t\"DiacriticalTilde;\":         '\\U000002DC',\n\t\"Diamond;\":                  '\\U000022C4',\n\t\"DifferentialD;\":            '\\U00002146',\n\t\"Dopf;\":                     '\\U0001D53B',\n\t\"Dot;\":                      '\\U000000A8',\n\t\"DotDot;\":                   '\\U000020DC',\n\t\"DotEqual;\":                 '\\U00002250',\n\t\"DoubleContourIntegral;\":    '\\U0000222F',\n\t\"DoubleDot;\":                '\\U000000A8',\n\t\"DoubleDownArrow;\":          '\\U000021D3',\n\t\"DoubleLeftArrow;\":          '\\U000021D0',\n\t\"DoubleLeftRightArrow;\":     '\\U000021D4',\n\t\"DoubleLeftTee;\":            '\\U00002AE4',\n\t\"DoubleLongLeftArrow;\":      '\\U000027F8',\n\t\"DoubleLongLeftRightArrow;\": '\\U000027FA',\n\t\"DoubleLongRightArrow;\":     '\\U000027F9',\n\t\"DoubleRightArrow;\":         '\\U000021D2',\n\t\"DoubleRightTee;\":           '\\U000022A8',\n\t\"DoubleUpArrow;\":            '\\U000021D1',\n\t\"DoubleUpDownArrow;\":        '\\U000021D5',\n\t\"DoubleVerticalBar;\":        '\\U00002225',\n\t\"DownArrow;\":                '\\U00002193',\n\t\"DownArrowBar;\":             '\\U00002913',\n\t\"DownArrowUpArrow;\":         '\\U000021F5',\n\t\"DownBreve;\":                '\\U00000311',\n\t\"DownLeftRightVector;\":      '\\U00002950',\n\t\"DownLeftTeeVector;\":        '\\U0000295E',\n\t\"DownLeftVector;\":           '\\U000021BD',\n\t\"DownLeftVectorBar;\":        '\\U00002956',\n\t\"DownRightTeeVector;\":       '\\U0000295F',\n\t\"DownRightVector;\":          '\\U000021C1',\n\t\"DownRightVectorBar;\":       '\\U00002957',\n\t\"DownTee;\":                  '\\U000022A4',\n\t\"DownTeeArrow;\":             '\\U000021A7',\n\t\"Downarrow;\":                '\\U000021D3',\n\t\"Dscr;\":                     '\\U0001D49F',\n\t\"Dstrok;\":                   '\\U00000110',\n\t\"ENG;\":                      '\\U0000014A',\n\t\"ETH;\":                      '\\U000000D0',\n\t\"Eacute;\":                   '\\U000000C9',\n\t\"Ecaron;\":                   '\\U0000011A',\n\t\"Ecirc;\":                    '\\U000000CA',\n\t\"Ecy;\":                      '\\U0000042D',\n\t\"Edot;\":                     '\\U00000116',\n\t\"Efr;\":                      '\\U0001D508',\n\t\"Egrave;\":                   '\\U000000C8',\n\t\"Element;\":                  '\\U00002208',\n\t\"Emacr;\":                    '\\U00000112',\n\t\"EmptySmallSquare;\":         '\\U000025FB',\n\t\"EmptyVerySmallSquare;\":     '\\U000025AB',\n\t\"Eogon;\":                    '\\U00000118',\n\t\"Eopf;\":                     '\\U0001D53C',\n\t\"Epsilon;\":                  '\\U00000395',\n\t\"Equal;\":                    '\\U00002A75',\n\t\"EqualTilde;\":               '\\U00002242',\n\t\"Equilibrium;\":              '\\U000021CC',\n\t\"Escr;\":                     '\\U00002130',\n\t\"Esim;\":                     '\\U00002A73',\n\t\"Eta;\":                      '\\U00000397',\n\t\"Euml;\":                     '\\U000000CB',\n\t\"Exists;\":                   '\\U00002203',\n\t\"ExponentialE;\":             '\\U00002147',\n\t\"Fcy;\":                      '\\U00000424',\n\t\"Ffr;\":                      '\\U0001D509',\n\t\"FilledSmallSquare;\":        '\\U000025FC',\n\t\"FilledVerySmallSquare;\":    '\\U000025AA',\n\t\"Fopf;\":                     '\\U0001D53D',\n\t\"ForAll;\":                   '\\U00002200',\n\t\"Fouriertrf;\":               '\\U00002131',\n\t\"Fscr;\":                     '\\U00002131',\n\t\"GJcy;\":                     '\\U00000403',\n\t\"GT;\":                       '\\U0000003E',\n\t\"Gamma;\":                    '\\U00000393',\n\t\"Gammad;\":                   '\\U000003DC',\n\t\"Gbreve;\":                   '\\U0000011E',\n\t\"Gcedil;\":                   '\\U00000122',\n\t\"Gcirc;\":                    '\\U0000011C',\n\t\"Gcy;\":                      '\\U00000413',\n\t\"Gdot;\":                     '\\U00000120',\n\t\"Gfr;\":                      '\\U0001D50A',\n\t\"Gg;\":                       '\\U000022D9',\n\t\"Gopf;\":                     '\\U0001D53E',\n\t\"GreaterEqual;\":             '\\U00002265',\n\t\"GreaterEqualLess;\":         '\\U000022DB',\n\t\"GreaterFullEqual;\":         '\\U00002267',\n\t\"GreaterGreater;\":           '\\U00002AA2',\n\t\"GreaterLess;\":              '\\U00002277',\n\t\"GreaterSlantEqual;\":        '\\U00002A7E',\n\t\"GreaterTilde;\":             '\\U00002273',\n\t\"Gscr;\":                     '\\U0001D4A2',\n\t\"Gt;\":                       '\\U0000226B',\n\t\"HARDcy;\":                   '\\U0000042A',\n\t\"Hacek;\":                    '\\U000002C7',\n\t\"Hat;\":                      '\\U0000005E',\n\t\"Hcirc;\":                    '\\U00000124',\n\t\"Hfr;\":                      '\\U0000210C',\n\t\"HilbertSpace;\":             '\\U0000210B',\n\t\"Hopf;\":                     '\\U0000210D',\n\t\"HorizontalLine;\":           '\\U00002500',\n\t\"Hscr;\":                     '\\U0000210B',\n\t\"Hstrok;\":                   '\\U00000126',\n\t\"HumpDownHump;\":             '\\U0000224E',\n\t\"HumpEqual;\":                '\\U0000224F',\n\t\"IEcy;\":                     '\\U00000415',\n\t\"IJlig;\":                    '\\U00000132',\n\t\"IOcy;\":                     '\\U00000401',\n\t\"Iacute;\":                   '\\U000000CD',\n\t\"Icirc;\":                    '\\U000000CE',\n\t\"Icy;\":                      '\\U00000418',\n\t\"Idot;\":                     '\\U00000130',\n\t\"Ifr;\":                      '\\U00002111',\n\t\"Igrave;\":                   '\\U000000CC',\n\t\"Im;\":                       '\\U00002111',\n\t\"Imacr;\":                    '\\U0000012A',\n\t\"ImaginaryI;\":               '\\U00002148',\n\t\"Implies;\":                  '\\U000021D2',\n\t\"Int;\":                      '\\U0000222C',\n\t\"Integral;\":                 '\\U0000222B',\n\t\"Intersection;\":             '\\U000022C2',\n\t\"InvisibleComma;\":           '\\U00002063',\n\t\"InvisibleTimes;\":           '\\U00002062',\n\t\"Iogon;\":                    '\\U0000012E',\n\t\"Iopf;\":                     '\\U0001D540',\n\t\"Iota;\":                     '\\U00000399',\n\t\"Iscr;\":                     '\\U00002110',\n\t\"Itilde;\":                   '\\U00000128',\n\t\"Iukcy;\":                    '\\U00000406',\n\t\"Iuml;\":                     '\\U000000CF',\n\t\"Jcirc;\":                    '\\U00000134',\n\t\"Jcy;\":                      '\\U00000419',\n\t\"Jfr;\":                      '\\U0001D50D',\n\t\"Jopf;\":                     '\\U0001D541',\n\t\"Jscr;\":                     '\\U0001D4A5',\n\t\"Jsercy;\":                   '\\U00000408',\n\t\"Jukcy;\":                    '\\U00000404',\n\t\"KHcy;\":                     '\\U00000425',\n\t\"KJcy;\":                     '\\U0000040C',\n\t\"Kappa;\":                    '\\U0000039A',\n\t\"Kcedil;\":                   '\\U00000136',\n\t\"Kcy;\":                      '\\U0000041A',\n\t\"Kfr;\":                      '\\U0001D50E',\n\t\"Kopf;\":                     '\\U0001D542',\n\t\"Kscr;\":                     '\\U0001D4A6',\n\t\"LJcy;\":                     '\\U00000409',\n\t\"LT;\":                       '\\U0000003C',\n\t\"Lacute;\":                   '\\U00000139',\n\t\"Lambda;\":                   '\\U0000039B',\n\t\"Lang;\":                     '\\U000027EA',\n\t\"Laplacetrf;\":               '\\U00002112',\n\t\"Larr;\":                     '\\U0000219E',\n\t\"Lcaron;\":                   '\\U0000013D',\n\t\"Lcedil;\":                   '\\U0000013B',\n\t\"Lcy;\":                      '\\U0000041B',\n\t\"LeftAngleBracket;\":         '\\U000027E8',\n\t\"LeftArrow;\":                '\\U00002190',\n\t\"LeftArrowBar;\":             '\\U000021E4',\n\t\"LeftArrowRightArrow;\":      '\\U000021C6',\n\t\"LeftCeiling;\":              '\\U00002308',\n\t\"LeftDoubleBracket;\":        '\\U000027E6',\n\t\"LeftDownTeeVector;\":        '\\U00002961',\n\t\"LeftDownVector;\":           '\\U000021C3',\n\t\"LeftDownVectorBar;\":        '\\U00002959',\n\t\"LeftFloor;\":                '\\U0000230A',\n\t\"LeftRightArrow;\":           '\\U00002194',\n\t\"LeftRightVector;\":          '\\U0000294E',\n\t\"LeftTee;\":                  '\\U000022A3',\n\t\"LeftTeeArrow;\":             '\\U000021A4',\n\t\"LeftTeeVector;\":            '\\U0000295A',\n\t\"LeftTriangle;\":             '\\U000022B2',\n\t\"LeftTriangleBar;\":          '\\U000029CF',\n\t\"LeftTriangleEqual;\":        '\\U000022B4',\n\t\"LeftUpDownVector;\":         '\\U00002951',\n\t\"LeftUpTeeVector;\":          '\\U00002960',\n\t\"LeftUpVector;\":             '\\U000021BF',\n\t\"LeftUpVectorBar;\":          '\\U00002958',\n\t\"LeftVector;\":               '\\U000021BC',\n\t\"LeftVectorBar;\":            '\\U00002952',\n\t\"Leftarrow;\":                '\\U000021D0',\n\t\"Leftrightarrow;\":           '\\U000021D4',\n\t\"LessEqualGreater;\":         '\\U000022DA',\n\t\"LessFullEqual;\":            '\\U00002266',\n\t\"LessGreater;\":              '\\U00002276',\n\t\"LessLess;\":                 '\\U00002AA1',\n\t\"LessSlantEqual;\":           '\\U00002A7D',\n\t\"LessTilde;\":                '\\U00002272',\n\t\"Lfr;\":                      '\\U0001D50F',\n\t\"Ll;\":                       '\\U000022D8',\n\t\"Lleftarrow;\":               '\\U000021DA',\n\t\"Lmidot;\":                   '\\U0000013F',\n\t\"LongLeftArrow;\":            '\\U000027F5',\n\t\"LongLeftRightArrow;\":       '\\U000027F7',\n\t\"LongRightArrow;\":           '\\U000027F6',\n\t\"Longleftarrow;\":            '\\U000027F8',\n\t\"Longleftrightarrow;\":       '\\U000027FA',\n\t\"Longrightarrow;\":           '\\U000027F9',\n\t\"Lopf;\":                     '\\U0001D543',\n\t\"LowerLeftArrow;\":           '\\U00002199',\n\t\"LowerRightArrow;\":          '\\U00002198',\n\t\"Lscr;\":                     '\\U00002112',\n\t\"Lsh;\":                      '\\U000021B0',\n\t\"Lstrok;\":                   '\\U00000141',\n\t\"Lt;\":                       '\\U0000226A',\n\t\"Map;\":                      '\\U00002905',\n\t\"Mcy;\":                      '\\U0000041C',\n\t\"MediumSpace;\":              '\\U0000205F',\n\t\"Mellintrf;\":                '\\U00002133',\n\t\"Mfr;\":                      '\\U0001D510',\n\t\"MinusPlus;\":                '\\U00002213',\n\t\"Mopf;\":                     '\\U0001D544',\n\t\"Mscr;\":                     '\\U00002133',\n\t\"Mu;\":                       '\\U0000039C',\n\t\"NJcy;\":                     '\\U0000040A',\n\t\"Nacute;\":                   '\\U00000143',\n\t\"Ncaron;\":                   '\\U00000147',\n\t\"Ncedil;\":                   '\\U00000145',\n\t\"Ncy;\":                      '\\U0000041D',\n\t\"NegativeMediumSpace;\":      '\\U0000200B',\n\t\"NegativeThickSpace;\":       '\\U0000200B',\n\t\"NegativeThinSpace;\":        '\\U0000200B',\n\t\"NegativeVeryThinSpace;\":    '\\U0000200B',\n\t\"NestedGreaterGreater;\":     '\\U0000226B',\n\t\"NestedLessLess;\":           '\\U0000226A',\n\t\"NewLine;\":                  '\\U0000000A',\n\t\"Nfr;\":                      '\\U0001D511',\n\t\"NoBreak;\":                  '\\U00002060',\n\t\"NonBreakingSpace;\":         '\\U000000A0',\n\t\"Nopf;\":                     '\\U00002115',\n\t\"Not;\":                      '\\U00002AEC',\n\t\"NotCongruent;\":             '\\U00002262',\n\t\"NotCupCap;\":                '\\U0000226D',\n\t\"NotDoubleVerticalBar;\":     '\\U00002226',\n\t\"NotElement;\":               '\\U00002209',\n\t\"NotEqual;\":                 '\\U00002260',\n\t\"NotExists;\":                '\\U00002204',\n\t\"NotGreater;\":               '\\U0000226F',\n\t\"NotGreaterEqual;\":          '\\U00002271',\n\t\"NotGreaterLess;\":           '\\U00002279',\n\t\"NotGreaterTilde;\":          '\\U00002275',\n\t\"NotLeftTriangle;\":          '\\U000022EA',\n\t\"NotLeftTriangleEqual;\":     '\\U000022EC',\n\t\"NotLess;\":                  '\\U0000226E',\n\t\"NotLessEqual;\":             '\\U00002270',\n\t\"NotLessGreater;\":           '\\U00002278',\n\t\"NotLessTilde;\":             '\\U00002274',\n\t\"NotPrecedes;\":              '\\U00002280',\n\t\"NotPrecedesSlantEqual;\":    '\\U000022E0',\n\t\"NotReverseElement;\":        '\\U0000220C',\n\t\"NotRightTriangle;\":         '\\U000022EB',\n\t\"NotRightTriangleEqual;\":    '\\U000022ED',\n\t\"NotSquareSubsetEqual;\":     '\\U000022E2',\n\t\"NotSquareSupersetEqual;\":   '\\U000022E3',\n\t\"NotSubsetEqual;\":           '\\U00002288',\n\t\"NotSucceeds;\":              '\\U00002281',\n\t\"NotSucceedsSlantEqual;\":    '\\U000022E1',\n\t\"NotSupersetEqual;\":         '\\U00002289',\n\t\"NotTilde;\":                 '\\U00002241',\n\t\"NotTildeEqual;\":            '\\U00002244',\n\t\"NotTildeFullEqual;\":        '\\U00002247',\n\t\"NotTildeTilde;\":            '\\U00002249',\n\t\"NotVerticalBar;\":           '\\U00002224',\n\t\"Nscr;\":                     '\\U0001D4A9',\n\t\"Ntilde;\":                   '\\U000000D1',\n\t\"Nu;\":                       '\\U0000039D',\n\t\"OElig;\":                    '\\U00000152',\n\t\"Oacute;\":                   '\\U000000D3',\n\t\"Ocirc;\":                    '\\U000000D4',\n\t\"Ocy;\":                      '\\U0000041E',\n\t\"Odblac;\":                   '\\U00000150',\n\t\"Ofr;\":                      '\\U0001D512',\n\t\"Ograve;\":                   '\\U000000D2',\n\t\"Omacr;\":                    '\\U0000014C',\n\t\"Omega;\":                    '\\U000003A9',\n\t\"Omicron;\":                  '\\U0000039F',\n\t\"Oopf;\":                     '\\U0001D546',\n\t\"OpenCurlyDoubleQuote;\":     '\\U0000201C',\n\t\"OpenCurlyQuote;\":           '\\U00002018',\n\t\"Or;\":                       '\\U00002A54',\n\t\"Oscr;\":                     '\\U0001D4AA',\n\t\"Oslash;\":                   '\\U000000D8',\n\t\"Otilde;\":                   '\\U000000D5',\n\t\"Otimes;\":                   '\\U00002A37',\n\t\"Ouml;\":                     '\\U000000D6',\n\t\"OverBar;\":                  '\\U0000203E',\n\t\"OverBrace;\":                '\\U000023DE',\n\t\"OverBracket;\":              '\\U000023B4',\n\t\"OverParenthesis;\":          '\\U000023DC',\n\t\"PartialD;\":                 '\\U00002202',\n\t\"Pcy;\":                      '\\U0000041F',\n\t\"Pfr;\":                      '\\U0001D513',\n\t\"Phi;\":                      '\\U000003A6',\n\t\"Pi;\":                       '\\U000003A0',\n\t\"PlusMinus;\":                '\\U000000B1',\n\t\"Poincareplane;\":            '\\U0000210C',\n\t\"Popf;\":                     '\\U00002119',\n\t\"Pr;\":                       '\\U00002ABB',\n\t\"Precedes;\":                 '\\U0000227A',\n\t\"PrecedesEqual;\":            '\\U00002AAF',\n\t\"PrecedesSlantEqual;\":       '\\U0000227C',\n\t\"PrecedesTilde;\":            '\\U0000227E',\n\t\"Prime;\":                    '\\U00002033',\n\t\"Product;\":                  '\\U0000220F',\n\t\"Proportion;\":               '\\U00002237',\n\t\"Proportional;\":             '\\U0000221D',\n\t\"Pscr;\":                     '\\U0001D4AB',\n\t\"Psi;\":                      '\\U000003A8',\n\t\"QUOT;\":                     '\\U00000022',\n\t\"Qfr;\":                      '\\U0001D514',\n\t\"Qopf;\":                     '\\U0000211A',\n\t\"Qscr;\":                     '\\U0001D4AC',\n\t\"RBarr;\":                    '\\U00002910',\n\t\"REG;\":                      '\\U000000AE',\n\t\"Racute;\":                   '\\U00000154',\n\t\"Rang;\":                     '\\U000027EB',\n\t\"Rarr;\":                     '\\U000021A0',\n\t\"Rarrtl;\":                   '\\U00002916',\n\t\"Rcaron;\":                   '\\U00000158',\n\t\"Rcedil;\":                   '\\U00000156',\n\t\"Rcy;\":                      '\\U00000420',\n\t\"Re;\":                       '\\U0000211C',\n\t\"ReverseElement;\":           '\\U0000220B',\n\t\"ReverseEquilibrium;\":       '\\U000021CB',\n\t\"ReverseUpEquilibrium;\":     '\\U0000296F',\n\t\"Rfr;\":                      '\\U0000211C',\n\t\"Rho;\":                      '\\U000003A1',\n\t\"RightAngleBracket;\":        '\\U000027E9',\n\t\"RightArrow;\":               '\\U00002192',\n\t\"RightArrowBar;\":            '\\U000021E5',\n\t\"RightArrowLeftArrow;\":      '\\U000021C4',\n\t\"RightCeiling;\":             '\\U00002309',\n\t\"RightDoubleBracket;\":       '\\U000027E7',\n\t\"RightDownTeeVector;\":       '\\U0000295D',\n\t\"RightDownVector;\":          '\\U000021C2',\n\t\"RightDownVectorBar;\":       '\\U00002955',\n\t\"RightFloor;\":               '\\U0000230B',\n\t\"RightTee;\":                 '\\U000022A2',\n\t\"RightTeeArrow;\":            '\\U000021A6',\n\t\"RightTeeVector;\":           '\\U0000295B',\n\t\"RightTriangle;\":            '\\U000022B3',\n\t\"RightTriangleBar;\":         '\\U000029D0',\n\t\"RightTriangleEqual;\":       '\\U000022B5',\n\t\"RightUpDownVector;\":        '\\U0000294F',\n\t\"RightUpTeeVector;\":         '\\U0000295C',\n\t\"RightUpVector;\":            '\\U000021BE',\n\t\"RightUpVectorBar;\":         '\\U00002954',\n\t\"RightVector;\":              '\\U000021C0',\n\t\"RightVectorBar;\":           '\\U00002953',\n\t\"Rightarrow;\":               '\\U000021D2',\n\t\"Ropf;\":                     '\\U0000211D',\n\t\"RoundImplies;\":             '\\U00002970',\n\t\"Rrightarrow;\":              '\\U000021DB',\n\t\"Rscr;\":                     '\\U0000211B',\n\t\"Rsh;\":                      '\\U000021B1',\n\t\"RuleDelayed;\":              '\\U000029F4',\n\t\"SHCHcy;\":                   '\\U00000429',\n\t\"SHcy;\":                     '\\U00000428',\n\t\"SOFTcy;\":                   '\\U0000042C',\n\t\"Sacute;\":                   '\\U0000015A',\n\t\"Sc;\":                       '\\U00002ABC',\n\t\"Scaron;\":                   '\\U00000160',\n\t\"Scedil;\":                   '\\U0000015E',\n\t\"Scirc;\":                    '\\U0000015C',\n\t\"Scy;\":                      '\\U00000421',\n\t\"Sfr;\":                      '\\U0001D516',\n\t\"ShortDownArrow;\":           '\\U00002193',\n\t\"ShortLeftArrow;\":           '\\U00002190',\n\t\"ShortRightArrow;\":          '\\U00002192',\n\t\"ShortUpArrow;\":             '\\U00002191',\n\t\"Sigma;\":                    '\\U000003A3',\n\t\"SmallCircle;\":              '\\U00002218',\n\t\"Sopf;\":                     '\\U0001D54A',\n\t\"Sqrt;\":                     '\\U0000221A',\n\t\"Square;\":                   '\\U000025A1',\n\t\"SquareIntersection;\":       '\\U00002293',\n\t\"SquareSubset;\":             '\\U0000228F',\n\t\"SquareSubsetEqual;\":        '\\U00002291',\n\t\"SquareSuperset;\":           '\\U00002290',\n\t\"SquareSupersetEqual;\":      '\\U00002292',\n\t\"SquareUnion;\":              '\\U00002294',\n\t\"Sscr;\":                     '\\U0001D4AE',\n\t\"Star;\":                     '\\U000022C6',\n\t\"Sub;\":                      '\\U000022D0',\n\t\"Subset;\":                   '\\U000022D0',\n\t\"SubsetEqual;\":              '\\U00002286',\n\t\"Succeeds;\":                 '\\U0000227B',\n\t\"SucceedsEqual;\":            '\\U00002AB0',\n\t\"SucceedsSlantEqual;\":       '\\U0000227D',\n\t\"SucceedsTilde;\":            '\\U0000227F',\n\t\"SuchThat;\":                 '\\U0000220B',\n\t\"Sum;\":                      '\\U00002211',\n\t\"Sup;\":                      '\\U000022D1',\n\t\"Superset;\":                 '\\U00002283',\n\t\"SupersetEqual;\":            '\\U00002287',\n\t\"Supset;\":                   '\\U000022D1',\n\t\"THORN;\":                    '\\U000000DE',\n\t\"TRADE;\":                    '\\U00002122',\n\t\"TSHcy;\":                    '\\U0000040B',\n\t\"TScy;\":                     '\\U00000426',\n\t\"Tab;\":                      '\\U00000009',\n\t\"Tau;\":                      '\\U000003A4',\n\t\"Tcaron;\":                   '\\U00000164',\n\t\"Tcedil;\":                   '\\U00000162',\n\t\"Tcy;\":                      '\\U00000422',\n\t\"Tfr;\":                      '\\U0001D517',\n\t\"Therefore;\":                '\\U00002234',\n\t\"Theta;\":                    '\\U00000398',\n\t\"ThinSpace;\":                '\\U00002009',\n\t\"Tilde;\":                    '\\U0000223C',\n\t\"TildeEqual;\":               '\\U00002243',\n\t\"TildeFullEqual;\":           '\\U00002245',\n\t\"TildeTilde;\":               '\\U00002248',\n\t\"Topf;\":                     '\\U0001D54B',\n\t\"TripleDot;\":                '\\U000020DB',\n\t\"Tscr;\":                     '\\U0001D4AF',\n\t\"Tstrok;\":                   '\\U00000166',\n\t\"Uacute;\":                   '\\U000000DA',\n\t\"Uarr;\":                     '\\U0000219F',\n\t\"Uarrocir;\":                 '\\U00002949',\n\t\"Ubrcy;\":                    '\\U0000040E',\n\t\"Ubreve;\":                   '\\U0000016C',\n\t\"Ucirc;\":                    '\\U000000DB',\n\t\"Ucy;\":                      '\\U00000423',\n\t\"Udblac;\":                   '\\U00000170',\n\t\"Ufr;\":                      '\\U0001D518',\n\t\"Ugrave;\":                   '\\U000000D9',\n\t\"Umacr;\":                    '\\U0000016A',\n\t\"UnderBar;\":                 '\\U0000005F',\n\t\"UnderBrace;\":               '\\U000023DF',\n\t\"UnderBracket;\":             '\\U000023B5',\n\t\"UnderParenthesis;\":         '\\U000023DD',\n\t\"Union;\":                    '\\U000022C3',\n\t\"UnionPlus;\":                '\\U0000228E',\n\t\"Uogon;\":                    '\\U00000172',\n\t\"Uopf;\":                     '\\U0001D54C',\n\t\"UpArrow;\":                  '\\U00002191',\n\t\"UpArrowBar;\":               '\\U00002912',\n\t\"UpArrowDownArrow;\":         '\\U000021C5',\n\t\"UpDownArrow;\":              '\\U00002195',\n\t\"UpEquilibrium;\":            '\\U0000296E',\n\t\"UpTee;\":                    '\\U000022A5',\n\t\"UpTeeArrow;\":               '\\U000021A5',\n\t\"Uparrow;\":                  '\\U000021D1',\n\t\"Updownarrow;\":              '\\U000021D5',\n\t\"UpperLeftArrow;\":           '\\U00002196',\n\t\"UpperRightArrow;\":          '\\U00002197',\n\t\"Upsi;\":                     '\\U000003D2',\n\t\"Upsilon;\":                  '\\U000003A5',\n\t\"Uring;\":                    '\\U0000016E',\n\t\"Uscr;\":                     '\\U0001D4B0',\n\t\"Utilde;\":                   '\\U00000168',\n\t\"Uuml;\":                     '\\U000000DC',\n\t\"VDash;\":                    '\\U000022AB',\n\t\"Vbar;\":                     '\\U00002AEB',\n\t\"Vcy;\":                      '\\U00000412',\n\t\"Vdash;\":                    '\\U000022A9',\n\t\"Vdashl;\":                   '\\U00002AE6',\n\t\"Vee;\":                      '\\U000022C1',\n\t\"Verbar;\":                   '\\U00002016',\n\t\"Vert;\":                     '\\U00002016',\n\t\"VerticalBar;\":              '\\U00002223',\n\t\"VerticalLine;\":             '\\U0000007C',\n\t\"VerticalSeparator;\":        '\\U00002758',\n\t\"VerticalTilde;\":            '\\U00002240',\n\t\"VeryThinSpace;\":            '\\U0000200A',\n\t\"Vfr;\":                      '\\U0001D519',\n\t\"Vopf;\":                     '\\U0001D54D',\n\t\"Vscr;\":                     '\\U0001D4B1',\n\t\"Vvdash;\":                   '\\U000022AA',\n\t\"Wcirc;\":                    '\\U00000174',\n\t\"Wedge;\":                    '\\U000022C0',\n\t\"Wfr;\":                      '\\U0001D51A',\n\t\"Wopf;\":                     '\\U0001D54E',\n\t\"Wscr;\":                     '\\U0001D4B2',\n\t\"Xfr;\":                      '\\U0001D51B',\n\t\"Xi;\":                       '\\U0000039E',\n\t\"Xopf;\":                     '\\U0001D54F',\n\t\"Xscr;\":                     '\\U0001D4B3',\n\t\"YAcy;\":                     '\\U0000042F',\n\t\"YIcy;\":                     '\\U00000407',\n\t\"YUcy;\":                     '\\U0000042E',\n\t\"Yacute;\":                   '\\U000000DD',\n\t\"Ycirc;\":                    '\\U00000176',\n\t\"Ycy;\":                      '\\U0000042B',\n\t\"Yfr;\":                      '\\U0001D51C',\n\t\"Yopf;\":                     '\\U0001D550',\n\t\"Yscr;\":                     '\\U0001D4B4',\n\t\"Yuml;\":                     '\\U00000178',\n\t\"ZHcy;\":                     '\\U00000416',\n\t\"Zacute;\":                   '\\U00000179',\n\t\"Zcaron;\":                   '\\U0000017D',\n\t\"Zcy;\":                      '\\U00000417',\n\t\"Zdot;\":                     '\\U0000017B',\n\t\"ZeroWidthSpace;\":           '\\U0000200B',\n\t\"Zeta;\":                     '\\U00000396',\n\t\"Zfr;\":                      '\\U00002128',\n\t\"Zopf;\":                     '\\U00002124',\n\t\"Zscr;\":                     '\\U0001D4B5',\n\t\"aacute;\":                   '\\U000000E1',\n\t\"abreve;\":                   '\\U00000103',\n\t\"ac;\":                       '\\U0000223E',\n\t\"acd;\":                      '\\U0000223F',\n\t\"acirc;\":                    '\\U000000E2',\n\t\"acute;\":                    '\\U000000B4',\n\t\"acy;\":                      '\\U00000430',\n\t\"aelig;\":                    '\\U000000E6',\n\t\"af;\":                       '\\U00002061',\n\t\"afr;\":                      '\\U0001D51E',\n\t\"agrave;\":                   '\\U000000E0',\n\t\"alefsym;\":                  '\\U00002135',\n\t\"aleph;\":                    '\\U00002135',\n\t\"alpha;\":                    '\\U000003B1',\n\t\"amacr;\":                    '\\U00000101',\n\t\"amalg;\":                    '\\U00002A3F',\n\t\"amp;\":                      '\\U00000026',\n\t\"and;\":                      '\\U00002227',\n\t\"andand;\":                   '\\U00002A55',\n\t\"andd;\":                     '\\U00002A5C',\n\t\"andslope;\":                 '\\U00002A58',\n\t\"andv;\":                     '\\U00002A5A',\n\t\"ang;\":                      '\\U00002220',\n\t\"ange;\":                     '\\U000029A4',\n\t\"angle;\":                    '\\U00002220',\n\t\"angmsd;\":                   '\\U00002221',\n\t\"angmsdaa;\":                 '\\U000029A8',\n\t\"angmsdab;\":                 '\\U000029A9',\n\t\"angmsdac;\":                 '\\U000029AA',\n\t\"angmsdad;\":                 '\\U000029AB',\n\t\"angmsdae;\":                 '\\U000029AC',\n\t\"angmsdaf;\":                 '\\U000029AD',\n\t\"angmsdag;\":                 '\\U000029AE',\n\t\"angmsdah;\":                 '\\U000029AF',\n\t\"angrt;\":                    '\\U0000221F',\n\t\"angrtvb;\":                  '\\U000022BE',\n\t\"angrtvbd;\":                 '\\U0000299D',\n\t\"angsph;\":                   '\\U00002222',\n\t\"angst;\":                    '\\U000000C5',\n\t\"angzarr;\":                  '\\U0000237C',\n\t\"aogon;\":                    '\\U00000105',\n\t\"aopf;\":                     '\\U0001D552',\n\t\"ap;\":                       '\\U00002248',\n\t\"apE;\":                      '\\U00002A70',\n\t\"apacir;\":                   '\\U00002A6F',\n\t\"ape;\":                      '\\U0000224A',\n\t\"apid;\":                     '\\U0000224B',\n\t\"apos;\":                     '\\U00000027',\n\t\"approx;\":                   '\\U00002248',\n\t\"approxeq;\":                 '\\U0000224A',\n\t\"aring;\":                    '\\U000000E5',\n\t\"ascr;\":                     '\\U0001D4B6',\n\t\"ast;\":                      '\\U0000002A',\n\t\"asymp;\":                    '\\U00002248',\n\t\"asympeq;\":                  '\\U0000224D',\n\t\"atilde;\":                   '\\U000000E3',\n\t\"auml;\":                     '\\U000000E4',\n\t\"awconint;\":                 '\\U00002233',\n\t\"awint;\":                    '\\U00002A11',\n\t\"bNot;\":                     '\\U00002AED',\n\t\"backcong;\":                 '\\U0000224C',\n\t\"backepsilon;\":              '\\U000003F6',\n\t\"backprime;\":                '\\U00002035',\n\t\"backsim;\":                  '\\U0000223D',\n\t\"backsimeq;\":                '\\U000022CD',\n\t\"barvee;\":                   '\\U000022BD',\n\t\"barwed;\":                   '\\U00002305',\n\t\"barwedge;\":                 '\\U00002305',\n\t\"bbrk;\":                     '\\U000023B5',\n\t\"bbrktbrk;\":                 '\\U000023B6',\n\t\"bcong;\":                    '\\U0000224C',\n\t\"bcy;\":                      '\\U00000431',\n\t\"bdquo;\":                    '\\U0000201E',\n\t\"becaus;\":                   '\\U00002235',\n\t\"because;\":                  '\\U00002235',\n\t\"bemptyv;\":                  '\\U000029B0',\n\t\"bepsi;\":                    '\\U000003F6',\n\t\"bernou;\":                   '\\U0000212C',\n\t\"beta;\":                     '\\U000003B2',\n\t\"beth;\":                     '\\U00002136',\n\t\"between;\":                  '\\U0000226C',\n\t\"bfr;\":                      '\\U0001D51F',\n\t\"bigcap;\":                   '\\U000022C2',\n\t\"bigcirc;\":                  '\\U000025EF',\n\t\"bigcup;\":                   '\\U000022C3',\n\t\"bigodot;\":                  '\\U00002A00',\n\t\"bigoplus;\":                 '\\U00002A01',\n\t\"bigotimes;\":                '\\U00002A02',\n\t\"bigsqcup;\":                 '\\U00002A06',\n\t\"bigstar;\":                  '\\U00002605',\n\t\"bigtriangledown;\":          '\\U000025BD',\n\t\"bigtriangleup;\":            '\\U000025B3',\n\t\"biguplus;\":                 '\\U00002A04',\n\t\"bigvee;\":                   '\\U000022C1',\n\t\"bigwedge;\":                 '\\U000022C0',\n\t\"bkarow;\":                   '\\U0000290D',\n\t\"blacklozenge;\":             '\\U000029EB',\n\t\"blacksquare;\":              '\\U000025AA',\n\t\"blacktriangle;\":            '\\U000025B4',\n\t\"blacktriangledown;\":        '\\U000025BE',\n\t\"blacktriangleleft;\":        '\\U000025C2',\n\t\"blacktriangleright;\":       '\\U000025B8',\n\t\"blank;\":                    '\\U00002423',\n\t\"blk12;\":                    '\\U00002592',\n\t\"blk14;\":                    '\\U00002591',\n\t\"blk34;\":                    '\\U00002593',\n\t\"block;\":                    '\\U00002588',\n\t\"bnot;\":                     '\\U00002310',\n\t\"bopf;\":                     '\\U0001D553',\n\t\"bot;\":                      '\\U000022A5',\n\t\"bottom;\":                   '\\U000022A5',\n\t\"bowtie;\":                   '\\U000022C8',\n\t\"boxDL;\":                    '\\U00002557',\n\t\"boxDR;\":                    '\\U00002554',\n\t\"boxDl;\":                    '\\U00002556',\n\t\"boxDr;\":                    '\\U00002553',\n\t\"boxH;\":                     '\\U00002550',\n\t\"boxHD;\":                    '\\U00002566',\n\t\"boxHU;\":                    '\\U00002569',\n\t\"boxHd;\":                    '\\U00002564',\n\t\"boxHu;\":                    '\\U00002567',\n\t\"boxUL;\":                    '\\U0000255D',\n\t\"boxUR;\":                    '\\U0000255A',\n\t\"boxUl;\":                    '\\U0000255C',\n\t\"boxUr;\":                    '\\U00002559',\n\t\"boxV;\":                     '\\U00002551',\n\t\"boxVH;\":                    '\\U0000256C',\n\t\"boxVL;\":                    '\\U00002563',\n\t\"boxVR;\":                    '\\U00002560',\n\t\"boxVh;\":                    '\\U0000256B',\n\t\"boxVl;\":                    '\\U00002562',\n\t\"boxVr;\":                    '\\U0000255F',\n\t\"boxbox;\":                   '\\U000029C9',\n\t\"boxdL;\":                    '\\U00002555',\n\t\"boxdR;\":                    '\\U00002552',\n\t\"boxdl;\":                    '\\U00002510',\n\t\"boxdr;\":                    '\\U0000250C',\n\t\"boxh;\":                     '\\U00002500',\n\t\"boxhD;\":                    '\\U00002565',\n\t\"boxhU;\":                    '\\U00002568',\n\t\"boxhd;\":                    '\\U0000252C',\n\t\"boxhu;\":                    '\\U00002534',\n\t\"boxminus;\":                 '\\U0000229F',\n\t\"boxplus;\":                  '\\U0000229E',\n\t\"boxtimes;\":                 '\\U000022A0',\n\t\"boxuL;\":                    '\\U0000255B',\n\t\"boxuR;\":                    '\\U00002558',\n\t\"boxul;\":                    '\\U00002518',\n\t\"boxur;\":                    '\\U00002514',\n\t\"boxv;\":                     '\\U00002502',\n\t\"boxvH;\":                    '\\U0000256A',\n\t\"boxvL;\":                    '\\U00002561',\n\t\"boxvR;\":                    '\\U0000255E',\n\t\"boxvh;\":                    '\\U0000253C',\n\t\"boxvl;\":                    '\\U00002524',\n\t\"boxvr;\":                    '\\U0000251C',\n\t\"bprime;\":                   '\\U00002035',\n\t\"breve;\":                    '\\U000002D8',\n\t\"brvbar;\":                   '\\U000000A6',\n\t\"bscr;\":                     '\\U0001D4B7',\n\t\"bsemi;\":                    '\\U0000204F',\n\t\"bsim;\":                     '\\U0000223D',\n\t\"bsime;\":                    '\\U000022CD',\n\t\"bsol;\":                     '\\U0000005C',\n\t\"bsolb;\":                    '\\U000029C5',\n\t\"bsolhsub;\":                 '\\U000027C8',\n\t\"bull;\":                     '\\U00002022',\n\t\"bullet;\":                   '\\U00002022',\n\t\"bump;\":                     '\\U0000224E',\n\t\"bumpE;\":                    '\\U00002AAE',\n\t\"bumpe;\":                    '\\U0000224F',\n\t\"bumpeq;\":                   '\\U0000224F',\n\t\"cacute;\":                   '\\U00000107',\n\t\"cap;\":                      '\\U00002229',\n\t\"capand;\":                   '\\U00002A44',\n\t\"capbrcup;\":                 '\\U00002A49',\n\t\"capcap;\":                   '\\U00002A4B',\n\t\"capcup;\":                   '\\U00002A47',\n\t\"capdot;\":                   '\\U00002A40',\n\t\"caret;\":                    '\\U00002041',\n\t\"caron;\":                    '\\U000002C7',\n\t\"ccaps;\":                    '\\U00002A4D',\n\t\"ccaron;\":                   '\\U0000010D',\n\t\"ccedil;\":                   '\\U000000E7',\n\t\"ccirc;\":                    '\\U00000109',\n\t\"ccups;\":                    '\\U00002A4C',\n\t\"ccupssm;\":                  '\\U00002A50',\n\t\"cdot;\":                     '\\U0000010B',\n\t\"cedil;\":                    '\\U000000B8',\n\t\"cemptyv;\":                  '\\U000029B2',\n\t\"cent;\":                     '\\U000000A2',\n\t\"centerdot;\":                '\\U000000B7',\n\t\"cfr;\":                      '\\U0001D520',\n\t\"chcy;\":                     '\\U00000447',\n\t\"check;\":                    '\\U00002713',\n\t\"checkmark;\":                '\\U00002713',\n\t\"chi;\":                      '\\U000003C7',\n\t\"cir;\":                      '\\U000025CB',\n\t\"cirE;\":                     '\\U000029C3',\n\t\"circ;\":                     '\\U000002C6',\n\t\"circeq;\":                   '\\U00002257',\n\t\"circlearrowleft;\":          '\\U000021BA',\n\t\"circlearrowright;\":         '\\U000021BB',\n\t\"circledR;\":                 '\\U000000AE',\n\t\"circledS;\":                 '\\U000024C8',\n\t\"circledast;\":               '\\U0000229B',\n\t\"circledcirc;\":              '\\U0000229A',\n\t\"circleddash;\":              '\\U0000229D',\n\t\"cire;\":                     '\\U00002257',\n\t\"cirfnint;\":                 '\\U00002A10',\n\t\"cirmid;\":                   '\\U00002AEF',\n\t\"cirscir;\":                  '\\U000029C2',\n\t\"clubs;\":                    '\\U00002663',\n\t\"clubsuit;\":                 '\\U00002663',\n\t\"colon;\":                    '\\U0000003A',\n\t\"colone;\":                   '\\U00002254',\n\t\"coloneq;\":                  '\\U00002254',\n\t\"comma;\":                    '\\U0000002C',\n\t\"commat;\":                   '\\U00000040',\n\t\"comp;\":                     '\\U00002201',\n\t\"compfn;\":                   '\\U00002218',\n\t\"complement;\":               '\\U00002201',\n\t\"complexes;\":                '\\U00002102',\n\t\"cong;\":                     '\\U00002245',\n\t\"congdot;\":                  '\\U00002A6D',\n\t\"conint;\":                   '\\U0000222E',\n\t\"copf;\":                     '\\U0001D554',\n\t\"coprod;\":                   '\\U00002210',\n\t\"copy;\":                     '\\U000000A9',\n\t\"copysr;\":                   '\\U00002117',\n\t\"crarr;\":                    '\\U000021B5',\n\t\"cross;\":                    '\\U00002717',\n\t\"cscr;\":                     '\\U0001D4B8',\n\t\"csub;\":                     '\\U00002ACF',\n\t\"csube;\":                    '\\U00002AD1',\n\t\"csup;\":                     '\\U00002AD0',\n\t\"csupe;\":                    '\\U00002AD2',\n\t\"ctdot;\":                    '\\U000022EF',\n\t\"cudarrl;\":                  '\\U00002938',\n\t\"cudarrr;\":                  '\\U00002935',\n\t\"cuepr;\":                    '\\U000022DE',\n\t\"cuesc;\":                    '\\U000022DF',\n\t\"cularr;\":                   '\\U000021B6',\n\t\"cularrp;\":                  '\\U0000293D',\n\t\"cup;\":                      '\\U0000222A',\n\t\"cupbrcap;\":                 '\\U00002A48',\n\t\"cupcap;\":                   '\\U00002A46',\n\t\"cupcup;\":                   '\\U00002A4A',\n\t\"cupdot;\":                   '\\U0000228D',\n\t\"cupor;\":                    '\\U00002A45',\n\t\"curarr;\":                   '\\U000021B7',\n\t\"curarrm;\":                  '\\U0000293C',\n\t\"curlyeqprec;\":              '\\U000022DE',\n\t\"curlyeqsucc;\":              '\\U000022DF',\n\t\"curlyvee;\":                 '\\U000022CE',\n\t\"curlywedge;\":               '\\U000022CF',\n\t\"curren;\":                   '\\U000000A4',\n\t\"curvearrowleft;\":           '\\U000021B6',\n\t\"curvearrowright;\":          '\\U000021B7',\n\t\"cuvee;\":                    '\\U000022CE',\n\t\"cuwed;\":                    '\\U000022CF',\n\t\"cwconint;\":                 '\\U00002232',\n\t\"cwint;\":                    '\\U00002231',\n\t\"cylcty;\":                   '\\U0000232D',\n\t\"dArr;\":                     '\\U000021D3',\n\t\"dHar;\":                     '\\U00002965',\n\t\"dagger;\":                   '\\U00002020',\n\t\"daleth;\":                   '\\U00002138',\n\t\"darr;\":                     '\\U00002193',\n\t\"dash;\":                     '\\U00002010',\n\t\"dashv;\":                    '\\U000022A3',\n\t\"dbkarow;\":                  '\\U0000290F',\n\t\"dblac;\":                    '\\U000002DD',\n\t\"dcaron;\":                   '\\U0000010F',\n\t\"dcy;\":                      '\\U00000434',\n\t\"dd;\":                       '\\U00002146',\n\t\"ddagger;\":                  '\\U00002021',\n\t\"ddarr;\":                    '\\U000021CA',\n\t\"ddotseq;\":                  '\\U00002A77',\n\t\"deg;\":                      '\\U000000B0',\n\t\"delta;\":                    '\\U000003B4',\n\t\"demptyv;\":                  '\\U000029B1',\n\t\"dfisht;\":                   '\\U0000297F',\n\t\"dfr;\":                      '\\U0001D521',\n\t\"dharl;\":                    '\\U000021C3',\n\t\"dharr;\":                    '\\U000021C2',\n\t\"diam;\":                     '\\U000022C4',\n\t\"diamond;\":                  '\\U000022C4',\n\t\"diamondsuit;\":              '\\U00002666',\n\t\"diams;\":                    '\\U00002666',\n\t\"die;\":                      '\\U000000A8',\n\t\"digamma;\":                  '\\U000003DD',\n\t\"disin;\":                    '\\U000022F2',\n\t\"div;\":                      '\\U000000F7',\n\t\"divide;\":                   '\\U000000F7',\n\t\"divideontimes;\":            '\\U000022C7',\n\t\"divonx;\":                   '\\U000022C7',\n\t\"djcy;\":                     '\\U00000452',\n\t\"dlcorn;\":                   '\\U0000231E',\n\t\"dlcrop;\":                   '\\U0000230D',\n\t\"dollar;\":                   '\\U00000024',\n\t\"dopf;\":                     '\\U0001D555',\n\t\"dot;\":                      '\\U000002D9',\n\t\"doteq;\":                    '\\U00002250',\n\t\"doteqdot;\":                 '\\U00002251',\n\t\"dotminus;\":                 '\\U00002238',\n\t\"dotplus;\":                  '\\U00002214',\n\t\"dotsquare;\":                '\\U000022A1',\n\t\"doublebarwedge;\":           '\\U00002306',\n\t\"downarrow;\":                '\\U00002193',\n\t\"downdownarrows;\":           '\\U000021CA',\n\t\"downharpoonleft;\":          '\\U000021C3',\n\t\"downharpoonright;\":         '\\U000021C2',\n\t\"drbkarow;\":                 '\\U00002910',\n\t\"drcorn;\":                   '\\U0000231F',\n\t\"drcrop;\":                   '\\U0000230C',\n\t\"dscr;\":                     '\\U0001D4B9',\n\t\"dscy;\":                     '\\U00000455',\n\t\"dsol;\":                     '\\U000029F6',\n\t\"dstrok;\":                   '\\U00000111',\n\t\"dtdot;\":                    '\\U000022F1',\n\t\"dtri;\":                     '\\U000025BF',\n\t\"dtrif;\":                    '\\U000025BE',\n\t\"duarr;\":                    '\\U000021F5',\n\t\"duhar;\":                    '\\U0000296F',\n\t\"dwangle;\":                  '\\U000029A6',\n\t\"dzcy;\":                     '\\U0000045F',\n\t\"dzigrarr;\":                 '\\U000027FF',\n\t\"eDDot;\":                    '\\U00002A77',\n\t\"eDot;\":                     '\\U00002251',\n\t\"eacute;\":                   '\\U000000E9',\n\t\"easter;\":                   '\\U00002A6E',\n\t\"ecaron;\":                   '\\U0000011B',\n\t\"ecir;\":                     '\\U00002256',\n\t\"ecirc;\":                    '\\U000000EA',\n\t\"ecolon;\":                   '\\U00002255',\n\t\"ecy;\":                      '\\U0000044D',\n\t\"edot;\":                     '\\U00000117',\n\t\"ee;\":                       '\\U00002147',\n\t\"efDot;\":                    '\\U00002252',\n\t\"efr;\":                      '\\U0001D522',\n\t\"eg;\":                       '\\U00002A9A',\n\t\"egrave;\":                   '\\U000000E8',\n\t\"egs;\":                      '\\U00002A96',\n\t\"egsdot;\":                   '\\U00002A98',\n\t\"el;\":                       '\\U00002A99',\n\t\"elinters;\":                 '\\U000023E7',\n\t\"ell;\":                      '\\U00002113',\n\t\"els;\":                      '\\U00002A95',\n\t\"elsdot;\":                   '\\U00002A97',\n\t\"emacr;\":                    '\\U00000113',\n\t\"empty;\":                    '\\U00002205',\n\t\"emptyset;\":                 '\\U00002205',\n\t\"emptyv;\":                   '\\U00002205',\n\t\"emsp;\":                     '\\U00002003',\n\t\"emsp13;\":                   '\\U00002004',\n\t\"emsp14;\":                   '\\U00002005',\n\t\"eng;\":                      '\\U0000014B',\n\t\"ensp;\":                     '\\U00002002',\n\t\"eogon;\":                    '\\U00000119',\n\t\"eopf;\":                     '\\U0001D556',\n\t\"epar;\":                     '\\U000022D5',\n\t\"eparsl;\":                   '\\U000029E3',\n\t\"eplus;\":                    '\\U00002A71',\n\t\"epsi;\":                     '\\U000003B5',\n\t\"epsilon;\":                  '\\U000003B5',\n\t\"epsiv;\":                    '\\U000003F5',\n\t\"eqcirc;\":                   '\\U00002256',\n\t\"eqcolon;\":                  '\\U00002255',\n\t\"eqsim;\":                    '\\U00002242',\n\t\"eqslantgtr;\":               '\\U00002A96',\n\t\"eqslantless;\":              '\\U00002A95',\n\t\"equals;\":                   '\\U0000003D',\n\t\"equest;\":                   '\\U0000225F',\n\t\"equiv;\":                    '\\U00002261',\n\t\"equivDD;\":                  '\\U00002A78',\n\t\"eqvparsl;\":                 '\\U000029E5',\n\t\"erDot;\":                    '\\U00002253',\n\t\"erarr;\":                    '\\U00002971',\n\t\"escr;\":                     '\\U0000212F',\n\t\"esdot;\":                    '\\U00002250',\n\t\"esim;\":                     '\\U00002242',\n\t\"eta;\":                      '\\U000003B7',\n\t\"eth;\":                      '\\U000000F0',\n\t\"euml;\":                     '\\U000000EB',\n\t\"euro;\":                     '\\U000020AC',\n\t\"excl;\":                     '\\U00000021',\n\t\"exist;\":                    '\\U00002203',\n\t\"expectation;\":              '\\U00002130',\n\t\"exponentiale;\":             '\\U00002147',\n\t\"fallingdotseq;\":            '\\U00002252',\n\t\"fcy;\":                      '\\U00000444',\n\t\"female;\":                   '\\U00002640',\n\t\"ffilig;\":                   '\\U0000FB03',\n\t\"fflig;\":                    '\\U0000FB00',\n\t\"ffllig;\":                   '\\U0000FB04',\n\t\"ffr;\":                      '\\U0001D523',\n\t\"filig;\":                    '\\U0000FB01',\n\t\"flat;\":                     '\\U0000266D',\n\t\"fllig;\":                    '\\U0000FB02',\n\t\"fltns;\":                    '\\U000025B1',\n\t\"fnof;\":                     '\\U00000192',\n\t\"fopf;\":                     '\\U0001D557',\n\t\"forall;\":                   '\\U00002200',\n\t\"fork;\":                     '\\U000022D4',\n\t\"forkv;\":                    '\\U00002AD9',\n\t\"fpartint;\":                 '\\U00002A0D',\n\t\"frac12;\":                   '\\U000000BD',\n\t\"frac13;\":                   '\\U00002153',\n\t\"frac14;\":                   '\\U000000BC',\n\t\"frac15;\":                   '\\U00002155',\n\t\"frac16;\":                   '\\U00002159',\n\t\"frac18;\":                   '\\U0000215B',\n\t\"frac23;\":                   '\\U00002154',\n\t\"frac25;\":                   '\\U00002156',\n\t\"frac34;\":                   '\\U000000BE',\n\t\"frac35;\":                   '\\U00002157',\n\t\"frac38;\":                   '\\U0000215C',\n\t\"frac45;\":                   '\\U00002158',\n\t\"frac56;\":                   '\\U0000215A',\n\t\"frac58;\":                   '\\U0000215D',\n\t\"frac78;\":                   '\\U0000215E',\n\t\"frasl;\":                    '\\U00002044',\n\t\"frown;\":                    '\\U00002322',\n\t\"fscr;\":                     '\\U0001D4BB',\n\t\"gE;\":                       '\\U00002267',\n\t\"gEl;\":                      '\\U00002A8C',\n\t\"gacute;\":                   '\\U000001F5',\n\t\"gamma;\":                    '\\U000003B3',\n\t\"gammad;\":                   '\\U000003DD',\n\t\"gap;\":                      '\\U00002A86',\n\t\"gbreve;\":                   '\\U0000011F',\n\t\"gcirc;\":                    '\\U0000011D',\n\t\"gcy;\":                      '\\U00000433',\n\t\"gdot;\":                     '\\U00000121',\n\t\"ge;\":                       '\\U00002265',\n\t\"gel;\":                      '\\U000022DB',\n\t\"geq;\":                      '\\U00002265',\n\t\"geqq;\":                     '\\U00002267',\n\t\"geqslant;\":                 '\\U00002A7E',\n\t\"ges;\":                      '\\U00002A7E',\n\t\"gescc;\":                    '\\U00002AA9',\n\t\"gesdot;\":                   '\\U00002A80',\n\t\"gesdoto;\":                  '\\U00002A82',\n\t\"gesdotol;\":                 '\\U00002A84',\n\t\"gesles;\":                   '\\U00002A94',\n\t\"gfr;\":                      '\\U0001D524',\n\t\"gg;\":                       '\\U0000226B',\n\t\"ggg;\":                      '\\U000022D9',\n\t\"gimel;\":                    '\\U00002137',\n\t\"gjcy;\":                     '\\U00000453',\n\t\"gl;\":                       '\\U00002277',\n\t\"glE;\":                      '\\U00002A92',\n\t\"gla;\":                      '\\U00002AA5',\n\t\"glj;\":                      '\\U00002AA4',\n\t\"gnE;\":                      '\\U00002269',\n\t\"gnap;\":                     '\\U00002A8A',\n\t\"gnapprox;\":                 '\\U00002A8A',\n\t\"gne;\":                      '\\U00002A88',\n\t\"gneq;\":                     '\\U00002A88',\n\t\"gneqq;\":                    '\\U00002269',\n\t\"gnsim;\":                    '\\U000022E7',\n\t\"gopf;\":                     '\\U0001D558',\n\t\"grave;\":                    '\\U00000060',\n\t\"gscr;\":                     '\\U0000210A',\n\t\"gsim;\":                     '\\U00002273',\n\t\"gsime;\":                    '\\U00002A8E',\n\t\"gsiml;\":                    '\\U00002A90',\n\t\"gt;\":                       '\\U0000003E',\n\t\"gtcc;\":                     '\\U00002AA7',\n\t\"gtcir;\":                    '\\U00002A7A',\n\t\"gtdot;\":                    '\\U000022D7',\n\t\"gtlPar;\":                   '\\U00002995',\n\t\"gtquest;\":                  '\\U00002A7C',\n\t\"gtrapprox;\":                '\\U00002A86',\n\t\"gtrarr;\":                   '\\U00002978',\n\t\"gtrdot;\":                   '\\U000022D7',\n\t\"gtreqless;\":                '\\U000022DB',\n\t\"gtreqqless;\":               '\\U00002A8C',\n\t\"gtrless;\":                  '\\U00002277',\n\t\"gtrsim;\":                   '\\U00002273',\n\t\"hArr;\":                     '\\U000021D4',\n\t\"hairsp;\":                   '\\U0000200A',\n\t\"half;\":                     '\\U000000BD',\n\t\"hamilt;\":                   '\\U0000210B',\n\t\"hardcy;\":                   '\\U0000044A',\n\t\"harr;\":                     '\\U00002194',\n\t\"harrcir;\":                  '\\U00002948',\n\t\"harrw;\":                    '\\U000021AD',\n\t\"hbar;\":                     '\\U0000210F',\n\t\"hcirc;\":                    '\\U00000125',\n\t\"hearts;\":                   '\\U00002665',\n\t\"heartsuit;\":                '\\U00002665',\n\t\"hellip;\":                   '\\U00002026',\n\t\"hercon;\":                   '\\U000022B9',\n\t\"hfr;\":                      '\\U0001D525',\n\t\"hksearow;\":                 '\\U00002925',\n\t\"hkswarow;\":                 '\\U00002926',\n\t\"hoarr;\":                    '\\U000021FF',\n\t\"homtht;\":                   '\\U0000223B',\n\t\"hookleftarrow;\":            '\\U000021A9',\n\t\"hookrightarrow;\":           '\\U000021AA',\n\t\"hopf;\":                     '\\U0001D559',\n\t\"horbar;\":                   '\\U00002015',\n\t\"hscr;\":                     '\\U0001D4BD',\n\t\"hslash;\":                   '\\U0000210F',\n\t\"hstrok;\":                   '\\U00000127',\n\t\"hybull;\":                   '\\U00002043',\n\t\"hyphen;\":                   '\\U00002010',\n\t\"iacute;\":                   '\\U000000ED',\n\t\"ic;\":                       '\\U00002063',\n\t\"icirc;\":                    '\\U000000EE',\n\t\"icy;\":                      '\\U00000438',\n\t\"iecy;\":                     '\\U00000435',\n\t\"iexcl;\":                    '\\U000000A1',\n\t\"iff;\":                      '\\U000021D4',\n\t\"ifr;\":                      '\\U0001D526',\n\t\"igrave;\":                   '\\U000000EC',\n\t\"ii;\":                       '\\U00002148',\n\t\"iiiint;\":                   '\\U00002A0C',\n\t\"iiint;\":                    '\\U0000222D',\n\t\"iinfin;\":                   '\\U000029DC',\n\t\"iiota;\":                    '\\U00002129',\n\t\"ijlig;\":                    '\\U00000133',\n\t\"imacr;\":                    '\\U0000012B',\n\t\"image;\":                    '\\U00002111',\n\t\"imagline;\":                 '\\U00002110',\n\t\"imagpart;\":                 '\\U00002111',\n\t\"imath;\":                    '\\U00000131',\n\t\"imof;\":                     '\\U000022B7',\n\t\"imped;\":                    '\\U000001B5',\n\t\"in;\":                       '\\U00002208',\n\t\"incare;\":                   '\\U00002105',\n\t\"infin;\":                    '\\U0000221E',\n\t\"infintie;\":                 '\\U000029DD',\n\t\"inodot;\":                   '\\U00000131',\n\t\"int;\":                      '\\U0000222B',\n\t\"intcal;\":                   '\\U000022BA',\n\t\"integers;\":                 '\\U00002124',\n\t\"intercal;\":                 '\\U000022BA',\n\t\"intlarhk;\":                 '\\U00002A17',\n\t\"intprod;\":                  '\\U00002A3C',\n\t\"iocy;\":                     '\\U00000451',\n\t\"iogon;\":                    '\\U0000012F',\n\t\"iopf;\":                     '\\U0001D55A',\n\t\"iota;\":                     '\\U000003B9',\n\t\"iprod;\":                    '\\U00002A3C',\n\t\"iquest;\":                   '\\U000000BF',\n\t\"iscr;\":                     '\\U0001D4BE',\n\t\"isin;\":                     '\\U00002208',\n\t\"isinE;\":                    '\\U000022F9',\n\t\"isindot;\":                  '\\U000022F5',\n\t\"isins;\":                    '\\U000022F4',\n\t\"isinsv;\":                   '\\U000022F3',\n\t\"isinv;\":                    '\\U00002208',\n\t\"it;\":                       '\\U00002062',\n\t\"itilde;\":                   '\\U00000129',\n\t\"iukcy;\":                    '\\U00000456',\n\t\"iuml;\":                     '\\U000000EF',\n\t\"jcirc;\":                    '\\U00000135',\n\t\"jcy;\":                      '\\U00000439',\n\t\"jfr;\":                      '\\U0001D527',\n\t\"jmath;\":                    '\\U00000237',\n\t\"jopf;\":                     '\\U0001D55B',\n\t\"jscr;\":                     '\\U0001D4BF',\n\t\"jsercy;\":                   '\\U00000458',\n\t\"jukcy;\":                    '\\U00000454',\n\t\"kappa;\":                    '\\U000003BA',\n\t\"kappav;\":                   '\\U000003F0',\n\t\"kcedil;\":                   '\\U00000137',\n\t\"kcy;\":                      '\\U0000043A',\n\t\"kfr;\":                      '\\U0001D528',\n\t\"kgreen;\":                   '\\U00000138',\n\t\"khcy;\":                     '\\U00000445',\n\t\"kjcy;\":                     '\\U0000045C',\n\t\"kopf;\":                     '\\U0001D55C',\n\t\"kscr;\":                     '\\U0001D4C0',\n\t\"lAarr;\":                    '\\U000021DA',\n\t\"lArr;\":                     '\\U000021D0',\n\t\"lAtail;\":                   '\\U0000291B',\n\t\"lBarr;\":                    '\\U0000290E',\n\t\"lE;\":                       '\\U00002266',\n\t\"lEg;\":                      '\\U00002A8B',\n\t\"lHar;\":                     '\\U00002962',\n\t\"lacute;\":                   '\\U0000013A',\n\t\"laemptyv;\":                 '\\U000029B4',\n\t\"lagran;\":                   '\\U00002112',\n\t\"lambda;\":                   '\\U000003BB',\n\t\"lang;\":                     '\\U000027E8',\n\t\"langd;\":                    '\\U00002991',\n\t\"langle;\":                   '\\U000027E8',\n\t\"lap;\":                      '\\U00002A85',\n\t\"laquo;\":                    '\\U000000AB',\n\t\"larr;\":                     '\\U00002190',\n\t\"larrb;\":                    '\\U000021E4',\n\t\"larrbfs;\":                  '\\U0000291F',\n\t\"larrfs;\":                   '\\U0000291D',\n\t\"larrhk;\":                   '\\U000021A9',\n\t\"larrlp;\":                   '\\U000021AB',\n\t\"larrpl;\":                   '\\U00002939',\n\t\"larrsim;\":                  '\\U00002973',\n\t\"larrtl;\":                   '\\U000021A2',\n\t\"lat;\":                      '\\U00002AAB',\n\t\"latail;\":                   '\\U00002919',\n\t\"late;\":                     '\\U00002AAD',\n\t\"lbarr;\":                    '\\U0000290C',\n\t\"lbbrk;\":                    '\\U00002772',\n\t\"lbrace;\":                   '\\U0000007B',\n\t\"lbrack;\":                   '\\U0000005B',\n\t\"lbrke;\":                    '\\U0000298B',\n\t\"lbrksld;\":                  '\\U0000298F',\n\t\"lbrkslu;\":                  '\\U0000298D',\n\t\"lcaron;\":                   '\\U0000013E',\n\t\"lcedil;\":                   '\\U0000013C',\n\t\"lceil;\":                    '\\U00002308',\n\t\"lcub;\":                     '\\U0000007B',\n\t\"lcy;\":                      '\\U0000043B',\n\t\"ldca;\":                     '\\U00002936',\n\t\"ldquo;\":                    '\\U0000201C',\n\t\"ldquor;\":                   '\\U0000201E',\n\t\"ldrdhar;\":                  '\\U00002967',\n\t\"ldrushar;\":                 '\\U0000294B',\n\t\"ldsh;\":                     '\\U000021B2',\n\t\"le;\":                       '\\U00002264',\n\t\"leftarrow;\":                '\\U00002190',\n\t\"leftarrowtail;\":            '\\U000021A2',\n\t\"leftharpoondown;\":          '\\U000021BD',\n\t\"leftharpoonup;\":            '\\U000021BC',\n\t\"leftleftarrows;\":           '\\U000021C7',\n\t\"leftrightarrow;\":           '\\U00002194',\n\t\"leftrightarrows;\":          '\\U000021C6',\n\t\"leftrightharpoons;\":        '\\U000021CB',\n\t\"leftrightsquigarrow;\":      '\\U000021AD',\n\t\"leftthreetimes;\":           '\\U000022CB',\n\t\"leg;\":                      '\\U000022DA',\n\t\"leq;\":                      '\\U00002264',\n\t\"leqq;\":                     '\\U00002266',\n\t\"leqslant;\":                 '\\U00002A7D',\n\t\"les;\":                      '\\U00002A7D',\n\t\"lescc;\":                    '\\U00002AA8',\n\t\"lesdot;\":                   '\\U00002A7F',\n\t\"lesdoto;\":                  '\\U00002A81',\n\t\"lesdotor;\":                 '\\U00002A83',\n\t\"lesges;\":                   '\\U00002A93',\n\t\"lessapprox;\":               '\\U00002A85',\n\t\"lessdot;\":                  '\\U000022D6',\n\t\"lesseqgtr;\":                '\\U000022DA',\n\t\"lesseqqgtr;\":               '\\U00002A8B',\n\t\"lessgtr;\":                  '\\U00002276',\n\t\"lesssim;\":                  '\\U00002272',\n\t\"lfisht;\":                   '\\U0000297C',\n\t\"lfloor;\":                   '\\U0000230A',\n\t\"lfr;\":                      '\\U0001D529',\n\t\"lg;\":                       '\\U00002276',\n\t\"lgE;\":                      '\\U00002A91',\n\t\"lhard;\":                    '\\U000021BD',\n\t\"lharu;\":                    '\\U000021BC',\n\t\"lharul;\":                   '\\U0000296A',\n\t\"lhblk;\":                    '\\U00002584',\n\t\"ljcy;\":                     '\\U00000459',\n\t\"ll;\":                       '\\U0000226A',\n\t\"llarr;\":                    '\\U000021C7',\n\t\"llcorner;\":                 '\\U0000231E',\n\t\"llhard;\":                   '\\U0000296B',\n\t\"lltri;\":                    '\\U000025FA',\n\t\"lmidot;\":                   '\\U00000140',\n\t\"lmoust;\":                   '\\U000023B0',\n\t\"lmoustache;\":               '\\U000023B0',\n\t\"lnE;\":                      '\\U00002268',\n\t\"lnap;\":                     '\\U00002A89',\n\t\"lnapprox;\":                 '\\U00002A89',\n\t\"lne;\":                      '\\U00002A87',\n\t\"lneq;\":                     '\\U00002A87',\n\t\"lneqq;\":                    '\\U00002268',\n\t\"lnsim;\":                    '\\U000022E6',\n\t\"loang;\":                    '\\U000027EC',\n\t\"loarr;\":                    '\\U000021FD',\n\t\"lobrk;\":                    '\\U000027E6',\n\t\"longleftarrow;\":            '\\U000027F5',\n\t\"longleftrightarrow;\":       '\\U000027F7',\n\t\"longmapsto;\":               '\\U000027FC',\n\t\"longrightarrow;\":           '\\U000027F6',\n\t\"looparrowleft;\":            '\\U000021AB',\n\t\"looparrowright;\":           '\\U000021AC',\n\t\"lopar;\":                    '\\U00002985',\n\t\"lopf;\":                     '\\U0001D55D',\n\t\"loplus;\":                   '\\U00002A2D',\n\t\"lotimes;\":                  '\\U00002A34',\n\t\"lowast;\":                   '\\U00002217',\n\t\"lowbar;\":                   '\\U0000005F',\n\t\"loz;\":                      '\\U000025CA',\n\t\"lozenge;\":                  '\\U000025CA',\n\t\"lozf;\":                     '\\U000029EB',\n\t\"lpar;\":                     '\\U00000028',\n\t\"lparlt;\":                   '\\U00002993',\n\t\"lrarr;\":                    '\\U000021C6',\n\t\"lrcorner;\":                 '\\U0000231F',\n\t\"lrhar;\":                    '\\U000021CB',\n\t\"lrhard;\":                   '\\U0000296D',\n\t\"lrm;\":                      '\\U0000200E',\n\t\"lrtri;\":                    '\\U000022BF',\n\t\"lsaquo;\":                   '\\U00002039',\n\t\"lscr;\":                     '\\U0001D4C1',\n\t\"lsh;\":                      '\\U000021B0',\n\t\"lsim;\":                     '\\U00002272',\n\t\"lsime;\":                    '\\U00002A8D',\n\t\"lsimg;\":                    '\\U00002A8F',\n\t\"lsqb;\":                     '\\U0000005B',\n\t\"lsquo;\":                    '\\U00002018',\n\t\"lsquor;\":                   '\\U0000201A',\n\t\"lstrok;\":                   '\\U00000142',\n\t\"lt;\":                       '\\U0000003C',\n\t\"ltcc;\":                     '\\U00002AA6',\n\t\"ltcir;\":                    '\\U00002A79',\n\t\"ltdot;\":                    '\\U000022D6',\n\t\"lthree;\":                   '\\U000022CB',\n\t\"ltimes;\":                   '\\U000022C9',\n\t\"ltlarr;\":                   '\\U00002976',\n\t\"ltquest;\":                  '\\U00002A7B',\n\t\"ltrPar;\":                   '\\U00002996',\n\t\"ltri;\":                     '\\U000025C3',\n\t\"ltrie;\":                    '\\U000022B4',\n\t\"ltrif;\":                    '\\U000025C2',\n\t\"lurdshar;\":                 '\\U0000294A',\n\t\"luruhar;\":                  '\\U00002966',\n\t\"mDDot;\":                    '\\U0000223A',\n\t\"macr;\":                     '\\U000000AF',\n\t\"male;\":                     '\\U00002642',\n\t\"malt;\":                     '\\U00002720',\n\t\"maltese;\":                  '\\U00002720',\n\t\"map;\":                      '\\U000021A6',\n\t\"mapsto;\":                   '\\U000021A6',\n\t\"mapstodown;\":               '\\U000021A7',\n\t\"mapstoleft;\":               '\\U000021A4',\n\t\"mapstoup;\":                 '\\U000021A5',\n\t\"marker;\":                   '\\U000025AE',\n\t\"mcomma;\":                   '\\U00002A29',\n\t\"mcy;\":                      '\\U0000043C',\n\t\"mdash;\":                    '\\U00002014',\n\t\"measuredangle;\":            '\\U00002221',\n\t\"mfr;\":                      '\\U0001D52A',\n\t\"mho;\":                      '\\U00002127',\n\t\"micro;\":                    '\\U000000B5',\n\t\"mid;\":                      '\\U00002223',\n\t\"midast;\":                   '\\U0000002A',\n\t\"midcir;\":                   '\\U00002AF0',\n\t\"middot;\":                   '\\U000000B7',\n\t\"minus;\":                    '\\U00002212',\n\t\"minusb;\":                   '\\U0000229F',\n\t\"minusd;\":                   '\\U00002238',\n\t\"minusdu;\":                  '\\U00002A2A',\n\t\"mlcp;\":                     '\\U00002ADB',\n\t\"mldr;\":                     '\\U00002026',\n\t\"mnplus;\":                   '\\U00002213',\n\t\"models;\":                   '\\U000022A7',\n\t\"mopf;\":                     '\\U0001D55E',\n\t\"mp;\":                       '\\U00002213',\n\t\"mscr;\":                     '\\U0001D4C2',\n\t\"mstpos;\":                   '\\U0000223E',\n\t\"mu;\":                       '\\U000003BC',\n\t\"multimap;\":                 '\\U000022B8',\n\t\"mumap;\":                    '\\U000022B8',\n\t\"nLeftarrow;\":               '\\U000021CD',\n\t\"nLeftrightarrow;\":          '\\U000021CE',\n\t\"nRightarrow;\":              '\\U000021CF',\n\t\"nVDash;\":                   '\\U000022AF',\n\t\"nVdash;\":                   '\\U000022AE',\n\t\"nabla;\":                    '\\U00002207',\n\t\"nacute;\":                   '\\U00000144',\n\t\"nap;\":                      '\\U00002249',\n\t\"napos;\":                    '\\U00000149',\n\t\"napprox;\":                  '\\U00002249',\n\t\"natur;\":                    '\\U0000266E',\n\t\"natural;\":                  '\\U0000266E',\n\t\"naturals;\":                 '\\U00002115',\n\t\"nbsp;\":                     '\\U000000A0',\n\t\"ncap;\":                     '\\U00002A43',\n\t\"ncaron;\":                   '\\U00000148',\n\t\"ncedil;\":                   '\\U00000146',\n\t\"ncong;\":                    '\\U00002247',\n\t\"ncup;\":                     '\\U00002A42',\n\t\"ncy;\":                      '\\U0000043D',\n\t\"ndash;\":                    '\\U00002013',\n\t\"ne;\":                       '\\U00002260',\n\t\"neArr;\":                    '\\U000021D7',\n\t\"nearhk;\":                   '\\U00002924',\n\t\"nearr;\":                    '\\U00002197',\n\t\"nearrow;\":                  '\\U00002197',\n\t\"nequiv;\":                   '\\U00002262',\n\t\"nesear;\":                   '\\U00002928',\n\t\"nexist;\":                   '\\U00002204',\n\t\"nexists;\":                  '\\U00002204',\n\t\"nfr;\":                      '\\U0001D52B',\n\t\"nge;\":                      '\\U00002271',\n\t\"ngeq;\":                     '\\U00002271',\n\t\"ngsim;\":                    '\\U00002275',\n\t\"ngt;\":                      '\\U0000226F',\n\t\"ngtr;\":                     '\\U0000226F',\n\t\"nhArr;\":                    '\\U000021CE',\n\t\"nharr;\":                    '\\U000021AE',\n\t\"nhpar;\":                    '\\U00002AF2',\n\t\"ni;\":                       '\\U0000220B',\n\t\"nis;\":                      '\\U000022FC',\n\t\"nisd;\":                     '\\U000022FA',\n\t\"niv;\":                      '\\U0000220B',\n\t\"njcy;\":                     '\\U0000045A',\n\t\"nlArr;\":                    '\\U000021CD',\n\t\"nlarr;\":                    '\\U0000219A',\n\t\"nldr;\":                     '\\U00002025',\n\t\"nle;\":                      '\\U00002270',\n\t\"nleftarrow;\":               '\\U0000219A',\n\t\"nleftrightarrow;\":          '\\U000021AE',\n\t\"nleq;\":                     '\\U00002270',\n\t\"nless;\":                    '\\U0000226E',\n\t\"nlsim;\":                    '\\U00002274',\n\t\"nlt;\":                      '\\U0000226E',\n\t\"nltri;\":                    '\\U000022EA',\n\t\"nltrie;\":                   '\\U000022EC',\n\t\"nmid;\":                     '\\U00002224',\n\t\"nopf;\":                     '\\U0001D55F',\n\t\"not;\":                      '\\U000000AC',\n\t\"notin;\":                    '\\U00002209',\n\t\"notinva;\":                  '\\U00002209',\n\t\"notinvb;\":                  '\\U000022F7',\n\t\"notinvc;\":                  '\\U000022F6',\n\t\"notni;\":                    '\\U0000220C',\n\t\"notniva;\":                  '\\U0000220C',\n\t\"notnivb;\":                  '\\U000022FE',\n\t\"notnivc;\":                  '\\U000022FD',\n\t\"npar;\":                     '\\U00002226',\n\t\"nparallel;\":                '\\U00002226',\n\t\"npolint;\":                  '\\U00002A14',\n\t\"npr;\":                      '\\U00002280',\n\t\"nprcue;\":                   '\\U000022E0',\n\t\"nprec;\":                    '\\U00002280',\n\t\"nrArr;\":                    '\\U000021CF',\n\t\"nrarr;\":                    '\\U0000219B',\n\t\"nrightarrow;\":              '\\U0000219B',\n\t\"nrtri;\":                    '\\U000022EB',\n\t\"nrtrie;\":                   '\\U000022ED',\n\t\"nsc;\":                      '\\U00002281',\n\t\"nsccue;\":                   '\\U000022E1',\n\t\"nscr;\":                     '\\U0001D4C3',\n\t\"nshortmid;\":                '\\U00002224',\n\t\"nshortparallel;\":           '\\U00002226',\n\t\"nsim;\":                     '\\U00002241',\n\t\"nsime;\":                    '\\U00002244',\n\t\"nsimeq;\":                   '\\U00002244',\n\t\"nsmid;\":                    '\\U00002224',\n\t\"nspar;\":                    '\\U00002226',\n\t\"nsqsube;\":                  '\\U000022E2',\n\t\"nsqsupe;\":                  '\\U000022E3',\n\t\"nsub;\":                     '\\U00002284',\n\t\"nsube;\":                    '\\U00002288',\n\t\"nsubseteq;\":                '\\U00002288',\n\t\"nsucc;\":                    '\\U00002281',\n\t\"nsup;\":                     '\\U00002285',\n\t\"nsupe;\":                    '\\U00002289',\n\t\"nsupseteq;\":                '\\U00002289',\n\t\"ntgl;\":                     '\\U00002279',\n\t\"ntilde;\":                   '\\U000000F1',\n\t\"ntlg;\":                     '\\U00002278',\n\t\"ntriangleleft;\":            '\\U000022EA',\n\t\"ntrianglelefteq;\":          '\\U000022EC',\n\t\"ntriangleright;\":           '\\U000022EB',\n\t\"ntrianglerighteq;\":         '\\U000022ED',\n\t\"nu;\":                       '\\U000003BD',\n\t\"num;\":                      '\\U00000023',\n\t\"numero;\":                   '\\U00002116',\n\t\"numsp;\":                    '\\U00002007',\n\t\"nvDash;\":                   '\\U000022AD',\n\t\"nvHarr;\":                   '\\U00002904',\n\t\"nvdash;\":                   '\\U000022AC',\n\t\"nvinfin;\":                  '\\U000029DE',\n\t\"nvlArr;\":                   '\\U00002902',\n\t\"nvrArr;\":                   '\\U00002903',\n\t\"nwArr;\":                    '\\U000021D6',\n\t\"nwarhk;\":                   '\\U00002923',\n\t\"nwarr;\":                    '\\U00002196',\n\t\"nwarrow;\":                  '\\U00002196',\n\t\"nwnear;\":                   '\\U00002927',\n\t\"oS;\":                       '\\U000024C8',\n\t\"oacute;\":                   '\\U000000F3',\n\t\"oast;\":                     '\\U0000229B',\n\t\"ocir;\":                     '\\U0000229A',\n\t\"ocirc;\":                    '\\U000000F4',\n\t\"ocy;\":                      '\\U0000043E',\n\t\"odash;\":                    '\\U0000229D',\n\t\"odblac;\":                   '\\U00000151',\n\t\"odiv;\":                     '\\U00002A38',\n\t\"odot;\":                     '\\U00002299',\n\t\"odsold;\":                   '\\U000029BC',\n\t\"oelig;\":                    '\\U00000153',\n\t\"ofcir;\":                    '\\U000029BF',\n\t\"ofr;\":                      '\\U0001D52C',\n\t\"ogon;\":                     '\\U000002DB',\n\t\"ograve;\":                   '\\U000000F2',\n\t\"ogt;\":                      '\\U000029C1',\n\t\"ohbar;\":                    '\\U000029B5',\n\t\"ohm;\":                      '\\U000003A9',\n\t\"oint;\":                     '\\U0000222E',\n\t\"olarr;\":                    '\\U000021BA',\n\t\"olcir;\":                    '\\U000029BE',\n\t\"olcross;\":                  '\\U000029BB',\n\t\"oline;\":                    '\\U0000203E',\n\t\"olt;\":                      '\\U000029C0',\n\t\"omacr;\":                    '\\U0000014D',\n\t\"omega;\":                    '\\U000003C9',\n\t\"omicron;\":                  '\\U000003BF',\n\t\"omid;\":                     '\\U000029B6',\n\t\"ominus;\":                   '\\U00002296',\n\t\"oopf;\":                     '\\U0001D560',\n\t\"opar;\":                     '\\U000029B7',\n\t\"operp;\":                    '\\U000029B9',\n\t\"oplus;\":                    '\\U00002295',\n\t\"or;\":                       '\\U00002228',\n\t\"orarr;\":                    '\\U000021BB',\n\t\"ord;\":                      '\\U00002A5D',\n\t\"order;\":                    '\\U00002134',\n\t\"orderof;\":                  '\\U00002134',\n\t\"ordf;\":                     '\\U000000AA',\n\t\"ordm;\":                     '\\U000000BA',\n\t\"origof;\":                   '\\U000022B6',\n\t\"oror;\":                     '\\U00002A56',\n\t\"orslope;\":                  '\\U00002A57',\n\t\"orv;\":                      '\\U00002A5B',\n\t\"oscr;\":                     '\\U00002134',\n\t\"oslash;\":                   '\\U000000F8',\n\t\"osol;\":                     '\\U00002298',\n\t\"otilde;\":                   '\\U000000F5',\n\t\"otimes;\":                   '\\U00002297',\n\t\"otimesas;\":                 '\\U00002A36',\n\t\"ouml;\":                     '\\U000000F6',\n\t\"ovbar;\":                    '\\U0000233D',\n\t\"par;\":                      '\\U00002225',\n\t\"para;\":                     '\\U000000B6',\n\t\"parallel;\":                 '\\U00002225',\n\t\"parsim;\":                   '\\U00002AF3',\n\t\"parsl;\":                    '\\U00002AFD',\n\t\"part;\":                     '\\U00002202',\n\t\"pcy;\":                      '\\U0000043F',\n\t\"percnt;\":                   '\\U00000025',\n\t\"period;\":                   '\\U0000002E',\n\t\"permil;\":                   '\\U00002030',\n\t\"perp;\":                     '\\U000022A5',\n\t\"pertenk;\":                  '\\U00002031',\n\t\"pfr;\":                      '\\U0001D52D',\n\t\"phi;\":                      '\\U000003C6',\n\t\"phiv;\":                     '\\U000003D5',\n\t\"phmmat;\":                   '\\U00002133',\n\t\"phone;\":                    '\\U0000260E',\n\t\"pi;\":                       '\\U000003C0',\n\t\"pitchfork;\":                '\\U000022D4',\n\t\"piv;\":                      '\\U000003D6',\n\t\"planck;\":                   '\\U0000210F',\n\t\"planckh;\":                  '\\U0000210E',\n\t\"plankv;\":                   '\\U0000210F',\n\t\"plus;\":                     '\\U0000002B',\n\t\"plusacir;\":                 '\\U00002A23',\n\t\"plusb;\":                    '\\U0000229E',\n\t\"pluscir;\":                  '\\U00002A22',\n\t\"plusdo;\":                   '\\U00002214',\n\t\"plusdu;\":                   '\\U00002A25',\n\t\"pluse;\":                    '\\U00002A72',\n\t\"plusmn;\":                   '\\U000000B1',\n\t\"plussim;\":                  '\\U00002A26',\n\t\"plustwo;\":                  '\\U00002A27',\n\t\"pm;\":                       '\\U000000B1',\n\t\"pointint;\":                 '\\U00002A15',\n\t\"popf;\":                     '\\U0001D561',\n\t\"pound;\":                    '\\U000000A3',\n\t\"pr;\":                       '\\U0000227A',\n\t\"prE;\":                      '\\U00002AB3',\n\t\"prap;\":                     '\\U00002AB7',\n\t\"prcue;\":                    '\\U0000227C',\n\t\"pre;\":                      '\\U00002AAF',\n\t\"prec;\":                     '\\U0000227A',\n\t\"precapprox;\":               '\\U00002AB7',\n\t\"preccurlyeq;\":              '\\U0000227C',\n\t\"preceq;\":                   '\\U00002AAF',\n\t\"precnapprox;\":              '\\U00002AB9',\n\t\"precneqq;\":                 '\\U00002AB5',\n\t\"precnsim;\":                 '\\U000022E8',\n\t\"precsim;\":                  '\\U0000227E',\n\t\"prime;\":                    '\\U00002032',\n\t\"primes;\":                   '\\U00002119',\n\t\"prnE;\":                     '\\U00002AB5',\n\t\"prnap;\":                    '\\U00002AB9',\n\t\"prnsim;\":                   '\\U000022E8',\n\t\"prod;\":                     '\\U0000220F',\n\t\"profalar;\":                 '\\U0000232E',\n\t\"profline;\":                 '\\U00002312',\n\t\"profsurf;\":                 '\\U00002313',\n\t\"prop;\":                     '\\U0000221D',\n\t\"propto;\":                   '\\U0000221D',\n\t\"prsim;\":                    '\\U0000227E',\n\t\"prurel;\":                   '\\U000022B0',\n\t\"pscr;\":                     '\\U0001D4C5',\n\t\"psi;\":                      '\\U000003C8',\n\t\"puncsp;\":                   '\\U00002008',\n\t\"qfr;\":                      '\\U0001D52E',\n\t\"qint;\":                     '\\U00002A0C',\n\t\"qopf;\":                     '\\U0001D562',\n\t\"qprime;\":                   '\\U00002057',\n\t\"qscr;\":                     '\\U0001D4C6',\n\t\"quaternions;\":              '\\U0000210D',\n\t\"quatint;\":                  '\\U00002A16',\n\t\"quest;\":                    '\\U0000003F',\n\t\"questeq;\":                  '\\U0000225F',\n\t\"quot;\":                     '\\U00000022',\n\t\"rAarr;\":                    '\\U000021DB',\n\t\"rArr;\":                     '\\U000021D2',\n\t\"rAtail;\":                   '\\U0000291C',\n\t\"rBarr;\":                    '\\U0000290F',\n\t\"rHar;\":                     '\\U00002964',\n\t\"racute;\":                   '\\U00000155',\n\t\"radic;\":                    '\\U0000221A',\n\t\"raemptyv;\":                 '\\U000029B3',\n\t\"rang;\":                     '\\U000027E9',\n\t\"rangd;\":                    '\\U00002992',\n\t\"range;\":                    '\\U000029A5',\n\t\"rangle;\":                   '\\U000027E9',\n\t\"raquo;\":                    '\\U000000BB',\n\t\"rarr;\":                     '\\U00002192',\n\t\"rarrap;\":                   '\\U00002975',\n\t\"rarrb;\":                    '\\U000021E5',\n\t\"rarrbfs;\":                  '\\U00002920',\n\t\"rarrc;\":                    '\\U00002933',\n\t\"rarrfs;\":                   '\\U0000291E',\n\t\"rarrhk;\":                   '\\U000021AA',\n\t\"rarrlp;\":                   '\\U000021AC',\n\t\"rarrpl;\":                   '\\U00002945',\n\t\"rarrsim;\":                  '\\U00002974',\n\t\"rarrtl;\":                   '\\U000021A3',\n\t\"rarrw;\":                    '\\U0000219D',\n\t\"ratail;\":                   '\\U0000291A',\n\t\"ratio;\":                    '\\U00002236',\n\t\"rationals;\":                '\\U0000211A',\n\t\"rbarr;\":                    '\\U0000290D',\n\t\"rbbrk;\":                    '\\U00002773',\n\t\"rbrace;\":                   '\\U0000007D',\n\t\"rbrack;\":                   '\\U0000005D',\n\t\"rbrke;\":                    '\\U0000298C',\n\t\"rbrksld;\":                  '\\U0000298E',\n\t\"rbrkslu;\":                  '\\U00002990',\n\t\"rcaron;\":                   '\\U00000159',\n\t\"rcedil;\":                   '\\U00000157',\n\t\"rceil;\":                    '\\U00002309',\n\t\"rcub;\":                     '\\U0000007D',\n\t\"rcy;\":                      '\\U00000440',\n\t\"rdca;\":                     '\\U00002937',\n\t\"rdldhar;\":                  '\\U00002969',\n\t\"rdquo;\":                    '\\U0000201D',\n\t\"rdquor;\":                   '\\U0000201D',\n\t\"rdsh;\":                     '\\U000021B3',\n\t\"real;\":                     '\\U0000211C',\n\t\"realine;\":                  '\\U0000211B',\n\t\"realpart;\":                 '\\U0000211C',\n\t\"reals;\":                    '\\U0000211D',\n\t\"rect;\":                     '\\U000025AD',\n\t\"reg;\":                      '\\U000000AE',\n\t\"rfisht;\":                   '\\U0000297D',\n\t\"rfloor;\":                   '\\U0000230B',\n\t\"rfr;\":                      '\\U0001D52F',\n\t\"rhard;\":                    '\\U000021C1',\n\t\"rharu;\":                    '\\U000021C0',\n\t\"rharul;\":                   '\\U0000296C',\n\t\"rho;\":                      '\\U000003C1',\n\t\"rhov;\":                     '\\U000003F1',\n\t\"rightarrow;\":               '\\U00002192',\n\t\"rightarrowtail;\":           '\\U000021A3',\n\t\"rightharpoondown;\":         '\\U000021C1',\n\t\"rightharpoonup;\":           '\\U000021C0',\n\t\"rightleftarrows;\":          '\\U000021C4',\n\t\"rightleftharpoons;\":        '\\U000021CC',\n\t\"rightrightarrows;\":         '\\U000021C9',\n\t\"rightsquigarrow;\":          '\\U0000219D',\n\t\"rightthreetimes;\":          '\\U000022CC',\n\t\"ring;\":                     '\\U000002DA',\n\t\"risingdotseq;\":             '\\U00002253',\n\t\"rlarr;\":                    '\\U000021C4',\n\t\"rlhar;\":                    '\\U000021CC',\n\t\"rlm;\":                      '\\U0000200F',\n\t\"rmoust;\":                   '\\U000023B1',\n\t\"rmoustache;\":               '\\U000023B1',\n\t\"rnmid;\":                    '\\U00002AEE',\n\t\"roang;\":                    '\\U000027ED',\n\t\"roarr;\":                    '\\U000021FE',\n\t\"robrk;\":                    '\\U000027E7',\n\t\"ropar;\":                    '\\U00002986',\n\t\"ropf;\":                     '\\U0001D563',\n\t\"roplus;\":                   '\\U00002A2E',\n\t\"rotimes;\":                  '\\U00002A35',\n\t\"rpar;\":                     '\\U00000029',\n\t\"rpargt;\":                   '\\U00002994',\n\t\"rppolint;\":                 '\\U00002A12',\n\t\"rrarr;\":                    '\\U000021C9',\n\t\"rsaquo;\":                   '\\U0000203A',\n\t\"rscr;\":                     '\\U0001D4C7',\n\t\"rsh;\":                      '\\U000021B1',\n\t\"rsqb;\":                     '\\U0000005D',\n\t\"rsquo;\":                    '\\U00002019',\n\t\"rsquor;\":                   '\\U00002019',\n\t\"rthree;\":                   '\\U000022CC',\n\t\"rtimes;\":                   '\\U000022CA',\n\t\"rtri;\":                     '\\U000025B9',\n\t\"rtrie;\":                    '\\U000022B5',\n\t\"rtrif;\":                    '\\U000025B8',\n\t\"rtriltri;\":                 '\\U000029CE',\n\t\"ruluhar;\":                  '\\U00002968',\n\t\"rx;\":                       '\\U0000211E',\n\t\"sacute;\":                   '\\U0000015B',\n\t\"sbquo;\":                    '\\U0000201A',\n\t\"sc;\":                       '\\U0000227B',\n\t\"scE;\":                      '\\U00002AB4',\n\t\"scap;\":                     '\\U00002AB8',\n\t\"scaron;\":                   '\\U00000161',\n\t\"sccue;\":                    '\\U0000227D',\n\t\"sce;\":                      '\\U00002AB0',\n\t\"scedil;\":                   '\\U0000015F',\n\t\"scirc;\":                    '\\U0000015D',\n\t\"scnE;\":                     '\\U00002AB6',\n\t\"scnap;\":                    '\\U00002ABA',\n\t\"scnsim;\":                   '\\U000022E9',\n\t\"scpolint;\":                 '\\U00002A13',\n\t\"scsim;\":                    '\\U0000227F',\n\t\"scy;\":                      '\\U00000441',\n\t\"sdot;\":                     '\\U000022C5',\n\t\"sdotb;\":                    '\\U000022A1',\n\t\"sdote;\":                    '\\U00002A66',\n\t\"seArr;\":                    '\\U000021D8',\n\t\"searhk;\":                   '\\U00002925',\n\t\"searr;\":                    '\\U00002198',\n\t\"searrow;\":                  '\\U00002198',\n\t\"sect;\":                     '\\U000000A7',\n\t\"semi;\":                     '\\U0000003B',\n\t\"seswar;\":                   '\\U00002929',\n\t\"setminus;\":                 '\\U00002216',\n\t\"setmn;\":                    '\\U00002216',\n\t\"sext;\":                     '\\U00002736',\n\t\"sfr;\":                      '\\U0001D530',\n\t\"sfrown;\":                   '\\U00002322',\n\t\"sharp;\":                    '\\U0000266F',\n\t\"shchcy;\":                   '\\U00000449',\n\t\"shcy;\":                     '\\U00000448',\n\t\"shortmid;\":                 '\\U00002223',\n\t\"shortparallel;\":            '\\U00002225',\n\t\"shy;\":                      '\\U000000AD',\n\t\"sigma;\":                    '\\U000003C3',\n\t\"sigmaf;\":                   '\\U000003C2',\n\t\"sigmav;\":                   '\\U000003C2',\n\t\"sim;\":                      '\\U0000223C',\n\t\"simdot;\":                   '\\U00002A6A',\n\t\"sime;\":                     '\\U00002243',\n\t\"simeq;\":                    '\\U00002243',\n\t\"simg;\":                     '\\U00002A9E',\n\t\"simgE;\":                    '\\U00002AA0',\n\t\"siml;\":                     '\\U00002A9D',\n\t\"simlE;\":                    '\\U00002A9F',\n\t\"simne;\":                    '\\U00002246',\n\t\"simplus;\":                  '\\U00002A24',\n\t\"simrarr;\":                  '\\U00002972',\n\t\"slarr;\":                    '\\U00002190',\n\t\"smallsetminus;\":            '\\U00002216',\n\t\"smashp;\":                   '\\U00002A33',\n\t\"smeparsl;\":                 '\\U000029E4',\n\t\"smid;\":                     '\\U00002223',\n\t\"smile;\":                    '\\U00002323',\n\t\"smt;\":                      '\\U00002AAA',\n\t\"smte;\":                     '\\U00002AAC',\n\t\"softcy;\":                   '\\U0000044C',\n\t\"sol;\":                      '\\U0000002F',\n\t\"solb;\":                     '\\U000029C4',\n\t\"solbar;\":                   '\\U0000233F',\n\t\"sopf;\":                     '\\U0001D564',\n\t\"spades;\":                   '\\U00002660',\n\t\"spadesuit;\":                '\\U00002660',\n\t\"spar;\":                     '\\U00002225',\n\t\"sqcap;\":                    '\\U00002293',\n\t\"sqcup;\":                    '\\U00002294',\n\t\"sqsub;\":                    '\\U0000228F',\n\t\"sqsube;\":                   '\\U00002291',\n\t\"sqsubset;\":                 '\\U0000228F',\n\t\"sqsubseteq;\":               '\\U00002291',\n\t\"sqsup;\":                    '\\U00002290',\n\t\"sqsupe;\":                   '\\U00002292',\n\t\"sqsupset;\":                 '\\U00002290',\n\t\"sqsupseteq;\":               '\\U00002292',\n\t\"squ;\":                      '\\U000025A1',\n\t\"square;\":                   '\\U000025A1',\n\t\"squarf;\":                   '\\U000025AA',\n\t\"squf;\":                     '\\U000025AA',\n\t\"srarr;\":                    '\\U00002192',\n\t\"sscr;\":                     '\\U0001D4C8',\n\t\"ssetmn;\":                   '\\U00002216',\n\t\"ssmile;\":                   '\\U00002323',\n\t\"sstarf;\":                   '\\U000022C6',\n\t\"star;\":                     '\\U00002606',\n\t\"starf;\":                    '\\U00002605',\n\t\"straightepsilon;\":          '\\U000003F5',\n\t\"straightphi;\":              '\\U000003D5',\n\t\"strns;\":                    '\\U000000AF',\n\t\"sub;\":                      '\\U00002282',\n\t\"subE;\":                     '\\U00002AC5',\n\t\"subdot;\":                   '\\U00002ABD',\n\t\"sube;\":                     '\\U00002286',\n\t\"subedot;\":                  '\\U00002AC3',\n\t\"submult;\":                  '\\U00002AC1',\n\t\"subnE;\":                    '\\U00002ACB',\n\t\"subne;\":                    '\\U0000228A',\n\t\"subplus;\":                  '\\U00002ABF',\n\t\"subrarr;\":                  '\\U00002979',\n\t\"subset;\":                   '\\U00002282',\n\t\"subseteq;\":                 '\\U00002286',\n\t\"subseteqq;\":                '\\U00002AC5',\n\t\"subsetneq;\":                '\\U0000228A',\n\t\"subsetneqq;\":               '\\U00002ACB',\n\t\"subsim;\":                   '\\U00002AC7',\n\t\"subsub;\":                   '\\U00002AD5',\n\t\"subsup;\":                   '\\U00002AD3',\n\t\"succ;\":                     '\\U0000227B',\n\t\"succapprox;\":               '\\U00002AB8',\n\t\"succcurlyeq;\":              '\\U0000227D',\n\t\"succeq;\":                   '\\U00002AB0',\n\t\"succnapprox;\":              '\\U00002ABA',\n\t\"succneqq;\":                 '\\U00002AB6',\n\t\"succnsim;\":                 '\\U000022E9',\n\t\"succsim;\":                  '\\U0000227F',\n\t\"sum;\":                      '\\U00002211',\n\t\"sung;\":                     '\\U0000266A',\n\t\"sup;\":                      '\\U00002283',\n\t\"sup1;\":                     '\\U000000B9',\n\t\"sup2;\":                     '\\U000000B2',\n\t\"sup3;\":                     '\\U000000B3',\n\t\"supE;\":                     '\\U00002AC6',\n\t\"supdot;\":                   '\\U00002ABE',\n\t\"supdsub;\":                  '\\U00002AD8',\n\t\"supe;\":                     '\\U00002287',\n\t\"supedot;\":                  '\\U00002AC4',\n\t\"suphsol;\":                  '\\U000027C9',\n\t\"suphsub;\":                  '\\U00002AD7',\n\t\"suplarr;\":                  '\\U0000297B',\n\t\"supmult;\":                  '\\U00002AC2',\n\t\"supnE;\":                    '\\U00002ACC',\n\t\"supne;\":                    '\\U0000228B',\n\t\"supplus;\":                  '\\U00002AC0',\n\t\"supset;\":                   '\\U00002283',\n\t\"supseteq;\":                 '\\U00002287',\n\t\"supseteqq;\":                '\\U00002AC6',\n\t\"supsetneq;\":                '\\U0000228B',\n\t\"supsetneqq;\":               '\\U00002ACC',\n\t\"supsim;\":                   '\\U00002AC8',\n\t\"supsub;\":                   '\\U00002AD4',\n\t\"supsup;\":                   '\\U00002AD6',\n\t\"swArr;\":                    '\\U000021D9',\n\t\"swarhk;\":                   '\\U00002926',\n\t\"swarr;\":                    '\\U00002199',\n\t\"swarrow;\":                  '\\U00002199',\n\t\"swnwar;\":                   '\\U0000292A',\n\t\"szlig;\":                    '\\U000000DF',\n\t\"target;\":                   '\\U00002316',\n\t\"tau;\":                      '\\U000003C4',\n\t\"tbrk;\":                     '\\U000023B4',\n\t\"tcaron;\":                   '\\U00000165',\n\t\"tcedil;\":                   '\\U00000163',\n\t\"tcy;\":                      '\\U00000442',\n\t\"tdot;\":                     '\\U000020DB',\n\t\"telrec;\":                   '\\U00002315',\n\t\"tfr;\":                      '\\U0001D531',\n\t\"there4;\":                   '\\U00002234',\n\t\"therefore;\":                '\\U00002234',\n\t\"theta;\":                    '\\U000003B8',\n\t\"thetasym;\":                 '\\U000003D1',\n\t\"thetav;\":                   '\\U000003D1',\n\t\"thickapprox;\":              '\\U00002248',\n\t\"thicksim;\":                 '\\U0000223C',\n\t\"thinsp;\":                   '\\U00002009',\n\t\"thkap;\":                    '\\U00002248',\n\t\"thksim;\":                   '\\U0000223C',\n\t\"thorn;\":                    '\\U000000FE',\n\t\"tilde;\":                    '\\U000002DC',\n\t\"times;\":                    '\\U000000D7',\n\t\"timesb;\":                   '\\U000022A0',\n\t\"timesbar;\":                 '\\U00002A31',\n\t\"timesd;\":                   '\\U00002A30',\n\t\"tint;\":                     '\\U0000222D',\n\t\"toea;\":                     '\\U00002928',\n\t\"top;\":                      '\\U000022A4',\n\t\"topbot;\":                   '\\U00002336',\n\t\"topcir;\":                   '\\U00002AF1',\n\t\"topf;\":                     '\\U0001D565',\n\t\"topfork;\":                  '\\U00002ADA',\n\t\"tosa;\":                     '\\U00002929',\n\t\"tprime;\":                   '\\U00002034',\n\t\"trade;\":                    '\\U00002122',\n\t\"triangle;\":                 '\\U000025B5',\n\t\"triangledown;\":             '\\U000025BF',\n\t\"triangleleft;\":             '\\U000025C3',\n\t\"trianglelefteq;\":           '\\U000022B4',\n\t\"triangleq;\":                '\\U0000225C',\n\t\"triangleright;\":            '\\U000025B9',\n\t\"trianglerighteq;\":          '\\U000022B5',\n\t\"tridot;\":                   '\\U000025EC',\n\t\"trie;\":                     '\\U0000225C',\n\t\"triminus;\":                 '\\U00002A3A',\n\t\"triplus;\":                  '\\U00002A39',\n\t\"trisb;\":                    '\\U000029CD',\n\t\"tritime;\":                  '\\U00002A3B',\n\t\"trpezium;\":                 '\\U000023E2',\n\t\"tscr;\":                     '\\U0001D4C9',\n\t\"tscy;\":                     '\\U00000446',\n\t\"tshcy;\":                    '\\U0000045B',\n\t\"tstrok;\":                   '\\U00000167',\n\t\"twixt;\":                    '\\U0000226C',\n\t\"twoheadleftarrow;\":         '\\U0000219E',\n\t\"twoheadrightarrow;\":        '\\U000021A0',\n\t\"uArr;\":                     '\\U000021D1',\n\t\"uHar;\":                     '\\U00002963',\n\t\"uacute;\":                   '\\U000000FA',\n\t\"uarr;\":                     '\\U00002191',\n\t\"ubrcy;\":                    '\\U0000045E',\n\t\"ubreve;\":                   '\\U0000016D',\n\t\"ucirc;\":                    '\\U000000FB',\n\t\"ucy;\":                      '\\U00000443',\n\t\"udarr;\":                    '\\U000021C5',\n\t\"udblac;\":                   '\\U00000171',\n\t\"udhar;\":                    '\\U0000296E',\n\t\"ufisht;\":                   '\\U0000297E',\n\t\"ufr;\":                      '\\U0001D532',\n\t\"ugrave;\":                   '\\U000000F9',\n\t\"uharl;\":                    '\\U000021BF',\n\t\"uharr;\":                    '\\U000021BE',\n\t\"uhblk;\":                    '\\U00002580',\n\t\"ulcorn;\":                   '\\U0000231C',\n\t\"ulcorner;\":                 '\\U0000231C',\n\t\"ulcrop;\":                   '\\U0000230F',\n\t\"ultri;\":                    '\\U000025F8',\n\t\"umacr;\":                    '\\U0000016B',\n\t\"uml;\":                      '\\U000000A8',\n\t\"uogon;\":                    '\\U00000173',\n\t\"uopf;\":                     '\\U0001D566',\n\t\"uparrow;\":                  '\\U00002191',\n\t\"updownarrow;\":              '\\U00002195',\n\t\"upharpoonleft;\":            '\\U000021BF',\n\t\"upharpoonright;\":           '\\U000021BE',\n\t\"uplus;\":                    '\\U0000228E',\n\t\"upsi;\":                     '\\U000003C5',\n\t\"upsih;\":                    '\\U000003D2',\n\t\"upsilon;\":                  '\\U000003C5',\n\t\"upuparrows;\":               '\\U000021C8',\n\t\"urcorn;\":                   '\\U0000231D',\n\t\"urcorner;\":                 '\\U0000231D',\n\t\"urcrop;\":                   '\\U0000230E',\n\t\"uring;\":                    '\\U0000016F',\n\t\"urtri;\":                    '\\U000025F9',\n\t\"uscr;\":                     '\\U0001D4CA',\n\t\"utdot;\":                    '\\U000022F0',\n\t\"utilde;\":                   '\\U00000169',\n\t\"utri;\":                     '\\U000025B5',\n\t\"utrif;\":                    '\\U000025B4',\n\t\"uuarr;\":                    '\\U000021C8',\n\t\"uuml;\":                     '\\U000000FC',\n\t\"uwangle;\":                  '\\U000029A7',\n\t\"vArr;\":                     '\\U000021D5',\n\t\"vBar;\":                     '\\U00002AE8',\n\t\"vBarv;\":                    '\\U00002AE9',\n\t\"vDash;\":                    '\\U000022A8',\n\t\"vangrt;\":                   '\\U0000299C',\n\t\"varepsilon;\":               '\\U000003F5',\n\t\"varkappa;\":                 '\\U000003F0',\n\t\"varnothing;\":               '\\U00002205',\n\t\"varphi;\":                   '\\U000003D5',\n\t\"varpi;\":                    '\\U000003D6',\n\t\"varpropto;\":                '\\U0000221D',\n\t\"varr;\":                     '\\U00002195',\n\t\"varrho;\":                   '\\U000003F1',\n\t\"varsigma;\":                 '\\U000003C2',\n\t\"vartheta;\":                 '\\U000003D1',\n\t\"vartriangleleft;\":          '\\U000022B2',\n\t\"vartriangleright;\":         '\\U000022B3',\n\t\"vcy;\":                      '\\U00000432',\n\t\"vdash;\":                    '\\U000022A2',\n\t\"vee;\":                      '\\U00002228',\n\t\"veebar;\":                   '\\U000022BB',\n\t\"veeeq;\":                    '\\U0000225A',\n\t\"vellip;\":                   '\\U000022EE',\n\t\"verbar;\":                   '\\U0000007C',\n\t\"vert;\":                     '\\U0000007C',\n\t\"vfr;\":                      '\\U0001D533',\n\t\"vltri;\":                    '\\U000022B2',\n\t\"vopf;\":                     '\\U0001D567',\n\t\"vprop;\":                    '\\U0000221D',\n\t\"vrtri;\":                    '\\U000022B3',\n\t\"vscr;\":                     '\\U0001D4CB',\n\t\"vzigzag;\":                  '\\U0000299A',\n\t\"wcirc;\":                    '\\U00000175',\n\t\"wedbar;\":                   '\\U00002A5F',\n\t\"wedge;\":                    '\\U00002227',\n\t\"wedgeq;\":                   '\\U00002259',\n\t\"weierp;\":                   '\\U00002118',\n\t\"wfr;\":                      '\\U0001D534',\n\t\"wopf;\":                     '\\U0001D568',\n\t\"wp;\":                       '\\U00002118',\n\t\"wr;\":                       '\\U00002240',\n\t\"wreath;\":                   '\\U00002240',\n\t\"wscr;\":                     '\\U0001D4CC',\n\t\"xcap;\":                     '\\U000022C2',\n\t\"xcirc;\":                    '\\U000025EF',\n\t\"xcup;\":                     '\\U000022C3',\n\t\"xdtri;\":                    '\\U000025BD',\n\t\"xfr;\":                      '\\U0001D535',\n\t\"xhArr;\":                    '\\U000027FA',\n\t\"xharr;\":                    '\\U000027F7',\n\t\"xi;\":                       '\\U000003BE',\n\t\"xlArr;\":                    '\\U000027F8',\n\t\"xlarr;\":                    '\\U000027F5',\n\t\"xmap;\":                     '\\U000027FC',\n\t\"xnis;\":                     '\\U000022FB',\n\t\"xodot;\":                    '\\U00002A00',\n\t\"xopf;\":                     '\\U0001D569',\n\t\"xoplus;\":                   '\\U00002A01',\n\t\"xotime;\":                   '\\U00002A02',\n\t\"xrArr;\":                    '\\U000027F9',\n\t\"xrarr;\":                    '\\U000027F6',\n\t\"xscr;\":                     '\\U0001D4CD',\n\t\"xsqcup;\":                   '\\U00002A06',\n\t\"xuplus;\":                   '\\U00002A04',\n\t\"xutri;\":                    '\\U000025B3',\n\t\"xvee;\":                     '\\U000022C1',\n\t\"xwedge;\":                   '\\U000022C0',\n\t\"yacute;\":                   '\\U000000FD',\n\t\"yacy;\":                     '\\U0000044F',\n\t\"ycirc;\":                    '\\U00000177',\n\t\"ycy;\":                      '\\U0000044B',\n\t\"yen;\":                      '\\U000000A5',\n\t\"yfr;\":                      '\\U0001D536',\n\t\"yicy;\":                     '\\U00000457',\n\t\"yopf;\":                     '\\U0001D56A',\n\t\"yscr;\":                     '\\U0001D4CE',\n\t\"yucy;\":                     '\\U0000044E',\n\t\"yuml;\":                     '\\U000000FF',\n\t\"zacute;\":                   '\\U0000017A',\n\t\"zcaron;\":                   '\\U0000017E',\n\t\"zcy;\":                      '\\U00000437',\n\t\"zdot;\":                     '\\U0000017C',\n\t\"zeetrf;\":                   '\\U00002128',\n\t\"zeta;\":                     '\\U000003B6',\n\t\"zfr;\":                      '\\U0001D537',\n\t\"zhcy;\":                     '\\U00000436',\n\t\"zigrarr;\":                  '\\U000021DD',\n\t\"zopf;\":                     '\\U0001D56B',\n\t\"zscr;\":                     '\\U0001D4CF',\n\t\"zwj;\":                      '\\U0000200D',\n\t\"zwnj;\":                     '\\U0000200C',\n\t\"AElig\":                     '\\U000000C6',\n\t\"AMP\":                       '\\U00000026',\n\t\"Aacute\":                    '\\U000000C1',\n\t\"Acirc\":                     '\\U000000C2',\n\t\"Agrave\":                    '\\U000000C0',\n\t\"Aring\":                     '\\U000000C5',\n\t\"Atilde\":                    '\\U000000C3',\n\t\"Auml\":                      '\\U000000C4',\n\t\"COPY\":                      '\\U000000A9',\n\t\"Ccedil\":                    '\\U000000C7',\n\t\"ETH\":                       '\\U000000D0',\n\t\"Eacute\":                    '\\U000000C9',\n\t\"Ecirc\":                     '\\U000000CA',\n\t\"Egrave\":                    '\\U000000C8',\n\t\"Euml\":                      '\\U000000CB',\n\t\"GT\":                        '\\U0000003E',\n\t\"Iacute\":                    '\\U000000CD',\n\t\"Icirc\":                     '\\U000000CE',\n\t\"Igrave\":                    '\\U000000CC',\n\t\"Iuml\":                      '\\U000000CF',\n\t\"LT\":                        '\\U0000003C',\n\t\"Ntilde\":                    '\\U000000D1',\n\t\"Oacute\":                    '\\U000000D3',\n\t\"Ocirc\":                     '\\U000000D4',\n\t\"Ograve\":                    '\\U000000D2',\n\t\"Oslash\":                    '\\U000000D8',\n\t\"Otilde\":                    '\\U000000D5',\n\t\"Ouml\":                      '\\U000000D6',\n\t\"QUOT\":                      '\\U00000022',\n\t\"REG\":                       '\\U000000AE',\n\t\"THORN\":                     '\\U000000DE',\n\t\"Uacute\":                    '\\U000000DA',\n\t\"Ucirc\":                     '\\U000000DB',\n\t\"Ugrave\":                    '\\U000000D9',\n\t\"Uuml\":                      '\\U000000DC',\n\t\"Yacute\":                    '\\U000000DD',\n\t\"aacute\":                    '\\U000000E1',\n\t\"acirc\":                     '\\U000000E2',\n\t\"acute\":                     '\\U000000B4',\n\t\"aelig\":                     '\\U000000E6',\n\t\"agrave\":                    '\\U000000E0',\n\t\"amp\":                       '\\U00000026',\n\t\"aring\":                     '\\U000000E5',\n\t\"atilde\":                    '\\U000000E3',\n\t\"auml\":                      '\\U000000E4',\n\t\"brvbar\":                    '\\U000000A6',\n\t\"ccedil\":                    '\\U000000E7',\n\t\"cedil\":                     '\\U000000B8',\n\t\"cent\":                      '\\U000000A2',\n\t\"copy\":                      '\\U000000A9',\n\t\"curren\":                    '\\U000000A4',\n\t\"deg\":                       '\\U000000B0',\n\t\"divide\":                    '\\U000000F7',\n\t\"eacute\":                    '\\U000000E9',\n\t\"ecirc\":                     '\\U000000EA',\n\t\"egrave\":                    '\\U000000E8',\n\t\"eth\":                       '\\U000000F0',\n\t\"euml\":                      '\\U000000EB',\n\t\"frac12\":                    '\\U000000BD',\n\t\"frac14\":                    '\\U000000BC',\n\t\"frac34\":                    '\\U000000BE',\n\t\"gt\":                        '\\U0000003E',\n\t\"iacute\":                    '\\U000000ED',\n\t\"icirc\":                     '\\U000000EE',\n\t\"iexcl\":                     '\\U000000A1',\n\t\"igrave\":                    '\\U000000EC',\n\t\"iquest\":                    '\\U000000BF',\n\t\"iuml\":                      '\\U000000EF',\n\t\"laquo\":                     '\\U000000AB',\n\t\"lt\":                        '\\U0000003C',\n\t\"macr\":                      '\\U000000AF',\n\t\"micro\":                     '\\U000000B5',\n\t\"middot\":                    '\\U000000B7',\n\t\"nbsp\":                      '\\U000000A0',\n\t\"not\":                       '\\U000000AC',\n\t\"ntilde\":                    '\\U000000F1',\n\t\"oacute\":                    '\\U000000F3',\n\t\"ocirc\":                     '\\U000000F4',\n\t\"ograve\":                    '\\U000000F2',\n\t\"ordf\":                      '\\U000000AA',\n\t\"ordm\":                      '\\U000000BA',\n\t\"oslash\":                    '\\U000000F8',\n\t\"otilde\":                    '\\U000000F5',\n\t\"ouml\":                      '\\U000000F6',\n\t\"para\":                      '\\U000000B6',\n\t\"plusmn\":                    '\\U000000B1',\n\t\"pound\":                     '\\U000000A3',\n\t\"quot\":                      '\\U00000022',\n\t\"raquo\":                     '\\U000000BB',\n\t\"reg\":                       '\\U000000AE',\n\t\"sect\":                      '\\U000000A7',\n\t\"shy\":                       '\\U000000AD',\n\t\"sup1\":                      '\\U000000B9',\n\t\"sup2\":                      '\\U000000B2',\n\t\"sup3\":                      '\\U000000B3',\n\t\"szlig\":                     '\\U000000DF',\n\t\"thorn\":                     '\\U000000FE',\n\t\"times\":                     '\\U000000D7',\n\t\"uacute\":                    '\\U000000FA',\n\t\"ucirc\":                     '\\U000000FB',\n\t\"ugrave\":                    '\\U000000F9',\n\t\"uml\":                       '\\U000000A8',\n\t\"uuml\":                      '\\U000000FC',\n\t\"yacute\":                    '\\U000000FD',\n\t\"yen\":                       '\\U000000A5',\n\t\"yuml\":                      '\\U000000FF',\n}\n\n// HTML entities that are two unicode codepoints.\nvar entity2 = map[string][2]rune{\n\t// TODO(nigeltao): Handle replacements that are wider than their names.\n\t// \"nLt;\":                     {'\\u226A', '\\u20D2'},\n\t// \"nGt;\":                     {'\\u226B', '\\u20D2'},\n\t\"NotEqualTilde;\":           {'\\u2242', '\\u0338'},\n\t\"NotGreaterFullEqual;\":     {'\\u2267', '\\u0338'},\n\t\"NotGreaterGreater;\":       {'\\u226B', '\\u0338'},\n\t\"NotGreaterSlantEqual;\":    {'\\u2A7E', '\\u0338'},\n\t\"NotHumpDownHump;\":         {'\\u224E', '\\u0338'},\n\t\"NotHumpEqual;\":            {'\\u224F', '\\u0338'},\n\t\"NotLeftTriangleBar;\":      {'\\u29CF', '\\u0338'},\n\t\"NotLessLess;\":             {'\\u226A', '\\u0338'},\n\t\"NotLessSlantEqual;\":       {'\\u2A7D', '\\u0338'},\n\t\"NotNestedGreaterGreater;\": {'\\u2AA2', '\\u0338'},\n\t\"NotNestedLessLess;\":       {'\\u2AA1', '\\u0338'},\n\t\"NotPrecedesEqual;\":        {'\\u2AAF', '\\u0338'},\n\t\"NotRightTriangleBar;\":     {'\\u29D0', '\\u0338'},\n\t\"NotSquareSubset;\":         {'\\u228F', '\\u0338'},\n\t\"NotSquareSuperset;\":       {'\\u2290', '\\u0338'},\n\t\"NotSubset;\":               {'\\u2282', '\\u20D2'},\n\t\"NotSucceedsEqual;\":        {'\\u2AB0', '\\u0338'},\n\t\"NotSucceedsTilde;\":        {'\\u227F', '\\u0338'},\n\t\"NotSuperset;\":             {'\\u2283', '\\u20D2'},\n\t\"ThickSpace;\":              {'\\u205F', '\\u200A'},\n\t\"acE;\":                     {'\\u223E', '\\u0333'},\n\t\"bne;\":                     {'\\u003D', '\\u20E5'},\n\t\"bnequiv;\":                 {'\\u2261', '\\u20E5'},\n\t\"caps;\":                    {'\\u2229', '\\uFE00'},\n\t\"cups;\":                    {'\\u222A', '\\uFE00'},\n\t\"fjlig;\":                   {'\\u0066', '\\u006A'},\n\t\"gesl;\":                    {'\\u22DB', '\\uFE00'},\n\t\"gvertneqq;\":               {'\\u2269', '\\uFE00'},\n\t\"gvnE;\":                    {'\\u2269', '\\uFE00'},\n\t\"lates;\":                   {'\\u2AAD', '\\uFE00'},\n\t\"lesg;\":                    {'\\u22DA', '\\uFE00'},\n\t\"lvertneqq;\":               {'\\u2268', '\\uFE00'},\n\t\"lvnE;\":                    {'\\u2268', '\\uFE00'},\n\t\"nGg;\":                     {'\\u22D9', '\\u0338'},\n\t\"nGtv;\":                    {'\\u226B', '\\u0338'},\n\t\"nLl;\":                     {'\\u22D8', '\\u0338'},\n\t\"nLtv;\":                    {'\\u226A', '\\u0338'},\n\t\"nang;\":                    {'\\u2220', '\\u20D2'},\n\t\"napE;\":                    {'\\u2A70', '\\u0338'},\n\t\"napid;\":                   {'\\u224B', '\\u0338'},\n\t\"nbump;\":                   {'\\u224E', '\\u0338'},\n\t\"nbumpe;\":                  {'\\u224F', '\\u0338'},\n\t\"ncongdot;\":                {'\\u2A6D', '\\u0338'},\n\t\"nedot;\":                   {'\\u2250', '\\u0338'},\n\t\"nesim;\":                   {'\\u2242', '\\u0338'},\n\t\"ngE;\":                     {'\\u2267', '\\u0338'},\n\t\"ngeqq;\":                   {'\\u2267', '\\u0338'},\n\t\"ngeqslant;\":               {'\\u2A7E', '\\u0338'},\n\t\"nges;\":                    {'\\u2A7E', '\\u0338'},\n\t\"nlE;\":                     {'\\u2266', '\\u0338'},\n\t\"nleqq;\":                   {'\\u2266', '\\u0338'},\n\t\"nleqslant;\":               {'\\u2A7D', '\\u0338'},\n\t\"nles;\":                    {'\\u2A7D', '\\u0338'},\n\t\"notinE;\":                  {'\\u22F9', '\\u0338'},\n\t\"notindot;\":                {'\\u22F5', '\\u0338'},\n\t\"nparsl;\":                  {'\\u2AFD', '\\u20E5'},\n\t\"npart;\":                   {'\\u2202', '\\u0338'},\n\t\"npre;\":                    {'\\u2AAF', '\\u0338'},\n\t\"npreceq;\":                 {'\\u2AAF', '\\u0338'},\n\t\"nrarrc;\":                  {'\\u2933', '\\u0338'},\n\t\"nrarrw;\":                  {'\\u219D', '\\u0338'},\n\t\"nsce;\":                    {'\\u2AB0', '\\u0338'},\n\t\"nsubE;\":                   {'\\u2AC5', '\\u0338'},\n\t\"nsubset;\":                 {'\\u2282', '\\u20D2'},\n\t\"nsubseteqq;\":              {'\\u2AC5', '\\u0338'},\n\t\"nsucceq;\":                 {'\\u2AB0', '\\u0338'},\n\t\"nsupE;\":                   {'\\u2AC6', '\\u0338'},\n\t\"nsupset;\":                 {'\\u2283', '\\u20D2'},\n\t\"nsupseteqq;\":              {'\\u2AC6', '\\u0338'},\n\t\"nvap;\":                    {'\\u224D', '\\u20D2'},\n\t\"nvge;\":                    {'\\u2265', '\\u20D2'},\n\t\"nvgt;\":                    {'\\u003E', '\\u20D2'},\n\t\"nvle;\":                    {'\\u2264', '\\u20D2'},\n\t\"nvlt;\":                    {'\\u003C', '\\u20D2'},\n\t\"nvltrie;\":                 {'\\u22B4', '\\u20D2'},\n\t\"nvrtrie;\":                 {'\\u22B5', '\\u20D2'},\n\t\"nvsim;\":                   {'\\u223C', '\\u20D2'},\n\t\"race;\":                    {'\\u223D', '\\u0331'},\n\t\"smtes;\":                   {'\\u2AAC', '\\uFE00'},\n\t\"sqcaps;\":                  {'\\u2293', '\\uFE00'},\n\t\"sqcups;\":                  {'\\u2294', '\\uFE00'},\n\t\"varsubsetneq;\":            {'\\u228A', '\\uFE00'},\n\t\"varsubsetneqq;\":           {'\\u2ACB', '\\uFE00'},\n\t\"varsupsetneq;\":            {'\\u228B', '\\uFE00'},\n\t\"varsupsetneqq;\":           {'\\u2ACC', '\\uFE00'},\n\t\"vnsub;\":                   {'\\u2282', '\\u20D2'},\n\t\"vnsup;\":                   {'\\u2283', '\\u20D2'},\n\t\"vsubnE;\":                  {'\\u2ACB', '\\uFE00'},\n\t\"vsubne;\":                  {'\\u228A', '\\uFE00'},\n\t\"vsupnE;\":                  {'\\u2ACC', '\\uFE00'},\n\t\"vsupne;\":                  {'\\u228B', '\\uFE00'},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/escape.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage html\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n// These replacements permit compatibility with old numeric entities that\n// assumed Windows-1252 encoding.\n// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference\nvar replacementTable = [...]rune{\n\t'\\u20AC', // First entry is what 0x80 should be replaced with.\n\t'\\u0081',\n\t'\\u201A',\n\t'\\u0192',\n\t'\\u201E',\n\t'\\u2026',\n\t'\\u2020',\n\t'\\u2021',\n\t'\\u02C6',\n\t'\\u2030',\n\t'\\u0160',\n\t'\\u2039',\n\t'\\u0152',\n\t'\\u008D',\n\t'\\u017D',\n\t'\\u008F',\n\t'\\u0090',\n\t'\\u2018',\n\t'\\u2019',\n\t'\\u201C',\n\t'\\u201D',\n\t'\\u2022',\n\t'\\u2013',\n\t'\\u2014',\n\t'\\u02DC',\n\t'\\u2122',\n\t'\\u0161',\n\t'\\u203A',\n\t'\\u0153',\n\t'\\u009D',\n\t'\\u017E',\n\t'\\u0178', // Last entry is 0x9F.\n\t// 0x00->'\\uFFFD' is handled programmatically.\n\t// 0x0D->'\\u000D' is a no-op.\n}\n\n// unescapeEntity reads an entity like \"&lt;\" from b[src:] and writes the\n// corresponding \"<\" to b[dst:], returning the incremented dst and src cursors.\n// Precondition: b[src] == '&' && dst <= src.\n// attribute should be true if parsing an attribute value.\nfunc unescapeEntity(b []byte, dst, src int, attribute bool) (dst1, src1 int) {\n\t// https://html.spec.whatwg.org/multipage/syntax.html#consume-a-character-reference\n\n\t// i starts at 1 because we already know that s[0] == '&'.\n\ti, s := 1, b[src:]\n\n\tif len(s) <= 1 {\n\t\tb[dst] = b[src]\n\t\treturn dst + 1, src + 1\n\t}\n\n\tif s[i] == '#' {\n\t\tif len(s) <= 3 { // We need to have at least \"&#.\".\n\t\t\tb[dst] = b[src]\n\t\t\treturn dst + 1, src + 1\n\t\t}\n\t\ti++\n\t\tc := s[i]\n\t\thex := false\n\t\tif c == 'x' || c == 'X' {\n\t\t\thex = true\n\t\t\ti++\n\t\t}\n\n\t\tx := '\\x00'\n\t\tfor i < len(s) {\n\t\t\tc = s[i]\n\t\t\ti++\n\t\t\tif hex {\n\t\t\t\tif '0' <= c && c <= '9' {\n\t\t\t\t\tx = 16*x + rune(c) - '0'\n\t\t\t\t\tcontinue\n\t\t\t\t} else if 'a' <= c && c <= 'f' {\n\t\t\t\t\tx = 16*x + rune(c) - 'a' + 10\n\t\t\t\t\tcontinue\n\t\t\t\t} else if 'A' <= c && c <= 'F' {\n\t\t\t\t\tx = 16*x + rune(c) - 'A' + 10\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t} else if '0' <= c && c <= '9' {\n\t\t\t\tx = 10*x + rune(c) - '0'\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif c != ';' {\n\t\t\t\ti--\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\tif i <= 3 { // No characters matched.\n\t\t\tb[dst] = b[src]\n\t\t\treturn dst + 1, src + 1\n\t\t}\n\n\t\tif 0x80 <= x && x <= 0x9F {\n\t\t\t// Replace characters from Windows-1252 with UTF-8 equivalents.\n\t\t\tx = replacementTable[x-0x80]\n\t\t} else if x == 0 || (0xD800 <= x && x <= 0xDFFF) || x > 0x10FFFF {\n\t\t\t// Replace invalid characters with the replacement character.\n\t\t\tx = '\\uFFFD'\n\t\t}\n\n\t\treturn dst + utf8.EncodeRune(b[dst:], x), src + i\n\t}\n\n\t// Consume the maximum number of characters possible, with the\n\t// consumed characters matching one of the named references.\n\n\tfor i < len(s) {\n\t\tc := s[i]\n\t\ti++\n\t\t// Lower-cased characters are more common in entities, so we check for them first.\n\t\tif 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' {\n\t\t\tcontinue\n\t\t}\n\t\tif c != ';' {\n\t\t\ti--\n\t\t}\n\t\tbreak\n\t}\n\n\tentityName := string(s[1:i])\n\tif entityName == \"\" {\n\t\t// No-op.\n\t} else if attribute && entityName[len(entityName)-1] != ';' && len(s) > i && s[i] == '=' {\n\t\t// No-op.\n\t} else if x := entity[entityName]; x != 0 {\n\t\treturn dst + utf8.EncodeRune(b[dst:], x), src + i\n\t} else if x := entity2[entityName]; x[0] != 0 {\n\t\tdst1 := dst + utf8.EncodeRune(b[dst:], x[0])\n\t\treturn dst1 + utf8.EncodeRune(b[dst1:], x[1]), src + i\n\t} else if !attribute {\n\t\tmaxLen := len(entityName) - 1\n\t\tif maxLen > longestEntityWithoutSemicolon {\n\t\t\tmaxLen = longestEntityWithoutSemicolon\n\t\t}\n\t\tfor j := maxLen; j > 1; j-- {\n\t\t\tif x := entity[entityName[:j]]; x != 0 {\n\t\t\t\treturn dst + utf8.EncodeRune(b[dst:], x), src + j + 1\n\t\t\t}\n\t\t}\n\t}\n\n\tdst1, src1 = dst+i, src+i\n\tcopy(b[dst:dst1], b[src:src1])\n\treturn dst1, src1\n}\n\n// unescape unescapes b's entities in-place, so that \"a&lt;b\" becomes \"a<b\".\n// attribute should be true if parsing an attribute value.\nfunc unescape(b []byte, attribute bool) []byte {\n\tfor i, c := range b {\n\t\tif c == '&' {\n\t\t\tdst, src := unescapeEntity(b, i, i, attribute)\n\t\t\tfor src < len(b) {\n\t\t\t\tc := b[src]\n\t\t\t\tif c == '&' {\n\t\t\t\t\tdst, src = unescapeEntity(b, dst, src, attribute)\n\t\t\t\t} else {\n\t\t\t\t\tb[dst] = c\n\t\t\t\t\tdst, src = dst+1, src+1\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn b[0:dst]\n\t\t}\n\t}\n\treturn b\n}\n\n// lower lower-cases the A-Z bytes in b in-place, so that \"aBc\" becomes \"abc\".\nfunc lower(b []byte) []byte {\n\tfor i, c := range b {\n\t\tif 'A' <= c && c <= 'Z' {\n\t\t\tb[i] = c + 'a' - 'A'\n\t\t}\n\t}\n\treturn b\n}\n\nconst escapedChars = \"&'<>\\\"\\r\"\n\nfunc escape(w writer, s string) error {\n\ti := strings.IndexAny(s, escapedChars)\n\tfor i != -1 {\n\t\tif _, err := w.WriteString(s[:i]); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvar esc string\n\t\tswitch s[i] {\n\t\tcase '&':\n\t\t\tesc = \"&amp;\"\n\t\tcase '\\'':\n\t\t\t// \"&#39;\" is shorter than \"&apos;\" and apos was not in HTML until HTML5.\n\t\t\tesc = \"&#39;\"\n\t\tcase '<':\n\t\t\tesc = \"&lt;\"\n\t\tcase '>':\n\t\t\tesc = \"&gt;\"\n\t\tcase '\"':\n\t\t\t// \"&#34;\" is shorter than \"&quot;\".\n\t\t\tesc = \"&#34;\"\n\t\tcase '\\r':\n\t\t\tesc = \"&#13;\"\n\t\tdefault:\n\t\t\tpanic(\"unrecognized escape character\")\n\t\t}\n\t\ts = s[i+1:]\n\t\tif _, err := w.WriteString(esc); err != nil {\n\t\t\treturn err\n\t\t}\n\t\ti = strings.IndexAny(s, escapedChars)\n\t}\n\t_, err := w.WriteString(s)\n\treturn err\n}\n\n// EscapeString escapes special characters like \"<\" to become \"&lt;\". It\n// escapes only five such characters: <, >, &, ' and \".\n// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't\n// always true.\nfunc EscapeString(s string) string {\n\tif strings.IndexAny(s, escapedChars) == -1 {\n\t\treturn s\n\t}\n\tvar buf bytes.Buffer\n\tescape(&buf, s)\n\treturn buf.String()\n}\n\n// UnescapeString unescapes entities like \"&lt;\" to become \"<\". It unescapes a\n// larger range of entities than EscapeString escapes. For example, \"&aacute;\"\n// unescapes to \"á\", as does \"&#225;\" and \"&xE1;\".\n// UnescapeString(EscapeString(s)) == s always holds, but the converse isn't\n// always true.\nfunc UnescapeString(s string) string {\n\tfor _, c := range s {\n\t\tif c == '&' {\n\t\t\treturn string(unescape([]byte(s), false))\n\t\t}\n\t}\n\treturn s\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/foreign.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage html\n\nimport (\n\t\"strings\"\n)\n\nfunc adjustAttributeNames(aa []Attribute, nameMap map[string]string) {\n\tfor i := range aa {\n\t\tif newName, ok := nameMap[aa[i].Key]; ok {\n\t\t\taa[i].Key = newName\n\t\t}\n\t}\n}\n\nfunc adjustForeignAttributes(aa []Attribute) {\n\tfor i, a := range aa {\n\t\tif a.Key == \"\" || a.Key[0] != 'x' {\n\t\t\tcontinue\n\t\t}\n\t\tswitch a.Key {\n\t\tcase \"xlink:actuate\", \"xlink:arcrole\", \"xlink:href\", \"xlink:role\", \"xlink:show\",\n\t\t\t\"xlink:title\", \"xlink:type\", \"xml:base\", \"xml:lang\", \"xml:space\", \"xmlns:xlink\":\n\t\t\tj := strings.Index(a.Key, \":\")\n\t\t\taa[i].Namespace = a.Key[:j]\n\t\t\taa[i].Key = a.Key[j+1:]\n\t\t}\n\t}\n}\n\nfunc htmlIntegrationPoint(n *Node) bool {\n\tif n.Type != ElementNode {\n\t\treturn false\n\t}\n\tswitch n.Namespace {\n\tcase \"math\":\n\t\tif n.Data == \"annotation-xml\" {\n\t\t\tfor _, a := range n.Attr {\n\t\t\t\tif a.Key == \"encoding\" {\n\t\t\t\t\tval := strings.ToLower(a.Val)\n\t\t\t\t\tif val == \"text/html\" || val == \"application/xhtml+xml\" {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase \"svg\":\n\t\tswitch n.Data {\n\t\tcase \"desc\", \"foreignObject\", \"title\":\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc mathMLTextIntegrationPoint(n *Node) bool {\n\tif n.Namespace != \"math\" {\n\t\treturn false\n\t}\n\tswitch n.Data {\n\tcase \"mi\", \"mo\", \"mn\", \"ms\", \"mtext\":\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Section 12.2.5.5.\nvar breakout = map[string]bool{\n\t\"b\":          true,\n\t\"big\":        true,\n\t\"blockquote\": true,\n\t\"body\":       true,\n\t\"br\":         true,\n\t\"center\":     true,\n\t\"code\":       true,\n\t\"dd\":         true,\n\t\"div\":        true,\n\t\"dl\":         true,\n\t\"dt\":         true,\n\t\"em\":         true,\n\t\"embed\":      true,\n\t\"h1\":         true,\n\t\"h2\":         true,\n\t\"h3\":         true,\n\t\"h4\":         true,\n\t\"h5\":         true,\n\t\"h6\":         true,\n\t\"head\":       true,\n\t\"hr\":         true,\n\t\"i\":          true,\n\t\"img\":        true,\n\t\"li\":         true,\n\t\"listing\":    true,\n\t\"menu\":       true,\n\t\"meta\":       true,\n\t\"nobr\":       true,\n\t\"ol\":         true,\n\t\"p\":          true,\n\t\"pre\":        true,\n\t\"ruby\":       true,\n\t\"s\":          true,\n\t\"small\":      true,\n\t\"span\":       true,\n\t\"strong\":     true,\n\t\"strike\":     true,\n\t\"sub\":        true,\n\t\"sup\":        true,\n\t\"table\":      true,\n\t\"tt\":         true,\n\t\"u\":          true,\n\t\"ul\":         true,\n\t\"var\":        true,\n}\n\n// Section 12.2.5.5.\nvar svgTagNameAdjustments = map[string]string{\n\t\"altglyph\":            \"altGlyph\",\n\t\"altglyphdef\":         \"altGlyphDef\",\n\t\"altglyphitem\":        \"altGlyphItem\",\n\t\"animatecolor\":        \"animateColor\",\n\t\"animatemotion\":       \"animateMotion\",\n\t\"animatetransform\":    \"animateTransform\",\n\t\"clippath\":            \"clipPath\",\n\t\"feblend\":             \"feBlend\",\n\t\"fecolormatrix\":       \"feColorMatrix\",\n\t\"fecomponenttransfer\": \"feComponentTransfer\",\n\t\"fecomposite\":         \"feComposite\",\n\t\"feconvolvematrix\":    \"feConvolveMatrix\",\n\t\"fediffuselighting\":   \"feDiffuseLighting\",\n\t\"fedisplacementmap\":   \"feDisplacementMap\",\n\t\"fedistantlight\":      \"feDistantLight\",\n\t\"feflood\":             \"feFlood\",\n\t\"fefunca\":             \"feFuncA\",\n\t\"fefuncb\":             \"feFuncB\",\n\t\"fefuncg\":             \"feFuncG\",\n\t\"fefuncr\":             \"feFuncR\",\n\t\"fegaussianblur\":      \"feGaussianBlur\",\n\t\"feimage\":             \"feImage\",\n\t\"femerge\":             \"feMerge\",\n\t\"femergenode\":         \"feMergeNode\",\n\t\"femorphology\":        \"feMorphology\",\n\t\"feoffset\":            \"feOffset\",\n\t\"fepointlight\":        \"fePointLight\",\n\t\"fespecularlighting\":  \"feSpecularLighting\",\n\t\"fespotlight\":         \"feSpotLight\",\n\t\"fetile\":              \"feTile\",\n\t\"feturbulence\":        \"feTurbulence\",\n\t\"foreignobject\":       \"foreignObject\",\n\t\"glyphref\":            \"glyphRef\",\n\t\"lineargradient\":      \"linearGradient\",\n\t\"radialgradient\":      \"radialGradient\",\n\t\"textpath\":            \"textPath\",\n}\n\n// Section 12.2.5.1\nvar mathMLAttributeAdjustments = map[string]string{\n\t\"definitionurl\": \"definitionURL\",\n}\n\nvar svgAttributeAdjustments = map[string]string{\n\t\"attributename\":             \"attributeName\",\n\t\"attributetype\":             \"attributeType\",\n\t\"basefrequency\":             \"baseFrequency\",\n\t\"baseprofile\":               \"baseProfile\",\n\t\"calcmode\":                  \"calcMode\",\n\t\"clippathunits\":             \"clipPathUnits\",\n\t\"contentscripttype\":         \"contentScriptType\",\n\t\"contentstyletype\":          \"contentStyleType\",\n\t\"diffuseconstant\":           \"diffuseConstant\",\n\t\"edgemode\":                  \"edgeMode\",\n\t\"externalresourcesrequired\": \"externalResourcesRequired\",\n\t\"filterres\":                 \"filterRes\",\n\t\"filterunits\":               \"filterUnits\",\n\t\"glyphref\":                  \"glyphRef\",\n\t\"gradienttransform\":         \"gradientTransform\",\n\t\"gradientunits\":             \"gradientUnits\",\n\t\"kernelmatrix\":              \"kernelMatrix\",\n\t\"kernelunitlength\":          \"kernelUnitLength\",\n\t\"keypoints\":                 \"keyPoints\",\n\t\"keysplines\":                \"keySplines\",\n\t\"keytimes\":                  \"keyTimes\",\n\t\"lengthadjust\":              \"lengthAdjust\",\n\t\"limitingconeangle\":         \"limitingConeAngle\",\n\t\"markerheight\":              \"markerHeight\",\n\t\"markerunits\":               \"markerUnits\",\n\t\"markerwidth\":               \"markerWidth\",\n\t\"maskcontentunits\":          \"maskContentUnits\",\n\t\"maskunits\":                 \"maskUnits\",\n\t\"numoctaves\":                \"numOctaves\",\n\t\"pathlength\":                \"pathLength\",\n\t\"patterncontentunits\":       \"patternContentUnits\",\n\t\"patterntransform\":          \"patternTransform\",\n\t\"patternunits\":              \"patternUnits\",\n\t\"pointsatx\":                 \"pointsAtX\",\n\t\"pointsaty\":                 \"pointsAtY\",\n\t\"pointsatz\":                 \"pointsAtZ\",\n\t\"preservealpha\":             \"preserveAlpha\",\n\t\"preserveaspectratio\":       \"preserveAspectRatio\",\n\t\"primitiveunits\":            \"primitiveUnits\",\n\t\"refx\":                      \"refX\",\n\t\"refy\":                      \"refY\",\n\t\"repeatcount\":               \"repeatCount\",\n\t\"repeatdur\":                 \"repeatDur\",\n\t\"requiredextensions\":        \"requiredExtensions\",\n\t\"requiredfeatures\":          \"requiredFeatures\",\n\t\"specularconstant\":          \"specularConstant\",\n\t\"specularexponent\":          \"specularExponent\",\n\t\"spreadmethod\":              \"spreadMethod\",\n\t\"startoffset\":               \"startOffset\",\n\t\"stddeviation\":              \"stdDeviation\",\n\t\"stitchtiles\":               \"stitchTiles\",\n\t\"surfacescale\":              \"surfaceScale\",\n\t\"systemlanguage\":            \"systemLanguage\",\n\t\"tablevalues\":               \"tableValues\",\n\t\"targetx\":                   \"targetX\",\n\t\"targety\":                   \"targetY\",\n\t\"textlength\":                \"textLength\",\n\t\"viewbox\":                   \"viewBox\",\n\t\"viewtarget\":                \"viewTarget\",\n\t\"xchannelselector\":          \"xChannelSelector\",\n\t\"ychannelselector\":          \"yChannelSelector\",\n\t\"zoomandpan\":                \"zoomAndPan\",\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/node.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage html\n\nimport (\n\t\"golang.org/x/net/html/atom\"\n)\n\n// A NodeType is the type of a Node.\ntype NodeType uint32\n\nconst (\n\tErrorNode NodeType = iota\n\tTextNode\n\tDocumentNode\n\tElementNode\n\tCommentNode\n\tDoctypeNode\n\tscopeMarkerNode\n)\n\n// Section 12.2.3.3 says \"scope markers are inserted when entering applet\n// elements, buttons, object elements, marquees, table cells, and table\n// captions, and are used to prevent formatting from 'leaking'\".\nvar scopeMarker = Node{Type: scopeMarkerNode}\n\n// A Node consists of a NodeType and some Data (tag name for element nodes,\n// content for text) and are part of a tree of Nodes. Element nodes may also\n// have a Namespace and contain a slice of Attributes. Data is unescaped, so\n// that it looks like \"a<b\" rather than \"a&lt;b\". For element nodes, DataAtom\n// is the atom for Data, or zero if Data is not a known tag name.\n//\n// An empty Namespace implies a \"http://www.w3.org/1999/xhtml\" namespace.\n// Similarly, \"math\" is short for \"http://www.w3.org/1998/Math/MathML\", and\n// \"svg\" is short for \"http://www.w3.org/2000/svg\".\ntype Node struct {\n\tParent, FirstChild, LastChild, PrevSibling, NextSibling *Node\n\n\tType      NodeType\n\tDataAtom  atom.Atom\n\tData      string\n\tNamespace string\n\tAttr      []Attribute\n}\n\n// InsertBefore inserts newChild as a child of n, immediately before oldChild\n// in the sequence of n's children. oldChild may be nil, in which case newChild\n// is appended to the end of n's children.\n//\n// It will panic if newChild already has a parent or siblings.\nfunc (n *Node) InsertBefore(newChild, oldChild *Node) {\n\tif newChild.Parent != nil || newChild.PrevSibling != nil || newChild.NextSibling != nil {\n\t\tpanic(\"html: InsertBefore called for an attached child Node\")\n\t}\n\tvar prev, next *Node\n\tif oldChild != nil {\n\t\tprev, next = oldChild.PrevSibling, oldChild\n\t} else {\n\t\tprev = n.LastChild\n\t}\n\tif prev != nil {\n\t\tprev.NextSibling = newChild\n\t} else {\n\t\tn.FirstChild = newChild\n\t}\n\tif next != nil {\n\t\tnext.PrevSibling = newChild\n\t} else {\n\t\tn.LastChild = newChild\n\t}\n\tnewChild.Parent = n\n\tnewChild.PrevSibling = prev\n\tnewChild.NextSibling = next\n}\n\n// AppendChild adds a node c as a child of n.\n//\n// It will panic if c already has a parent or siblings.\nfunc (n *Node) AppendChild(c *Node) {\n\tif c.Parent != nil || c.PrevSibling != nil || c.NextSibling != nil {\n\t\tpanic(\"html: AppendChild called for an attached child Node\")\n\t}\n\tlast := n.LastChild\n\tif last != nil {\n\t\tlast.NextSibling = c\n\t} else {\n\t\tn.FirstChild = c\n\t}\n\tn.LastChild = c\n\tc.Parent = n\n\tc.PrevSibling = last\n}\n\n// RemoveChild removes a node c that is a child of n. Afterwards, c will have\n// no parent and no siblings.\n//\n// It will panic if c's parent is not n.\nfunc (n *Node) RemoveChild(c *Node) {\n\tif c.Parent != n {\n\t\tpanic(\"html: RemoveChild called for a non-child Node\")\n\t}\n\tif n.FirstChild == c {\n\t\tn.FirstChild = c.NextSibling\n\t}\n\tif c.NextSibling != nil {\n\t\tc.NextSibling.PrevSibling = c.PrevSibling\n\t}\n\tif n.LastChild == c {\n\t\tn.LastChild = c.PrevSibling\n\t}\n\tif c.PrevSibling != nil {\n\t\tc.PrevSibling.NextSibling = c.NextSibling\n\t}\n\tc.Parent = nil\n\tc.PrevSibling = nil\n\tc.NextSibling = nil\n}\n\n// reparentChildren reparents all of src's child nodes to dst.\nfunc reparentChildren(dst, src *Node) {\n\tfor {\n\t\tchild := src.FirstChild\n\t\tif child == nil {\n\t\t\tbreak\n\t\t}\n\t\tsrc.RemoveChild(child)\n\t\tdst.AppendChild(child)\n\t}\n}\n\n// clone returns a new node with the same type, data and attributes.\n// The clone has no parent, no siblings and no children.\nfunc (n *Node) clone() *Node {\n\tm := &Node{\n\t\tType:     n.Type,\n\t\tDataAtom: n.DataAtom,\n\t\tData:     n.Data,\n\t\tAttr:     make([]Attribute, len(n.Attr)),\n\t}\n\tcopy(m.Attr, n.Attr)\n\treturn m\n}\n\n// nodeStack is a stack of nodes.\ntype nodeStack []*Node\n\n// pop pops the stack. It will panic if s is empty.\nfunc (s *nodeStack) pop() *Node {\n\ti := len(*s)\n\tn := (*s)[i-1]\n\t*s = (*s)[:i-1]\n\treturn n\n}\n\n// top returns the most recently pushed node, or nil if s is empty.\nfunc (s *nodeStack) top() *Node {\n\tif i := len(*s); i > 0 {\n\t\treturn (*s)[i-1]\n\t}\n\treturn nil\n}\n\n// index returns the index of the top-most occurrence of n in the stack, or -1\n// if n is not present.\nfunc (s *nodeStack) index(n *Node) int {\n\tfor i := len(*s) - 1; i >= 0; i-- {\n\t\tif (*s)[i] == n {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// insert inserts a node at the given index.\nfunc (s *nodeStack) insert(i int, n *Node) {\n\t(*s) = append(*s, nil)\n\tcopy((*s)[i+1:], (*s)[i:])\n\t(*s)[i] = n\n}\n\n// remove removes a node from the stack. It is a no-op if n is not present.\nfunc (s *nodeStack) remove(n *Node) {\n\ti := s.index(n)\n\tif i == -1 {\n\t\treturn\n\t}\n\tcopy((*s)[i:], (*s)[i+1:])\n\tj := len(*s) - 1\n\t(*s)[j] = nil\n\t*s = (*s)[:j]\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/parse.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage html\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\n\ta \"golang.org/x/net/html/atom\"\n)\n\n// A parser implements the HTML5 parsing algorithm:\n// https://html.spec.whatwg.org/multipage/syntax.html#tree-construction\ntype parser struct {\n\t// tokenizer provides the tokens for the parser.\n\ttokenizer *Tokenizer\n\t// tok is the most recently read token.\n\ttok Token\n\t// Self-closing tags like <hr/> are treated as start tags, except that\n\t// hasSelfClosingToken is set while they are being processed.\n\thasSelfClosingToken bool\n\t// doc is the document root element.\n\tdoc *Node\n\t// The stack of open elements (section 12.2.3.2) and active formatting\n\t// elements (section 12.2.3.3).\n\toe, afe nodeStack\n\t// Element pointers (section 12.2.3.4).\n\thead, form *Node\n\t// Other parsing state flags (section 12.2.3.5).\n\tscripting, framesetOK bool\n\t// im is the current insertion mode.\n\tim insertionMode\n\t// originalIM is the insertion mode to go back to after completing a text\n\t// or inTableText insertion mode.\n\toriginalIM insertionMode\n\t// fosterParenting is whether new elements should be inserted according to\n\t// the foster parenting rules (section 12.2.5.3).\n\tfosterParenting bool\n\t// quirks is whether the parser is operating in \"quirks mode.\"\n\tquirks bool\n\t// fragment is whether the parser is parsing an HTML fragment.\n\tfragment bool\n\t// context is the context element when parsing an HTML fragment\n\t// (section 12.4).\n\tcontext *Node\n}\n\nfunc (p *parser) top() *Node {\n\tif n := p.oe.top(); n != nil {\n\t\treturn n\n\t}\n\treturn p.doc\n}\n\n// Stop tags for use in popUntil. These come from section 12.2.3.2.\nvar (\n\tdefaultScopeStopTags = map[string][]a.Atom{\n\t\t\"\":     {a.Applet, a.Caption, a.Html, a.Table, a.Td, a.Th, a.Marquee, a.Object, a.Template},\n\t\t\"math\": {a.AnnotationXml, a.Mi, a.Mn, a.Mo, a.Ms, a.Mtext},\n\t\t\"svg\":  {a.Desc, a.ForeignObject, a.Title},\n\t}\n)\n\ntype scope int\n\nconst (\n\tdefaultScope scope = iota\n\tlistItemScope\n\tbuttonScope\n\ttableScope\n\ttableRowScope\n\ttableBodyScope\n\tselectScope\n)\n\n// popUntil pops the stack of open elements at the highest element whose tag\n// is in matchTags, provided there is no higher element in the scope's stop\n// tags (as defined in section 12.2.3.2). It returns whether or not there was\n// such an element. If there was not, popUntil leaves the stack unchanged.\n//\n// For example, the set of stop tags for table scope is: \"html\", \"table\". If\n// the stack was:\n// [\"html\", \"body\", \"font\", \"table\", \"b\", \"i\", \"u\"]\n// then popUntil(tableScope, \"font\") would return false, but\n// popUntil(tableScope, \"i\") would return true and the stack would become:\n// [\"html\", \"body\", \"font\", \"table\", \"b\"]\n//\n// If an element's tag is in both the stop tags and matchTags, then the stack\n// will be popped and the function returns true (provided, of course, there was\n// no higher element in the stack that was also in the stop tags). For example,\n// popUntil(tableScope, \"table\") returns true and leaves:\n// [\"html\", \"body\", \"font\"]\nfunc (p *parser) popUntil(s scope, matchTags ...a.Atom) bool {\n\tif i := p.indexOfElementInScope(s, matchTags...); i != -1 {\n\t\tp.oe = p.oe[:i]\n\t\treturn true\n\t}\n\treturn false\n}\n\n// indexOfElementInScope returns the index in p.oe of the highest element whose\n// tag is in matchTags that is in scope. If no matching element is in scope, it\n// returns -1.\nfunc (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int {\n\tfor i := len(p.oe) - 1; i >= 0; i-- {\n\t\ttagAtom := p.oe[i].DataAtom\n\t\tif p.oe[i].Namespace == \"\" {\n\t\t\tfor _, t := range matchTags {\n\t\t\t\tif t == tagAtom {\n\t\t\t\t\treturn i\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch s {\n\t\t\tcase defaultScope:\n\t\t\t\t// No-op.\n\t\t\tcase listItemScope:\n\t\t\t\tif tagAtom == a.Ol || tagAtom == a.Ul {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\tcase buttonScope:\n\t\t\t\tif tagAtom == a.Button {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\tcase tableScope:\n\t\t\t\tif tagAtom == a.Html || tagAtom == a.Table {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\tcase selectScope:\n\t\t\t\tif tagAtom != a.Optgroup && tagAtom != a.Option {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tpanic(\"unreachable\")\n\t\t\t}\n\t\t}\n\t\tswitch s {\n\t\tcase defaultScope, listItemScope, buttonScope:\n\t\t\tfor _, t := range defaultScopeStopTags[p.oe[i].Namespace] {\n\t\t\t\tif t == tagAtom {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn -1\n}\n\n// elementInScope is like popUntil, except that it doesn't modify the stack of\n// open elements.\nfunc (p *parser) elementInScope(s scope, matchTags ...a.Atom) bool {\n\treturn p.indexOfElementInScope(s, matchTags...) != -1\n}\n\n// clearStackToContext pops elements off the stack of open elements until a\n// scope-defined element is found.\nfunc (p *parser) clearStackToContext(s scope) {\n\tfor i := len(p.oe) - 1; i >= 0; i-- {\n\t\ttagAtom := p.oe[i].DataAtom\n\t\tswitch s {\n\t\tcase tableScope:\n\t\t\tif tagAtom == a.Html || tagAtom == a.Table {\n\t\t\t\tp.oe = p.oe[:i+1]\n\t\t\t\treturn\n\t\t\t}\n\t\tcase tableRowScope:\n\t\t\tif tagAtom == a.Html || tagAtom == a.Tr {\n\t\t\t\tp.oe = p.oe[:i+1]\n\t\t\t\treturn\n\t\t\t}\n\t\tcase tableBodyScope:\n\t\t\tif tagAtom == a.Html || tagAtom == a.Tbody || tagAtom == a.Tfoot || tagAtom == a.Thead {\n\t\t\t\tp.oe = p.oe[:i+1]\n\t\t\t\treturn\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(\"unreachable\")\n\t\t}\n\t}\n}\n\n// generateImpliedEndTags pops nodes off the stack of open elements as long as\n// the top node has a tag name of dd, dt, li, option, optgroup, p, rp, or rt.\n// If exceptions are specified, nodes with that name will not be popped off.\nfunc (p *parser) generateImpliedEndTags(exceptions ...string) {\n\tvar i int\nloop:\n\tfor i = len(p.oe) - 1; i >= 0; i-- {\n\t\tn := p.oe[i]\n\t\tif n.Type == ElementNode {\n\t\t\tswitch n.DataAtom {\n\t\t\tcase a.Dd, a.Dt, a.Li, a.Option, a.Optgroup, a.P, a.Rp, a.Rt:\n\t\t\t\tfor _, except := range exceptions {\n\t\t\t\t\tif n.Data == except {\n\t\t\t\t\t\tbreak loop\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tbreak\n\t}\n\n\tp.oe = p.oe[:i+1]\n}\n\n// addChild adds a child node n to the top element, and pushes n onto the stack\n// of open elements if it is an element node.\nfunc (p *parser) addChild(n *Node) {\n\tif p.shouldFosterParent() {\n\t\tp.fosterParent(n)\n\t} else {\n\t\tp.top().AppendChild(n)\n\t}\n\n\tif n.Type == ElementNode {\n\t\tp.oe = append(p.oe, n)\n\t}\n}\n\n// shouldFosterParent returns whether the next node to be added should be\n// foster parented.\nfunc (p *parser) shouldFosterParent() bool {\n\tif p.fosterParenting {\n\t\tswitch p.top().DataAtom {\n\t\tcase a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// fosterParent adds a child node according to the foster parenting rules.\n// Section 12.2.5.3, \"foster parenting\".\nfunc (p *parser) fosterParent(n *Node) {\n\tvar table, parent, prev *Node\n\tvar i int\n\tfor i = len(p.oe) - 1; i >= 0; i-- {\n\t\tif p.oe[i].DataAtom == a.Table {\n\t\t\ttable = p.oe[i]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif table == nil {\n\t\t// The foster parent is the html element.\n\t\tparent = p.oe[0]\n\t} else {\n\t\tparent = table.Parent\n\t}\n\tif parent == nil {\n\t\tparent = p.oe[i-1]\n\t}\n\n\tif table != nil {\n\t\tprev = table.PrevSibling\n\t} else {\n\t\tprev = parent.LastChild\n\t}\n\tif prev != nil && prev.Type == TextNode && n.Type == TextNode {\n\t\tprev.Data += n.Data\n\t\treturn\n\t}\n\n\tparent.InsertBefore(n, table)\n}\n\n// addText adds text to the preceding node if it is a text node, or else it\n// calls addChild with a new text node.\nfunc (p *parser) addText(text string) {\n\tif text == \"\" {\n\t\treturn\n\t}\n\n\tif p.shouldFosterParent() {\n\t\tp.fosterParent(&Node{\n\t\t\tType: TextNode,\n\t\t\tData: text,\n\t\t})\n\t\treturn\n\t}\n\n\tt := p.top()\n\tif n := t.LastChild; n != nil && n.Type == TextNode {\n\t\tn.Data += text\n\t\treturn\n\t}\n\tp.addChild(&Node{\n\t\tType: TextNode,\n\t\tData: text,\n\t})\n}\n\n// addElement adds a child element based on the current token.\nfunc (p *parser) addElement() {\n\tp.addChild(&Node{\n\t\tType:     ElementNode,\n\t\tDataAtom: p.tok.DataAtom,\n\t\tData:     p.tok.Data,\n\t\tAttr:     p.tok.Attr,\n\t})\n}\n\n// Section 12.2.3.3.\nfunc (p *parser) addFormattingElement() {\n\ttagAtom, attr := p.tok.DataAtom, p.tok.Attr\n\tp.addElement()\n\n\t// Implement the Noah's Ark clause, but with three per family instead of two.\n\tidenticalElements := 0\nfindIdenticalElements:\n\tfor i := len(p.afe) - 1; i >= 0; i-- {\n\t\tn := p.afe[i]\n\t\tif n.Type == scopeMarkerNode {\n\t\t\tbreak\n\t\t}\n\t\tif n.Type != ElementNode {\n\t\t\tcontinue\n\t\t}\n\t\tif n.Namespace != \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif n.DataAtom != tagAtom {\n\t\t\tcontinue\n\t\t}\n\t\tif len(n.Attr) != len(attr) {\n\t\t\tcontinue\n\t\t}\n\tcompareAttributes:\n\t\tfor _, t0 := range n.Attr {\n\t\t\tfor _, t1 := range attr {\n\t\t\t\tif t0.Key == t1.Key && t0.Namespace == t1.Namespace && t0.Val == t1.Val {\n\t\t\t\t\t// Found a match for this attribute, continue with the next attribute.\n\t\t\t\t\tcontinue compareAttributes\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If we get here, there is no attribute that matches a.\n\t\t\t// Therefore the element is not identical to the new one.\n\t\t\tcontinue findIdenticalElements\n\t\t}\n\n\t\tidenticalElements++\n\t\tif identicalElements >= 3 {\n\t\t\tp.afe.remove(n)\n\t\t}\n\t}\n\n\tp.afe = append(p.afe, p.top())\n}\n\n// Section 12.2.3.3.\nfunc (p *parser) clearActiveFormattingElements() {\n\tfor {\n\t\tn := p.afe.pop()\n\t\tif len(p.afe) == 0 || n.Type == scopeMarkerNode {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// Section 12.2.3.3.\nfunc (p *parser) reconstructActiveFormattingElements() {\n\tn := p.afe.top()\n\tif n == nil {\n\t\treturn\n\t}\n\tif n.Type == scopeMarkerNode || p.oe.index(n) != -1 {\n\t\treturn\n\t}\n\ti := len(p.afe) - 1\n\tfor n.Type != scopeMarkerNode && p.oe.index(n) == -1 {\n\t\tif i == 0 {\n\t\t\ti = -1\n\t\t\tbreak\n\t\t}\n\t\ti--\n\t\tn = p.afe[i]\n\t}\n\tfor {\n\t\ti++\n\t\tclone := p.afe[i].clone()\n\t\tp.addChild(clone)\n\t\tp.afe[i] = clone\n\t\tif i == len(p.afe)-1 {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// Section 12.2.4.\nfunc (p *parser) acknowledgeSelfClosingTag() {\n\tp.hasSelfClosingToken = false\n}\n\n// An insertion mode (section 12.2.3.1) is the state transition function from\n// a particular state in the HTML5 parser's state machine. It updates the\n// parser's fields depending on parser.tok (where ErrorToken means EOF).\n// It returns whether the token was consumed.\ntype insertionMode func(*parser) bool\n\n// setOriginalIM sets the insertion mode to return to after completing a text or\n// inTableText insertion mode.\n// Section 12.2.3.1, \"using the rules for\".\nfunc (p *parser) setOriginalIM() {\n\tif p.originalIM != nil {\n\t\tpanic(\"html: bad parser state: originalIM was set twice\")\n\t}\n\tp.originalIM = p.im\n}\n\n// Section 12.2.3.1, \"reset the insertion mode\".\nfunc (p *parser) resetInsertionMode() {\n\tfor i := len(p.oe) - 1; i >= 0; i-- {\n\t\tn := p.oe[i]\n\t\tif i == 0 && p.context != nil {\n\t\t\tn = p.context\n\t\t}\n\n\t\tswitch n.DataAtom {\n\t\tcase a.Select:\n\t\t\tp.im = inSelectIM\n\t\tcase a.Td, a.Th:\n\t\t\tp.im = inCellIM\n\t\tcase a.Tr:\n\t\t\tp.im = inRowIM\n\t\tcase a.Tbody, a.Thead, a.Tfoot:\n\t\t\tp.im = inTableBodyIM\n\t\tcase a.Caption:\n\t\t\tp.im = inCaptionIM\n\t\tcase a.Colgroup:\n\t\t\tp.im = inColumnGroupIM\n\t\tcase a.Table:\n\t\t\tp.im = inTableIM\n\t\tcase a.Head:\n\t\t\tp.im = inBodyIM\n\t\tcase a.Body:\n\t\t\tp.im = inBodyIM\n\t\tcase a.Frameset:\n\t\t\tp.im = inFramesetIM\n\t\tcase a.Html:\n\t\t\tp.im = beforeHeadIM\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\t\treturn\n\t}\n\tp.im = inBodyIM\n}\n\nconst whitespace = \" \\t\\r\\n\\f\"\n\n// Section 12.2.5.4.1.\nfunc initialIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase TextToken:\n\t\tp.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)\n\t\tif len(p.tok.Data) == 0 {\n\t\t\t// It was all whitespace, so ignore it.\n\t\t\treturn true\n\t\t}\n\tcase CommentToken:\n\t\tp.doc.AppendChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\t\treturn true\n\tcase DoctypeToken:\n\t\tn, quirks := parseDoctype(p.tok.Data)\n\t\tp.doc.AppendChild(n)\n\t\tp.quirks = quirks\n\t\tp.im = beforeHTMLIM\n\t\treturn true\n\t}\n\tp.quirks = true\n\tp.im = beforeHTMLIM\n\treturn false\n}\n\n// Section 12.2.5.4.2.\nfunc beforeHTMLIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase DoctypeToken:\n\t\t// Ignore the token.\n\t\treturn true\n\tcase TextToken:\n\t\tp.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)\n\t\tif len(p.tok.Data) == 0 {\n\t\t\t// It was all whitespace, so ignore it.\n\t\t\treturn true\n\t\t}\n\tcase StartTagToken:\n\t\tif p.tok.DataAtom == a.Html {\n\t\t\tp.addElement()\n\t\t\tp.im = beforeHeadIM\n\t\t\treturn true\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Head, a.Body, a.Html, a.Br:\n\t\t\tp.parseImpliedToken(StartTagToken, a.Html, a.Html.String())\n\t\t\treturn false\n\t\tdefault:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\tcase CommentToken:\n\t\tp.doc.AppendChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\t\treturn true\n\t}\n\tp.parseImpliedToken(StartTagToken, a.Html, a.Html.String())\n\treturn false\n}\n\n// Section 12.2.5.4.3.\nfunc beforeHeadIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase TextToken:\n\t\tp.tok.Data = strings.TrimLeft(p.tok.Data, whitespace)\n\t\tif len(p.tok.Data) == 0 {\n\t\t\t// It was all whitespace, so ignore it.\n\t\t\treturn true\n\t\t}\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Head:\n\t\t\tp.addElement()\n\t\t\tp.head = p.top()\n\t\t\tp.im = inHeadIM\n\t\t\treturn true\n\t\tcase a.Html:\n\t\t\treturn inBodyIM(p)\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Head, a.Body, a.Html, a.Br:\n\t\t\tp.parseImpliedToken(StartTagToken, a.Head, a.Head.String())\n\t\t\treturn false\n\t\tdefault:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\tcase CommentToken:\n\t\tp.addChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\t\treturn true\n\tcase DoctypeToken:\n\t\t// Ignore the token.\n\t\treturn true\n\t}\n\n\tp.parseImpliedToken(StartTagToken, a.Head, a.Head.String())\n\treturn false\n}\n\n// Section 12.2.5.4.4.\nfunc inHeadIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase TextToken:\n\t\ts := strings.TrimLeft(p.tok.Data, whitespace)\n\t\tif len(s) < len(p.tok.Data) {\n\t\t\t// Add the initial whitespace to the current node.\n\t\t\tp.addText(p.tok.Data[:len(p.tok.Data)-len(s)])\n\t\t\tif s == \"\" {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tp.tok.Data = s\n\t\t}\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Html:\n\t\t\treturn inBodyIM(p)\n\t\tcase a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta:\n\t\t\tp.addElement()\n\t\t\tp.oe.pop()\n\t\t\tp.acknowledgeSelfClosingTag()\n\t\t\treturn true\n\t\tcase a.Script, a.Title, a.Noscript, a.Noframes, a.Style:\n\t\t\tp.addElement()\n\t\t\tp.setOriginalIM()\n\t\t\tp.im = textIM\n\t\t\treturn true\n\t\tcase a.Head:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Head:\n\t\t\tn := p.oe.pop()\n\t\t\tif n.DataAtom != a.Head {\n\t\t\t\tpanic(\"html: bad parser state: <head> element not found, in the in-head insertion mode\")\n\t\t\t}\n\t\t\tp.im = afterHeadIM\n\t\t\treturn true\n\t\tcase a.Body, a.Html, a.Br:\n\t\t\tp.parseImpliedToken(EndTagToken, a.Head, a.Head.String())\n\t\t\treturn false\n\t\tdefault:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\tcase CommentToken:\n\t\tp.addChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\t\treturn true\n\tcase DoctypeToken:\n\t\t// Ignore the token.\n\t\treturn true\n\t}\n\n\tp.parseImpliedToken(EndTagToken, a.Head, a.Head.String())\n\treturn false\n}\n\n// Section 12.2.5.4.6.\nfunc afterHeadIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase TextToken:\n\t\ts := strings.TrimLeft(p.tok.Data, whitespace)\n\t\tif len(s) < len(p.tok.Data) {\n\t\t\t// Add the initial whitespace to the current node.\n\t\t\tp.addText(p.tok.Data[:len(p.tok.Data)-len(s)])\n\t\t\tif s == \"\" {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tp.tok.Data = s\n\t\t}\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Html:\n\t\t\treturn inBodyIM(p)\n\t\tcase a.Body:\n\t\t\tp.addElement()\n\t\t\tp.framesetOK = false\n\t\t\tp.im = inBodyIM\n\t\t\treturn true\n\t\tcase a.Frameset:\n\t\t\tp.addElement()\n\t\t\tp.im = inFramesetIM\n\t\t\treturn true\n\t\tcase a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title:\n\t\t\tp.oe = append(p.oe, p.head)\n\t\t\tdefer p.oe.remove(p.head)\n\t\t\treturn inHeadIM(p)\n\t\tcase a.Head:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Body, a.Html, a.Br:\n\t\t\t// Drop down to creating an implied <body> tag.\n\t\tdefault:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\tcase CommentToken:\n\t\tp.addChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\t\treturn true\n\tcase DoctypeToken:\n\t\t// Ignore the token.\n\t\treturn true\n\t}\n\n\tp.parseImpliedToken(StartTagToken, a.Body, a.Body.String())\n\tp.framesetOK = true\n\treturn false\n}\n\n// copyAttributes copies attributes of src not found on dst to dst.\nfunc copyAttributes(dst *Node, src Token) {\n\tif len(src.Attr) == 0 {\n\t\treturn\n\t}\n\tattr := map[string]string{}\n\tfor _, t := range dst.Attr {\n\t\tattr[t.Key] = t.Val\n\t}\n\tfor _, t := range src.Attr {\n\t\tif _, ok := attr[t.Key]; !ok {\n\t\t\tdst.Attr = append(dst.Attr, t)\n\t\t\tattr[t.Key] = t.Val\n\t\t}\n\t}\n}\n\n// Section 12.2.5.4.7.\nfunc inBodyIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase TextToken:\n\t\td := p.tok.Data\n\t\tswitch n := p.oe.top(); n.DataAtom {\n\t\tcase a.Pre, a.Listing:\n\t\t\tif n.FirstChild == nil {\n\t\t\t\t// Ignore a newline at the start of a <pre> block.\n\t\t\t\tif d != \"\" && d[0] == '\\r' {\n\t\t\t\t\td = d[1:]\n\t\t\t\t}\n\t\t\t\tif d != \"\" && d[0] == '\\n' {\n\t\t\t\t\td = d[1:]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\td = strings.Replace(d, \"\\x00\", \"\", -1)\n\t\tif d == \"\" {\n\t\t\treturn true\n\t\t}\n\t\tp.reconstructActiveFormattingElements()\n\t\tp.addText(d)\n\t\tif p.framesetOK && strings.TrimLeft(d, whitespace) != \"\" {\n\t\t\t// There were non-whitespace characters inserted.\n\t\t\tp.framesetOK = false\n\t\t}\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Html:\n\t\t\tcopyAttributes(p.oe[0], p.tok)\n\t\tcase a.Base, a.Basefont, a.Bgsound, a.Command, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Title:\n\t\t\treturn inHeadIM(p)\n\t\tcase a.Body:\n\t\t\tif len(p.oe) >= 2 {\n\t\t\t\tbody := p.oe[1]\n\t\t\t\tif body.Type == ElementNode && body.DataAtom == a.Body {\n\t\t\t\t\tp.framesetOK = false\n\t\t\t\t\tcopyAttributes(body, p.tok)\n\t\t\t\t}\n\t\t\t}\n\t\tcase a.Frameset:\n\t\t\tif !p.framesetOK || len(p.oe) < 2 || p.oe[1].DataAtom != a.Body {\n\t\t\t\t// Ignore the token.\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tbody := p.oe[1]\n\t\t\tif body.Parent != nil {\n\t\t\t\tbody.Parent.RemoveChild(body)\n\t\t\t}\n\t\t\tp.oe = p.oe[:1]\n\t\t\tp.addElement()\n\t\t\tp.im = inFramesetIM\n\t\t\treturn true\n\t\tcase a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Menu, a.Nav, a.Ol, a.P, a.Section, a.Summary, a.Ul:\n\t\t\tp.popUntil(buttonScope, a.P)\n\t\t\tp.addElement()\n\t\tcase a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:\n\t\t\tp.popUntil(buttonScope, a.P)\n\t\t\tswitch n := p.top(); n.DataAtom {\n\t\t\tcase a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:\n\t\t\t\tp.oe.pop()\n\t\t\t}\n\t\t\tp.addElement()\n\t\tcase a.Pre, a.Listing:\n\t\t\tp.popUntil(buttonScope, a.P)\n\t\t\tp.addElement()\n\t\t\t// The newline, if any, will be dealt with by the TextToken case.\n\t\t\tp.framesetOK = false\n\t\tcase a.Form:\n\t\t\tif p.form == nil {\n\t\t\t\tp.popUntil(buttonScope, a.P)\n\t\t\t\tp.addElement()\n\t\t\t\tp.form = p.top()\n\t\t\t}\n\t\tcase a.Li:\n\t\t\tp.framesetOK = false\n\t\t\tfor i := len(p.oe) - 1; i >= 0; i-- {\n\t\t\t\tnode := p.oe[i]\n\t\t\t\tswitch node.DataAtom {\n\t\t\t\tcase a.Li:\n\t\t\t\t\tp.oe = p.oe[:i]\n\t\t\t\tcase a.Address, a.Div, a.P:\n\t\t\t\t\tcontinue\n\t\t\t\tdefault:\n\t\t\t\t\tif !isSpecialElement(node) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp.popUntil(buttonScope, a.P)\n\t\t\tp.addElement()\n\t\tcase a.Dd, a.Dt:\n\t\t\tp.framesetOK = false\n\t\t\tfor i := len(p.oe) - 1; i >= 0; i-- {\n\t\t\t\tnode := p.oe[i]\n\t\t\t\tswitch node.DataAtom {\n\t\t\t\tcase a.Dd, a.Dt:\n\t\t\t\t\tp.oe = p.oe[:i]\n\t\t\t\tcase a.Address, a.Div, a.P:\n\t\t\t\t\tcontinue\n\t\t\t\tdefault:\n\t\t\t\t\tif !isSpecialElement(node) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp.popUntil(buttonScope, a.P)\n\t\t\tp.addElement()\n\t\tcase a.Plaintext:\n\t\t\tp.popUntil(buttonScope, a.P)\n\t\t\tp.addElement()\n\t\tcase a.Button:\n\t\t\tp.popUntil(defaultScope, a.Button)\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tp.addElement()\n\t\t\tp.framesetOK = false\n\t\tcase a.A:\n\t\t\tfor i := len(p.afe) - 1; i >= 0 && p.afe[i].Type != scopeMarkerNode; i-- {\n\t\t\t\tif n := p.afe[i]; n.Type == ElementNode && n.DataAtom == a.A {\n\t\t\t\t\tp.inBodyEndTagFormatting(a.A)\n\t\t\t\t\tp.oe.remove(n)\n\t\t\t\t\tp.afe.remove(n)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tp.addFormattingElement()\n\t\tcase a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tp.addFormattingElement()\n\t\tcase a.Nobr:\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tif p.elementInScope(defaultScope, a.Nobr) {\n\t\t\t\tp.inBodyEndTagFormatting(a.Nobr)\n\t\t\t\tp.reconstructActiveFormattingElements()\n\t\t\t}\n\t\t\tp.addFormattingElement()\n\t\tcase a.Applet, a.Marquee, a.Object:\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tp.addElement()\n\t\t\tp.afe = append(p.afe, &scopeMarker)\n\t\t\tp.framesetOK = false\n\t\tcase a.Table:\n\t\t\tif !p.quirks {\n\t\t\t\tp.popUntil(buttonScope, a.P)\n\t\t\t}\n\t\t\tp.addElement()\n\t\t\tp.framesetOK = false\n\t\t\tp.im = inTableIM\n\t\t\treturn true\n\t\tcase a.Area, a.Br, a.Embed, a.Img, a.Input, a.Keygen, a.Wbr:\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tp.addElement()\n\t\t\tp.oe.pop()\n\t\t\tp.acknowledgeSelfClosingTag()\n\t\t\tif p.tok.DataAtom == a.Input {\n\t\t\t\tfor _, t := range p.tok.Attr {\n\t\t\t\t\tif t.Key == \"type\" {\n\t\t\t\t\t\tif strings.ToLower(t.Val) == \"hidden\" {\n\t\t\t\t\t\t\t// Skip setting framesetOK = false\n\t\t\t\t\t\t\treturn true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tp.framesetOK = false\n\t\tcase a.Param, a.Source, a.Track:\n\t\t\tp.addElement()\n\t\t\tp.oe.pop()\n\t\t\tp.acknowledgeSelfClosingTag()\n\t\tcase a.Hr:\n\t\t\tp.popUntil(buttonScope, a.P)\n\t\t\tp.addElement()\n\t\t\tp.oe.pop()\n\t\t\tp.acknowledgeSelfClosingTag()\n\t\t\tp.framesetOK = false\n\t\tcase a.Image:\n\t\t\tp.tok.DataAtom = a.Img\n\t\t\tp.tok.Data = a.Img.String()\n\t\t\treturn false\n\t\tcase a.Isindex:\n\t\t\tif p.form != nil {\n\t\t\t\t// Ignore the token.\n\t\t\t\treturn true\n\t\t\t}\n\t\t\taction := \"\"\n\t\t\tprompt := \"This is a searchable index. Enter search keywords: \"\n\t\t\tattr := []Attribute{{Key: \"name\", Val: \"isindex\"}}\n\t\t\tfor _, t := range p.tok.Attr {\n\t\t\t\tswitch t.Key {\n\t\t\t\tcase \"action\":\n\t\t\t\t\taction = t.Val\n\t\t\t\tcase \"name\":\n\t\t\t\t\t// Ignore the attribute.\n\t\t\t\tcase \"prompt\":\n\t\t\t\t\tprompt = t.Val\n\t\t\t\tdefault:\n\t\t\t\t\tattr = append(attr, t)\n\t\t\t\t}\n\t\t\t}\n\t\t\tp.acknowledgeSelfClosingTag()\n\t\t\tp.popUntil(buttonScope, a.P)\n\t\t\tp.parseImpliedToken(StartTagToken, a.Form, a.Form.String())\n\t\t\tif action != \"\" {\n\t\t\t\tp.form.Attr = []Attribute{{Key: \"action\", Val: action}}\n\t\t\t}\n\t\t\tp.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String())\n\t\t\tp.parseImpliedToken(StartTagToken, a.Label, a.Label.String())\n\t\t\tp.addText(prompt)\n\t\t\tp.addChild(&Node{\n\t\t\t\tType:     ElementNode,\n\t\t\t\tDataAtom: a.Input,\n\t\t\t\tData:     a.Input.String(),\n\t\t\t\tAttr:     attr,\n\t\t\t})\n\t\t\tp.oe.pop()\n\t\t\tp.parseImpliedToken(EndTagToken, a.Label, a.Label.String())\n\t\t\tp.parseImpliedToken(StartTagToken, a.Hr, a.Hr.String())\n\t\t\tp.parseImpliedToken(EndTagToken, a.Form, a.Form.String())\n\t\tcase a.Textarea:\n\t\t\tp.addElement()\n\t\t\tp.setOriginalIM()\n\t\t\tp.framesetOK = false\n\t\t\tp.im = textIM\n\t\tcase a.Xmp:\n\t\t\tp.popUntil(buttonScope, a.P)\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tp.framesetOK = false\n\t\t\tp.addElement()\n\t\t\tp.setOriginalIM()\n\t\t\tp.im = textIM\n\t\tcase a.Iframe:\n\t\t\tp.framesetOK = false\n\t\t\tp.addElement()\n\t\t\tp.setOriginalIM()\n\t\t\tp.im = textIM\n\t\tcase a.Noembed, a.Noscript:\n\t\t\tp.addElement()\n\t\t\tp.setOriginalIM()\n\t\t\tp.im = textIM\n\t\tcase a.Select:\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tp.addElement()\n\t\t\tp.framesetOK = false\n\t\t\tp.im = inSelectIM\n\t\t\treturn true\n\t\tcase a.Optgroup, a.Option:\n\t\t\tif p.top().DataAtom == a.Option {\n\t\t\t\tp.oe.pop()\n\t\t\t}\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tp.addElement()\n\t\tcase a.Rp, a.Rt:\n\t\t\tif p.elementInScope(defaultScope, a.Ruby) {\n\t\t\t\tp.generateImpliedEndTags()\n\t\t\t}\n\t\t\tp.addElement()\n\t\tcase a.Math, a.Svg:\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tif p.tok.DataAtom == a.Math {\n\t\t\t\tadjustAttributeNames(p.tok.Attr, mathMLAttributeAdjustments)\n\t\t\t} else {\n\t\t\t\tadjustAttributeNames(p.tok.Attr, svgAttributeAdjustments)\n\t\t\t}\n\t\t\tadjustForeignAttributes(p.tok.Attr)\n\t\t\tp.addElement()\n\t\t\tp.top().Namespace = p.tok.Data\n\t\t\tif p.hasSelfClosingToken {\n\t\t\t\tp.oe.pop()\n\t\t\t\tp.acknowledgeSelfClosingTag()\n\t\t\t}\n\t\t\treturn true\n\t\tcase a.Caption, a.Col, a.Colgroup, a.Frame, a.Head, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:\n\t\t\t// Ignore the token.\n\t\tdefault:\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tp.addElement()\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Body:\n\t\t\tif p.elementInScope(defaultScope, a.Body) {\n\t\t\t\tp.im = afterBodyIM\n\t\t\t}\n\t\tcase a.Html:\n\t\t\tif p.elementInScope(defaultScope, a.Body) {\n\t\t\t\tp.parseImpliedToken(EndTagToken, a.Body, a.Body.String())\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\tcase a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul:\n\t\t\tp.popUntil(defaultScope, p.tok.DataAtom)\n\t\tcase a.Form:\n\t\t\tnode := p.form\n\t\t\tp.form = nil\n\t\t\ti := p.indexOfElementInScope(defaultScope, a.Form)\n\t\t\tif node == nil || i == -1 || p.oe[i] != node {\n\t\t\t\t// Ignore the token.\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tp.generateImpliedEndTags()\n\t\t\tp.oe.remove(node)\n\t\tcase a.P:\n\t\t\tif !p.elementInScope(buttonScope, a.P) {\n\t\t\t\tp.parseImpliedToken(StartTagToken, a.P, a.P.String())\n\t\t\t}\n\t\t\tp.popUntil(buttonScope, a.P)\n\t\tcase a.Li:\n\t\t\tp.popUntil(listItemScope, a.Li)\n\t\tcase a.Dd, a.Dt:\n\t\t\tp.popUntil(defaultScope, p.tok.DataAtom)\n\t\tcase a.H1, a.H2, a.H3, a.H4, a.H5, a.H6:\n\t\t\tp.popUntil(defaultScope, a.H1, a.H2, a.H3, a.H4, a.H5, a.H6)\n\t\tcase a.A, a.B, a.Big, a.Code, a.Em, a.Font, a.I, a.Nobr, a.S, a.Small, a.Strike, a.Strong, a.Tt, a.U:\n\t\t\tp.inBodyEndTagFormatting(p.tok.DataAtom)\n\t\tcase a.Applet, a.Marquee, a.Object:\n\t\t\tif p.popUntil(defaultScope, p.tok.DataAtom) {\n\t\t\t\tp.clearActiveFormattingElements()\n\t\t\t}\n\t\tcase a.Br:\n\t\t\tp.tok.Type = StartTagToken\n\t\t\treturn false\n\t\tdefault:\n\t\t\tp.inBodyEndTagOther(p.tok.DataAtom)\n\t\t}\n\tcase CommentToken:\n\t\tp.addChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\t}\n\n\treturn true\n}\n\nfunc (p *parser) inBodyEndTagFormatting(tagAtom a.Atom) {\n\t// This is the \"adoption agency\" algorithm, described at\n\t// https://html.spec.whatwg.org/multipage/syntax.html#adoptionAgency\n\n\t// TODO: this is a fairly literal line-by-line translation of that algorithm.\n\t// Once the code successfully parses the comprehensive test suite, we should\n\t// refactor this code to be more idiomatic.\n\n\t// Steps 1-4. The outer loop.\n\tfor i := 0; i < 8; i++ {\n\t\t// Step 5. Find the formatting element.\n\t\tvar formattingElement *Node\n\t\tfor j := len(p.afe) - 1; j >= 0; j-- {\n\t\t\tif p.afe[j].Type == scopeMarkerNode {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif p.afe[j].DataAtom == tagAtom {\n\t\t\t\tformattingElement = p.afe[j]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif formattingElement == nil {\n\t\t\tp.inBodyEndTagOther(tagAtom)\n\t\t\treturn\n\t\t}\n\t\tfeIndex := p.oe.index(formattingElement)\n\t\tif feIndex == -1 {\n\t\t\tp.afe.remove(formattingElement)\n\t\t\treturn\n\t\t}\n\t\tif !p.elementInScope(defaultScope, tagAtom) {\n\t\t\t// Ignore the tag.\n\t\t\treturn\n\t\t}\n\n\t\t// Steps 9-10. Find the furthest block.\n\t\tvar furthestBlock *Node\n\t\tfor _, e := range p.oe[feIndex:] {\n\t\t\tif isSpecialElement(e) {\n\t\t\t\tfurthestBlock = e\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif furthestBlock == nil {\n\t\t\te := p.oe.pop()\n\t\t\tfor e != formattingElement {\n\t\t\t\te = p.oe.pop()\n\t\t\t}\n\t\t\tp.afe.remove(e)\n\t\t\treturn\n\t\t}\n\n\t\t// Steps 11-12. Find the common ancestor and bookmark node.\n\t\tcommonAncestor := p.oe[feIndex-1]\n\t\tbookmark := p.afe.index(formattingElement)\n\n\t\t// Step 13. The inner loop. Find the lastNode to reparent.\n\t\tlastNode := furthestBlock\n\t\tnode := furthestBlock\n\t\tx := p.oe.index(node)\n\t\t// Steps 13.1-13.2\n\t\tfor j := 0; j < 3; j++ {\n\t\t\t// Step 13.3.\n\t\t\tx--\n\t\t\tnode = p.oe[x]\n\t\t\t// Step 13.4 - 13.5.\n\t\t\tif p.afe.index(node) == -1 {\n\t\t\t\tp.oe.remove(node)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// Step 13.6.\n\t\t\tif node == formattingElement {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Step 13.7.\n\t\t\tclone := node.clone()\n\t\t\tp.afe[p.afe.index(node)] = clone\n\t\t\tp.oe[p.oe.index(node)] = clone\n\t\t\tnode = clone\n\t\t\t// Step 13.8.\n\t\t\tif lastNode == furthestBlock {\n\t\t\t\tbookmark = p.afe.index(node) + 1\n\t\t\t}\n\t\t\t// Step 13.9.\n\t\t\tif lastNode.Parent != nil {\n\t\t\t\tlastNode.Parent.RemoveChild(lastNode)\n\t\t\t}\n\t\t\tnode.AppendChild(lastNode)\n\t\t\t// Step 13.10.\n\t\t\tlastNode = node\n\t\t}\n\n\t\t// Step 14. Reparent lastNode to the common ancestor,\n\t\t// or for misnested table nodes, to the foster parent.\n\t\tif lastNode.Parent != nil {\n\t\t\tlastNode.Parent.RemoveChild(lastNode)\n\t\t}\n\t\tswitch commonAncestor.DataAtom {\n\t\tcase a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:\n\t\t\tp.fosterParent(lastNode)\n\t\tdefault:\n\t\t\tcommonAncestor.AppendChild(lastNode)\n\t\t}\n\n\t\t// Steps 15-17. Reparent nodes from the furthest block's children\n\t\t// to a clone of the formatting element.\n\t\tclone := formattingElement.clone()\n\t\treparentChildren(clone, furthestBlock)\n\t\tfurthestBlock.AppendChild(clone)\n\n\t\t// Step 18. Fix up the list of active formatting elements.\n\t\tif oldLoc := p.afe.index(formattingElement); oldLoc != -1 && oldLoc < bookmark {\n\t\t\t// Move the bookmark with the rest of the list.\n\t\t\tbookmark--\n\t\t}\n\t\tp.afe.remove(formattingElement)\n\t\tp.afe.insert(bookmark, clone)\n\n\t\t// Step 19. Fix up the stack of open elements.\n\t\tp.oe.remove(formattingElement)\n\t\tp.oe.insert(p.oe.index(furthestBlock)+1, clone)\n\t}\n}\n\n// inBodyEndTagOther performs the \"any other end tag\" algorithm for inBodyIM.\n// \"Any other end tag\" handling from 12.2.5.5 The rules for parsing tokens in foreign content\n// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inforeign\nfunc (p *parser) inBodyEndTagOther(tagAtom a.Atom) {\n\tfor i := len(p.oe) - 1; i >= 0; i-- {\n\t\tif p.oe[i].DataAtom == tagAtom {\n\t\t\tp.oe = p.oe[:i]\n\t\t\tbreak\n\t\t}\n\t\tif isSpecialElement(p.oe[i]) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// Section 12.2.5.4.8.\nfunc textIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase ErrorToken:\n\t\tp.oe.pop()\n\tcase TextToken:\n\t\td := p.tok.Data\n\t\tif n := p.oe.top(); n.DataAtom == a.Textarea && n.FirstChild == nil {\n\t\t\t// Ignore a newline at the start of a <textarea> block.\n\t\t\tif d != \"\" && d[0] == '\\r' {\n\t\t\t\td = d[1:]\n\t\t\t}\n\t\t\tif d != \"\" && d[0] == '\\n' {\n\t\t\t\td = d[1:]\n\t\t\t}\n\t\t}\n\t\tif d == \"\" {\n\t\t\treturn true\n\t\t}\n\t\tp.addText(d)\n\t\treturn true\n\tcase EndTagToken:\n\t\tp.oe.pop()\n\t}\n\tp.im = p.originalIM\n\tp.originalIM = nil\n\treturn p.tok.Type == EndTagToken\n}\n\n// Section 12.2.5.4.9.\nfunc inTableIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase ErrorToken:\n\t\t// Stop parsing.\n\t\treturn true\n\tcase TextToken:\n\t\tp.tok.Data = strings.Replace(p.tok.Data, \"\\x00\", \"\", -1)\n\t\tswitch p.oe.top().DataAtom {\n\t\tcase a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:\n\t\t\tif strings.Trim(p.tok.Data, whitespace) == \"\" {\n\t\t\t\tp.addText(p.tok.Data)\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Caption:\n\t\t\tp.clearStackToContext(tableScope)\n\t\t\tp.afe = append(p.afe, &scopeMarker)\n\t\t\tp.addElement()\n\t\t\tp.im = inCaptionIM\n\t\t\treturn true\n\t\tcase a.Colgroup:\n\t\t\tp.clearStackToContext(tableScope)\n\t\t\tp.addElement()\n\t\t\tp.im = inColumnGroupIM\n\t\t\treturn true\n\t\tcase a.Col:\n\t\t\tp.parseImpliedToken(StartTagToken, a.Colgroup, a.Colgroup.String())\n\t\t\treturn false\n\t\tcase a.Tbody, a.Tfoot, a.Thead:\n\t\t\tp.clearStackToContext(tableScope)\n\t\t\tp.addElement()\n\t\t\tp.im = inTableBodyIM\n\t\t\treturn true\n\t\tcase a.Td, a.Th, a.Tr:\n\t\t\tp.parseImpliedToken(StartTagToken, a.Tbody, a.Tbody.String())\n\t\t\treturn false\n\t\tcase a.Table:\n\t\t\tif p.popUntil(tableScope, a.Table) {\n\t\t\t\tp.resetInsertionMode()\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\tcase a.Style, a.Script:\n\t\t\treturn inHeadIM(p)\n\t\tcase a.Input:\n\t\t\tfor _, t := range p.tok.Attr {\n\t\t\t\tif t.Key == \"type\" && strings.ToLower(t.Val) == \"hidden\" {\n\t\t\t\t\tp.addElement()\n\t\t\t\t\tp.oe.pop()\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Otherwise drop down to the default action.\n\t\tcase a.Form:\n\t\t\tif p.form != nil {\n\t\t\t\t// Ignore the token.\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tp.addElement()\n\t\t\tp.form = p.oe.pop()\n\t\tcase a.Select:\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tswitch p.top().DataAtom {\n\t\t\tcase a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:\n\t\t\t\tp.fosterParenting = true\n\t\t\t}\n\t\t\tp.addElement()\n\t\t\tp.fosterParenting = false\n\t\t\tp.framesetOK = false\n\t\t\tp.im = inSelectInTableIM\n\t\t\treturn true\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Table:\n\t\t\tif p.popUntil(tableScope, a.Table) {\n\t\t\t\tp.resetInsertionMode()\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\tcase a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\tcase CommentToken:\n\t\tp.addChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\t\treturn true\n\tcase DoctypeToken:\n\t\t// Ignore the token.\n\t\treturn true\n\t}\n\n\tp.fosterParenting = true\n\tdefer func() { p.fosterParenting = false }()\n\n\treturn inBodyIM(p)\n}\n\n// Section 12.2.5.4.11.\nfunc inCaptionIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Caption, a.Col, a.Colgroup, a.Tbody, a.Td, a.Tfoot, a.Thead, a.Tr:\n\t\t\tif p.popUntil(tableScope, a.Caption) {\n\t\t\t\tp.clearActiveFormattingElements()\n\t\t\t\tp.im = inTableIM\n\t\t\t\treturn false\n\t\t\t} else {\n\t\t\t\t// Ignore the token.\n\t\t\t\treturn true\n\t\t\t}\n\t\tcase a.Select:\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tp.addElement()\n\t\t\tp.framesetOK = false\n\t\t\tp.im = inSelectInTableIM\n\t\t\treturn true\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Caption:\n\t\t\tif p.popUntil(tableScope, a.Caption) {\n\t\t\t\tp.clearActiveFormattingElements()\n\t\t\t\tp.im = inTableIM\n\t\t\t}\n\t\t\treturn true\n\t\tcase a.Table:\n\t\t\tif p.popUntil(tableScope, a.Caption) {\n\t\t\t\tp.clearActiveFormattingElements()\n\t\t\t\tp.im = inTableIM\n\t\t\t\treturn false\n\t\t\t} else {\n\t\t\t\t// Ignore the token.\n\t\t\t\treturn true\n\t\t\t}\n\t\tcase a.Body, a.Col, a.Colgroup, a.Html, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\t}\n\treturn inBodyIM(p)\n}\n\n// Section 12.2.5.4.12.\nfunc inColumnGroupIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase TextToken:\n\t\ts := strings.TrimLeft(p.tok.Data, whitespace)\n\t\tif len(s) < len(p.tok.Data) {\n\t\t\t// Add the initial whitespace to the current node.\n\t\t\tp.addText(p.tok.Data[:len(p.tok.Data)-len(s)])\n\t\t\tif s == \"\" {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tp.tok.Data = s\n\t\t}\n\tcase CommentToken:\n\t\tp.addChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\t\treturn true\n\tcase DoctypeToken:\n\t\t// Ignore the token.\n\t\treturn true\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Html:\n\t\t\treturn inBodyIM(p)\n\t\tcase a.Col:\n\t\t\tp.addElement()\n\t\t\tp.oe.pop()\n\t\t\tp.acknowledgeSelfClosingTag()\n\t\t\treturn true\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Colgroup:\n\t\t\tif p.oe.top().DataAtom != a.Html {\n\t\t\t\tp.oe.pop()\n\t\t\t\tp.im = inTableIM\n\t\t\t}\n\t\t\treturn true\n\t\tcase a.Col:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\t}\n\tif p.oe.top().DataAtom != a.Html {\n\t\tp.oe.pop()\n\t\tp.im = inTableIM\n\t\treturn false\n\t}\n\treturn true\n}\n\n// Section 12.2.5.4.13.\nfunc inTableBodyIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Tr:\n\t\t\tp.clearStackToContext(tableBodyScope)\n\t\t\tp.addElement()\n\t\t\tp.im = inRowIM\n\t\t\treturn true\n\t\tcase a.Td, a.Th:\n\t\t\tp.parseImpliedToken(StartTagToken, a.Tr, a.Tr.String())\n\t\t\treturn false\n\t\tcase a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead:\n\t\t\tif p.popUntil(tableScope, a.Tbody, a.Thead, a.Tfoot) {\n\t\t\t\tp.im = inTableIM\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Tbody, a.Tfoot, a.Thead:\n\t\t\tif p.elementInScope(tableScope, p.tok.DataAtom) {\n\t\t\t\tp.clearStackToContext(tableBodyScope)\n\t\t\t\tp.oe.pop()\n\t\t\t\tp.im = inTableIM\n\t\t\t}\n\t\t\treturn true\n\t\tcase a.Table:\n\t\t\tif p.popUntil(tableScope, a.Tbody, a.Thead, a.Tfoot) {\n\t\t\t\tp.im = inTableIM\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\tcase a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Td, a.Th, a.Tr:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\tcase CommentToken:\n\t\tp.addChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\t\treturn true\n\t}\n\n\treturn inTableIM(p)\n}\n\n// Section 12.2.5.4.14.\nfunc inRowIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Td, a.Th:\n\t\t\tp.clearStackToContext(tableRowScope)\n\t\t\tp.addElement()\n\t\t\tp.afe = append(p.afe, &scopeMarker)\n\t\t\tp.im = inCellIM\n\t\t\treturn true\n\t\tcase a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead, a.Tr:\n\t\t\tif p.popUntil(tableScope, a.Tr) {\n\t\t\t\tp.im = inTableBodyIM\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Tr:\n\t\t\tif p.popUntil(tableScope, a.Tr) {\n\t\t\t\tp.im = inTableBodyIM\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\tcase a.Table:\n\t\t\tif p.popUntil(tableScope, a.Tr) {\n\t\t\t\tp.im = inTableBodyIM\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\tcase a.Tbody, a.Tfoot, a.Thead:\n\t\t\tif p.elementInScope(tableScope, p.tok.DataAtom) {\n\t\t\t\tp.parseImpliedToken(EndTagToken, a.Tr, a.Tr.String())\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\tcase a.Body, a.Caption, a.Col, a.Colgroup, a.Html, a.Td, a.Th:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn inTableIM(p)\n}\n\n// Section 12.2.5.4.15.\nfunc inCellIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Caption, a.Col, a.Colgroup, a.Tbody, a.Td, a.Tfoot, a.Th, a.Thead, a.Tr:\n\t\t\tif p.popUntil(tableScope, a.Td, a.Th) {\n\t\t\t\t// Close the cell and reprocess.\n\t\t\t\tp.clearActiveFormattingElements()\n\t\t\t\tp.im = inRowIM\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\tcase a.Select:\n\t\t\tp.reconstructActiveFormattingElements()\n\t\t\tp.addElement()\n\t\t\tp.framesetOK = false\n\t\t\tp.im = inSelectInTableIM\n\t\t\treturn true\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Td, a.Th:\n\t\t\tif !p.popUntil(tableScope, p.tok.DataAtom) {\n\t\t\t\t// Ignore the token.\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tp.clearActiveFormattingElements()\n\t\t\tp.im = inRowIM\n\t\t\treturn true\n\t\tcase a.Body, a.Caption, a.Col, a.Colgroup, a.Html:\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\tcase a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr:\n\t\t\tif !p.elementInScope(tableScope, p.tok.DataAtom) {\n\t\t\t\t// Ignore the token.\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// Close the cell and reprocess.\n\t\t\tp.popUntil(tableScope, a.Td, a.Th)\n\t\t\tp.clearActiveFormattingElements()\n\t\t\tp.im = inRowIM\n\t\t\treturn false\n\t\t}\n\t}\n\treturn inBodyIM(p)\n}\n\n// Section 12.2.5.4.16.\nfunc inSelectIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase ErrorToken:\n\t\t// Stop parsing.\n\t\treturn true\n\tcase TextToken:\n\t\tp.addText(strings.Replace(p.tok.Data, \"\\x00\", \"\", -1))\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Html:\n\t\t\treturn inBodyIM(p)\n\t\tcase a.Option:\n\t\t\tif p.top().DataAtom == a.Option {\n\t\t\t\tp.oe.pop()\n\t\t\t}\n\t\t\tp.addElement()\n\t\tcase a.Optgroup:\n\t\t\tif p.top().DataAtom == a.Option {\n\t\t\t\tp.oe.pop()\n\t\t\t}\n\t\t\tif p.top().DataAtom == a.Optgroup {\n\t\t\t\tp.oe.pop()\n\t\t\t}\n\t\t\tp.addElement()\n\t\tcase a.Select:\n\t\t\tp.tok.Type = EndTagToken\n\t\t\treturn false\n\t\tcase a.Input, a.Keygen, a.Textarea:\n\t\t\tif p.elementInScope(selectScope, a.Select) {\n\t\t\t\tp.parseImpliedToken(EndTagToken, a.Select, a.Select.String())\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// In order to properly ignore <textarea>, we need to change the tokenizer mode.\n\t\t\tp.tokenizer.NextIsNotRawText()\n\t\t\t// Ignore the token.\n\t\t\treturn true\n\t\tcase a.Script:\n\t\t\treturn inHeadIM(p)\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Option:\n\t\t\tif p.top().DataAtom == a.Option {\n\t\t\t\tp.oe.pop()\n\t\t\t}\n\t\tcase a.Optgroup:\n\t\t\ti := len(p.oe) - 1\n\t\t\tif p.oe[i].DataAtom == a.Option {\n\t\t\t\ti--\n\t\t\t}\n\t\t\tif p.oe[i].DataAtom == a.Optgroup {\n\t\t\t\tp.oe = p.oe[:i]\n\t\t\t}\n\t\tcase a.Select:\n\t\t\tif p.popUntil(selectScope, a.Select) {\n\t\t\t\tp.resetInsertionMode()\n\t\t\t}\n\t\t}\n\tcase CommentToken:\n\t\tp.addChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\tcase DoctypeToken:\n\t\t// Ignore the token.\n\t\treturn true\n\t}\n\n\treturn true\n}\n\n// Section 12.2.5.4.17.\nfunc inSelectInTableIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase StartTagToken, EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Caption, a.Table, a.Tbody, a.Tfoot, a.Thead, a.Tr, a.Td, a.Th:\n\t\t\tif p.tok.Type == StartTagToken || p.elementInScope(tableScope, p.tok.DataAtom) {\n\t\t\t\tp.parseImpliedToken(EndTagToken, a.Select, a.Select.String())\n\t\t\t\treturn false\n\t\t\t} else {\n\t\t\t\t// Ignore the token.\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn inSelectIM(p)\n}\n\n// Section 12.2.5.4.18.\nfunc afterBodyIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase ErrorToken:\n\t\t// Stop parsing.\n\t\treturn true\n\tcase TextToken:\n\t\ts := strings.TrimLeft(p.tok.Data, whitespace)\n\t\tif len(s) == 0 {\n\t\t\t// It was all whitespace.\n\t\t\treturn inBodyIM(p)\n\t\t}\n\tcase StartTagToken:\n\t\tif p.tok.DataAtom == a.Html {\n\t\t\treturn inBodyIM(p)\n\t\t}\n\tcase EndTagToken:\n\t\tif p.tok.DataAtom == a.Html {\n\t\t\tif !p.fragment {\n\t\t\t\tp.im = afterAfterBodyIM\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\tcase CommentToken:\n\t\t// The comment is attached to the <html> element.\n\t\tif len(p.oe) < 1 || p.oe[0].DataAtom != a.Html {\n\t\t\tpanic(\"html: bad parser state: <html> element not found, in the after-body insertion mode\")\n\t\t}\n\t\tp.oe[0].AppendChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\t\treturn true\n\t}\n\tp.im = inBodyIM\n\treturn false\n}\n\n// Section 12.2.5.4.19.\nfunc inFramesetIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase CommentToken:\n\t\tp.addChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\tcase TextToken:\n\t\t// Ignore all text but whitespace.\n\t\ts := strings.Map(func(c rune) rune {\n\t\t\tswitch c {\n\t\t\tcase ' ', '\\t', '\\n', '\\f', '\\r':\n\t\t\t\treturn c\n\t\t\t}\n\t\t\treturn -1\n\t\t}, p.tok.Data)\n\t\tif s != \"\" {\n\t\t\tp.addText(s)\n\t\t}\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Html:\n\t\t\treturn inBodyIM(p)\n\t\tcase a.Frameset:\n\t\t\tp.addElement()\n\t\tcase a.Frame:\n\t\t\tp.addElement()\n\t\t\tp.oe.pop()\n\t\t\tp.acknowledgeSelfClosingTag()\n\t\tcase a.Noframes:\n\t\t\treturn inHeadIM(p)\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Frameset:\n\t\t\tif p.oe.top().DataAtom != a.Html {\n\t\t\t\tp.oe.pop()\n\t\t\t\tif p.oe.top().DataAtom != a.Frameset {\n\t\t\t\t\tp.im = afterFramesetIM\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tdefault:\n\t\t// Ignore the token.\n\t}\n\treturn true\n}\n\n// Section 12.2.5.4.20.\nfunc afterFramesetIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase CommentToken:\n\t\tp.addChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\tcase TextToken:\n\t\t// Ignore all text but whitespace.\n\t\ts := strings.Map(func(c rune) rune {\n\t\t\tswitch c {\n\t\t\tcase ' ', '\\t', '\\n', '\\f', '\\r':\n\t\t\t\treturn c\n\t\t\t}\n\t\t\treturn -1\n\t\t}, p.tok.Data)\n\t\tif s != \"\" {\n\t\t\tp.addText(s)\n\t\t}\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Html:\n\t\t\treturn inBodyIM(p)\n\t\tcase a.Noframes:\n\t\t\treturn inHeadIM(p)\n\t\t}\n\tcase EndTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Html:\n\t\t\tp.im = afterAfterFramesetIM\n\t\t\treturn true\n\t\t}\n\tdefault:\n\t\t// Ignore the token.\n\t}\n\treturn true\n}\n\n// Section 12.2.5.4.21.\nfunc afterAfterBodyIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase ErrorToken:\n\t\t// Stop parsing.\n\t\treturn true\n\tcase TextToken:\n\t\ts := strings.TrimLeft(p.tok.Data, whitespace)\n\t\tif len(s) == 0 {\n\t\t\t// It was all whitespace.\n\t\t\treturn inBodyIM(p)\n\t\t}\n\tcase StartTagToken:\n\t\tif p.tok.DataAtom == a.Html {\n\t\t\treturn inBodyIM(p)\n\t\t}\n\tcase CommentToken:\n\t\tp.doc.AppendChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\t\treturn true\n\tcase DoctypeToken:\n\t\treturn inBodyIM(p)\n\t}\n\tp.im = inBodyIM\n\treturn false\n}\n\n// Section 12.2.5.4.22.\nfunc afterAfterFramesetIM(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase CommentToken:\n\t\tp.doc.AppendChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\tcase TextToken:\n\t\t// Ignore all text but whitespace.\n\t\ts := strings.Map(func(c rune) rune {\n\t\t\tswitch c {\n\t\t\tcase ' ', '\\t', '\\n', '\\f', '\\r':\n\t\t\t\treturn c\n\t\t\t}\n\t\t\treturn -1\n\t\t}, p.tok.Data)\n\t\tif s != \"\" {\n\t\t\tp.tok.Data = s\n\t\t\treturn inBodyIM(p)\n\t\t}\n\tcase StartTagToken:\n\t\tswitch p.tok.DataAtom {\n\t\tcase a.Html:\n\t\t\treturn inBodyIM(p)\n\t\tcase a.Noframes:\n\t\t\treturn inHeadIM(p)\n\t\t}\n\tcase DoctypeToken:\n\t\treturn inBodyIM(p)\n\tdefault:\n\t\t// Ignore the token.\n\t}\n\treturn true\n}\n\nconst whitespaceOrNUL = whitespace + \"\\x00\"\n\n// Section 12.2.5.5.\nfunc parseForeignContent(p *parser) bool {\n\tswitch p.tok.Type {\n\tcase TextToken:\n\t\tif p.framesetOK {\n\t\t\tp.framesetOK = strings.TrimLeft(p.tok.Data, whitespaceOrNUL) == \"\"\n\t\t}\n\t\tp.tok.Data = strings.Replace(p.tok.Data, \"\\x00\", \"\\ufffd\", -1)\n\t\tp.addText(p.tok.Data)\n\tcase CommentToken:\n\t\tp.addChild(&Node{\n\t\t\tType: CommentNode,\n\t\t\tData: p.tok.Data,\n\t\t})\n\tcase StartTagToken:\n\t\tb := breakout[p.tok.Data]\n\t\tif p.tok.DataAtom == a.Font {\n\t\tloop:\n\t\t\tfor _, attr := range p.tok.Attr {\n\t\t\t\tswitch attr.Key {\n\t\t\t\tcase \"color\", \"face\", \"size\":\n\t\t\t\t\tb = true\n\t\t\t\t\tbreak loop\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif b {\n\t\t\tfor i := len(p.oe) - 1; i >= 0; i-- {\n\t\t\t\tn := p.oe[i]\n\t\t\t\tif n.Namespace == \"\" || htmlIntegrationPoint(n) || mathMLTextIntegrationPoint(n) {\n\t\t\t\t\tp.oe = p.oe[:i+1]\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t\tswitch p.top().Namespace {\n\t\tcase \"math\":\n\t\t\tadjustAttributeNames(p.tok.Attr, mathMLAttributeAdjustments)\n\t\tcase \"svg\":\n\t\t\t// Adjust SVG tag names. The tokenizer lower-cases tag names, but\n\t\t\t// SVG wants e.g. \"foreignObject\" with a capital second \"O\".\n\t\t\tif x := svgTagNameAdjustments[p.tok.Data]; x != \"\" {\n\t\t\t\tp.tok.DataAtom = a.Lookup([]byte(x))\n\t\t\t\tp.tok.Data = x\n\t\t\t}\n\t\t\tadjustAttributeNames(p.tok.Attr, svgAttributeAdjustments)\n\t\tdefault:\n\t\t\tpanic(\"html: bad parser state: unexpected namespace\")\n\t\t}\n\t\tadjustForeignAttributes(p.tok.Attr)\n\t\tnamespace := p.top().Namespace\n\t\tp.addElement()\n\t\tp.top().Namespace = namespace\n\t\tif namespace != \"\" {\n\t\t\t// Don't let the tokenizer go into raw text mode in foreign content\n\t\t\t// (e.g. in an SVG <title> tag).\n\t\t\tp.tokenizer.NextIsNotRawText()\n\t\t}\n\t\tif p.hasSelfClosingToken {\n\t\t\tp.oe.pop()\n\t\t\tp.acknowledgeSelfClosingTag()\n\t\t}\n\tcase EndTagToken:\n\t\tfor i := len(p.oe) - 1; i >= 0; i-- {\n\t\t\tif p.oe[i].Namespace == \"\" {\n\t\t\t\treturn p.im(p)\n\t\t\t}\n\t\t\tif strings.EqualFold(p.oe[i].Data, p.tok.Data) {\n\t\t\t\tp.oe = p.oe[:i]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn true\n\tdefault:\n\t\t// Ignore the token.\n\t}\n\treturn true\n}\n\n// Section 12.2.5.\nfunc (p *parser) inForeignContent() bool {\n\tif len(p.oe) == 0 {\n\t\treturn false\n\t}\n\tn := p.oe[len(p.oe)-1]\n\tif n.Namespace == \"\" {\n\t\treturn false\n\t}\n\tif mathMLTextIntegrationPoint(n) {\n\t\tif p.tok.Type == StartTagToken && p.tok.DataAtom != a.Mglyph && p.tok.DataAtom != a.Malignmark {\n\t\t\treturn false\n\t\t}\n\t\tif p.tok.Type == TextToken {\n\t\t\treturn false\n\t\t}\n\t}\n\tif n.Namespace == \"math\" && n.DataAtom == a.AnnotationXml && p.tok.Type == StartTagToken && p.tok.DataAtom == a.Svg {\n\t\treturn false\n\t}\n\tif htmlIntegrationPoint(n) && (p.tok.Type == StartTagToken || p.tok.Type == TextToken) {\n\t\treturn false\n\t}\n\tif p.tok.Type == ErrorToken {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// parseImpliedToken parses a token as though it had appeared in the parser's\n// input.\nfunc (p *parser) parseImpliedToken(t TokenType, dataAtom a.Atom, data string) {\n\trealToken, selfClosing := p.tok, p.hasSelfClosingToken\n\tp.tok = Token{\n\t\tType:     t,\n\t\tDataAtom: dataAtom,\n\t\tData:     data,\n\t}\n\tp.hasSelfClosingToken = false\n\tp.parseCurrentToken()\n\tp.tok, p.hasSelfClosingToken = realToken, selfClosing\n}\n\n// parseCurrentToken runs the current token through the parsing routines\n// until it is consumed.\nfunc (p *parser) parseCurrentToken() {\n\tif p.tok.Type == SelfClosingTagToken {\n\t\tp.hasSelfClosingToken = true\n\t\tp.tok.Type = StartTagToken\n\t}\n\n\tconsumed := false\n\tfor !consumed {\n\t\tif p.inForeignContent() {\n\t\t\tconsumed = parseForeignContent(p)\n\t\t} else {\n\t\t\tconsumed = p.im(p)\n\t\t}\n\t}\n\n\tif p.hasSelfClosingToken {\n\t\t// This is a parse error, but ignore it.\n\t\tp.hasSelfClosingToken = false\n\t}\n}\n\nfunc (p *parser) parse() error {\n\t// Iterate until EOF. Any other error will cause an early return.\n\tvar err error\n\tfor err != io.EOF {\n\t\t// CDATA sections are allowed only in foreign content.\n\t\tn := p.oe.top()\n\t\tp.tokenizer.AllowCDATA(n != nil && n.Namespace != \"\")\n\t\t// Read and parse the next token.\n\t\tp.tokenizer.Next()\n\t\tp.tok = p.tokenizer.Token()\n\t\tif p.tok.Type == ErrorToken {\n\t\t\terr = p.tokenizer.Err()\n\t\t\tif err != nil && err != io.EOF {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tp.parseCurrentToken()\n\t}\n\treturn nil\n}\n\n// Parse returns the parse tree for the HTML from the given Reader.\n// The input is assumed to be UTF-8 encoded.\nfunc Parse(r io.Reader) (*Node, error) {\n\tp := &parser{\n\t\ttokenizer: NewTokenizer(r),\n\t\tdoc: &Node{\n\t\t\tType: DocumentNode,\n\t\t},\n\t\tscripting:  true,\n\t\tframesetOK: true,\n\t\tim:         initialIM,\n\t}\n\terr := p.parse()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn p.doc, nil\n}\n\n// ParseFragment parses a fragment of HTML and returns the nodes that were\n// found. If the fragment is the InnerHTML for an existing element, pass that\n// element in context.\nfunc ParseFragment(r io.Reader, context *Node) ([]*Node, error) {\n\tcontextTag := \"\"\n\tif context != nil {\n\t\tif context.Type != ElementNode {\n\t\t\treturn nil, errors.New(\"html: ParseFragment of non-element Node\")\n\t\t}\n\t\t// The next check isn't just context.DataAtom.String() == context.Data because\n\t\t// it is valid to pass an element whose tag isn't a known atom. For example,\n\t\t// DataAtom == 0 and Data = \"tagfromthefuture\" is perfectly consistent.\n\t\tif context.DataAtom != a.Lookup([]byte(context.Data)) {\n\t\t\treturn nil, fmt.Errorf(\"html: inconsistent Node: DataAtom=%q, Data=%q\", context.DataAtom, context.Data)\n\t\t}\n\t\tcontextTag = context.DataAtom.String()\n\t}\n\tp := &parser{\n\t\ttokenizer: NewTokenizerFragment(r, contextTag),\n\t\tdoc: &Node{\n\t\t\tType: DocumentNode,\n\t\t},\n\t\tscripting: true,\n\t\tfragment:  true,\n\t\tcontext:   context,\n\t}\n\n\troot := &Node{\n\t\tType:     ElementNode,\n\t\tDataAtom: a.Html,\n\t\tData:     a.Html.String(),\n\t}\n\tp.doc.AppendChild(root)\n\tp.oe = nodeStack{root}\n\tp.resetInsertionMode()\n\n\tfor n := context; n != nil; n = n.Parent {\n\t\tif n.Type == ElementNode && n.DataAtom == a.Form {\n\t\t\tp.form = n\n\t\t\tbreak\n\t\t}\n\t}\n\n\terr := p.parse()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tparent := p.doc\n\tif context != nil {\n\t\tparent = root\n\t}\n\n\tvar result []*Node\n\tfor c := parent.FirstChild; c != nil; {\n\t\tnext := c.NextSibling\n\t\tparent.RemoveChild(c)\n\t\tresult = append(result, c)\n\t\tc = next\n\t}\n\treturn result, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/render.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage html\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\ntype writer interface {\n\tio.Writer\n\tio.ByteWriter\n\tWriteString(string) (int, error)\n}\n\n// Render renders the parse tree n to the given writer.\n//\n// Rendering is done on a 'best effort' basis: calling Parse on the output of\n// Render will always result in something similar to the original tree, but it\n// is not necessarily an exact clone unless the original tree was 'well-formed'.\n// 'Well-formed' is not easily specified; the HTML5 specification is\n// complicated.\n//\n// Calling Parse on arbitrary input typically results in a 'well-formed' parse\n// tree. However, it is possible for Parse to yield a 'badly-formed' parse tree.\n// For example, in a 'well-formed' parse tree, no <a> element is a child of\n// another <a> element: parsing \"<a><a>\" results in two sibling elements.\n// Similarly, in a 'well-formed' parse tree, no <a> element is a child of a\n// <table> element: parsing \"<p><table><a>\" results in a <p> with two sibling\n// children; the <a> is reparented to the <table>'s parent. However, calling\n// Parse on \"<a><table><a>\" does not return an error, but the result has an <a>\n// element with an <a> child, and is therefore not 'well-formed'.\n//\n// Programmatically constructed trees are typically also 'well-formed', but it\n// is possible to construct a tree that looks innocuous but, when rendered and\n// re-parsed, results in a different tree. A simple example is that a solitary\n// text node would become a tree containing <html>, <head> and <body> elements.\n// Another example is that the programmatic equivalent of \"a<head>b</head>c\"\n// becomes \"<html><head><head/><body>abc</body></html>\".\nfunc Render(w io.Writer, n *Node) error {\n\tif x, ok := w.(writer); ok {\n\t\treturn render(x, n)\n\t}\n\tbuf := bufio.NewWriter(w)\n\tif err := render(buf, n); err != nil {\n\t\treturn err\n\t}\n\treturn buf.Flush()\n}\n\n// plaintextAbort is returned from render1 when a <plaintext> element\n// has been rendered. No more end tags should be rendered after that.\nvar plaintextAbort = errors.New(\"html: internal error (plaintext abort)\")\n\nfunc render(w writer, n *Node) error {\n\terr := render1(w, n)\n\tif err == plaintextAbort {\n\t\terr = nil\n\t}\n\treturn err\n}\n\nfunc render1(w writer, n *Node) error {\n\t// Render non-element nodes; these are the easy cases.\n\tswitch n.Type {\n\tcase ErrorNode:\n\t\treturn errors.New(\"html: cannot render an ErrorNode node\")\n\tcase TextNode:\n\t\treturn escape(w, n.Data)\n\tcase DocumentNode:\n\t\tfor c := n.FirstChild; c != nil; c = c.NextSibling {\n\t\t\tif err := render1(w, c); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\tcase ElementNode:\n\t\t// No-op.\n\tcase CommentNode:\n\t\tif _, err := w.WriteString(\"<!--\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := w.WriteString(n.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := w.WriteString(\"-->\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\tcase DoctypeNode:\n\t\tif _, err := w.WriteString(\"<!DOCTYPE \"); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := w.WriteString(n.Data); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif n.Attr != nil {\n\t\t\tvar p, s string\n\t\t\tfor _, a := range n.Attr {\n\t\t\t\tswitch a.Key {\n\t\t\t\tcase \"public\":\n\t\t\t\t\tp = a.Val\n\t\t\t\tcase \"system\":\n\t\t\t\t\ts = a.Val\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p != \"\" {\n\t\t\t\tif _, err := w.WriteString(\" PUBLIC \"); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := writeQuoted(w, p); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif s != \"\" {\n\t\t\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif err := writeQuoted(w, s); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if s != \"\" {\n\t\t\t\tif _, err := w.WriteString(\" SYSTEM \"); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := writeQuoted(w, s); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn w.WriteByte('>')\n\tdefault:\n\t\treturn errors.New(\"html: unknown node type\")\n\t}\n\n\t// Render the <xxx> opening tag.\n\tif err := w.WriteByte('<'); err != nil {\n\t\treturn err\n\t}\n\tif _, err := w.WriteString(n.Data); err != nil {\n\t\treturn err\n\t}\n\tfor _, a := range n.Attr {\n\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif a.Namespace != \"\" {\n\t\t\tif _, err := w.WriteString(a.Namespace); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif err := w.WriteByte(':'); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif _, err := w.WriteString(a.Key); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := w.WriteString(`=\"`); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := escape(w, a.Val); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := w.WriteByte('\"'); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif voidElements[n.Data] {\n\t\tif n.FirstChild != nil {\n\t\t\treturn fmt.Errorf(\"html: void element <%s> has child nodes\", n.Data)\n\t\t}\n\t\t_, err := w.WriteString(\"/>\")\n\t\treturn err\n\t}\n\tif err := w.WriteByte('>'); err != nil {\n\t\treturn err\n\t}\n\n\t// Add initial newline where there is danger of a newline beging ignored.\n\tif c := n.FirstChild; c != nil && c.Type == TextNode && strings.HasPrefix(c.Data, \"\\n\") {\n\t\tswitch n.Data {\n\t\tcase \"pre\", \"listing\", \"textarea\":\n\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\t// Render any child nodes.\n\tswitch n.Data {\n\tcase \"iframe\", \"noembed\", \"noframes\", \"noscript\", \"plaintext\", \"script\", \"style\", \"xmp\":\n\t\tfor c := n.FirstChild; c != nil; c = c.NextSibling {\n\t\t\tif c.Type == TextNode {\n\t\t\t\tif _, err := w.WriteString(c.Data); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif err := render1(w, c); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif n.Data == \"plaintext\" {\n\t\t\t// Don't render anything else. <plaintext> must be the\n\t\t\t// last element in the file, with no closing tag.\n\t\t\treturn plaintextAbort\n\t\t}\n\tdefault:\n\t\tfor c := n.FirstChild; c != nil; c = c.NextSibling {\n\t\t\tif err := render1(w, c); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\t// Render the </xxx> closing tag.\n\tif _, err := w.WriteString(\"</\"); err != nil {\n\t\treturn err\n\t}\n\tif _, err := w.WriteString(n.Data); err != nil {\n\t\treturn err\n\t}\n\treturn w.WriteByte('>')\n}\n\n// writeQuoted writes s to w surrounded by quotes. Normally it will use double\n// quotes, but if s contains a double quote, it will use single quotes.\n// It is used for writing the identifiers in a doctype declaration.\n// In valid HTML, they can't contain both types of quotes.\nfunc writeQuoted(w writer, s string) error {\n\tvar q byte = '\"'\n\tif strings.Contains(s, `\"`) {\n\t\tq = '\\''\n\t}\n\tif err := w.WriteByte(q); err != nil {\n\t\treturn err\n\t}\n\tif _, err := w.WriteString(s); err != nil {\n\t\treturn err\n\t}\n\tif err := w.WriteByte(q); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// Section 12.1.2, \"Elements\", gives this list of void elements. Void elements\n// are those that can't have any contents.\nvar voidElements = map[string]bool{\n\t\"area\":    true,\n\t\"base\":    true,\n\t\"br\":      true,\n\t\"col\":     true,\n\t\"command\": true,\n\t\"embed\":   true,\n\t\"hr\":      true,\n\t\"img\":     true,\n\t\"input\":   true,\n\t\"keygen\":  true,\n\t\"link\":    true,\n\t\"meta\":    true,\n\t\"param\":   true,\n\t\"source\":  true,\n\t\"track\":   true,\n\t\"wbr\":     true,\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/html/token.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage html\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/net/html/atom\"\n)\n\n// A TokenType is the type of a Token.\ntype TokenType uint32\n\nconst (\n\t// ErrorToken means that an error occurred during tokenization.\n\tErrorToken TokenType = iota\n\t// TextToken means a text node.\n\tTextToken\n\t// A StartTagToken looks like <a>.\n\tStartTagToken\n\t// An EndTagToken looks like </a>.\n\tEndTagToken\n\t// A SelfClosingTagToken tag looks like <br/>.\n\tSelfClosingTagToken\n\t// A CommentToken looks like <!--x-->.\n\tCommentToken\n\t// A DoctypeToken looks like <!DOCTYPE x>\n\tDoctypeToken\n)\n\n// ErrBufferExceeded means that the buffering limit was exceeded.\nvar ErrBufferExceeded = errors.New(\"max buffer exceeded\")\n\n// String returns a string representation of the TokenType.\nfunc (t TokenType) String() string {\n\tswitch t {\n\tcase ErrorToken:\n\t\treturn \"Error\"\n\tcase TextToken:\n\t\treturn \"Text\"\n\tcase StartTagToken:\n\t\treturn \"StartTag\"\n\tcase EndTagToken:\n\t\treturn \"EndTag\"\n\tcase SelfClosingTagToken:\n\t\treturn \"SelfClosingTag\"\n\tcase CommentToken:\n\t\treturn \"Comment\"\n\tcase DoctypeToken:\n\t\treturn \"Doctype\"\n\t}\n\treturn \"Invalid(\" + strconv.Itoa(int(t)) + \")\"\n}\n\n// An Attribute is an attribute namespace-key-value triple. Namespace is\n// non-empty for foreign attributes like xlink, Key is alphabetic (and hence\n// does not contain escapable characters like '&', '<' or '>'), and Val is\n// unescaped (it looks like \"a<b\" rather than \"a&lt;b\").\n//\n// Namespace is only used by the parser, not the tokenizer.\ntype Attribute struct {\n\tNamespace, Key, Val string\n}\n\n// A Token consists of a TokenType and some Data (tag name for start and end\n// tags, content for text, comments and doctypes). A tag Token may also contain\n// a slice of Attributes. Data is unescaped for all Tokens (it looks like \"a<b\"\n// rather than \"a&lt;b\"). For tag Tokens, DataAtom is the atom for Data, or\n// zero if Data is not a known tag name.\ntype Token struct {\n\tType     TokenType\n\tDataAtom atom.Atom\n\tData     string\n\tAttr     []Attribute\n}\n\n// tagString returns a string representation of a tag Token's Data and Attr.\nfunc (t Token) tagString() string {\n\tif len(t.Attr) == 0 {\n\t\treturn t.Data\n\t}\n\tbuf := bytes.NewBufferString(t.Data)\n\tfor _, a := range t.Attr {\n\t\tbuf.WriteByte(' ')\n\t\tbuf.WriteString(a.Key)\n\t\tbuf.WriteString(`=\"`)\n\t\tescape(buf, a.Val)\n\t\tbuf.WriteByte('\"')\n\t}\n\treturn buf.String()\n}\n\n// String returns a string representation of the Token.\nfunc (t Token) String() string {\n\tswitch t.Type {\n\tcase ErrorToken:\n\t\treturn \"\"\n\tcase TextToken:\n\t\treturn EscapeString(t.Data)\n\tcase StartTagToken:\n\t\treturn \"<\" + t.tagString() + \">\"\n\tcase EndTagToken:\n\t\treturn \"</\" + t.tagString() + \">\"\n\tcase SelfClosingTagToken:\n\t\treturn \"<\" + t.tagString() + \"/>\"\n\tcase CommentToken:\n\t\treturn \"<!--\" + t.Data + \"-->\"\n\tcase DoctypeToken:\n\t\treturn \"<!DOCTYPE \" + t.Data + \">\"\n\t}\n\treturn \"Invalid(\" + strconv.Itoa(int(t.Type)) + \")\"\n}\n\n// span is a range of bytes in a Tokenizer's buffer. The start is inclusive,\n// the end is exclusive.\ntype span struct {\n\tstart, end int\n}\n\n// A Tokenizer returns a stream of HTML Tokens.\ntype Tokenizer struct {\n\t// r is the source of the HTML text.\n\tr io.Reader\n\t// tt is the TokenType of the current token.\n\ttt TokenType\n\t// err is the first error encountered during tokenization. It is possible\n\t// for tt != Error && err != nil to hold: this means that Next returned a\n\t// valid token but the subsequent Next call will return an error token.\n\t// For example, if the HTML text input was just \"plain\", then the first\n\t// Next call would set z.err to io.EOF but return a TextToken, and all\n\t// subsequent Next calls would return an ErrorToken.\n\t// err is never reset. Once it becomes non-nil, it stays non-nil.\n\terr error\n\t// readErr is the error returned by the io.Reader r. It is separate from\n\t// err because it is valid for an io.Reader to return (n int, err1 error)\n\t// such that n > 0 && err1 != nil, and callers should always process the\n\t// n > 0 bytes before considering the error err1.\n\treadErr error\n\t// buf[raw.start:raw.end] holds the raw bytes of the current token.\n\t// buf[raw.end:] is buffered input that will yield future tokens.\n\traw span\n\tbuf []byte\n\t// maxBuf limits the data buffered in buf. A value of 0 means unlimited.\n\tmaxBuf int\n\t// buf[data.start:data.end] holds the raw bytes of the current token's data:\n\t// a text token's text, a tag token's tag name, etc.\n\tdata span\n\t// pendingAttr is the attribute key and value currently being tokenized.\n\t// When complete, pendingAttr is pushed onto attr. nAttrReturned is\n\t// incremented on each call to TagAttr.\n\tpendingAttr   [2]span\n\tattr          [][2]span\n\tnAttrReturned int\n\t// rawTag is the \"script\" in \"</script>\" that closes the next token. If\n\t// non-empty, the subsequent call to Next will return a raw or RCDATA text\n\t// token: one that treats \"<p>\" as text instead of an element.\n\t// rawTag's contents are lower-cased.\n\trawTag string\n\t// textIsRaw is whether the current text token's data is not escaped.\n\ttextIsRaw bool\n\t// convertNUL is whether NUL bytes in the current token's data should\n\t// be converted into \\ufffd replacement characters.\n\tconvertNUL bool\n\t// allowCDATA is whether CDATA sections are allowed in the current context.\n\tallowCDATA bool\n}\n\n// AllowCDATA sets whether or not the tokenizer recognizes <![CDATA[foo]]> as\n// the text \"foo\". The default value is false, which means to recognize it as\n// a bogus comment \"<!-- [CDATA[foo]] -->\" instead.\n//\n// Strictly speaking, an HTML5 compliant tokenizer should allow CDATA if and\n// only if tokenizing foreign content, such as MathML and SVG. However,\n// tracking foreign-contentness is difficult to do purely in the tokenizer,\n// as opposed to the parser, due to HTML integration points: an <svg> element\n// can contain a <foreignObject> that is foreign-to-SVG but not foreign-to-\n// HTML. For strict compliance with the HTML5 tokenization algorithm, it is the\n// responsibility of the user of a tokenizer to call AllowCDATA as appropriate.\n// In practice, if using the tokenizer without caring whether MathML or SVG\n// CDATA is text or comments, such as tokenizing HTML to find all the anchor\n// text, it is acceptable to ignore this responsibility.\nfunc (z *Tokenizer) AllowCDATA(allowCDATA bool) {\n\tz.allowCDATA = allowCDATA\n}\n\n// NextIsNotRawText instructs the tokenizer that the next token should not be\n// considered as 'raw text'. Some elements, such as script and title elements,\n// normally require the next token after the opening tag to be 'raw text' that\n// has no child elements. For example, tokenizing \"<title>a<b>c</b>d</title>\"\n// yields a start tag token for \"<title>\", a text token for \"a<b>c</b>d\", and\n// an end tag token for \"</title>\". There are no distinct start tag or end tag\n// tokens for the \"<b>\" and \"</b>\".\n//\n// This tokenizer implementation will generally look for raw text at the right\n// times. Strictly speaking, an HTML5 compliant tokenizer should not look for\n// raw text if in foreign content: <title> generally needs raw text, but a\n// <title> inside an <svg> does not. Another example is that a <textarea>\n// generally needs raw text, but a <textarea> is not allowed as an immediate\n// child of a <select>; in normal parsing, a <textarea> implies </select>, but\n// one cannot close the implicit element when parsing a <select>'s InnerHTML.\n// Similarly to AllowCDATA, tracking the correct moment to override raw-text-\n// ness is difficult to do purely in the tokenizer, as opposed to the parser.\n// For strict compliance with the HTML5 tokenization algorithm, it is the\n// responsibility of the user of a tokenizer to call NextIsNotRawText as\n// appropriate. In practice, like AllowCDATA, it is acceptable to ignore this\n// responsibility for basic usage.\n//\n// Note that this 'raw text' concept is different from the one offered by the\n// Tokenizer.Raw method.\nfunc (z *Tokenizer) NextIsNotRawText() {\n\tz.rawTag = \"\"\n}\n\n// Err returns the error associated with the most recent ErrorToken token.\n// This is typically io.EOF, meaning the end of tokenization.\nfunc (z *Tokenizer) Err() error {\n\tif z.tt != ErrorToken {\n\t\treturn nil\n\t}\n\treturn z.err\n}\n\n// readByte returns the next byte from the input stream, doing a buffered read\n// from z.r into z.buf if necessary. z.buf[z.raw.start:z.raw.end] remains a contiguous byte\n// slice that holds all the bytes read so far for the current token.\n// It sets z.err if the underlying reader returns an error.\n// Pre-condition: z.err == nil.\nfunc (z *Tokenizer) readByte() byte {\n\tif z.raw.end >= len(z.buf) {\n\t\t// Our buffer is exhausted and we have to read from z.r. Check if the\n\t\t// previous read resulted in an error.\n\t\tif z.readErr != nil {\n\t\t\tz.err = z.readErr\n\t\t\treturn 0\n\t\t}\n\t\t// We copy z.buf[z.raw.start:z.raw.end] to the beginning of z.buf. If the length\n\t\t// z.raw.end - z.raw.start is more than half the capacity of z.buf, then we\n\t\t// allocate a new buffer before the copy.\n\t\tc := cap(z.buf)\n\t\td := z.raw.end - z.raw.start\n\t\tvar buf1 []byte\n\t\tif 2*d > c {\n\t\t\tbuf1 = make([]byte, d, 2*c)\n\t\t} else {\n\t\t\tbuf1 = z.buf[:d]\n\t\t}\n\t\tcopy(buf1, z.buf[z.raw.start:z.raw.end])\n\t\tif x := z.raw.start; x != 0 {\n\t\t\t// Adjust the data/attr spans to refer to the same contents after the copy.\n\t\t\tz.data.start -= x\n\t\t\tz.data.end -= x\n\t\t\tz.pendingAttr[0].start -= x\n\t\t\tz.pendingAttr[0].end -= x\n\t\t\tz.pendingAttr[1].start -= x\n\t\t\tz.pendingAttr[1].end -= x\n\t\t\tfor i := range z.attr {\n\t\t\t\tz.attr[i][0].start -= x\n\t\t\t\tz.attr[i][0].end -= x\n\t\t\t\tz.attr[i][1].start -= x\n\t\t\t\tz.attr[i][1].end -= x\n\t\t\t}\n\t\t}\n\t\tz.raw.start, z.raw.end, z.buf = 0, d, buf1[:d]\n\t\t// Now that we have copied the live bytes to the start of the buffer,\n\t\t// we read from z.r into the remainder.\n\t\tvar n int\n\t\tn, z.readErr = readAtLeastOneByte(z.r, buf1[d:cap(buf1)])\n\t\tif n == 0 {\n\t\t\tz.err = z.readErr\n\t\t\treturn 0\n\t\t}\n\t\tz.buf = buf1[:d+n]\n\t}\n\tx := z.buf[z.raw.end]\n\tz.raw.end++\n\tif z.maxBuf > 0 && z.raw.end-z.raw.start >= z.maxBuf {\n\t\tz.err = ErrBufferExceeded\n\t\treturn 0\n\t}\n\treturn x\n}\n\n// Buffered returns a slice containing data buffered but not yet tokenized.\nfunc (z *Tokenizer) Buffered() []byte {\n\treturn z.buf[z.raw.end:]\n}\n\n// readAtLeastOneByte wraps an io.Reader so that reading cannot return (0, nil).\n// It returns io.ErrNoProgress if the underlying r.Read method returns (0, nil)\n// too many times in succession.\nfunc readAtLeastOneByte(r io.Reader, b []byte) (int, error) {\n\tfor i := 0; i < 100; i++ {\n\t\tn, err := r.Read(b)\n\t\tif n != 0 || err != nil {\n\t\t\treturn n, err\n\t\t}\n\t}\n\treturn 0, io.ErrNoProgress\n}\n\n// skipWhiteSpace skips past any white space.\nfunc (z *Tokenizer) skipWhiteSpace() {\n\tif z.err != nil {\n\t\treturn\n\t}\n\tfor {\n\t\tc := z.readByte()\n\t\tif z.err != nil {\n\t\t\treturn\n\t\t}\n\t\tswitch c {\n\t\tcase ' ', '\\n', '\\r', '\\t', '\\f':\n\t\t\t// No-op.\n\t\tdefault:\n\t\t\tz.raw.end--\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// readRawOrRCDATA reads until the next \"</foo>\", where \"foo\" is z.rawTag and\n// is typically something like \"script\" or \"textarea\".\nfunc (z *Tokenizer) readRawOrRCDATA() {\n\tif z.rawTag == \"script\" {\n\t\tz.readScript()\n\t\tz.textIsRaw = true\n\t\tz.rawTag = \"\"\n\t\treturn\n\t}\nloop:\n\tfor {\n\t\tc := z.readByte()\n\t\tif z.err != nil {\n\t\t\tbreak loop\n\t\t}\n\t\tif c != '<' {\n\t\t\tcontinue loop\n\t\t}\n\t\tc = z.readByte()\n\t\tif z.err != nil {\n\t\t\tbreak loop\n\t\t}\n\t\tif c != '/' {\n\t\t\tcontinue loop\n\t\t}\n\t\tif z.readRawEndTag() || z.err != nil {\n\t\t\tbreak loop\n\t\t}\n\t}\n\tz.data.end = z.raw.end\n\t// A textarea's or title's RCDATA can contain escaped entities.\n\tz.textIsRaw = z.rawTag != \"textarea\" && z.rawTag != \"title\"\n\tz.rawTag = \"\"\n}\n\n// readRawEndTag attempts to read a tag like \"</foo>\", where \"foo\" is z.rawTag.\n// If it succeeds, it backs up the input position to reconsume the tag and\n// returns true. Otherwise it returns false. The opening \"</\" has already been\n// consumed.\nfunc (z *Tokenizer) readRawEndTag() bool {\n\tfor i := 0; i < len(z.rawTag); i++ {\n\t\tc := z.readByte()\n\t\tif z.err != nil {\n\t\t\treturn false\n\t\t}\n\t\tif c != z.rawTag[i] && c != z.rawTag[i]-('a'-'A') {\n\t\t\tz.raw.end--\n\t\t\treturn false\n\t\t}\n\t}\n\tc := z.readByte()\n\tif z.err != nil {\n\t\treturn false\n\t}\n\tswitch c {\n\tcase ' ', '\\n', '\\r', '\\t', '\\f', '/', '>':\n\t\t// The 3 is 2 for the leading \"</\" plus 1 for the trailing character c.\n\t\tz.raw.end -= 3 + len(z.rawTag)\n\t\treturn true\n\t}\n\tz.raw.end--\n\treturn false\n}\n\n// readScript reads until the next </script> tag, following the byzantine\n// rules for escaping/hiding the closing tag.\nfunc (z *Tokenizer) readScript() {\n\tdefer func() {\n\t\tz.data.end = z.raw.end\n\t}()\n\tvar c byte\n\nscriptData:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tif c == '<' {\n\t\tgoto scriptDataLessThanSign\n\t}\n\tgoto scriptData\n\nscriptDataLessThanSign:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tswitch c {\n\tcase '/':\n\t\tgoto scriptDataEndTagOpen\n\tcase '!':\n\t\tgoto scriptDataEscapeStart\n\t}\n\tz.raw.end--\n\tgoto scriptData\n\nscriptDataEndTagOpen:\n\tif z.readRawEndTag() || z.err != nil {\n\t\treturn\n\t}\n\tgoto scriptData\n\nscriptDataEscapeStart:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tif c == '-' {\n\t\tgoto scriptDataEscapeStartDash\n\t}\n\tz.raw.end--\n\tgoto scriptData\n\nscriptDataEscapeStartDash:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tif c == '-' {\n\t\tgoto scriptDataEscapedDashDash\n\t}\n\tz.raw.end--\n\tgoto scriptData\n\nscriptDataEscaped:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tswitch c {\n\tcase '-':\n\t\tgoto scriptDataEscapedDash\n\tcase '<':\n\t\tgoto scriptDataEscapedLessThanSign\n\t}\n\tgoto scriptDataEscaped\n\nscriptDataEscapedDash:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tswitch c {\n\tcase '-':\n\t\tgoto scriptDataEscapedDashDash\n\tcase '<':\n\t\tgoto scriptDataEscapedLessThanSign\n\t}\n\tgoto scriptDataEscaped\n\nscriptDataEscapedDashDash:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tswitch c {\n\tcase '-':\n\t\tgoto scriptDataEscapedDashDash\n\tcase '<':\n\t\tgoto scriptDataEscapedLessThanSign\n\tcase '>':\n\t\tgoto scriptData\n\t}\n\tgoto scriptDataEscaped\n\nscriptDataEscapedLessThanSign:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tif c == '/' {\n\t\tgoto scriptDataEscapedEndTagOpen\n\t}\n\tif 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' {\n\t\tgoto scriptDataDoubleEscapeStart\n\t}\n\tz.raw.end--\n\tgoto scriptData\n\nscriptDataEscapedEndTagOpen:\n\tif z.readRawEndTag() || z.err != nil {\n\t\treturn\n\t}\n\tgoto scriptDataEscaped\n\nscriptDataDoubleEscapeStart:\n\tz.raw.end--\n\tfor i := 0; i < len(\"script\"); i++ {\n\t\tc = z.readByte()\n\t\tif z.err != nil {\n\t\t\treturn\n\t\t}\n\t\tif c != \"script\"[i] && c != \"SCRIPT\"[i] {\n\t\t\tz.raw.end--\n\t\t\tgoto scriptDataEscaped\n\t\t}\n\t}\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tswitch c {\n\tcase ' ', '\\n', '\\r', '\\t', '\\f', '/', '>':\n\t\tgoto scriptDataDoubleEscaped\n\t}\n\tz.raw.end--\n\tgoto scriptDataEscaped\n\nscriptDataDoubleEscaped:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tswitch c {\n\tcase '-':\n\t\tgoto scriptDataDoubleEscapedDash\n\tcase '<':\n\t\tgoto scriptDataDoubleEscapedLessThanSign\n\t}\n\tgoto scriptDataDoubleEscaped\n\nscriptDataDoubleEscapedDash:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tswitch c {\n\tcase '-':\n\t\tgoto scriptDataDoubleEscapedDashDash\n\tcase '<':\n\t\tgoto scriptDataDoubleEscapedLessThanSign\n\t}\n\tgoto scriptDataDoubleEscaped\n\nscriptDataDoubleEscapedDashDash:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tswitch c {\n\tcase '-':\n\t\tgoto scriptDataDoubleEscapedDashDash\n\tcase '<':\n\t\tgoto scriptDataDoubleEscapedLessThanSign\n\tcase '>':\n\t\tgoto scriptData\n\t}\n\tgoto scriptDataDoubleEscaped\n\nscriptDataDoubleEscapedLessThanSign:\n\tc = z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tif c == '/' {\n\t\tgoto scriptDataDoubleEscapeEnd\n\t}\n\tz.raw.end--\n\tgoto scriptDataDoubleEscaped\n\nscriptDataDoubleEscapeEnd:\n\tif z.readRawEndTag() {\n\t\tz.raw.end += len(\"</script>\")\n\t\tgoto scriptDataEscaped\n\t}\n\tif z.err != nil {\n\t\treturn\n\t}\n\tgoto scriptDataDoubleEscaped\n}\n\n// readComment reads the next comment token starting with \"<!--\". The opening\n// \"<!--\" has already been consumed.\nfunc (z *Tokenizer) readComment() {\n\tz.data.start = z.raw.end\n\tdefer func() {\n\t\tif z.data.end < z.data.start {\n\t\t\t// It's a comment with no data, like <!-->.\n\t\t\tz.data.end = z.data.start\n\t\t}\n\t}()\n\tfor dashCount := 2; ; {\n\t\tc := z.readByte()\n\t\tif z.err != nil {\n\t\t\t// Ignore up to two dashes at EOF.\n\t\t\tif dashCount > 2 {\n\t\t\t\tdashCount = 2\n\t\t\t}\n\t\t\tz.data.end = z.raw.end - dashCount\n\t\t\treturn\n\t\t}\n\t\tswitch c {\n\t\tcase '-':\n\t\t\tdashCount++\n\t\t\tcontinue\n\t\tcase '>':\n\t\t\tif dashCount >= 2 {\n\t\t\t\tz.data.end = z.raw.end - len(\"-->\")\n\t\t\t\treturn\n\t\t\t}\n\t\tcase '!':\n\t\t\tif dashCount >= 2 {\n\t\t\t\tc = z.readByte()\n\t\t\t\tif z.err != nil {\n\t\t\t\t\tz.data.end = z.raw.end\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif c == '>' {\n\t\t\t\t\tz.data.end = z.raw.end - len(\"--!>\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdashCount = 0\n\t}\n}\n\n// readUntilCloseAngle reads until the next \">\".\nfunc (z *Tokenizer) readUntilCloseAngle() {\n\tz.data.start = z.raw.end\n\tfor {\n\t\tc := z.readByte()\n\t\tif z.err != nil {\n\t\t\tz.data.end = z.raw.end\n\t\t\treturn\n\t\t}\n\t\tif c == '>' {\n\t\t\tz.data.end = z.raw.end - len(\">\")\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// readMarkupDeclaration reads the next token starting with \"<!\". It might be\n// a \"<!--comment-->\", a \"<!DOCTYPE foo>\", a \"<![CDATA[section]]>\" or\n// \"<!a bogus comment\". The opening \"<!\" has already been consumed.\nfunc (z *Tokenizer) readMarkupDeclaration() TokenType {\n\tz.data.start = z.raw.end\n\tvar c [2]byte\n\tfor i := 0; i < 2; i++ {\n\t\tc[i] = z.readByte()\n\t\tif z.err != nil {\n\t\t\tz.data.end = z.raw.end\n\t\t\treturn CommentToken\n\t\t}\n\t}\n\tif c[0] == '-' && c[1] == '-' {\n\t\tz.readComment()\n\t\treturn CommentToken\n\t}\n\tz.raw.end -= 2\n\tif z.readDoctype() {\n\t\treturn DoctypeToken\n\t}\n\tif z.allowCDATA && z.readCDATA() {\n\t\tz.convertNUL = true\n\t\treturn TextToken\n\t}\n\t// It's a bogus comment.\n\tz.readUntilCloseAngle()\n\treturn CommentToken\n}\n\n// readDoctype attempts to read a doctype declaration and returns true if\n// successful. The opening \"<!\" has already been consumed.\nfunc (z *Tokenizer) readDoctype() bool {\n\tconst s = \"DOCTYPE\"\n\tfor i := 0; i < len(s); i++ {\n\t\tc := z.readByte()\n\t\tif z.err != nil {\n\t\t\tz.data.end = z.raw.end\n\t\t\treturn false\n\t\t}\n\t\tif c != s[i] && c != s[i]+('a'-'A') {\n\t\t\t// Back up to read the fragment of \"DOCTYPE\" again.\n\t\t\tz.raw.end = z.data.start\n\t\t\treturn false\n\t\t}\n\t}\n\tif z.skipWhiteSpace(); z.err != nil {\n\t\tz.data.start = z.raw.end\n\t\tz.data.end = z.raw.end\n\t\treturn true\n\t}\n\tz.readUntilCloseAngle()\n\treturn true\n}\n\n// readCDATA attempts to read a CDATA section and returns true if\n// successful. The opening \"<!\" has already been consumed.\nfunc (z *Tokenizer) readCDATA() bool {\n\tconst s = \"[CDATA[\"\n\tfor i := 0; i < len(s); i++ {\n\t\tc := z.readByte()\n\t\tif z.err != nil {\n\t\t\tz.data.end = z.raw.end\n\t\t\treturn false\n\t\t}\n\t\tif c != s[i] {\n\t\t\t// Back up to read the fragment of \"[CDATA[\" again.\n\t\t\tz.raw.end = z.data.start\n\t\t\treturn false\n\t\t}\n\t}\n\tz.data.start = z.raw.end\n\tbrackets := 0\n\tfor {\n\t\tc := z.readByte()\n\t\tif z.err != nil {\n\t\t\tz.data.end = z.raw.end\n\t\t\treturn true\n\t\t}\n\t\tswitch c {\n\t\tcase ']':\n\t\t\tbrackets++\n\t\tcase '>':\n\t\t\tif brackets >= 2 {\n\t\t\t\tz.data.end = z.raw.end - len(\"]]>\")\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tbrackets = 0\n\t\tdefault:\n\t\t\tbrackets = 0\n\t\t}\n\t}\n}\n\n// startTagIn returns whether the start tag in z.buf[z.data.start:z.data.end]\n// case-insensitively matches any element of ss.\nfunc (z *Tokenizer) startTagIn(ss ...string) bool {\nloop:\n\tfor _, s := range ss {\n\t\tif z.data.end-z.data.start != len(s) {\n\t\t\tcontinue loop\n\t\t}\n\t\tfor i := 0; i < len(s); i++ {\n\t\t\tc := z.buf[z.data.start+i]\n\t\t\tif 'A' <= c && c <= 'Z' {\n\t\t\t\tc += 'a' - 'A'\n\t\t\t}\n\t\t\tif c != s[i] {\n\t\t\t\tcontinue loop\n\t\t\t}\n\t\t}\n\t\treturn true\n\t}\n\treturn false\n}\n\n// readStartTag reads the next start tag token. The opening \"<a\" has already\n// been consumed, where 'a' means anything in [A-Za-z].\nfunc (z *Tokenizer) readStartTag() TokenType {\n\tz.readTag(true)\n\tif z.err != nil {\n\t\treturn ErrorToken\n\t}\n\t// Several tags flag the tokenizer's next token as raw.\n\tc, raw := z.buf[z.data.start], false\n\tif 'A' <= c && c <= 'Z' {\n\t\tc += 'a' - 'A'\n\t}\n\tswitch c {\n\tcase 'i':\n\t\traw = z.startTagIn(\"iframe\")\n\tcase 'n':\n\t\traw = z.startTagIn(\"noembed\", \"noframes\", \"noscript\")\n\tcase 'p':\n\t\traw = z.startTagIn(\"plaintext\")\n\tcase 's':\n\t\traw = z.startTagIn(\"script\", \"style\")\n\tcase 't':\n\t\traw = z.startTagIn(\"textarea\", \"title\")\n\tcase 'x':\n\t\traw = z.startTagIn(\"xmp\")\n\t}\n\tif raw {\n\t\tz.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end]))\n\t}\n\t// Look for a self-closing token like \"<br/>\".\n\tif z.err == nil && z.buf[z.raw.end-2] == '/' {\n\t\treturn SelfClosingTagToken\n\t}\n\treturn StartTagToken\n}\n\n// readTag reads the next tag token and its attributes. If saveAttr, those\n// attributes are saved in z.attr, otherwise z.attr is set to an empty slice.\n// The opening \"<a\" or \"</a\" has already been consumed, where 'a' means anything\n// in [A-Za-z].\nfunc (z *Tokenizer) readTag(saveAttr bool) {\n\tz.attr = z.attr[:0]\n\tz.nAttrReturned = 0\n\t// Read the tag name and attribute key/value pairs.\n\tz.readTagName()\n\tif z.skipWhiteSpace(); z.err != nil {\n\t\treturn\n\t}\n\tfor {\n\t\tc := z.readByte()\n\t\tif z.err != nil || c == '>' {\n\t\t\tbreak\n\t\t}\n\t\tz.raw.end--\n\t\tz.readTagAttrKey()\n\t\tz.readTagAttrVal()\n\t\t// Save pendingAttr if saveAttr and that attribute has a non-empty key.\n\t\tif saveAttr && z.pendingAttr[0].start != z.pendingAttr[0].end {\n\t\t\tz.attr = append(z.attr, z.pendingAttr)\n\t\t}\n\t\tif z.skipWhiteSpace(); z.err != nil {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// readTagName sets z.data to the \"div\" in \"<div k=v>\". The reader (z.raw.end)\n// is positioned such that the first byte of the tag name (the \"d\" in \"<div\")\n// has already been consumed.\nfunc (z *Tokenizer) readTagName() {\n\tz.data.start = z.raw.end - 1\n\tfor {\n\t\tc := z.readByte()\n\t\tif z.err != nil {\n\t\t\tz.data.end = z.raw.end\n\t\t\treturn\n\t\t}\n\t\tswitch c {\n\t\tcase ' ', '\\n', '\\r', '\\t', '\\f':\n\t\t\tz.data.end = z.raw.end - 1\n\t\t\treturn\n\t\tcase '/', '>':\n\t\t\tz.raw.end--\n\t\t\tz.data.end = z.raw.end\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// readTagAttrKey sets z.pendingAttr[0] to the \"k\" in \"<div k=v>\".\n// Precondition: z.err == nil.\nfunc (z *Tokenizer) readTagAttrKey() {\n\tz.pendingAttr[0].start = z.raw.end\n\tfor {\n\t\tc := z.readByte()\n\t\tif z.err != nil {\n\t\t\tz.pendingAttr[0].end = z.raw.end\n\t\t\treturn\n\t\t}\n\t\tswitch c {\n\t\tcase ' ', '\\n', '\\r', '\\t', '\\f', '/':\n\t\t\tz.pendingAttr[0].end = z.raw.end - 1\n\t\t\treturn\n\t\tcase '=', '>':\n\t\t\tz.raw.end--\n\t\t\tz.pendingAttr[0].end = z.raw.end\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// readTagAttrVal sets z.pendingAttr[1] to the \"v\" in \"<div k=v>\".\nfunc (z *Tokenizer) readTagAttrVal() {\n\tz.pendingAttr[1].start = z.raw.end\n\tz.pendingAttr[1].end = z.raw.end\n\tif z.skipWhiteSpace(); z.err != nil {\n\t\treturn\n\t}\n\tc := z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tif c != '=' {\n\t\tz.raw.end--\n\t\treturn\n\t}\n\tif z.skipWhiteSpace(); z.err != nil {\n\t\treturn\n\t}\n\tquote := z.readByte()\n\tif z.err != nil {\n\t\treturn\n\t}\n\tswitch quote {\n\tcase '>':\n\t\tz.raw.end--\n\t\treturn\n\n\tcase '\\'', '\"':\n\t\tz.pendingAttr[1].start = z.raw.end\n\t\tfor {\n\t\t\tc := z.readByte()\n\t\t\tif z.err != nil {\n\t\t\t\tz.pendingAttr[1].end = z.raw.end\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif c == quote {\n\t\t\t\tz.pendingAttr[1].end = z.raw.end - 1\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\tdefault:\n\t\tz.pendingAttr[1].start = z.raw.end - 1\n\t\tfor {\n\t\t\tc := z.readByte()\n\t\t\tif z.err != nil {\n\t\t\t\tz.pendingAttr[1].end = z.raw.end\n\t\t\t\treturn\n\t\t\t}\n\t\t\tswitch c {\n\t\t\tcase ' ', '\\n', '\\r', '\\t', '\\f':\n\t\t\t\tz.pendingAttr[1].end = z.raw.end - 1\n\t\t\t\treturn\n\t\t\tcase '>':\n\t\t\t\tz.raw.end--\n\t\t\t\tz.pendingAttr[1].end = z.raw.end\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Next scans the next token and returns its type.\nfunc (z *Tokenizer) Next() TokenType {\n\tz.raw.start = z.raw.end\n\tz.data.start = z.raw.end\n\tz.data.end = z.raw.end\n\tif z.err != nil {\n\t\tz.tt = ErrorToken\n\t\treturn z.tt\n\t}\n\tif z.rawTag != \"\" {\n\t\tif z.rawTag == \"plaintext\" {\n\t\t\t// Read everything up to EOF.\n\t\t\tfor z.err == nil {\n\t\t\t\tz.readByte()\n\t\t\t}\n\t\t\tz.data.end = z.raw.end\n\t\t\tz.textIsRaw = true\n\t\t} else {\n\t\t\tz.readRawOrRCDATA()\n\t\t}\n\t\tif z.data.end > z.data.start {\n\t\t\tz.tt = TextToken\n\t\t\tz.convertNUL = true\n\t\t\treturn z.tt\n\t\t}\n\t}\n\tz.textIsRaw = false\n\tz.convertNUL = false\n\nloop:\n\tfor {\n\t\tc := z.readByte()\n\t\tif z.err != nil {\n\t\t\tbreak loop\n\t\t}\n\t\tif c != '<' {\n\t\t\tcontinue loop\n\t\t}\n\n\t\t// Check if the '<' we have just read is part of a tag, comment\n\t\t// or doctype. If not, it's part of the accumulated text token.\n\t\tc = z.readByte()\n\t\tif z.err != nil {\n\t\t\tbreak loop\n\t\t}\n\t\tvar tokenType TokenType\n\t\tswitch {\n\t\tcase 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z':\n\t\t\ttokenType = StartTagToken\n\t\tcase c == '/':\n\t\t\ttokenType = EndTagToken\n\t\tcase c == '!' || c == '?':\n\t\t\t// We use CommentToken to mean any of \"<!--actual comments-->\",\n\t\t\t// \"<!DOCTYPE declarations>\" and \"<?xml processing instructions?>\".\n\t\t\ttokenType = CommentToken\n\t\tdefault:\n\t\t\t// Reconsume the current character.\n\t\t\tz.raw.end--\n\t\t\tcontinue\n\t\t}\n\n\t\t// We have a non-text token, but we might have accumulated some text\n\t\t// before that. If so, we return the text first, and return the non-\n\t\t// text token on the subsequent call to Next.\n\t\tif x := z.raw.end - len(\"<a\"); z.raw.start < x {\n\t\t\tz.raw.end = x\n\t\t\tz.data.end = x\n\t\t\tz.tt = TextToken\n\t\t\treturn z.tt\n\t\t}\n\t\tswitch tokenType {\n\t\tcase StartTagToken:\n\t\t\tz.tt = z.readStartTag()\n\t\t\treturn z.tt\n\t\tcase EndTagToken:\n\t\t\tc = z.readByte()\n\t\t\tif z.err != nil {\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tif c == '>' {\n\t\t\t\t// \"</>\" does not generate a token at all. Generate an empty comment\n\t\t\t\t// to allow passthrough clients to pick up the data using Raw.\n\t\t\t\t// Reset the tokenizer state and start again.\n\t\t\t\tz.tt = CommentToken\n\t\t\t\treturn z.tt\n\t\t\t}\n\t\t\tif 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' {\n\t\t\t\tz.readTag(false)\n\t\t\t\tif z.err != nil {\n\t\t\t\t\tz.tt = ErrorToken\n\t\t\t\t} else {\n\t\t\t\t\tz.tt = EndTagToken\n\t\t\t\t}\n\t\t\t\treturn z.tt\n\t\t\t}\n\t\t\tz.raw.end--\n\t\t\tz.readUntilCloseAngle()\n\t\t\tz.tt = CommentToken\n\t\t\treturn z.tt\n\t\tcase CommentToken:\n\t\t\tif c == '!' {\n\t\t\t\tz.tt = z.readMarkupDeclaration()\n\t\t\t\treturn z.tt\n\t\t\t}\n\t\t\tz.raw.end--\n\t\t\tz.readUntilCloseAngle()\n\t\t\tz.tt = CommentToken\n\t\t\treturn z.tt\n\t\t}\n\t}\n\tif z.raw.start < z.raw.end {\n\t\tz.data.end = z.raw.end\n\t\tz.tt = TextToken\n\t\treturn z.tt\n\t}\n\tz.tt = ErrorToken\n\treturn z.tt\n}\n\n// Raw returns the unmodified text of the current token. Calling Next, Token,\n// Text, TagName or TagAttr may change the contents of the returned slice.\nfunc (z *Tokenizer) Raw() []byte {\n\treturn z.buf[z.raw.start:z.raw.end]\n}\n\n// convertNewlines converts \"\\r\" and \"\\r\\n\" in s to \"\\n\".\n// The conversion happens in place, but the resulting slice may be shorter.\nfunc convertNewlines(s []byte) []byte {\n\tfor i, c := range s {\n\t\tif c != '\\r' {\n\t\t\tcontinue\n\t\t}\n\n\t\tsrc := i + 1\n\t\tif src >= len(s) || s[src] != '\\n' {\n\t\t\ts[i] = '\\n'\n\t\t\tcontinue\n\t\t}\n\n\t\tdst := i\n\t\tfor src < len(s) {\n\t\t\tif s[src] == '\\r' {\n\t\t\t\tif src+1 < len(s) && s[src+1] == '\\n' {\n\t\t\t\t\tsrc++\n\t\t\t\t}\n\t\t\t\ts[dst] = '\\n'\n\t\t\t} else {\n\t\t\t\ts[dst] = s[src]\n\t\t\t}\n\t\t\tsrc++\n\t\t\tdst++\n\t\t}\n\t\treturn s[:dst]\n\t}\n\treturn s\n}\n\nvar (\n\tnul         = []byte(\"\\x00\")\n\treplacement = []byte(\"\\ufffd\")\n)\n\n// Text returns the unescaped text of a text, comment or doctype token. The\n// contents of the returned slice may change on the next call to Next.\nfunc (z *Tokenizer) Text() []byte {\n\tswitch z.tt {\n\tcase TextToken, CommentToken, DoctypeToken:\n\t\ts := z.buf[z.data.start:z.data.end]\n\t\tz.data.start = z.raw.end\n\t\tz.data.end = z.raw.end\n\t\ts = convertNewlines(s)\n\t\tif (z.convertNUL || z.tt == CommentToken) && bytes.Contains(s, nul) {\n\t\t\ts = bytes.Replace(s, nul, replacement, -1)\n\t\t}\n\t\tif !z.textIsRaw {\n\t\t\ts = unescape(s, false)\n\t\t}\n\t\treturn s\n\t}\n\treturn nil\n}\n\n// TagName returns the lower-cased name of a tag token (the `img` out of\n// `<IMG SRC=\"foo\">`) and whether the tag has attributes.\n// The contents of the returned slice may change on the next call to Next.\nfunc (z *Tokenizer) TagName() (name []byte, hasAttr bool) {\n\tif z.data.start < z.data.end {\n\t\tswitch z.tt {\n\t\tcase StartTagToken, EndTagToken, SelfClosingTagToken:\n\t\t\ts := z.buf[z.data.start:z.data.end]\n\t\t\tz.data.start = z.raw.end\n\t\t\tz.data.end = z.raw.end\n\t\t\treturn lower(s), z.nAttrReturned < len(z.attr)\n\t\t}\n\t}\n\treturn nil, false\n}\n\n// TagAttr returns the lower-cased key and unescaped value of the next unparsed\n// attribute for the current tag token and whether there are more attributes.\n// The contents of the returned slices may change on the next call to Next.\nfunc (z *Tokenizer) TagAttr() (key, val []byte, moreAttr bool) {\n\tif z.nAttrReturned < len(z.attr) {\n\t\tswitch z.tt {\n\t\tcase StartTagToken, SelfClosingTagToken:\n\t\t\tx := z.attr[z.nAttrReturned]\n\t\t\tz.nAttrReturned++\n\t\t\tkey = z.buf[x[0].start:x[0].end]\n\t\t\tval = z.buf[x[1].start:x[1].end]\n\t\t\treturn lower(key), unescape(convertNewlines(val), true), z.nAttrReturned < len(z.attr)\n\t\t}\n\t}\n\treturn nil, nil, false\n}\n\n// Token returns the next Token. The result's Data and Attr values remain valid\n// after subsequent Next calls.\nfunc (z *Tokenizer) Token() Token {\n\tt := Token{Type: z.tt}\n\tswitch z.tt {\n\tcase TextToken, CommentToken, DoctypeToken:\n\t\tt.Data = string(z.Text())\n\tcase StartTagToken, SelfClosingTagToken, EndTagToken:\n\t\tname, moreAttr := z.TagName()\n\t\tfor moreAttr {\n\t\t\tvar key, val []byte\n\t\t\tkey, val, moreAttr = z.TagAttr()\n\t\t\tt.Attr = append(t.Attr, Attribute{\"\", atom.String(key), string(val)})\n\t\t}\n\t\tif a := atom.Lookup(name); a != 0 {\n\t\t\tt.DataAtom, t.Data = a, a.String()\n\t\t} else {\n\t\t\tt.DataAtom, t.Data = 0, string(name)\n\t\t}\n\t}\n\treturn t\n}\n\n// SetMaxBuf sets a limit on the amount of data buffered during tokenization.\n// A value of 0 means unlimited.\nfunc (z *Tokenizer) SetMaxBuf(n int) {\n\tz.maxBuf = n\n}\n\n// NewTokenizer returns a new HTML Tokenizer for the given Reader.\n// The input is assumed to be UTF-8 encoded.\nfunc NewTokenizer(r io.Reader) *Tokenizer {\n\treturn NewTokenizerFragment(r, \"\")\n}\n\n// NewTokenizerFragment returns a new HTML Tokenizer for the given Reader, for\n// tokenizing an existing element's InnerHTML fragment. contextTag is that\n// element's tag, such as \"div\" or \"iframe\".\n//\n// For example, how the InnerHTML \"a<b\" is tokenized depends on whether it is\n// for a <p> tag or a <script> tag.\n//\n// The input is assumed to be UTF-8 encoded.\nfunc NewTokenizerFragment(r io.Reader, contextTag string) *Tokenizer {\n\tz := &Tokenizer{\n\t\tr:   r,\n\t\tbuf: make([]byte, 0, 4096),\n\t}\n\tif contextTag != \"\" {\n\t\tswitch s := strings.ToLower(contextTag); s {\n\t\tcase \"iframe\", \"noembed\", \"noframes\", \"noscript\", \"plaintext\", \"script\", \"style\", \"title\", \"textarea\", \"xmp\":\n\t\t\tz.rawTag = s\n\t\t}\n\t}\n\treturn z\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/publicsuffix/gen.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\npackage main\n\n// This program generates table.go and table_test.go.\n// Invoke as:\n//\n//\tgo run gen.go -version \"xxx\"       >table.go\n//\tgo run gen.go -version \"xxx\" -test >table_test.go\n//\n// Pass -v to print verbose progress information.\n//\n// The version is derived from information found at\n// https://github.com/publicsuffix/list/commits/master/public_suffix_list.dat\n//\n// To fetch a particular git revision, such as 5c70ccd250, pass\n// -url \"https://raw.githubusercontent.com/publicsuffix/list/5c70ccd250/public_suffix_list.dat\"\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"flag\"\n\t\"fmt\"\n\t\"go/format\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"golang.org/x/net/idna\"\n)\n\nconst (\n\t// These sum of these four values must be no greater than 32.\n\tnodesBitsChildren   = 9\n\tnodesBitsICANN      = 1\n\tnodesBitsTextOffset = 15\n\tnodesBitsTextLength = 6\n\n\t// These sum of these four values must be no greater than 32.\n\tchildrenBitsWildcard = 1\n\tchildrenBitsNodeType = 2\n\tchildrenBitsHi       = 14\n\tchildrenBitsLo       = 14\n)\n\nvar (\n\tmaxChildren   int\n\tmaxTextOffset int\n\tmaxTextLength int\n\tmaxHi         uint32\n\tmaxLo         uint32\n)\n\nfunc max(a, b int) int {\n\tif a < b {\n\t\treturn b\n\t}\n\treturn a\n}\n\nfunc u32max(a, b uint32) uint32 {\n\tif a < b {\n\t\treturn b\n\t}\n\treturn a\n}\n\nconst (\n\tnodeTypeNormal     = 0\n\tnodeTypeException  = 1\n\tnodeTypeParentOnly = 2\n\tnumNodeType        = 3\n)\n\nfunc nodeTypeStr(n int) string {\n\tswitch n {\n\tcase nodeTypeNormal:\n\t\treturn \"+\"\n\tcase nodeTypeException:\n\t\treturn \"!\"\n\tcase nodeTypeParentOnly:\n\t\treturn \"o\"\n\t}\n\tpanic(\"unreachable\")\n}\n\nvar (\n\tlabelEncoding = map[string]uint32{}\n\tlabelsList    = []string{}\n\tlabelsMap     = map[string]bool{}\n\trules         = []string{}\n\n\t// validSuffix is used to check that the entries in the public suffix list\n\t// are in canonical form (after Punycode encoding). Specifically, capital\n\t// letters are not allowed.\n\tvalidSuffix = regexp.MustCompile(`^[a-z0-9_\\!\\*\\-\\.]+$`)\n\n\tsubset = flag.Bool(\"subset\", false, \"generate only a subset of the full table, for debugging\")\n\turl    = flag.String(\"url\",\n\t\t\"https://publicsuffix.org/list/effective_tld_names.dat\",\n\t\t\"URL of the publicsuffix.org list. If empty, stdin is read instead\")\n\tv       = flag.Bool(\"v\", false, \"verbose output (to stderr)\")\n\tversion = flag.String(\"version\", \"\", \"the effective_tld_names.dat version\")\n\ttest    = flag.Bool(\"test\", false, \"generate table_test.go\")\n)\n\nfunc main() {\n\tif err := main1(); err != nil {\n\t\tfmt.Fprintln(os.Stderr, err)\n\t\tos.Exit(1)\n\t}\n}\n\nfunc main1() error {\n\tflag.Parse()\n\tif nodesBitsTextLength+nodesBitsTextOffset+nodesBitsICANN+nodesBitsChildren > 32 {\n\t\treturn fmt.Errorf(\"not enough bits to encode the nodes table\")\n\t}\n\tif childrenBitsLo+childrenBitsHi+childrenBitsNodeType+childrenBitsWildcard > 32 {\n\t\treturn fmt.Errorf(\"not enough bits to encode the children table\")\n\t}\n\tif *version == \"\" {\n\t\treturn fmt.Errorf(\"-version was not specified\")\n\t}\n\tvar r io.Reader = os.Stdin\n\tif *url != \"\" {\n\t\tres, err := http.Get(*url)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif res.StatusCode != http.StatusOK {\n\t\t\treturn fmt.Errorf(\"bad GET status for %s: %d\", *url, res.Status)\n\t\t}\n\t\tr = res.Body\n\t\tdefer res.Body.Close()\n\t}\n\n\tvar root node\n\ticann := false\n\tbuf := new(bytes.Buffer)\n\tbr := bufio.NewReader(r)\n\tfor {\n\t\ts, err := br.ReadString('\\n')\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\ts = strings.TrimSpace(s)\n\t\tif strings.Contains(s, \"BEGIN ICANN DOMAINS\") {\n\t\t\ticann = true\n\t\t\tcontinue\n\t\t}\n\t\tif strings.Contains(s, \"END ICANN DOMAINS\") {\n\t\t\ticann = false\n\t\t\tcontinue\n\t\t}\n\t\tif s == \"\" || strings.HasPrefix(s, \"//\") {\n\t\t\tcontinue\n\t\t}\n\t\ts, err = idna.ToASCII(s)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif !validSuffix.MatchString(s) {\n\t\t\treturn fmt.Errorf(\"bad publicsuffix.org list data: %q\", s)\n\t\t}\n\n\t\tif *subset {\n\t\t\tswitch {\n\t\t\tcase s == \"ac.jp\" || strings.HasSuffix(s, \".ac.jp\"):\n\t\t\tcase s == \"ak.us\" || strings.HasSuffix(s, \".ak.us\"):\n\t\t\tcase s == \"ao\" || strings.HasSuffix(s, \".ao\"):\n\t\t\tcase s == \"ar\" || strings.HasSuffix(s, \".ar\"):\n\t\t\tcase s == \"arpa\" || strings.HasSuffix(s, \".arpa\"):\n\t\t\tcase s == \"cy\" || strings.HasSuffix(s, \".cy\"):\n\t\t\tcase s == \"dyndns.org\" || strings.HasSuffix(s, \".dyndns.org\"):\n\t\t\tcase s == \"jp\":\n\t\t\tcase s == \"kobe.jp\" || strings.HasSuffix(s, \".kobe.jp\"):\n\t\t\tcase s == \"kyoto.jp\" || strings.HasSuffix(s, \".kyoto.jp\"):\n\t\t\tcase s == \"om\" || strings.HasSuffix(s, \".om\"):\n\t\t\tcase s == \"uk\" || strings.HasSuffix(s, \".uk\"):\n\t\t\tcase s == \"uk.com\" || strings.HasSuffix(s, \".uk.com\"):\n\t\t\tcase s == \"tw\" || strings.HasSuffix(s, \".tw\"):\n\t\t\tcase s == \"zw\" || strings.HasSuffix(s, \".zw\"):\n\t\t\tcase s == \"xn--p1ai\" || strings.HasSuffix(s, \".xn--p1ai\"):\n\t\t\t\t// xn--p1ai is Russian-Cyrillic \"рф\".\n\t\t\tdefault:\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\trules = append(rules, s)\n\n\t\tnt, wildcard := nodeTypeNormal, false\n\t\tswitch {\n\t\tcase strings.HasPrefix(s, \"*.\"):\n\t\t\ts, nt = s[2:], nodeTypeParentOnly\n\t\t\twildcard = true\n\t\tcase strings.HasPrefix(s, \"!\"):\n\t\t\ts, nt = s[1:], nodeTypeException\n\t\t}\n\t\tlabels := strings.Split(s, \".\")\n\t\tfor n, i := &root, len(labels)-1; i >= 0; i-- {\n\t\t\tlabel := labels[i]\n\t\t\tn = n.child(label)\n\t\t\tif i == 0 {\n\t\t\t\tif nt != nodeTypeParentOnly && n.nodeType == nodeTypeParentOnly {\n\t\t\t\t\tn.nodeType = nt\n\t\t\t\t}\n\t\t\t\tn.icann = n.icann && icann\n\t\t\t\tn.wildcard = n.wildcard || wildcard\n\t\t\t}\n\t\t\tlabelsMap[label] = true\n\t\t}\n\t}\n\tlabelsList = make([]string, 0, len(labelsMap))\n\tfor label := range labelsMap {\n\t\tlabelsList = append(labelsList, label)\n\t}\n\tsort.Strings(labelsList)\n\n\tp := printReal\n\tif *test {\n\t\tp = printTest\n\t}\n\tif err := p(buf, &root); err != nil {\n\t\treturn err\n\t}\n\n\tb, err := format.Source(buf.Bytes())\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = os.Stdout.Write(b)\n\treturn err\n}\n\nfunc printTest(w io.Writer, n *node) error {\n\tfmt.Fprintf(w, \"// generated by go run gen.go; DO NOT EDIT\\n\\n\")\n\tfmt.Fprintf(w, \"package publicsuffix\\n\\nvar rules = [...]string{\\n\")\n\tfor _, rule := range rules {\n\t\tfmt.Fprintf(w, \"%q,\\n\", rule)\n\t}\n\tfmt.Fprintf(w, \"}\\n\\nvar nodeLabels = [...]string{\\n\")\n\tif err := n.walk(w, printNodeLabel); err != nil {\n\t\treturn err\n\t}\n\tfmt.Fprintf(w, \"}\\n\")\n\treturn nil\n}\n\nfunc printReal(w io.Writer, n *node) error {\n\tconst header = `// generated by go run gen.go; DO NOT EDIT\n\npackage publicsuffix\n\nconst version = %q\n\nconst (\n\tnodesBitsChildren   = %d\n\tnodesBitsICANN      = %d\n\tnodesBitsTextOffset = %d\n\tnodesBitsTextLength = %d\n\n\tchildrenBitsWildcard = %d\n\tchildrenBitsNodeType = %d\n\tchildrenBitsHi       = %d\n\tchildrenBitsLo       = %d\n)\n\nconst (\n\tnodeTypeNormal     = %d\n\tnodeTypeException  = %d\n\tnodeTypeParentOnly = %d\n)\n\n// numTLD is the number of top level domains.\nconst numTLD = %d\n\n`\n\tfmt.Fprintf(w, header, *version,\n\t\tnodesBitsChildren, nodesBitsICANN, nodesBitsTextOffset, nodesBitsTextLength,\n\t\tchildrenBitsWildcard, childrenBitsNodeType, childrenBitsHi, childrenBitsLo,\n\t\tnodeTypeNormal, nodeTypeException, nodeTypeParentOnly, len(n.children))\n\n\ttext := combineText(labelsList)\n\tif text == \"\" {\n\t\treturn fmt.Errorf(\"internal error: makeText returned no text\")\n\t}\n\tfor _, label := range labelsList {\n\t\toffset, length := strings.Index(text, label), len(label)\n\t\tif offset < 0 {\n\t\t\treturn fmt.Errorf(\"internal error: could not find %q in text %q\", label, text)\n\t\t}\n\t\tmaxTextOffset, maxTextLength = max(maxTextOffset, offset), max(maxTextLength, length)\n\t\tif offset >= 1<<nodesBitsTextOffset {\n\t\t\treturn fmt.Errorf(\"text offset %d is too large, or nodeBitsTextOffset is too small\", offset)\n\t\t}\n\t\tif length >= 1<<nodesBitsTextLength {\n\t\t\treturn fmt.Errorf(\"text length %d is too large, or nodeBitsTextLength is too small\", length)\n\t\t}\n\t\tlabelEncoding[label] = uint32(offset)<<nodesBitsTextLength | uint32(length)\n\t}\n\tfmt.Fprintf(w, \"// Text is the combined text of all labels.\\nconst text = \")\n\tfor len(text) > 0 {\n\t\tn, plus := len(text), \"\"\n\t\tif n > 64 {\n\t\t\tn, plus = 64, \" +\"\n\t\t}\n\t\tfmt.Fprintf(w, \"%q%s\\n\", text[:n], plus)\n\t\ttext = text[n:]\n\t}\n\n\tif err := n.walk(w, assignIndexes); err != nil {\n\t\treturn err\n\t}\n\n\tfmt.Fprintf(w, `\n\n// nodes is the list of nodes. Each node is represented as a uint32, which\n// encodes the node's children, wildcard bit and node type (as an index into\n// the children array), ICANN bit and text.\n//\n// In the //-comment after each node's data, the nodes indexes of the children\n// are formatted as (n0x1234-n0x1256), with * denoting the wildcard bit. The\n// nodeType is printed as + for normal, ! for exception, and o for parent-only\n// nodes that have children but don't match a domain label in their own right.\n// An I denotes an ICANN domain.\n//\n// The layout within the uint32, from MSB to LSB, is:\n//\t[%2d bits] unused\n//\t[%2d bits] children index\n//\t[%2d bits] ICANN bit\n//\t[%2d bits] text index\n//\t[%2d bits] text length\nvar nodes = [...]uint32{\n`,\n\t\t32-nodesBitsChildren-nodesBitsICANN-nodesBitsTextOffset-nodesBitsTextLength,\n\t\tnodesBitsChildren, nodesBitsICANN, nodesBitsTextOffset, nodesBitsTextLength)\n\tif err := n.walk(w, printNode); err != nil {\n\t\treturn err\n\t}\n\tfmt.Fprintf(w, `}\n\n// children is the list of nodes' children, the parent's wildcard bit and the\n// parent's node type. If a node has no children then their children index\n// will be in the range [0, 6), depending on the wildcard bit and node type.\n//\n// The layout within the uint32, from MSB to LSB, is:\n//\t[%2d bits] unused\n//\t[%2d bits] wildcard bit\n//\t[%2d bits] node type\n//\t[%2d bits] high nodes index (exclusive) of children\n//\t[%2d bits] low nodes index (inclusive) of children\nvar children=[...]uint32{\n`,\n\t\t32-childrenBitsWildcard-childrenBitsNodeType-childrenBitsHi-childrenBitsLo,\n\t\tchildrenBitsWildcard, childrenBitsNodeType, childrenBitsHi, childrenBitsLo)\n\tfor i, c := range childrenEncoding {\n\t\ts := \"---------------\"\n\t\tlo := c & (1<<childrenBitsLo - 1)\n\t\thi := (c >> childrenBitsLo) & (1<<childrenBitsHi - 1)\n\t\tif lo != hi {\n\t\t\ts = fmt.Sprintf(\"n0x%04x-n0x%04x\", lo, hi)\n\t\t}\n\t\tnodeType := int(c>>(childrenBitsLo+childrenBitsHi)) & (1<<childrenBitsNodeType - 1)\n\t\twildcard := c>>(childrenBitsLo+childrenBitsHi+childrenBitsNodeType) != 0\n\t\tfmt.Fprintf(w, \"0x%08x, // c0x%04x (%s)%s %s\\n\",\n\t\t\tc, i, s, wildcardStr(wildcard), nodeTypeStr(nodeType))\n\t}\n\tfmt.Fprintf(w, \"}\\n\\n\")\n\tfmt.Fprintf(w, \"// max children %d (capacity %d)\\n\", maxChildren, 1<<nodesBitsChildren-1)\n\tfmt.Fprintf(w, \"// max text offset %d (capacity %d)\\n\", maxTextOffset, 1<<nodesBitsTextOffset-1)\n\tfmt.Fprintf(w, \"// max text length %d (capacity %d)\\n\", maxTextLength, 1<<nodesBitsTextLength-1)\n\tfmt.Fprintf(w, \"// max hi %d (capacity %d)\\n\", maxHi, 1<<childrenBitsHi-1)\n\tfmt.Fprintf(w, \"// max lo %d (capacity %d)\\n\", maxLo, 1<<childrenBitsLo-1)\n\treturn nil\n}\n\ntype node struct {\n\tlabel    string\n\tnodeType int\n\ticann    bool\n\twildcard bool\n\t// nodesIndex and childrenIndex are the index of this node in the nodes\n\t// and the index of its children offset/length in the children arrays.\n\tnodesIndex, childrenIndex int\n\t// firstChild is the index of this node's first child, or zero if this\n\t// node has no children.\n\tfirstChild int\n\t// children are the node's children, in strictly increasing node label order.\n\tchildren []*node\n}\n\nfunc (n *node) walk(w io.Writer, f func(w1 io.Writer, n1 *node) error) error {\n\tif err := f(w, n); err != nil {\n\t\treturn err\n\t}\n\tfor _, c := range n.children {\n\t\tif err := c.walk(w, f); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// child returns the child of n with the given label. The child is created if\n// it did not exist beforehand.\nfunc (n *node) child(label string) *node {\n\tfor _, c := range n.children {\n\t\tif c.label == label {\n\t\t\treturn c\n\t\t}\n\t}\n\tc := &node{\n\t\tlabel:    label,\n\t\tnodeType: nodeTypeParentOnly,\n\t\ticann:    true,\n\t}\n\tn.children = append(n.children, c)\n\tsort.Sort(byLabel(n.children))\n\treturn c\n}\n\ntype byLabel []*node\n\nfunc (b byLabel) Len() int           { return len(b) }\nfunc (b byLabel) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }\nfunc (b byLabel) Less(i, j int) bool { return b[i].label < b[j].label }\n\nvar nextNodesIndex int\n\n// childrenEncoding are the encoded entries in the generated children array.\n// All these pre-defined entries have no children.\nvar childrenEncoding = []uint32{\n\t0 << (childrenBitsLo + childrenBitsHi), // Without wildcard bit, nodeTypeNormal.\n\t1 << (childrenBitsLo + childrenBitsHi), // Without wildcard bit, nodeTypeException.\n\t2 << (childrenBitsLo + childrenBitsHi), // Without wildcard bit, nodeTypeParentOnly.\n\t4 << (childrenBitsLo + childrenBitsHi), // With wildcard bit, nodeTypeNormal.\n\t5 << (childrenBitsLo + childrenBitsHi), // With wildcard bit, nodeTypeException.\n\t6 << (childrenBitsLo + childrenBitsHi), // With wildcard bit, nodeTypeParentOnly.\n}\n\nvar firstCallToAssignIndexes = true\n\nfunc assignIndexes(w io.Writer, n *node) error {\n\tif len(n.children) != 0 {\n\t\t// Assign nodesIndex.\n\t\tn.firstChild = nextNodesIndex\n\t\tfor _, c := range n.children {\n\t\t\tc.nodesIndex = nextNodesIndex\n\t\t\tnextNodesIndex++\n\t\t}\n\n\t\t// The root node's children is implicit.\n\t\tif firstCallToAssignIndexes {\n\t\t\tfirstCallToAssignIndexes = false\n\t\t\treturn nil\n\t\t}\n\n\t\t// Assign childrenIndex.\n\t\tmaxChildren = max(maxChildren, len(childrenEncoding))\n\t\tif len(childrenEncoding) >= 1<<nodesBitsChildren {\n\t\t\treturn fmt.Errorf(\"children table size %d is too large, or nodeBitsChildren is too small\", len(childrenEncoding))\n\t\t}\n\t\tn.childrenIndex = len(childrenEncoding)\n\t\tlo := uint32(n.firstChild)\n\t\thi := lo + uint32(len(n.children))\n\t\tmaxLo, maxHi = u32max(maxLo, lo), u32max(maxHi, hi)\n\t\tif lo >= 1<<childrenBitsLo {\n\t\t\treturn fmt.Errorf(\"children lo %d is too large, or childrenBitsLo is too small\", lo)\n\t\t}\n\t\tif hi >= 1<<childrenBitsHi {\n\t\t\treturn fmt.Errorf(\"children hi %d is too large, or childrenBitsHi is too small\", hi)\n\t\t}\n\t\tenc := hi<<childrenBitsLo | lo\n\t\tenc |= uint32(n.nodeType) << (childrenBitsLo + childrenBitsHi)\n\t\tif n.wildcard {\n\t\t\tenc |= 1 << (childrenBitsLo + childrenBitsHi + childrenBitsNodeType)\n\t\t}\n\t\tchildrenEncoding = append(childrenEncoding, enc)\n\t} else {\n\t\tn.childrenIndex = n.nodeType\n\t\tif n.wildcard {\n\t\t\tn.childrenIndex += numNodeType\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc printNode(w io.Writer, n *node) error {\n\tfor _, c := range n.children {\n\t\ts := \"---------------\"\n\t\tif len(c.children) != 0 {\n\t\t\ts = fmt.Sprintf(\"n0x%04x-n0x%04x\", c.firstChild, c.firstChild+len(c.children))\n\t\t}\n\t\tencoding := labelEncoding[c.label]\n\t\tif c.icann {\n\t\t\tencoding |= 1 << (nodesBitsTextLength + nodesBitsTextOffset)\n\t\t}\n\t\tencoding |= uint32(c.childrenIndex) << (nodesBitsTextLength + nodesBitsTextOffset + nodesBitsICANN)\n\t\tfmt.Fprintf(w, \"0x%08x, // n0x%04x c0x%04x (%s)%s %s %s %s\\n\",\n\t\t\tencoding, c.nodesIndex, c.childrenIndex, s, wildcardStr(c.wildcard),\n\t\t\tnodeTypeStr(c.nodeType), icannStr(c.icann), c.label,\n\t\t)\n\t}\n\treturn nil\n}\n\nfunc printNodeLabel(w io.Writer, n *node) error {\n\tfor _, c := range n.children {\n\t\tfmt.Fprintf(w, \"%q,\\n\", c.label)\n\t}\n\treturn nil\n}\n\nfunc icannStr(icann bool) string {\n\tif icann {\n\t\treturn \"I\"\n\t}\n\treturn \" \"\n}\n\nfunc wildcardStr(wildcard bool) string {\n\tif wildcard {\n\t\treturn \"*\"\n\t}\n\treturn \" \"\n}\n\n// combineText combines all the strings in labelsList to form one giant string.\n// Overlapping strings will be merged: \"arpa\" and \"parliament\" could yield\n// \"arparliament\".\nfunc combineText(labelsList []string) string {\n\tbeforeLength := 0\n\tfor _, s := range labelsList {\n\t\tbeforeLength += len(s)\n\t}\n\n\ttext := crush(removeSubstrings(labelsList))\n\tif *v {\n\t\tfmt.Fprintf(os.Stderr, \"crushed %d bytes to become %d bytes\\n\", beforeLength, len(text))\n\t}\n\treturn text\n}\n\ntype byLength []string\n\nfunc (s byLength) Len() int           { return len(s) }\nfunc (s byLength) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }\nfunc (s byLength) Less(i, j int) bool { return len(s[i]) < len(s[j]) }\n\n// removeSubstrings returns a copy of its input with any strings removed\n// that are substrings of other provided strings.\nfunc removeSubstrings(input []string) []string {\n\t// Make a copy of input.\n\tss := append(make([]string, 0, len(input)), input...)\n\tsort.Sort(byLength(ss))\n\n\tfor i, shortString := range ss {\n\t\t// For each string, only consider strings higher than it in sort order, i.e.\n\t\t// of equal length or greater.\n\t\tfor _, longString := range ss[i+1:] {\n\t\t\tif strings.Contains(longString, shortString) {\n\t\t\t\tss[i] = \"\"\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove the empty strings.\n\tsort.Strings(ss)\n\tfor len(ss) > 0 && ss[0] == \"\" {\n\t\tss = ss[1:]\n\t}\n\treturn ss\n}\n\n// crush combines a list of strings, taking advantage of overlaps. It returns a\n// single string that contains each input string as a substring.\nfunc crush(ss []string) string {\n\tmaxLabelLen := 0\n\tfor _, s := range ss {\n\t\tif maxLabelLen < len(s) {\n\t\t\tmaxLabelLen = len(s)\n\t\t}\n\t}\n\n\tfor prefixLen := maxLabelLen; prefixLen > 0; prefixLen-- {\n\t\tprefixes := makePrefixMap(ss, prefixLen)\n\t\tfor i, s := range ss {\n\t\t\tif len(s) <= prefixLen {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tmergeLabel(ss, i, prefixLen, prefixes)\n\t\t}\n\t}\n\n\treturn strings.Join(ss, \"\")\n}\n\n// mergeLabel merges the label at ss[i] with the first available matching label\n// in prefixMap, where the last \"prefixLen\" characters in ss[i] match the first\n// \"prefixLen\" characters in the matching label.\n// It will merge ss[i] repeatedly until no more matches are available.\n// All matching labels merged into ss[i] are replaced by \"\".\nfunc mergeLabel(ss []string, i, prefixLen int, prefixes prefixMap) {\n\ts := ss[i]\n\tsuffix := s[len(s)-prefixLen:]\n\tfor _, j := range prefixes[suffix] {\n\t\t// Empty strings mean \"already used.\" Also avoid merging with self.\n\t\tif ss[j] == \"\" || i == j {\n\t\t\tcontinue\n\t\t}\n\t\tif *v {\n\t\t\tfmt.Fprintf(os.Stderr, \"%d-length overlap at (%4d,%4d): %q and %q share %q\\n\",\n\t\t\t\tprefixLen, i, j, ss[i], ss[j], suffix)\n\t\t}\n\t\tss[i] += ss[j][prefixLen:]\n\t\tss[j] = \"\"\n\t\t// ss[i] has a new suffix, so merge again if possible.\n\t\t// Note: we only have to merge again at the same prefix length. Shorter\n\t\t// prefix lengths will be handled in the next iteration of crush's for loop.\n\t\t// Can there be matches for longer prefix lengths, introduced by the merge?\n\t\t// I believe that any such matches would by necessity have been eliminated\n\t\t// during substring removal or merged at a higher prefix length. For\n\t\t// instance, in crush(\"abc\", \"cde\", \"bcdef\"), combining \"abc\" and \"cde\"\n\t\t// would yield \"abcde\", which could be merged with \"bcdef.\" However, in\n\t\t// practice \"cde\" would already have been elimintated by removeSubstrings.\n\t\tmergeLabel(ss, i, prefixLen, prefixes)\n\t\treturn\n\t}\n}\n\n// prefixMap maps from a prefix to a list of strings containing that prefix. The\n// list of strings is represented as indexes into a slice of strings stored\n// elsewhere.\ntype prefixMap map[string][]int\n\n// makePrefixMap constructs a prefixMap from a slice of strings.\nfunc makePrefixMap(ss []string, prefixLen int) prefixMap {\n\tprefixes := make(prefixMap)\n\tfor i, s := range ss {\n\t\t// We use < rather than <= because if a label matches on a prefix equal to\n\t\t// its full length, that's actually a substring match handled by\n\t\t// removeSubstrings.\n\t\tif prefixLen < len(s) {\n\t\t\tprefix := s[:prefixLen]\n\t\t\tprefixes[prefix] = append(prefixes[prefix], i)\n\t\t}\n\t}\n\n\treturn prefixes\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/publicsuffix/list.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package publicsuffix provides a public suffix list based on data from\n// http://publicsuffix.org/. A public suffix is one under which Internet users\n// can directly register names.\npackage publicsuffix\n\n// TODO: specify case sensitivity and leading/trailing dot behavior for\n// func PublicSuffix and func EffectiveTLDPlusOne.\n\nimport (\n\t\"fmt\"\n\t\"net/http/cookiejar\"\n\t\"strings\"\n)\n\n// List implements the cookiejar.PublicSuffixList interface by calling the\n// PublicSuffix function.\nvar List cookiejar.PublicSuffixList = list{}\n\ntype list struct{}\n\nfunc (list) PublicSuffix(domain string) string {\n\tps, _ := PublicSuffix(domain)\n\treturn ps\n}\n\nfunc (list) String() string {\n\treturn version\n}\n\n// PublicSuffix returns the public suffix of the domain using a copy of the\n// publicsuffix.org database compiled into the library.\n//\n// icann is whether the public suffix is managed by the Internet Corporation\n// for Assigned Names and Numbers. If not, the public suffix is privately\n// managed. For example, foo.org and foo.co.uk are ICANN domains,\n// foo.dyndns.org and foo.blogspot.co.uk are private domains.\n//\n// Use cases for distinguishing ICANN domains like foo.com from private\n// domains like foo.appspot.com can be found at\n// https://wiki.mozilla.org/Public_Suffix_List/Use_Cases\nfunc PublicSuffix(domain string) (publicSuffix string, icann bool) {\n\tlo, hi := uint32(0), uint32(numTLD)\n\ts, suffix, wildcard := domain, len(domain), false\nloop:\n\tfor {\n\t\tdot := strings.LastIndex(s, \".\")\n\t\tif wildcard {\n\t\t\tsuffix = 1 + dot\n\t\t}\n\t\tif lo == hi {\n\t\t\tbreak\n\t\t}\n\t\tf := find(s[1+dot:], lo, hi)\n\t\tif f == notFound {\n\t\t\tbreak\n\t\t}\n\n\t\tu := nodes[f] >> (nodesBitsTextOffset + nodesBitsTextLength)\n\t\ticann = u&(1<<nodesBitsICANN-1) != 0\n\t\tu >>= nodesBitsICANN\n\t\tu = children[u&(1<<nodesBitsChildren-1)]\n\t\tlo = u & (1<<childrenBitsLo - 1)\n\t\tu >>= childrenBitsLo\n\t\thi = u & (1<<childrenBitsHi - 1)\n\t\tu >>= childrenBitsHi\n\t\tswitch u & (1<<childrenBitsNodeType - 1) {\n\t\tcase nodeTypeNormal:\n\t\t\tsuffix = 1 + dot\n\t\tcase nodeTypeException:\n\t\t\tsuffix = 1 + len(s)\n\t\t\tbreak loop\n\t\t}\n\t\tu >>= childrenBitsNodeType\n\t\twildcard = u&(1<<childrenBitsWildcard-1) != 0\n\n\t\tif dot == -1 {\n\t\t\tbreak\n\t\t}\n\t\ts = s[:dot]\n\t}\n\tif suffix == len(domain) {\n\t\t// If no rules match, the prevailing rule is \"*\".\n\t\treturn domain[1+strings.LastIndex(domain, \".\"):], icann\n\t}\n\treturn domain[suffix:], icann\n}\n\nconst notFound uint32 = 1<<32 - 1\n\n// find returns the index of the node in the range [lo, hi) whose label equals\n// label, or notFound if there is no such node. The range is assumed to be in\n// strictly increasing node label order.\nfunc find(label string, lo, hi uint32) uint32 {\n\tfor lo < hi {\n\t\tmid := lo + (hi-lo)/2\n\t\ts := nodeLabel(mid)\n\t\tif s < label {\n\t\t\tlo = mid + 1\n\t\t} else if s == label {\n\t\t\treturn mid\n\t\t} else {\n\t\t\thi = mid\n\t\t}\n\t}\n\treturn notFound\n}\n\n// nodeLabel returns the label for the i'th node.\nfunc nodeLabel(i uint32) string {\n\tx := nodes[i]\n\tlength := x & (1<<nodesBitsTextLength - 1)\n\tx >>= nodesBitsTextLength\n\toffset := x & (1<<nodesBitsTextOffset - 1)\n\treturn text[offset : offset+length]\n}\n\n// EffectiveTLDPlusOne returns the effective top level domain plus one more\n// label. For example, the eTLD+1 for \"foo.bar.golang.org\" is \"golang.org\".\nfunc EffectiveTLDPlusOne(domain string) (string, error) {\n\tsuffix, _ := PublicSuffix(domain)\n\tif len(domain) <= len(suffix) {\n\t\treturn \"\", fmt.Errorf(\"publicsuffix: cannot derive eTLD+1 for domain %q\", domain)\n\t}\n\ti := len(domain) - len(suffix) - 1\n\tif domain[i] != '.' {\n\t\treturn \"\", fmt.Errorf(\"publicsuffix: invalid public suffix %q for domain %q\", suffix, domain)\n\t}\n\treturn domain[1+strings.LastIndex(domain[:i], \".\"):], nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/publicsuffix/table.go",
    "content": "// generated by go run gen.go; DO NOT EDIT\n\npackage publicsuffix\n\nconst version = \"publicsuffix.org's public_suffix_list.dat, git revision bade64c (2016-03-01)\"\n\nconst (\n\tnodesBitsChildren   = 9\n\tnodesBitsICANN      = 1\n\tnodesBitsTextOffset = 15\n\tnodesBitsTextLength = 6\n\n\tchildrenBitsWildcard = 1\n\tchildrenBitsNodeType = 2\n\tchildrenBitsHi       = 14\n\tchildrenBitsLo       = 14\n)\n\nconst (\n\tnodeTypeNormal     = 0\n\tnodeTypeException  = 1\n\tnodeTypeParentOnly = 2\n)\n\n// numTLD is the number of top level domains.\nconst numTLD = 1545\n\n// Text is the combined text of all labels.\nconst text = \"bievatmallorcadaquesanfranciscotlandupontarioceanographiquebifuk\" +\n\t\"agawalmartateshinanomachintaijinuyamanouchikuhokuryugasakitashio\" +\n\t\"barabihorologyusuharabikedagestangebilbaogakievenesangoddabillus\" +\n\t\"trationikkoebenhavnikolaeverbankashiwarabiomutashinainvestmentsa\" +\n\t\"njotateyamabirdartcenterprisesakikonaircraftraeumtgeradealstahau\" +\n\t\"gesundurbanamexeterbirkenesoddtangenovaravennaharimalvikashiwaza\" +\n\t\"kiyokawarabirthplacebjarkoyusuisservicesannanikonantanangerbjerk\" +\n\t\"reimmobilieninohelplfinancialipetskasukabedzin-the-bandaioiraseb\" +\n\t\"astopologyeongnamegawakembuchikumagayagawakkanaibetsubamericanfa\" +\n\t\"milydscloudappspotenzachpomorskienebakkeshibechambagriculturenne\" +\n\t\"budapest-a-la-masioninomiyakonojoshkar-olayangroupaleostrowiecar\" +\n\t\"toonartdecoffeedbackasumigaurawa-mazowszextraspace-to-rentalstom\" +\n\t\"akomaibarabjugnirasakis-a-candidateblockbusternidurhamburgliwice\" +\n\t\"bloombergbauernrtatsunostrowwlkpmglobalashovhachinoheguris-a-cat\" +\n\t\"ererbluedatingloboehringerikebmoattachmentsannohelsinkitahiroshi\" +\n\t\"marshallstatebankasuyakutiabmsanokaszubyuudmurtiabmwegroweibolza\" +\n\t\"nore-og-uvdalivornobnpparibaselburglogoweirbomloansantabarbarabo\" +\n\t\"ndvrdnsantacruzsantafedexhibitionishiazais-a-celticsfanishigotpa\" +\n\t\"ntheonishiharabonnishiizunazukis-a-chefarsundwgloppenzaogashimad\" +\n\t\"achicagobododgemologicallyngenglandyndns-homednsanukis-a-conserv\" +\n\t\"ativefsncfailomzansimagicasadelamonedavvesiidazaifudaigodoesntex\" +\n\t\"istanbullensakerbookingmbhartiffanynysafetysfjordyndns-ip6bootsa\" +\n\t\"otomeldalorenskogminakamichigangwonishikatakazakis-a-cpadoval-da\" +\n\t\"ostavalleyuzawaboschaefflerdalotenkawabostikatowicebostonakijins\" +\n\t\"ekikogentingmodenakasatsunairtrafficaseihichisobetsuitairabotani\" +\n\t\"calgardenishikatsuragithubusercontentattoolsztynsettlersapodhale\" +\n\t\"vangerbotanicgardenishikawazukanazawabotanyuzhno-sakhalinskatsus\" +\n\t\"hikabeeldengeluidyndns-mailotteboutiquebecngmxboxenapponazure-mo\" +\n\t\"bilebozentsujiiebradescorporationishimerabrandywinevalleybrasilj\" +\n\t\"an-mayenishinomiyashironobresciabrindisibenikebristolgalsacebrit\" +\n\t\"ishcolumbialowiezagannakadomari-elasticbeanstalkatsuyamasfjorden\" +\n\t\"ishinoomotegotsukisosakitagatakamatsukawabroadcastlebtimnetzgora\" +\n\t\"broadwaybroke-itaxihuanishinoshimatta-varjjatgorybrokerrypropert\" +\n\t\"iesapporobronnoysundyndns-office-on-the-webcambridgestonewspaper\" +\n\t\"brothermesaverdefensejnybrumunddalottokigawabrunelblagdenesnaase\" +\n\t\"ralingenkainanaejrietisalatinabenogatachikawakayamagadancebetsuk\" +\n\t\"ubabia-goracleaningatlantagajobojis-a-cubicle-slavellinowtvallea\" +\n\t\"ostavernishiokoppegardyndns-picsaratovalled-aostavropolicebrusse\" +\n\t\"lsardegnamsskoganeis-a-democratjeldsundyndns-remotegildeskalmyki\" +\n\t\"abruxellesardiniabryanskjakdnepropetrovskiervaapsteiermarkaufeni\" +\n\t\"shitosashimizunaminamiashigarabryneustarhubalestrandabergamoarek\" +\n\t\"ehimejibestadishakotankarmoyokozembroideryomitanobninskarpaczela\" +\n\t\"dz-1buskerudinewhampshirechtrainingretakamoriokamchatkameokameya\" +\n\t\"mashinatsukigatakanabeatsarlouvrepairbusantiquest-a-la-maisondre\" +\n\t\"-landebusinessebykleclercasertaishinomakikuchikuseikarugapartmen\" +\n\t\"tsarpsborgrimstadyndns-serverbaniabuzenishiwakis-a-designerbuzzg\" +\n\t\"orzeleccollegersundyndns-weberlincolnissandnessjoenissayokoshiba\" +\n\t\"hikariwanumataketomisatokuyamatteledatabaseballooningripebwfashi\" +\n\t\"onissedalovegaskimitsubatamicabbottjmaxxxfinitybzhitomirkutskjer\" +\n\t\"voyagecloudfunctionsaudacntkmaxxn--11b4c3dcolognewmexicoldwarmia\" +\n\t\"miastaplesauheradcolonialwilliamsburguideventsavannahgacoloradop\" +\n\t\"lateaudiocolumbusheycommunitysnesaves-the-whalessandria-trani-ba\" +\n\t\"rletta-andriatranibarlettaandriacomobaracomparemarkerryhotelsavo\" +\n\t\"naplesaxocompute-1computerhistoryofscience-fictioncomsecuritysva\" +\n\t\"rdoharuhrcondoshichinohedmarkhangelskypescaravantaaconferencecon\" +\n\t\"structionconsuladollsbschokoladenconsultanthropologyconsultingvo\" +\n\t\"llutskddielddanuorrikuzentakatajirissagaeroclubmedecincinnationw\" +\n\t\"idealerimo-i-ranadexchangeiseiyoichiropracticbcn-north-1contactm\" +\n\t\"palmspringsakercontemporaryarteducationalchikugojomedicaltanisse\" +\n\t\"ttaiwanairguardcontractorskenconventureshinodesashibetsuikimobet\" +\n\t\"suliguriacookingchannelveruminamibosogndaluxembourguitarscholars\" +\n\t\"hipschooluxurycoolkuszgradcoopocznorthwesternmutualuzerncopenhag\" +\n\t\"encyclopedicdn77-sslattumetlifeinsurancecorsicagliaridagawarszaw\" +\n\t\"ashingtondclkfhskhabarovskhakassiacorvettemasekharkivguccipriani\" +\n\t\"igataitogitsuldalvivano-frankivskharkovalledaostakkofuelcosenzam\" +\n\t\"amibuilderschulexuslivinghistorycostumedio-campidano-mediocampid\" +\n\t\"anomediocouncilcouponschwarzgwangjuifminamidaitomangotembaixadac\" +\n\t\"ourseschweizippodlasiellakasamatsudovre-eikercq-acranbrookuwanal\" +\n\t\"yticsciencecentersciencehistorycreditcardcreditunioncremonashoro\" +\n\t\"kanaiecrewiiheyaizuwakamatsubushikusakadogawacricketrzyncrimeacr\" +\n\t\"otonewportlligatewaycrowncrscientistor-elvdalcruisescjohnsoncuis\" +\n\t\"inellajollamericanexpressexyzjcbnlculturalcentertainmentoyokawac\" +\n\t\"uneocupcakecxn--1ck2e1balsanagochihayaakasakawaharaumakeupowiath\" +\n\t\"letajimabariakepnordkappgjesdalillyonabaruconnectarnobrzegjovika\" +\n\t\"ruizawaugustowadaegubs3-ap-southeast-2cymruovatoyonakagyokutoshi\" +\n\t\"macyouthdfcbankhersonfilateliafilminamiechizenfinalfinancefinear\" +\n\t\"tsettsurfastlyfinlandfinnoyfirebaseappamperedchefauskedsmokorset\" +\n\t\"agayaseljordfirenzefirestonextdirectoryfirmdalegoldpointelligenc\" +\n\t\"efishingolfbsbxn--1ctwolominamatamayukis-a-geekhmelnitskiyamashi\" +\n\t\"kefitjarqhachiojiyahikobeautydalfitnessettlementoyookarasjohkami\" +\n\t\"noyamatsuris-a-greenfjalerflickragerotikaluganskhmelnytskyivalle\" +\n\t\"e-aosteroyflightsevastopolezajskhvalleeaosteigenflirumansionseve\" +\n\t\"nassisicilyfloguchikuzenfloraflorencefloridafloristanohatakaharu\" +\n\t\"ssiafloromskoguovdageaidnulminamifuranoflowersewildlifestyleflsm\" +\n\t\"idthruhereggio-emilia-romagnakanotoddenflynnhubalsfjordiskstatio\" +\n\t\"naustdalimanowarudaukraanghke164fndfolldalfoodnetworkangerfor-be\" +\n\t\"tter-thandafor-ourfor-somedizinhistorischesfranziskanerimamatera\" +\n\t\"mochizukirafor-theaterforexrothachirogatakanezawaforgotdnshangri\" +\n\t\"langevagrarboretumbriaforli-cesena-forlicesenaforlikes-piedmontb\" +\n\t\"lancomeeresharis-a-gurulsandoyforsaleikangerforsandasuolodingenf\" +\n\t\"ortmissoulan-udell-ogliastrakhanawawilliamhillfortworthadanotoga\" +\n\t\"waforuminamiiselectoyosatotalfosnesharpanamafotoyotaris-a-hard-w\" +\n\t\"orkerfoxn--1lqs03nfreiburgushikamifuranotaireshawaiijimarylandfr\" +\n\t\"eightcmwinbaltimore-og-romsdalimitedunetflixilimoliserniaurskog-\" +\n\t\"holandroverhalla-speziaetnagahamaroygardendoftheinternetcimdbala\" +\n\t\"tinordre-landds3-ap-northeast-2freseniusdecorativeartshellaspezi\" +\n\t\"afribourgxn--1lqs71dfriuli-v-giuliafriuli-ve-giuliafriuli-vegiul\" +\n\t\"iafriuli-venezia-giuliafriuli-veneziagiuliafriuli-vgiuliafriuliv\" +\n\t\"-giuliafriulive-giuliafriulivegiuliafriulivenezia-giuliafriulive\" +\n\t\"neziagiuliafriulivgiuliafrlfroganshimokawafrognfrolandfrom-akreh\" +\n\t\"amnfrom-alfrom-arfrom-azlgzpanasonicheltenham-radio-operaunitele\" +\n\t\"markautokeinofrom-canonoichikawamisatodayfrom-collectionfrom-cto\" +\n\t\"yotomiyazakis-a-hunterfrom-dchelyabinskodjeffersonisshinguernsey\" +\n\t\"from-dellogliastraderfrom-flandershimokitayamafrom-gaulardalfrom\" +\n\t\"-higashiagatsumagoirmitakeharafrom-iafrom-idfrom-ilfrom-incheonf\" +\n\t\"rom-kshimonitayanagivestbytomaritimekeepingfrom-kyknetoyotsukaid\" +\n\t\"ownloadfrom-lanbibaidarfrom-manxn--1qqw23afrom-mdfrom-meetoyoura\" +\n\t\"from-microsoftbanklabudhabikinokawabarthadselfipirangafrom-mnfro\" +\n\t\"m-modalenfrom-mshimonosekikawafrom-mtnfrom-nchernigovernmentjome\" +\n\t\"morialucaniafrom-ndfrom-nexusgardenfrom-nhktoystre-slidrettozawa\" +\n\t\"from-njcparaglidingfrom-nminamiizukamitondabayashiogamagoriziafr\" +\n\t\"om-nvanylvenicefrom-nyfrom-ohkurafrom-oketogurafrom-orfrom-pader\" +\n\t\"bornfrom-pratohmaoris-a-knightozsdefrom-ris-a-landscaperugiafrom\" +\n\t\"-schoenbrunnfrom-sdnipropetrovskmpspbambleborkarumaifarmsteadivt\" +\n\t\"asvuodnakaiwamizawaustevollavangenativeamericanantiques3-eu-cent\" +\n\t\"ral-1from-tnfrom-txn--2m4a15efrom-utazuerichardlikescandyndns-at\" +\n\t\"-homedepotaruis-a-lawyerfrom-vadsochildrensgardenfrom-vtranbyfro\" +\n\t\"m-wafrom-wielunnerfrom-wvaolbia-tempio-olbiatempioolbialystokkem\" +\n\t\"erovodkagoshimaintenancefrom-wyfrosinonefrostalowa-wolawafroyaha\" +\n\t\"badajozorahkkeravjudygarlandfstcgrouparisor-fronfujiiderafujikaw\" +\n\t\"aguchikonefujiminohtawaramotoineppugliafujinomiyadafujiokayamarb\" +\n\t\"urgfujisatoshonairportland-4-salernogiessengerdalaskanittedallas\" +\n\t\"alleaseeklogesquarezzoologyfujisawafujishiroishidakabiratoridelm\" +\n\t\"enhorstalbanshimosuwalkis-a-liberalfujitsurugashimarinefujixerox\" +\n\t\"n--30rr7yfujiyoshidafukayabeardubaiduckdnsdojoburgfukuchiyamadaf\" +\n\t\"ukudominichernihivanovosibirskydivingrondarfukuis-a-libertarianf\" +\n\t\"ukumitsubishigakirkeneshimotsukefukuokazakirovogradoyfukuroishik\" +\n\t\"arikaturindalfukusakiryuohaebaruminamimakis-a-linux-useranishiar\" +\n\t\"itabashikaoizumizakitaurayasudafukuyamagatakahashimamakisarazure\" +\n\t\"websiteshikagamiishibukawafunabashiriuchinadafunagatakahatakaish\" +\n\t\"imoichinosekigaharafunahashikamiamakusatsumasendaisennangonoheji\" +\n\t\"s-a-llamarylhursteinkjerusalembetsukuis-a-musicianfundaciofuoisk\" +\n\t\"ujukuriyamarcheaparliamentrani-andria-barletta-trani-andriafuoss\" +\n\t\"koczowindmillfurnitureggiocalabriafurubiraquarelleasingleshimots\" +\n\t\"umafurudonostiafurukawairtelecityeatshinichinanfusodegaurafussai\" +\n\t\"kishiwadafutabayamaguchinomigawafutboldlygoingnowhere-for-morego\" +\n\t\"ntrailroadfuttsurugiminamiminowafvgfyis-a-nascarfanfylkesbiblack\" +\n\t\"fridayfyresdalhannovareserveftparocherkasyzrankoshigayaltaikis-a\" +\n\t\"-painteractivegarsheis-a-patsfanhanyuzenhapmirhappoulvikokonoeha\" +\n\t\"reidsbergenharstadharvestcelebrationhasamarahasaminami-alpssells\" +\n\t\"-for-unzenhashbanghasudahasvikolobrzegyptianpachigasakidsmynaspe\" +\n\t\"rschlesischesurancehatogayahoooshikamaishimofusartshinkamigotoyo\" +\n\t\"hashimotomobellunordreisa-geekomaganehatoyamazakitahatakaokamiki\" +\n\t\"tayamatotakadahatsukaichiharahattfjelldalhayashimamotobuildingha\" +\n\t\"zuminobusells-itraniandriabarlettatraniandriahbofagehembygdsforb\" +\n\t\"undhemneshinshinotsurgeonshalloffamelhustkamisunagawahemsedalher\" +\n\t\"okussldheroyhgtvarggatranoyhigashichichibungotakadatsunanjoetsuw\" +\n\t\"anouchikujogaszkoladbrokesennumamurogawalterhigashihiroshimanehi\" +\n\t\"gashiizumozakitakamiizumisanofiatransportrapaniimimatakatoris-a-\" +\n\t\"personaltrainerhigashikagawahigashikagurasoedahigashikawakitaaik\" +\n\t\"itakatakarazukamikoaniikappulawyhigashikurumeguroroskoleirvikoma\" +\n\t\"kiyosatokamachippubetsubetsugaruhigashimatsushimarugame-hostingh\" +\n\t\"igashimatsuyamakitaakitadaitoigawahigashimurayamalatvuopmidoris-\" +\n\t\"a-photographerokuapparshinshirohigashinarusellsyourhomegoodshint\" +\n\t\"okushimahigashinehigashiomihachimanchesterhigashiosakasayamamoto\" +\n\t\"rcycleshintomikasaharahigashishirakawamatakasagooglecodespotrave\" +\n\t\"lchannelhigashisumiyoshikawaminamiaikitakyushuaiahigashitsunowru\" +\n\t\"zhgorodoyhigashiurausukitamidsundhigashiyamatokoriyamanakakogawa\" +\n\t\"higashiyodogawahigashiyoshinogaris-a-playerhiraizumisatohnoshooh\" +\n\t\"irakatashinagawahiranais-a-republicancerresearchaeologicaliforni\" +\n\t\"ahirarahiratsukagawahirayaitakasakitamotosumitakaginankokubunjis\" +\n\t\"-a-rockstarachowicehisayamanashiibaghdadultravelersinsurancehist\" +\n\t\"orichouseshinyoshitomiokaniepcehitachiomiyaginowaniihamatamakawa\" +\n\t\"jimaritimodellinghitachiotagopartis-a-socialistmeindianapolis-a-\" +\n\t\"bloggerhitoyoshimifunehitradinghjartdalhjelmelandholeckobierzyce\" +\n\t\"holidayhomeipartnershiojirishirifujiedahomelinuxn--32vp30hagebos\" +\n\t\"tadhomesensembokukitanakagusukumoduminamiogunicomcastresistanceh\" +\n\t\"omeunixn--3bst00minamisanrikubetsupplyhondahonefosshioyameloyali\" +\n\t\"stockholmestrandhoneywellhongorgehonjyoitakashimarumorimachidaho\" +\n\t\"rnindalhorseminehortendofinternetrdhoteleshirahamatonbetsurgeryh\" +\n\t\"otmailhoyangerhoylandetroitskomatsushimashikiyosemitehumanitiesh\" +\n\t\"irakoenighurdalhurumajis-a-soxfanhyllestadhyogoris-a-studentalhy\" +\n\t\"ugawarahyundaiwafunejgorajlchitachinakagawatchandclockazimierz-d\" +\n\t\"olnyjlljmpartshishikuis-an-actorjnjelenia-gorajoyokaichibahcavuo\" +\n\t\"tnagaraholtalenjpmorganichitosetogakushimotoganewjerseyjpnchloej\" +\n\t\"prshisognejuniperjurkristiansandcatshisuifuettertdasnetzwindowsh\" +\n\t\"itaramakristiansundkrodsheradkrokstadelvaldaostarostwodzislawinn\" +\n\t\"ershizukuishimogosenkryminamitanekumatorinokumejimasudakumenanyo\" +\n\t\"kkaichirurgiens-dentisteshizuokanoyakagekunisakis-an-entertainer\" +\n\t\"kunitachiarailwaykunitomigusukumamotoyamassa-carrara-massacarrar\" +\n\t\"amassabunkyonanaoshimageandsoundandvisionkunneppupartykunstsamml\" +\n\t\"ungkunstunddesignkuokgroupasadenamsosnowiechocolatelevisionrwhal\" +\n\t\"ingrongausdaluccapebretonamiasakuchinotsuchiurakawassamukawatari\" +\n\t\"cohdavvenjargamvikazokureitrentino-stirolkurgankurobelaudiblebes\" +\n\t\"byglandkurogimilitarykuroisoftwarendalenugkuromatsunais-bykurota\" +\n\t\"kikawasakis-certifiedekakegawakurskomonokushirogawakustanais-fou\" +\n\t\"ndationkusupersportrentino-sud-tirolkutchanelkutnokuzbassnillfjo\" +\n\t\"rdkuzumakis-gonekvafjordkvalsundkvamlidlugolekagaminord-aurdalvd\" +\n\t\"alipayufuchukotkafjordkvanangenkvinesdalkvinnheradkviteseidskogk\" +\n\t\"vitsoykwpspjelkavikomorotsukamishihoronobeokaminokawanishiaizuba\" +\n\t\"ngekyotobetsupplieshoujis-into-animeiwamaseratis-a-therapistoiak\" +\n\t\"yowariasahikawamishimatsumotofukemissileksvikongsbergmisugitokon\" +\n\t\"amegatakayamatsunomitourismolanciamitoyoakemiuramiyazumiyotamano\" +\n\t\"mjondalenmlbarclaycards3-us-west-1monmouthaibarakitagawamonsterm\" +\n\t\"onticellolmontrealestatefarmequipmentrentino-sudtirolmonza-brian\" +\n\t\"zaporizhzhekinannestadmonza-e-della-brianzaporizhzhiamonzabrianz\" +\n\t\"apposlombardiamondshowtimemerckongsvingermonzaebrianzaramonzaede\" +\n\t\"llabrianzamoparachutingmordoviajessheiminamiuonumatsumaebashimod\" +\n\t\"atemoriyamatsusakahoginozawaonsenmoriyoshiokamitsuemormoneymoroy\" +\n\t\"amatsushigemortgagemoscowiostrolekaneyamaxunjargamoseushistorymo\" +\n\t\"sjoenmoskeneshriramsterdambulanceomossienarashinomosvikoninjamis\" +\n\t\"onmoviemovistargardmtpccwitdkonskowolancashirehabmermtranakayama\" +\n\t\"tsuuramuenstermugithubcloudusercontentrentino-sued-tirolmuikamog\" +\n\t\"awamukochikushinonsenergymulhouservebbsigdalmultichoicemunakatan\" +\n\t\"emuncieszynmuosattemupassagensimbirskonsulatrobeermurmanskonyvel\" +\n\t\"oftrentino-s-tirollagrigentomologyeonggiehtavuoatnagaivuotnagaok\" +\n\t\"akyotambabydgoszczecinemailmurotorcraftrentino-suedtirolmusashim\" +\n\t\"urayamatsuzakis-leetrentino-a-adigemusashinoharamuseetrentinoa-a\" +\n\t\"digemuseumverenigingmutsuzawamutuellelmyokohamamatsudamypetsimpl\" +\n\t\"e-urlmyphotoshibahccavuotnagareyamaizurubtsovskiptveterinairebun\" +\n\t\"goonomichinomiyakemytis-a-bookkeeperminamiyamashirokawanabelgoro\" +\n\t\"deophiladelphiaareadmyblogsitephilatelyphilipsyphoenixn--3e0b707\" +\n\t\"ephotographysiopiagetmyipassenger-associationpictetrentinoaadige\" +\n\t\"pictureslupskooris-an-actresshiraois-a-techietis-a-teacherkassym\" +\n\t\"antechnologypiemontepilotsmolenskopervikommunalforbundpinkoryola\" +\n\t\"sitepioneerpippupiszpittsburghofedjejuegoshikiminokamoenairlineb\" +\n\t\"raskaunbieidsvollpiwatepizzapkosaigawaplanetariuminanoplantation\" +\n\t\"plantsnoasaitamatsukuris-lostre-toteneis-an-accountantshiranukan\" +\n\t\"makiwakunigamihamadaplatformincommbankomvuxn--3ds443gplaystation\" +\n\t\"plazaplchofunatorientexpressasayamaplombardyndns-at-workinggroup\" +\n\t\"aviancapetownplumbingotvbarclays3-us-west-2plusterpmnpodzonepohl\" +\n\t\"pokerpokrovskosakaerodromegallupinbarcelonagasakijobservercellie\" +\n\t\"rneues3-us-gov-west-1politiendapolkowicepoltavalle-aostathellewi\" +\n\t\"smillerpomorzeszowithgoogleapisa-hockeynutrentinoalto-adigeporde\" +\n\t\"nonepornporsangerporsangugeporsgrunnanpoznanpraxis-a-bruinsfansn\" +\n\t\"zprdpreservationpresidioprgmrprimelbourneprincipeprivneprochowic\" +\n\t\"eproductionsokanraprofermobilyprogressivenneslaskerrylogisticsok\" +\n\t\"ndalprojectrentinoaltoadigepromombetsupportrentinos-tirolpropert\" +\n\t\"yprotectionprudentialpruszkowithyoutubeneventochiokinoshimalselv\" +\n\t\"endrellprzeworskogptzpvtrentinostirolpwchonanbugattipschmidtre-g\" +\n\t\"auldalucernepzqldqponqslgbtrentinosud-tirolqvchoseiroumuenchenst\" +\n\t\"orfjordstpetersburgstreamurskinderoystudiostudyndns-freemasonryo\" +\n\t\"kamikawanehonbetsurutaharastuff-4-salestuttgartrentinosuedtirols\" +\n\t\"urnadalsurreysusakis-slickomforbananarepublicargodaddynathomebui\" +\n\t\"ltarumizusawaustinnaturalhistorymuseumcentereviewskrakowebhopage\" +\n\t\"frontappagespeedmobilizerobihirosakikamijimagroks-thisamitsukeis\" +\n\t\"enbahnasushiobaraeroportalabamagasakishimabarackmaze-burggfarmer\" +\n\t\"seinewyorkshireggio-calabriabruzzoologicalvinklein-addrammenuern\" +\n\t\"bergdyniabogadocscbg12000susonosuzakanumazurysuzukanzakiwiensuzu\" +\n\t\"kis-uberleetrentino-aadigesvalbardudinkakamigaharasveiosvelvikos\" +\n\t\"himizumakiyosumykolaivaroysvizzeraswedenswidnicapitalonewholland\" +\n\t\"swiebodzindianmarketingswiftcoverisignswinoujscienceandhistorysw\" +\n\t\"isshikis-very-badaddjamalborkdalsxn--3oq18vl8pn36atuscanytushuis\" +\n\t\"sier-justicetuvalle-daostavangervestnesopotrentinosudtirolvestre\" +\n\t\"-slidreamhostersor-odalvestre-totennishiawakuravestvagoyvevelsta\" +\n\t\"dvibo-valentiavibovalentiavideovillaskoyabearalvahkihokumakogeni\" +\n\t\"waizumiotsukumiyamazonawsabaerobaticketsor-varangervinnicarbonia\" +\n\t\"-iglesias-carboniaiglesiascarboniavinnytsiavipsinaappfizervirgin\" +\n\t\"iavirtualvirtuelvisakatakinouevistaprintuitrentottoris-very-evil\" +\n\t\"lageviterboltrevisohughesolognevivoldavladikavkazanvladimirvladi\" +\n\t\"vostokaizukarasuyamazoevlogvolkenkunderseaportroandinosaurepbody\" +\n\t\"ndns-blogdnsolundbeckoseis-an-anarchistoricalsocietyvolkswagents\" +\n\t\"orfoldvologdanskostromahachijorpelandvolvolgogradvolyngdalvorone\" +\n\t\"zhytomyrvossevangenvotevotingvotoursorreisahayakawakamiichikaise\" +\n\t\"is-saveducatorahimeshimakanegasakinkobayashikshacknetnedalvrnwor\" +\n\t\"se-thangglidingwowiwatsukiyonowritesthisblogspotrogstadwroclawlo\" +\n\t\"clawekosugewtchoshibuyachiyodawtferrarawuozuwwworldwzmiuwajimaxn\" +\n\t\"--4gq48lf9jeonnamerikawauexn--4it168dxn--4it797kotouraxn--4pvxso\" +\n\t\"rtlandxn--54b7fta0cchromediaxn--55qw42gxn--55qx5dxn--5js045dxn--\" +\n\t\"5rtp49chryslerxn--5rtq34kouhokutamakis-an-artistjohnxn--5su34j93\" +\n\t\"6bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6qq986b3xlxn--\" +\n\t\"7t0a264chungbukazunoxn--80adxhksoruminnesotaketakatsukis-into-ca\" +\n\t\"rshiraokannamiharuxn--80ao21axn--80aqecdr1axn--80asehdbarefootba\" +\n\t\"llangenoamishirasatobishimalopolskanlandivttasvuotnakamagayachts\" +\n\t\"akuraibigawaustraliaisondriodejaneirochesterhcloudcontrolledigit\" +\n\t\"alaziobirakunedre-eikereportarantomsk-uralsk12xn--80aswgxn--80au\" +\n\t\"dnedalnxn--8ltr62kounosunndalxn--8pvr4uxn--8y0a063axn--90a3acade\" +\n\t\"mydroboatsaritsynologyeongbukouyamashikokuchuoxn--90aishobaraomo\" +\n\t\"riguchiharagusaarlandxn--90azhair-surveillancexn--9dbhblg6diethn\" +\n\t\"ologyxn--9dbq2axn--9et52uxn--9krt00axn--andy-iraxn--aroport-byan\" +\n\t\"agawaxn--asky-iraxn--aurskog-hland-jnbargainstitutelefonicafeder\" +\n\t\"ationaval-d-aosta-valleyonagoyaustrheimatunduhrennesoyekaterinbu\" +\n\t\"rgjemnes3-eu-west-1xn--avery-yuasakegawaxn--b-5gaxn--b4w605ferdx\" +\n\t\"n--bck1b9a5dre4chungnamdalseidfjordyroyrvikingrossetouchijiwadel\" +\n\t\"tajimicrolightingroundhandlingroznyxn--bdddj-mrabdxn--bearalvhki\" +\n\t\"-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-k7axn--bidr\" +\n\t\"-5nachikatsuuraxn--bievt-0qa2xn--bjarky-fyanaizuxn--bjddar-ptamb\" +\n\t\"oversaillesooxn--blt-elaborxn--bmlo-graingerxn--bod-2naroyxn--br\" +\n\t\"nny-wuaccident-investigationjukudoyamaceratabuseat-band-campania\" +\n\t\"mallamadridvagsoyericssonlineat-urlxn--brnnysund-m8accident-prev\" +\n\t\"entionxn--brum-voagatromsakakinokiaxn--btsfjord-9zaxn--c1avgxn--\" +\n\t\"c2br7gxn--c3s14minternationalfirearmshowaxn--cck2b3barreauctiona\" +\n\t\"vigationavuotnakhodkanagawauthordalandroidiscountyumenaturalscie\" +\n\t\"ncesnaturelles3-external-1xn--cg4bkis-very-goodhandsonxn--ciqpnx\" +\n\t\"n--clchc0ea0b2g2a9gcdn77-securecipesaro-urbino-pesarourbinopesar\" +\n\t\"omaniwakuratelekommunikationxn--comunicaes-v6a2oxn--correios-e-t\" +\n\t\"elecomunicaes-ghc29axn--czr694barrel-of-knowledgeometre-experts-\" +\n\t\"comptablesakyotanabellevuelosangelesjaguarchitecturealtychyattor\" +\n\t\"neyagawalbrzycharternopilawalesundiyonaguniversityoriikasaokamio\" +\n\t\"kamiminersalangenayoroceanographicsalondonetskashibatakasugaibmd\" +\n\t\"npalacemergencyberlevagangaviikanonjiinetatamotorsaltdalindasiau\" +\n\t\"tomotivecodyn-o-saurlandes3-external-2xn--czrs0tromsojavald-aost\" +\n\t\"arnbergxn--czru2dxn--czrw28barrell-of-knowledgeorgeorgiautoscana\" +\n\t\"daejeonbukariyakumoldebinagisoccertificationaturbruksgymnaturhis\" +\n\t\"torisches3-fips-us-gov-west-1xn--d1acj3bashkiriaveroykenvironmen\" +\n\t\"talconservationatuurwetenschappenaumburgjerdrumckinseyokosukarel\" +\n\t\"iancebinosegawasmatartanddesignieznorddalavagiske12xn--d1alfarom\" +\n\t\"eoxn--d1atrusteexn--d5qv7z876churchaseljeepilepsydneyxn--davvenj\" +\n\t\"rga-y4axn--djrs72d6uyxn--djty4kouzushimasoyxn--dnna-grajewolters\" +\n\t\"kluwerxn--drbak-wuaxn--dyry-iraxn--eckvdtc9dxn--efvn9southcaroli\" +\n\t\"nazawaxn--efvy88hakatanotteroyxn--ehqz56nxn--elqq16hakodatevaksd\" +\n\t\"alxn--estv75gxn--eveni-0qa01gaxn--f6qx53axn--fct429kozagawaxn--f\" +\n\t\"hbeiarnxn--finny-yuaxn--fiq228c5hsouthwestfalenxn--fiq64basilica\" +\n\t\"taniavocatanzaroweddingjerstadotsuruokamakurazakisofukushimarnar\" +\n\t\"dalillesandefjordiscoveryggeelvinckarlsoyokotebizenakaniikawatan\" +\n\t\"agurasnesoddenmarkets3-ap-southeast-1kappleangaviikadenaamesjevu\" +\n\t\"emielnoboribetsucks3-ap-northeast-1xn--fiqs8sowaxn--fiqz9spreadb\" +\n\t\"ettingxn--fjord-lraxn--fjq720axn--fl-ziaxn--flor-jraxn--flw351ex\" +\n\t\"n--fpcrj9c3dxn--frde-grandrapidspydebergxn--frna-woaraisaijosoyr\" +\n\t\"ovigorlicexn--frya-hraxn--fzc2c9e2chuvashiaxn--fzys8d69uvgmailxn\" +\n\t\"--g2xx48circlegallocuscountryestateofdelawarecreationxn--gckr3f0\" +\n\t\"ferrarittogokasells-for-lesscrapper-sitexn--gecrj9circuscultured\" +\n\t\"umbrellahppiacenzakopanerairforcechirealtorlandxn--ggaviika-8ya4\" +\n\t\"7hakonexn--gildeskl-g0axn--givuotna-8yandexn--3pxu8kotohiradomai\" +\n\t\"nsureisenxn--gjvik-wuaxn--gk3at1exn--gls-elacaixaxn--gmq050is-ve\" +\n\t\"ry-nicexn--gmqw5axn--h-2fairwindsrlxn--h1aeghakubankmshinjournal\" +\n\t\"ismailillehammerfest-mon-blogueurovisionxn--h2brj9citadeliverybn\" +\n\t\"ikahokutogliattiresaskatchewanggouvicenzaxn--hbmer-xqaxn--hcesuo\" +\n\t\"lo-7ya35basketballfinanz-2xn--hery-iraxn--hgebostad-g3axn--hmmrf\" +\n\t\"easta-s4acctrverranzanxn--hnefoss-q1axn--hobl-iraxn--holtlen-hxa\" +\n\t\"xn--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1b6b\" +\n\t\"1a6a2exn--imr513nxn--indery-fyaotsurgutsiracusaitokyotangovtrysi\" +\n\t\"lkoshunantokashikizunokunimilanoxn--io0a7is-very-sweetrentino-al\" +\n\t\"to-adigexn--j1aeferreroticampobassociatescrappingujolsterxn--j1a\" +\n\t\"mhakuis-a-nurseoullensvanguardxn--j6w193gxn--jlq61u9w7batochigif\" +\n\t\"tsalvadordalibabaikaliszczytnordlandrangedalindesnesalzburgladel\" +\n\t\"oittenrightathomeftpaccessamegawavoues3-sa-east-1xn--jlster-byar\" +\n\t\"oslavlaanderenxn--jrpeland-54axn--jvr189misakis-into-cartoonshir\" +\n\t\"atakahagivingxn--k7yn95exn--karmy-yuaxn--kbrq7oxn--kcrx77d1x4axn\" +\n\t\"--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7dxn--kltx9axn--klty5\" +\n\t\"xn--42c2d9axn--koluokta-7ya57hakusandiegoodyearthagakhanamigawax\" +\n\t\"n--kprw13dxn--kpry57dxn--kpu716fetsundxn--kput3is-with-thebandoo\" +\n\t\"mdnsaliascolipicenord-odalxn--krager-gyasakaiminatoyakokamisatoh\" +\n\t\"obby-sitexasdaburyatiaarpharmaciensirdalxn--kranghke-b0axn--krds\" +\n\t\"herad-m8axn--krehamn-dxaxn--krjohka-hwab49jetztrentino-altoadige\" +\n\t\"xn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyasugisleofmandalxn--kvn\" +\n\t\"angen-k0axn--l-1faitheguardianquanconagawakuyabukicks-assediciti\" +\n\t\"cateringebudejjuedischesapeakebayernurembergriwataraidyndns-work\" +\n\t\"shoppdalowiczest-le-patrondheimperiaxn--l1accentureklamborghinii\" +\n\t\"zaxn--laheadju-7yasuokaratexn--langevg-jxaxn--lcvr32dxn--ldingen\" +\n\t\"-q1axn--leagaviika-52batsfjordrivelandrobaknoluoktainaikawachina\" +\n\t\"ganoharamcoalaheadjudaicaaarborteaches-yogasawaracingroks-theatr\" +\n\t\"eemersongdalenviknakanojohanamakinoharaxastronomydstvedestrandgc\" +\n\t\"ahcesuolocalhistoryazannefrankfurtargets-itargi234xn--lesund-hua\" +\n\t\"xn--lgbbat1ad8jevnakerxn--lgrd-poacoachampionshiphopenair-traffi\" +\n\t\"c-controlleyxn--lhppi-xqaxn--linds-pramericanartulansolutionsola\" +\n\t\"rssonxn--lns-qlanxessrtrentinosued-tirolxn--loabt-0qaxn--lrdal-s\" +\n\t\"raxn--lrenskog-54axn--lt-liacivilaviationxn--lten-granexn--lury-\" +\n\t\"iraxn--mely-iraxn--merker-kuaxn--mgb2ddesrvdonskosherbrookegawax\" +\n\t\"n--mgb9awbfgulenxn--mgba3a3ejtunesomaxn--mgba3a4f16axn--mgba3a4f\" +\n\t\"ranamizuholdingsmileirfjordxn--mgba7c0bbn0axn--mgbaakc7dvfidelit\" +\n\t\"yxn--mgbaam7a8haldenxn--mgbab2bdxn--mgbai9a5eva00bauhausposts-an\" +\n\t\"d-telecommunicationsnasadoes-itveronagasukemrxn--mgbai9azgqp6jew\" +\n\t\"elryxn--mgbayh7gpaduaxn--mgbb9fbpobanazawaxn--mgbbh1a71exn--mgbc\" +\n\t\"0a9azcgxn--mgbca7dzdoxn--mgberp4a5d4a87gxn--mgberp4a5d4arxn--mgb\" +\n\t\"i4ecexposedxn--mgbpl2fhvalerxn--mgbqly7c0a67fbcivilisationxn--mg\" +\n\t\"bqly7cvafredrikstadtvstoragexn--mgbt3dhdxn--mgbtf8flekkefjordxn-\" +\n\t\"-mgbtx2bbcarrierxn--mgbx4cd0abbvieeexn--mix082fidonnakamuratakah\" +\n\t\"amannortonsbergunmarriottoyonezawaxn--mix891fieldxn--mjndalen-64\" +\n\t\"axn--mk0axindustriesteamfamberkeleyxn--mk1bu44civilizationxn--mk\" +\n\t\"ru45issmarterthanyouxn--mlatvuopmi-s4axn--mli-tlapyatigorskozaki\" +\n\t\"s-an-engineeringxn--mlselv-iuaxn--moreke-juaxn--mori-qsakuhokkai\" +\n\t\"dontexisteingeekpnxn--mosjen-eyatominamiawajikiwchiryukyuragifue\" +\n\t\"fukihaborokunohealthcareersarufutsunomiyawakasaikaitakoelniyodog\" +\n\t\"awaxn--mot-tlaquilancasterxn--mre-og-romsdal-qqbbtatarstanflatan\" +\n\t\"gerxn--msy-ula0halsaintlouis-a-anarchistoireggioemiliaromagnakat\" +\n\t\"ombetsumidatlantichernivtsiciliaxn--mtta-vrjjat-k7afamilycompany\" +\n\t\"civilwarmanagementjxjaworznoxn--muost-0qaxn--mxtq1misasaguris-in\" +\n\t\"to-gamessinashikitchenxn--ngbc5azdxn--ngbe9e0axn--ngbrxn--45brj9\" +\n\t\"choyodobashichikashukujitawaraxn--nit225kppspiegelxn--nmesjevuem\" +\n\t\"ie-tcbajddarchaeologyxn--nnx388axn--nodessakuragawaxn--nqv7fs00e\" +\n\t\"maxn--nry-yla5gxn--ntso0iqx3axn--ntsq17gxn--nttery-byaeservegame\" +\n\t\"-serverdalxn--nvuotna-hwaxn--nyqy26axn--o1achattanooganorilsklep\" +\n\t\"pharmacyslingxn--o3cw4hammarfeastafricamagichernovtsykkylvenetoe\" +\n\t\"iheijis-a-doctorayxn--od0algxn--od0aq3bbvacationswatch-and-clock\" +\n\t\"erxn--ogbpf8flesbergxn--oppegrd-ixaxn--ostery-fyatsukaratsuginam\" +\n\t\"ikatagamihoboleslawieclaimsassaris-a-financialadvisor-aurdaluroy\" +\n\t\"xn--osyro-wuaxn--p1acfdxn--p1aixn--pbt977clickchristiansburgrpal\" +\n\t\"ermomasvuotnakatsugawaxn--pgbs0dhlxn--porsgu-sta26figuerestauran\" +\n\t\"toyonoxn--pssu33lxn--pssy2uxn--q9jyb4clinicatholicasinorfolkebib\" +\n\t\"lefrakkestadyndns-wikindlegnicamerakershus-east-1xn--qcka1pmcdon\" +\n\t\"aldstordalxn--qqqt11misawaxn--qxamusementurystykarasjoksnesomnar\" +\n\t\"itakurashikis-not-certifiedogawarabikomaezakirunoshiroomuraxn--r\" +\n\t\"ady-iraxn--rdal-poaxn--rde-ularvikrasnodarxn--rdy-0nabarixn--ren\" +\n\t\"nesy-v1axn--rhkkervju-01aflakstadaokagakibichuoxn--rholt-mragowo\" +\n\t\"odsidexn--rhqv96gxn--rht27zxn--rht3dxn--rht61exn--risa-5narusawa\" +\n\t\"xn--risr-iraxn--rland-uuaxn--rlingen-mxaxn--rmskog-byatsushiroxn\" +\n\t\"--rny31hamurakamigoriginshinjukumanoxn--rovu88bentleyukuhashimoj\" +\n\t\"iitatebayashijonawatextileitungsenfshostrodawaraxn--rros-granvin\" +\n\t\"dafjordxn--rskog-uuaxn--rst-0narutokorozawaxn--rsta-francaisehar\" +\n\t\"axn--ryken-vuaxn--ryrvik-byawaraxn--s-1fareastcoastaldefencexn--\" +\n\t\"s9brj9cliniquenoharaxn--sandnessjen-ogbizhevskrasnoyarskommunexn\" +\n\t\"--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gratangenxn--skierv-\" +\n\t\"utazaskvolloabathsbclintonoshoesatxn--0trq7p7nnxn--skjervy-v1axn\" +\n\t\"--skjk-soaxn--sknit-yqaxn--sknland-fxaxn--slat-5narviikananporov\" +\n\t\"noxn--slt-elabourxn--smla-hraxn--smna-gratis-a-bulls-fanxn--snas\" +\n\t\"e-nraxn--sndre-land-0cbremangerxn--snes-poaxn--snsa-roaxn--sr-au\" +\n\t\"rdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-varanger-ggbeppubol\" +\n\t\"ognagatorockartuzyurihonjournalistjordalshalsenhsamnangerxn--srf\" +\n\t\"old-byawatahamaxn--srreisa-q1axn--srum-grazxn--stfold-9xaxn--stj\" +\n\t\"rdal-s1axn--stjrdalshalsen-sqberndunloppacificartierxn--stre-tot\" +\n\t\"en-zcbstorenburgxn--t60b56axn--tckweatherchannelxn--tiq49xqyjewi\" +\n\t\"shartgalleryxn--tjme-hraxn--tn0agrinetbankzxn--tnsberg-q1axn--to\" +\n\t\"r131oxn--trany-yuaxn--trgstad-r1axn--trna-woaxn--troms-zuaxn--ty\" +\n\t\"svr-vraxn--uc0atversicherungxn--uc0ay4axn--uist22hangoutsystemsc\" +\n\t\"loudcontrolapparmaxn--uisz3gxn--unjrga-rtaobaokinawashirosatobam\" +\n\t\"agazinemurorangeologyxn--unup4yxn--uuwu58axn--vads-jraxn--vard-j\" +\n\t\"raxn--vegrshei-c0axn--vermgensberater-ctbeskidynaliascoli-piceno\" +\n\t\"rd-frontierxn--vermgensberatung-pwbestbuyshousesamsclubindalinka\" +\n\t\"shiharaxn--vestvgy-ixa6oxn--vg-yiabcgxn--vgan-qoaxn--vgsy-qoa0jf\" +\n\t\"komitamamuraxn--vgu402clothingruexn--vhquvestfoldxn--vler-qoaxn-\" +\n\t\"-vre-eiker-k8axn--vrggt-xqadxn--vry-yla5gxn--vuq861betainaboxfor\" +\n\t\"deatnuorogersvpalanaklodzkodairaxn--w4r85el8fhu5dnraxn--w4rs40lx\" +\n\t\"n--wcvs22dxn--wgbh1cloudfrontdoorxn--wgbl6axn--xhq521bielawallon\" +\n\t\"ieruchomoscienceandindustrynikiiyamanobeauxartsandcraftsamsungla\" +\n\t\"ssassinationalheritagematsubarakawagoepostfoldnavyatkakudamatsue\" +\n\t\"psonyoursidegreevje-og-hornnesandvikcoromantovalle-d-aostatoilin\" +\n\t\"zainfinitinfoggiaxn--xkc2al3hye2axn--xkc2dl3a5ee0hannanmokuizumo\" +\n\t\"dernxn--y9a3aquariumisconfusedxn--yer-znarvikredstonexn--yfro4i6\" +\n\t\"7oxn--ygarden-p1axn--ygbi2ammxn--45q11christmasakikugawatchesase\" +\n\t\"boknowsitallukowhoswhokksundynv6xn--ystre-slidre-ujbiellaakesvue\" +\n\t\"mieleccexn--zbx025dxn--zf0ao64axn--zf0avxn--4gbriminingxn--zfr16\" +\n\t\"4bieszczadygeyachimataipeigersundunsagamiharaxperiaxz\"\n\n// nodes is the list of nodes. Each node is represented as a uint32, which\n// encodes the node's children, wildcard bit and node type (as an index into\n// the children array), ICANN bit and text.\n//\n// In the //-comment after each node's data, the nodes indexes of the children\n// are formatted as (n0x1234-n0x1256), with * denoting the wildcard bit. The\n// nodeType is printed as + for normal, ! for exception, and o for parent-only\n// nodes that have children but don't match a domain label in their own right.\n// An I denotes an ICANN domain.\n//\n// The layout within the uint32, from MSB to LSB, is:\n//\t[ 1 bits] unused\n//\t[ 9 bits] children index\n//\t[ 1 bits] ICANN bit\n//\t[15 bits] text index\n//\t[ 6 bits] text length\nvar nodes = [...]uint32{\n\t0x00355603, // n0x0000 c0x0000 (---------------)  + I aaa\n\t0x0034d544, // n0x0001 c0x0000 (---------------)  + I aarp\n\t0x0026b886, // n0x0002 c0x0000 (---------------)  + I abarth\n\t0x00230743, // n0x0003 c0x0000 (---------------)  + I abb\n\t0x00230746, // n0x0004 c0x0000 (---------------)  + I abbott\n\t0x00365706, // n0x0005 c0x0000 (---------------)  + I abbvie\n\t0x00399843, // n0x0006 c0x0000 (---------------)  + I abc\n\t0x0031f144, // n0x0007 c0x0000 (---------------)  + I able\n\t0x002ee207, // n0x0008 c0x0000 (---------------)  + I abogado\n\t0x0026b4c8, // n0x0009 c0x0000 (---------------)  + I abudhabi\n\t0x01a01542, // n0x000a c0x0006 (n0x0609-n0x060f)  + I ac\n\t0x0030aec7, // n0x000b c0x0000 (---------------)  + I academy\n\t0x00352a89, // n0x000c c0x0000 (---------------)  + I accenture\n\t0x002d9b0a, // n0x000d c0x0000 (---------------)  + I accountant\n\t0x002d9b0b, // n0x000e c0x0000 (---------------)  + I accountants\n\t0x00232d83, // n0x000f c0x0000 (---------------)  + I aco\n\t0x0028a206, // n0x0010 c0x0000 (---------------)  + I active\n\t0x0023b505, // n0x0011 c0x0000 (---------------)  + I actor\n\t0x01e00342, // n0x0012 c0x0007 (n0x060f-n0x0610)  + I ad\n\t0x00212f84, // n0x0013 c0x0000 (---------------)  + I adac\n\t0x0026ba03, // n0x0014 c0x0000 (---------------)  + I ads\n\t0x002a1985, // n0x0015 c0x0000 (---------------)  + I adult\n\t0x022035c2, // n0x0016 c0x0008 (n0x0610-n0x0618)  + I ae\n\t0x0024a403, // n0x0017 c0x0000 (---------------)  + I aeg\n\t0x026389c4, // n0x0018 c0x0009 (n0x0618-n0x066f)  + I aero\n\t0x0025e585, // n0x0019 c0x0000 (---------------)  + I aetna\n\t0x02a04a42, // n0x001a c0x000a (n0x066f-n0x0674)  + I af\n\t0x0036ec8e, // n0x001b c0x0000 (---------------)  + I afamilycompany\n\t0x00252703, // n0x001c c0x0000 (---------------)  + I afl\n\t0x00375846, // n0x001d c0x0000 (---------------)  + I africa\n\t0x0037584b, // n0x001e c0x0000 (---------------)  + I africamagic\n\t0x02e01002, // n0x001f c0x000b (n0x0674-n0x0679)  + I ag\n\t0x0034ac47, // n0x0020 c0x0000 (---------------)  + I agakhan\n\t0x0023df86, // n0x0021 c0x0000 (---------------)  + I agency\n\t0x032016c2, // n0x0022 c0x000c (n0x0679-n0x067d)  + I ai\n\t0x00214d03, // n0x0023 c0x0000 (---------------)  + I aig\n\t0x00214d04, // n0x0024 c0x0000 (---------------)  + I aigo\n\t0x0022b886, // n0x0025 c0x0000 (---------------)  + I airbus\n\t0x00338648, // n0x0026 c0x0000 (---------------)  + I airforce\n\t0x00286586, // n0x0027 c0x0000 (---------------)  + I airtel\n\t0x00227644, // n0x0028 c0x0000 (---------------)  + I akdn\n\t0x036001c2, // n0x0029 c0x000d (n0x067d-n0x0684)  + I al\n\t0x00328e49, // n0x002a c0x0000 (---------------)  + I alfaromeo\n\t0x00345287, // n0x002b c0x0000 (---------------)  + I alibaba\n\t0x002bc006, // n0x002c c0x0000 (---------------)  + I alipay\n\t0x0033e3c9, // n0x002d c0x0000 (---------------)  + I allfinanz\n\t0x0020f148, // n0x002e c0x0000 (---------------)  + I allstate\n\t0x00213584, // n0x002f c0x0000 (---------------)  + I ally\n\t0x0021dd86, // n0x0030 c0x0000 (---------------)  + I alsace\n\t0x0020be86, // n0x0031 c0x0000 (---------------)  + I alstom\n\t0x03a01882, // n0x0032 c0x000e (n0x0684-n0x0685)  + I am\n\t0x0024728f, // n0x0033 c0x0000 (---------------)  + I americanexpress\n\t0x00208d8e, // n0x0034 c0x0000 (---------------)  + I americanfamily\n\t0x002052c4, // n0x0035 c0x0000 (---------------)  + I amex\n\t0x00367585, // n0x0036 c0x0000 (---------------)  + I amfam\n\t0x00230645, // n0x0037 c0x0000 (---------------)  + I amica\n\t0x002c8449, // n0x0038 c0x0000 (---------------)  + I amsterdam\n\t0x00243f09, // n0x0039 c0x0000 (---------------)  + I analytics\n\t0x0031a8c7, // n0x003a c0x0000 (---------------)  + I android\n\t0x00350706, // n0x003b c0x0000 (---------------)  + I anquan\n\t0x00256b43, // n0x003c c0x0000 (---------------)  + I anz\n\t0x03e029c2, // n0x003d c0x000f (n0x0685-n0x068b)  + I ao\n\t0x00275643, // n0x003e c0x0000 (---------------)  + I aol\n\t0x0022ce0a, // n0x003f c0x0000 (---------------)  + I apartments\n\t0x002092c3, // n0x0040 c0x0000 (---------------)  + I app\n\t0x00331985, // n0x0041 c0x0000 (---------------)  + I apple\n\t0x002003c2, // n0x0042 c0x0000 (---------------)  + I aq\n\t0x00285a49, // n0x0043 c0x0000 (---------------)  + I aquarelle\n\t0x04200a42, // n0x0044 c0x0010 (n0x068b-n0x0694)  + I ar\n\t0x00202044, // n0x0045 c0x0000 (---------------)  + I arab\n\t0x00355146, // n0x0046 c0x0000 (---------------)  + I aramco\n\t0x002fb805, // n0x0047 c0x0000 (---------------)  + I archi\n\t0x00348744, // n0x0048 c0x0000 (---------------)  + I army\n\t0x04a29dc4, // n0x0049 c0x0012 (n0x0695-n0x069b)  + I arpa\n\t0x0023a6c4, // n0x004a c0x0000 (---------------)  + I arte\n\t0x04e01d42, // n0x004b c0x0013 (n0x069b-n0x069c)  + I as\n\t0x0034d284, // n0x004c c0x0000 (---------------)  + I asda\n\t0x00322ec4, // n0x004d c0x0000 (---------------)  + I asia\n\t0x003437ca, // n0x004e c0x0000 (---------------)  + I associates\n\t0x05200102, // n0x004f c0x0014 (n0x069c-n0x06a3)  + I at\n\t0x00248f47, // n0x0050 c0x0000 (---------------)  + I athleta\n\t0x0031fec8, // n0x0051 c0x0000 (---------------)  + I attorney\n\t0x05a04f82, // n0x0052 c0x0016 (n0x06a4-n0x06b6)  + I au\n\t0x00319e07, // n0x0053 c0x0000 (---------------)  + I auction\n\t0x00233104, // n0x0054 c0x0000 (---------------)  + I audi\n\t0x002b7d87, // n0x0055 c0x0000 (---------------)  + I audible\n\t0x00233105, // n0x0056 c0x0000 (---------------)  + I audio\n\t0x0035fd47, // n0x0057 c0x0000 (---------------)  + I auspost\n\t0x0031a686, // n0x0058 c0x0000 (---------------)  + I author\n\t0x00265104, // n0x0059 c0x0000 (---------------)  + I auto\n\t0x00324dc5, // n0x005a c0x0000 (---------------)  + I autos\n\t0x002dc007, // n0x005b c0x0000 (---------------)  + I avianca\n\t0x06a01082, // n0x005c c0x001a (n0x06c4-n0x06c5)  + I aw\n\t0x002f6583, // n0x005d c0x0000 (---------------)  + I aws\n\t0x00220402, // n0x005e c0x0000 (---------------)  + I ax\n\t0x00356983, // n0x005f c0x0000 (---------------)  + I axa\n\t0x06e05f42, // n0x0060 c0x001b (n0x06c5-n0x06d1)  + I az\n\t0x0021be05, // n0x0061 c0x0000 (---------------)  + I azure\n\t0x07202002, // n0x0062 c0x001c (n0x06d1-n0x06dc)  + I ba\n\t0x002ce1c4, // n0x0063 c0x0000 (---------------)  + I baby\n\t0x0027c805, // n0x0064 c0x0000 (---------------)  + I baidu\n\t0x00205207, // n0x0065 c0x0000 (---------------)  + I banamex\n\t0x002e97ce, // n0x0066 c0x0000 (---------------)  + I bananarepublic\n\t0x00207cc4, // n0x0067 c0x0000 (---------------)  + I band\n\t0x00203704, // n0x0068 c0x0000 (---------------)  + I bank\n\t0x00202003, // n0x0069 c0x0000 (---------------)  + I bar\n\t0x002dd889, // n0x006a c0x0000 (---------------)  + I barcelona\n\t0x002c12cb, // n0x006b c0x0000 (---------------)  + I barclaycard\n\t0x002dc608, // n0x006c c0x0000 (---------------)  + I barclays\n\t0x00306d88, // n0x006d c0x0000 (---------------)  + I barefoot\n\t0x0030e948, // n0x006e c0x0000 (---------------)  + I bargains\n\t0x0022f9c8, // n0x006f c0x0000 (---------------)  + I baseball\n\t0x0033e20a, // n0x0070 c0x0000 (---------------)  + I basketball\n\t0x0035fc47, // n0x0071 c0x0000 (---------------)  + I bauhaus\n\t0x00351786, // n0x0072 c0x0000 (---------------)  + I bayern\n\t0x07630782, // n0x0073 c0x001d (n0x06dc-n0x06e6)  + I bb\n\t0x003651c3, // n0x0074 c0x0000 (---------------)  + I bbc\n\t0x0036cbc3, // n0x0075 c0x0000 (---------------)  + I bbt\n\t0x00376984, // n0x0076 c0x0000 (---------------)  + I bbva\n\t0x00399883, // n0x0077 c0x0000 (---------------)  + I bcg\n\t0x00239b43, // n0x0078 c0x0000 (---------------)  + I bcn\n\t0x017129c2, // n0x0079 c0x0005 (---------------)* o I bd\n\t0x07a03302, // n0x007a c0x001e (n0x06e6-n0x06e8)  + I be\n\t0x0022b505, // n0x007b c0x0000 (---------------)  + I beats\n\t0x0024f5c6, // n0x007c c0x0000 (---------------)  + I beauty\n\t0x002ccb84, // n0x007d c0x0000 (---------------)  + I beer\n\t0x00383b87, // n0x007e c0x0000 (---------------)  + I bentley\n\t0x0022e6c6, // n0x007f c0x0000 (---------------)  + I berlin\n\t0x002291c4, // n0x0080 c0x0000 (---------------)  + I best\n\t0x00398887, // n0x0081 c0x0000 (---------------)  + I bestbuy\n\t0x00208c03, // n0x0082 c0x0000 (---------------)  + I bet\n\t0x07f5d242, // n0x0083 c0x001f (n0x06e8-n0x06e9)  + I bf\n\t0x082ee482, // n0x0084 c0x0020 (n0x06e9-n0x070e)  + I bg\n\t0x08615602, // n0x0085 c0x0021 (n0x070e-n0x0713)  + I bh\n\t0x00215606, // n0x0086 c0x0000 (---------------)  + I bharti\n\t0x08a00002, // n0x0087 c0x0022 (n0x0713-n0x0718)  + I bi\n\t0x0037bf45, // n0x0088 c0x0000 (---------------)  + I bible\n\t0x00313f03, // n0x0089 c0x0000 (---------------)  + I bid\n\t0x00202544, // n0x008a c0x0000 (---------------)  + I bike\n\t0x002dc444, // n0x008b c0x0000 (---------------)  + I bing\n\t0x002dc445, // n0x008c c0x0000 (---------------)  + I bingo\n\t0x00203a03, // n0x008d c0x0000 (---------------)  + I bio\n\t0x08f30b83, // n0x008e c0x0023 (n0x0718-n0x0720)  + I biz\n\t0x09206502, // n0x008f c0x0024 (n0x0720-n0x0724)  + I bj\n\t0x00288ec5, // n0x0090 c0x0000 (---------------)  + I black\n\t0x00288ecb, // n0x0091 c0x0000 (---------------)  + I blackfriday\n\t0x00258fc6, // n0x0092 c0x0000 (---------------)  + I blanco\n\t0x0020c8cb, // n0x0093 c0x0000 (---------------)  + I blockbuster\n\t0x002a4004, // n0x0094 c0x0000 (---------------)  + I blog\n\t0x0020d009, // n0x0095 c0x0000 (---------------)  + I bloomberg\n\t0x0020e104, // n0x0096 c0x0000 (---------------)  + I blue\n\t0x0960e742, // n0x0097 c0x0025 (n0x0724-n0x0729)  + I bm\n\t0x0020f6c3, // n0x0098 c0x0000 (---------------)  + I bms\n\t0x0020fc43, // n0x0099 c0x0000 (---------------)  + I bmw\n\t0x016104c2, // n0x009a c0x0005 (---------------)* o I bn\n\t0x002477c3, // n0x009b c0x0000 (---------------)  + I bnl\n\t0x002104ca, // n0x009c c0x0000 (---------------)  + I bnpparibas\n\t0x09a0e402, // n0x009d c0x0026 (n0x0729-n0x0732)  + I bo\n\t0x0030b145, // n0x009e c0x0000 (---------------)  + I boats\n\t0x0020e40a, // n0x009f c0x0000 (---------------)  + I boehringer\n\t0x00290b84, // n0x00a0 c0x0000 (---------------)  + I bofa\n\t0x00210ac3, // n0x00a1 c0x0000 (---------------)  + I bom\n\t0x00210f84, // n0x00a2 c0x0000 (---------------)  + I bond\n\t0x00215403, // n0x00a3 c0x0000 (---------------)  + I boo\n\t0x00215404, // n0x00a4 c0x0000 (---------------)  + I book\n\t0x00215407, // n0x00a5 c0x0000 (---------------)  + I booking\n\t0x00215e85, // n0x00a6 c0x0000 (---------------)  + I boots\n\t0x002173c5, // n0x00a7 c0x0000 (---------------)  + I bosch\n\t0x00217986, // n0x00a8 c0x0000 (---------------)  + I bostik\n\t0x00217cc6, // n0x00a9 c0x0000 (---------------)  + I boston\n\t0x00218e83, // n0x00aa c0x0000 (---------------)  + I bot\n\t0x0021b7c8, // n0x00ab c0x0000 (---------------)  + I boutique\n\t0x0021bb83, // n0x00ac c0x0000 (---------------)  + I box\n\t0x09e1c402, // n0x00ad c0x0027 (n0x0732-n0x0778)  + I br\n\t0x0021c408, // n0x00ae c0x0000 (---------------)  + I bradesco\n\t0x00221b8b, // n0x00af c0x0000 (---------------)  + I bridgestone\n\t0x00220008, // n0x00b0 c0x0000 (---------------)  + I broadway\n\t0x00220c46, // n0x00b1 c0x0000 (---------------)  + I broker\n\t0x00222007, // n0x00b2 c0x0000 (---------------)  + I brother\n\t0x00225e88, // n0x00b3 c0x0000 (---------------)  + I brussels\n\t0x0a637542, // n0x00b4 c0x0029 (n0x0779-n0x077e)  + I bs\n\t0x0aa1fd02, // n0x00b5 c0x002a (n0x077e-n0x0783)  + I bt\n\t0x0020a008, // n0x00b6 c0x0000 (---------------)  + I budapest\n\t0x002e5b47, // n0x00b7 c0x0000 (---------------)  + I bugatti\n\t0x002410c5, // n0x00b8 c0x0000 (---------------)  + I build\n\t0x002410c8, // n0x00b9 c0x0000 (---------------)  + I builders\n\t0x0022c188, // n0x00ba c0x0000 (---------------)  + I business\n\t0x003004c3, // n0x00bb c0x0000 (---------------)  + I buy\n\t0x0022dec4, // n0x00bc c0x0000 (---------------)  + I buzz\n\t0x00365782, // n0x00bd c0x0000 (---------------)  + I bv\n\t0x0ae2fe42, // n0x00be c0x002b (n0x0783-n0x0785)  + I bw\n\t0x0b20f982, // n0x00bf c0x002c (n0x0785-n0x0789)  + I by\n\t0x0ba30bc2, // n0x00c0 c0x002e (n0x078a-n0x0790)  + I bz\n\t0x00230bc3, // n0x00c1 c0x0000 (---------------)  + I bzh\n\t0x0be00302, // n0x00c2 c0x002f (n0x0790-n0x07a1)  + I ca\n\t0x00230703, // n0x00c3 c0x0000 (---------------)  + I cab\n\t0x0030ee44, // n0x00c4 c0x0000 (---------------)  + I cafe\n\t0x00213543, // n0x00c5 c0x0000 (---------------)  + I cal\n\t0x00213544, // n0x00c6 c0x0000 (---------------)  + I call\n\t0x002ed9cb, // n0x00c7 c0x0000 (---------------)  + I calvinklein\n\t0x0037c746, // n0x00c8 c0x0000 (---------------)  + I camera\n\t0x00241ac4, // n0x00c9 c0x0000 (---------------)  + I camp\n\t0x0029f88e, // n0x00ca c0x0000 (---------------)  + I cancerresearch\n\t0x00265485, // n0x00cb c0x0000 (---------------)  + I canon\n\t0x002dc148, // n0x00cc c0x0000 (---------------)  + I capetown\n\t0x002f0b87, // n0x00cd c0x0000 (---------------)  + I capital\n\t0x002f0b8a, // n0x00ce c0x0000 (---------------)  + I capitalone\n\t0x0020af43, // n0x00cf c0x0000 (---------------)  + I car\n\t0x00236a47, // n0x00d0 c0x0000 (---------------)  + I caravan\n\t0x002c1485, // n0x00d1 c0x0000 (---------------)  + I cards\n\t0x0036b504, // n0x00d2 c0x0000 (---------------)  + I care\n\t0x0036b506, // n0x00d3 c0x0000 (---------------)  + I career\n\t0x0036b507, // n0x00d4 c0x0000 (---------------)  + I careers\n\t0x00305f84, // n0x00d5 c0x0000 (---------------)  + I cars\n\t0x00390b47, // n0x00d6 c0x0000 (---------------)  + I cartier\n\t0x00214604, // n0x00d7 c0x0000 (---------------)  + I casa\n\t0x002188c4, // n0x00d8 c0x0000 (---------------)  + I case\n\t0x002188c6, // n0x00d9 c0x0000 (---------------)  + I caseih\n\t0x002c99c4, // n0x00da c0x0000 (---------------)  + I cash\n\t0x0037bc46, // n0x00db c0x0000 (---------------)  + I casino\n\t0x0020df43, // n0x00dc c0x0000 (---------------)  + I cat\n\t0x00351008, // n0x00dd c0x0000 (---------------)  + I catering\n\t0x0037ba88, // n0x00de c0x0000 (---------------)  + I catholic\n\t0x0024b283, // n0x00df c0x0000 (---------------)  + I cba\n\t0x00247783, // n0x00e0 c0x0000 (---------------)  + I cbn\n\t0x0038c544, // n0x00e1 c0x0000 (---------------)  + I cbre\n\t0x00391103, // n0x00e2 c0x0000 (---------------)  + I cbs\n\t0x0c22e182, // n0x00e3 c0x0030 (n0x07a1-n0x07a5)  + I cc\n\t0x0c63e2c2, // n0x00e4 c0x0031 (n0x07a5-n0x07a6)  + I cd\n\t0x00206483, // n0x00e5 c0x0000 (---------------)  + I ceb\n\t0x00204486, // n0x00e6 c0x0000 (---------------)  + I center\n\t0x002c87c3, // n0x00e7 c0x0000 (---------------)  + I ceo\n\t0x002e61c4, // n0x00e8 c0x0000 (---------------)  + I cern\n\t0x0ca14202, // n0x00e9 c0x0032 (n0x07a6-n0x07a7)  + I cf\n\t0x00214203, // n0x00ea c0x0000 (---------------)  + I cfa\n\t0x00379503, // n0x00eb c0x0000 (---------------)  + I cfd\n\t0x0021a302, // n0x00ec c0x0000 (---------------)  + I cg\n\t0x0ce01582, // n0x00ed c0x0033 (n0x07a7-n0x07a8)  + I ch\n\t0x002ba9c6, // n0x00ee c0x0000 (---------------)  + I chanel\n\t0x0023c407, // n0x00ef c0x0000 (---------------)  + I channel\n\t0x00329845, // n0x00f0 c0x0000 (---------------)  + I chase\n\t0x0022ac44, // n0x00f1 c0x0000 (---------------)  + I chat\n\t0x00284305, // n0x00f2 c0x0000 (---------------)  + I cheap\n\t0x00201587, // n0x00f3 c0x0000 (---------------)  + I chintai\n\t0x002aee85, // n0x00f4 c0x0000 (---------------)  + I chloe\n\t0x003a3989, // n0x00f5 c0x0000 (---------------)  + I christmas\n\t0x003024c6, // n0x00f6 c0x0000 (---------------)  + I chrome\n\t0x00303188, // n0x00f7 c0x0000 (---------------)  + I chrysler\n\t0x00329746, // n0x00f8 c0x0000 (---------------)  + I church\n\t0x0d200682, // n0x00f9 c0x0034 (n0x07a8-n0x07b7)  + I ci\n\t0x0023fe08, // n0x00fa c0x0000 (---------------)  + I cipriani\n\t0x00336206, // n0x00fb c0x0000 (---------------)  + I circle\n\t0x00200685, // n0x00fc c0x0000 (---------------)  + I cisco\n\t0x0033cc87, // n0x00fd c0x0000 (---------------)  + I citadel\n\t0x00350f04, // n0x00fe c0x0000 (---------------)  + I citi\n\t0x00350f05, // n0x00ff c0x0000 (---------------)  + I citic\n\t0x00286744, // n0x0100 c0x0000 (---------------)  + I city\n\t0x00286748, // n0x0101 c0x0000 (---------------)  + I cityeats\n\t0x0d60b482, // n0x0102 c0x0035 (n0x07b7-n0x07b8)* o I ck\n\t0x0da09182, // n0x0103 c0x0036 (n0x07b8-n0x07bd)  + I cl\n\t0x00378546, // n0x0104 c0x0000 (---------------)  + I claims\n\t0x002242c8, // n0x0105 c0x0000 (---------------)  + I cleaning\n\t0x00379a45, // n0x0106 c0x0000 (---------------)  + I click\n\t0x0037b946, // n0x0107 c0x0000 (---------------)  + I clinic\n\t0x00387188, // n0x0108 c0x0000 (---------------)  + I clinique\n\t0x0039a588, // n0x0109 c0x0000 (---------------)  + I clothing\n\t0x00209185, // n0x010a c0x0000 (---------------)  + I cloud\n\t0x00238ac4, // n0x010b c0x0000 (---------------)  + I club\n\t0x00238ac7, // n0x010c c0x0000 (---------------)  + I clubmed\n\t0x0de5d142, // n0x010d c0x0037 (n0x07bd-n0x07c1)  + I cm\n\t0x0e21ba42, // n0x010e c0x0038 (n0x07c1-n0x07ee)  + I cn\n\t0x0fa00742, // n0x010f c0x003e (n0x07f3-n0x0800)  + I co\n\t0x00358885, // n0x0110 c0x0000 (---------------)  + I coach\n\t0x0029bd05, // n0x0111 c0x0000 (---------------)  + I codes\n\t0x0020b246, // n0x0112 c0x0000 (---------------)  + I coffee\n\t0x0022e1c7, // n0x0113 c0x0000 (---------------)  + I college\n\t0x00231a87, // n0x0114 c0x0000 (---------------)  + I cologne\n\t0x10233503, // n0x0115 c0x0040 (n0x0801-n0x08d7)  + I com\n\t0x002a6b87, // n0x0116 c0x0000 (---------------)  + I comcast\n\t0x002da788, // n0x0117 c0x0000 (---------------)  + I commbank\n\t0x00233509, // n0x0118 c0x0000 (---------------)  + I community\n\t0x0036ee47, // n0x0119 c0x0000 (---------------)  + I company\n\t0x00234a07, // n0x011a c0x0000 (---------------)  + I compare\n\t0x00235488, // n0x011b c0x0000 (---------------)  + I computer\n\t0x00235c86, // n0x011c c0x0000 (---------------)  + I comsec\n\t0x00236246, // n0x011d c0x0000 (---------------)  + I condos\n\t0x00236f4c, // n0x011e c0x0000 (---------------)  + I construction\n\t0x00237d0a, // n0x011f c0x0000 (---------------)  + I consulting\n\t0x00239e07, // n0x0120 c0x0000 (---------------)  + I contact\n\t0x0023b3cb, // n0x0121 c0x0000 (---------------)  + I contractors\n\t0x0023c247, // n0x0122 c0x0000 (---------------)  + I cooking\n\t0x0023c24e, // n0x0123 c0x0000 (---------------)  + I cookingchannel\n\t0x0023d384, // n0x0124 c0x0000 (---------------)  + I cool\n\t0x0023d684, // n0x0125 c0x0000 (---------------)  + I coop\n\t0x0023ea07, // n0x0126 c0x0000 (---------------)  + I corsica\n\t0x00336587, // n0x0127 c0x0000 (---------------)  + I country\n\t0x002423c6, // n0x0128 c0x0000 (---------------)  + I coupon\n\t0x002423c7, // n0x0129 c0x0000 (---------------)  + I coupons\n\t0x00242fc7, // n0x012a c0x0000 (---------------)  + I courses\n\t0x126049c2, // n0x012b c0x0049 (n0x08fe-n0x0905)  + I cr\n\t0x002447c6, // n0x012c c0x0000 (---------------)  + I credit\n\t0x002447ca, // n0x012d c0x0000 (---------------)  + I creditcard\n\t0x00244a4b, // n0x012e c0x0000 (---------------)  + I creditunion\n\t0x00245b47, // n0x012f c0x0000 (---------------)  + I cricket\n\t0x00246505, // n0x0130 c0x0000 (---------------)  + I crown\n\t0x00246643, // n0x0131 c0x0000 (---------------)  + I crs\n\t0x00246b46, // n0x0132 c0x0000 (---------------)  + I cruise\n\t0x00246b47, // n0x0133 c0x0000 (---------------)  + I cruises\n\t0x002440c3, // n0x0134 c0x0000 (---------------)  + I csc\n\t0x12a09d82, // n0x0135 c0x004a (n0x0905-n0x090b)  + I cu\n\t0x00246f0a, // n0x0136 c0x0000 (---------------)  + I cuisinella\n\t0x12f53bc2, // n0x0137 c0x004b (n0x090b-n0x090c)  + I cv\n\t0x132c95c2, // n0x0138 c0x004c (n0x090c-n0x0910)  + I cw\n\t0x136482c2, // n0x0139 c0x004d (n0x0910-n0x0912)  + I cx\n\t0x13a3e082, // n0x013a c0x004e (n0x0912-n0x091f)  o I cy\n\t0x0024a985, // n0x013b c0x0000 (---------------)  + I cymru\n\t0x0024b084, // n0x013c c0x0000 (---------------)  + I cyou\n\t0x14229ec2, // n0x013d c0x0050 (n0x0920-n0x0922)  + I cz\n\t0x0034d305, // n0x013e c0x0000 (---------------)  + I dabur\n\t0x002a1943, // n0x013f c0x0000 (---------------)  + I dad\n\t0x00223d45, // n0x0140 c0x0000 (---------------)  + I dance\n\t0x0020c7c4, // n0x0141 c0x0000 (---------------)  + I date\n\t0x0020e206, // n0x0142 c0x0000 (---------------)  + I dating\n\t0x00292c46, // n0x0143 c0x0000 (---------------)  + I datsun\n\t0x00265983, // n0x0144 c0x0000 (---------------)  + I day\n\t0x0023f244, // n0x0145 c0x0000 (---------------)  + I dclk\n\t0x0025f303, // n0x0146 c0x0000 (---------------)  + I dds\n\t0x14604d82, // n0x0147 c0x0051 (n0x0922-n0x092a)  + I de\n\t0x00204d84, // n0x0148 c0x0000 (---------------)  + I deal\n\t0x00239046, // n0x0149 c0x0000 (---------------)  + I dealer\n\t0x00204d85, // n0x014a c0x0000 (---------------)  + I deals\n\t0x003a0286, // n0x014b c0x0000 (---------------)  + I degree\n\t0x0033cd88, // n0x014c c0x0000 (---------------)  + I delivery\n\t0x0025a384, // n0x014d c0x0000 (---------------)  + I dell\n\t0x00345f48, // n0x014e c0x0000 (---------------)  + I deloitte\n\t0x00311f45, // n0x014f c0x0000 (---------------)  + I delta\n\t0x002265c8, // n0x0150 c0x0000 (---------------)  + I democrat\n\t0x002abe06, // n0x0151 c0x0000 (---------------)  + I dental\n\t0x002b2407, // n0x0152 c0x0000 (---------------)  + I dentist\n\t0x0022dcc4, // n0x0153 c0x0000 (---------------)  + I desi\n\t0x0022dcc6, // n0x0154 c0x0000 (---------------)  + I design\n\t0x002329c3, // n0x0155 c0x0000 (---------------)  + I dev\n\t0x0037a7c3, // n0x0156 c0x0000 (---------------)  + I dhl\n\t0x002c42c8, // n0x0157 c0x0000 (---------------)  + I diamonds\n\t0x0030ce84, // n0x0158 c0x0000 (---------------)  + I diet\n\t0x00308ec7, // n0x0159 c0x0000 (---------------)  + I digital\n\t0x0024d786, // n0x015a c0x0000 (---------------)  + I direct\n\t0x0024d789, // n0x015b c0x0000 (---------------)  + I directory\n\t0x0031aa48, // n0x015c c0x0000 (---------------)  + I discount\n\t0x00330408, // n0x015d c0x0000 (---------------)  + I discover\n\t0x00229304, // n0x015e c0x0000 (---------------)  + I dish\n\t0x00320843, // n0x015f c0x0000 (---------------)  + I diy\n\t0x00266a02, // n0x0160 c0x0000 (---------------)  + I dj\n\t0x14a494c2, // n0x0161 c0x0052 (n0x092a-n0x092b)  + I dk\n\t0x14e0fa82, // n0x0162 c0x0053 (n0x092b-n0x0930)  + I dm\n\t0x00321fc3, // n0x0163 c0x0000 (---------------)  + I dnp\n\t0x15213282, // n0x0164 c0x0054 (n0x0930-n0x093a)  + I do\n\t0x002ee344, // n0x0165 c0x0000 (---------------)  + I docs\n\t0x00213285, // n0x0166 c0x0000 (---------------)  + I dodge\n\t0x002459c3, // n0x0167 c0x0000 (---------------)  + I dog\n\t0x00236044, // n0x0168 c0x0000 (---------------)  + I doha\n\t0x00339ec7, // n0x0169 c0x0000 (---------------)  + I domains\n\t0x0032f743, // n0x016a c0x0000 (---------------)  + I dot\n\t0x00269fc8, // n0x016b c0x0000 (---------------)  + I download\n\t0x00354745, // n0x016c c0x0000 (---------------)  + I drive\n\t0x00356c44, // n0x016d c0x0000 (---------------)  + I dstv\n\t0x00364483, // n0x016e c0x0000 (---------------)  + I dtv\n\t0x0027c785, // n0x016f c0x0000 (---------------)  + I dubai\n\t0x0027c8c4, // n0x0170 c0x0000 (---------------)  + I duck\n\t0x00390846, // n0x0171 c0x0000 (---------------)  + I dunlop\n\t0x003a6804, // n0x0172 c0x0000 (---------------)  + I duns\n\t0x002008c6, // n0x0173 c0x0000 (---------------)  + I dupont\n\t0x00205146, // n0x0174 c0x0000 (---------------)  + I durban\n\t0x00317284, // n0x0175 c0x0000 (---------------)  + I dvag\n\t0x00212b03, // n0x0176 c0x0000 (---------------)  + I dwg\n\t0x15607a82, // n0x0177 c0x0055 (n0x093a-n0x0942)  + I dz\n\t0x0034ab05, // n0x0178 c0x0000 (---------------)  + I earth\n\t0x0022b543, // n0x0179 c0x0000 (---------------)  + I eat\n\t0x15a09b02, // n0x017a c0x0056 (n0x0942-n0x094e)  + I ec\n\t0x002b94c5, // n0x017b c0x0000 (---------------)  + I edeka\n\t0x0023a783, // n0x017c c0x0000 (---------------)  + I edu\n\t0x0023a789, // n0x017d c0x0000 (---------------)  + I education\n\t0x15e0b342, // n0x017e c0x0057 (n0x094e-n0x0958)  + I ee\n\t0x16608442, // n0x017f c0x0059 (n0x0959-n0x0962)  + I eg\n\t0x002ce585, // n0x0180 c0x0000 (---------------)  + I email\n\t0x002c4646, // n0x0181 c0x0000 (---------------)  + I emerck\n\t0x00356047, // n0x0182 c0x0000 (---------------)  + I emerson\n\t0x002cb4c6, // n0x0183 c0x0000 (---------------)  + I energy\n\t0x00369148, // n0x0184 c0x0000 (---------------)  + I engineer\n\t0x0036914b, // n0x0185 c0x0000 (---------------)  + I engineering\n\t0x002044cb, // n0x0186 c0x0000 (---------------)  + I enterprises\n\t0x0039f945, // n0x0187 c0x0000 (---------------)  + I epost\n\t0x0039ffc5, // n0x0188 c0x0000 (---------------)  + I epson\n\t0x002c2709, // n0x0189 c0x0000 (---------------)  + I equipment\n\t0x01603682, // n0x018a c0x0005 (---------------)* o I er\n\t0x00317448, // n0x018b c0x0000 (---------------)  + I ericsson\n\t0x0020cb04, // n0x018c c0x0000 (---------------)  + I erni\n\t0x16e00482, // n0x018d c0x005b (n0x0963-n0x0968)  + I es\n\t0x0027a303, // n0x018e c0x0000 (---------------)  + I esq\n\t0x002c2486, // n0x018f c0x0000 (---------------)  + I estate\n\t0x0028d2c8, // n0x0190 c0x0000 (---------------)  + I esurance\n\t0x176053c2, // n0x0191 c0x005d (n0x0969-n0x0971)  + I et\n\t0x002234c8, // n0x0192 c0x0000 (---------------)  + I etisalat\n\t0x00204b82, // n0x0193 c0x0000 (---------------)  + I eu\n\t0x0033c78a, // n0x0194 c0x0000 (---------------)  + I eurovision\n\t0x00228883, // n0x0195 c0x0000 (---------------)  + I eus\n\t0x00232a06, // n0x0196 c0x0000 (---------------)  + I events\n\t0x00203608, // n0x0197 c0x0000 (---------------)  + I everbank\n\t0x00239488, // n0x0198 c0x0000 (---------------)  + I exchange\n\t0x0031ee06, // n0x0199 c0x0000 (---------------)  + I expert\n\t0x00363107, // n0x019a c0x0000 (---------------)  + I exposed\n\t0x00247487, // n0x019b c0x0000 (---------------)  + I express\n\t0x0020ba0a, // n0x019c c0x0000 (---------------)  + I extraspace\n\t0x00290c04, // n0x019d c0x0000 (---------------)  + I fage\n\t0x00214244, // n0x019e c0x0000 (---------------)  + I fail\n\t0x0033b609, // n0x019f c0x0000 (---------------)  + I fairwinds\n\t0x00350405, // n0x01a0 c0x0000 (---------------)  + I faith\n\t0x00208f86, // n0x01a1 c0x0000 (---------------)  + I family\n\t0x00211d03, // n0x01a2 c0x0000 (---------------)  + I fan\n\t0x002e0ec4, // n0x01a3 c0x0000 (---------------)  + I fans\n\t0x00271d04, // n0x01a4 c0x0000 (---------------)  + I farm\n\t0x002ece87, // n0x01a5 c0x0000 (---------------)  + I farmers\n\t0x0022fec7, // n0x01a6 c0x0000 (---------------)  + I fashion\n\t0x0024c204, // n0x01a7 c0x0000 (---------------)  + I fast\n\t0x00211505, // n0x01a8 c0x0000 (---------------)  + I fedex\n\t0x0020b308, // n0x01a9 c0x0000 (---------------)  + I feedback\n\t0x00337007, // n0x01aa c0x0000 (---------------)  + I ferrari\n\t0x00343407, // n0x01ab c0x0000 (---------------)  + I ferrero\n\t0x17a07502, // n0x01ac c0x005e (n0x0971-n0x0974)  + I fi\n\t0x00294744, // n0x01ad c0x0000 (---------------)  + I fiat\n\t0x0035ee48, // n0x01ae c0x0000 (---------------)  + I fidelity\n\t0x00365b84, // n0x01af c0x0000 (---------------)  + I fido\n\t0x0024b784, // n0x01b0 c0x0000 (---------------)  + I film\n\t0x0024bb85, // n0x01b1 c0x0000 (---------------)  + I final\n\t0x0024bcc7, // n0x01b2 c0x0000 (---------------)  + I finance\n\t0x00207509, // n0x01b3 c0x0000 (---------------)  + I financial\n\t0x0024c6c4, // n0x01b4 c0x0000 (---------------)  + I fire\n\t0x0024d4c9, // n0x01b5 c0x0000 (---------------)  + I firestone\n\t0x0024d9c8, // n0x01b6 c0x0000 (---------------)  + I firmdale\n\t0x0024e044, // n0x01b7 c0x0000 (---------------)  + I fish\n\t0x0024e047, // n0x01b8 c0x0000 (---------------)  + I fishing\n\t0x0024f083, // n0x01b9 c0x0000 (---------------)  + I fit\n\t0x0024f807, // n0x01ba c0x0000 (---------------)  + I fitness\n\t0x01615b02, // n0x01bb c0x0005 (---------------)* o I fj\n\t0x01799fc2, // n0x01bc c0x0005 (---------------)* o I fk\n\t0x00250686, // n0x01bd c0x0000 (---------------)  + I flickr\n\t0x00251287, // n0x01be c0x0000 (---------------)  + I flights\n\t0x00251c04, // n0x01bf c0x0000 (---------------)  + I flir\n\t0x00252b07, // n0x01c0 c0x0000 (---------------)  + I florist\n\t0x002539c7, // n0x01c1 c0x0000 (---------------)  + I flowers\n\t0x00253f08, // n0x01c2 c0x0000 (---------------)  + I flsmidth\n\t0x002549c3, // n0x01c3 c0x0000 (---------------)  + I fly\n\t0x00242902, // n0x01c4 c0x0000 (---------------)  + I fm\n\t0x002558c2, // n0x01c5 c0x0000 (---------------)  + I fo\n\t0x00255a83, // n0x01c6 c0x0000 (---------------)  + I foo\n\t0x00255a8b, // n0x01c7 c0x0000 (---------------)  + I foodnetwork\n\t0x00306e88, // n0x01c8 c0x0000 (---------------)  + I football\n\t0x0039bf44, // n0x01c9 c0x0000 (---------------)  + I ford\n\t0x00257585, // n0x01ca c0x0000 (---------------)  + I forex\n\t0x00259787, // n0x01cb c0x0000 (---------------)  + I forsale\n\t0x0025b085, // n0x01cc c0x0000 (---------------)  + I forum\n\t0x002b9f4a, // n0x01cd c0x0000 (---------------)  + I foundation\n\t0x0025c143, // n0x01ce c0x0000 (---------------)  + I fox\n\t0x17e00582, // n0x01cf c0x005f (n0x0974-n0x098c)  + I fr\n\t0x002e7d04, // n0x01d0 c0x0000 (---------------)  + I free\n\t0x0025f7c9, // n0x01d1 c0x0000 (---------------)  + I fresenius\n\t0x00263603, // n0x01d2 c0x0000 (---------------)  + I frl\n\t0x002636c7, // n0x01d3 c0x0000 (---------------)  + I frogans\n\t0x0039d609, // n0x01d4 c0x0000 (---------------)  + I frontdoor\n\t0x003980c8, // n0x01d5 c0x0000 (---------------)  + I frontier\n\t0x00204a83, // n0x01d6 c0x0000 (---------------)  + I ftr\n\t0x0027b8c7, // n0x01d7 c0x0000 (---------------)  + I fujitsu\n\t0x0027bdc9, // n0x01d8 c0x0000 (---------------)  + I fujixerox\n\t0x002312c3, // n0x01d9 c0x0000 (---------------)  + I fun\n\t0x00283c84, // n0x01da c0x0000 (---------------)  + I fund\n\t0x00285349, // n0x01db c0x0000 (---------------)  + I furniture\n\t0x00287806, // n0x01dc c0x0000 (---------------)  + I futbol\n\t0x002888c3, // n0x01dd c0x0000 (---------------)  + I fyi\n\t0x00201042, // n0x01de c0x0000 (---------------)  + I ga\n\t0x0021dd43, // n0x01df c0x0000 (---------------)  + I gal\n\t0x00392147, // n0x01e0 c0x0000 (---------------)  + I gallery\n\t0x00336385, // n0x01e1 c0x0000 (---------------)  + I gallo\n\t0x002dd686, // n0x01e2 c0x0000 (---------------)  + I gallup\n\t0x00297cc4, // n0x01e3 c0x0000 (---------------)  + I game\n\t0x003700c5, // n0x01e4 c0x0000 (---------------)  + I games\n\t0x0022cdc3, // n0x01e5 c0x0000 (---------------)  + I gap\n\t0x002190c6, // n0x01e6 c0x0000 (---------------)  + I garden\n\t0x0020d202, // n0x01e7 c0x0000 (---------------)  + I gb\n\t0x00387944, // n0x01e8 c0x0000 (---------------)  + I gbiz\n\t0x00222d42, // n0x01e9 c0x0000 (---------------)  + I gd\n\t0x002fb203, // n0x01ea c0x0000 (---------------)  + I gdn\n\t0x182026c2, // n0x01eb c0x0060 (n0x098c-n0x0993)  + I ge\n\t0x002534c3, // n0x01ec c0x0000 (---------------)  + I gea\n\t0x00218144, // n0x01ed c0x0000 (---------------)  + I gent\n\t0x00218147, // n0x01ee c0x0000 (---------------)  + I genting\n\t0x00324b46, // n0x01ef c0x0000 (---------------)  + I george\n\t0x00269a82, // n0x01f0 c0x0000 (---------------)  + I gf\n\t0x18654282, // n0x01f1 c0x0061 (n0x0993-n0x0996)  + I gg\n\t0x00330644, // n0x01f2 c0x0000 (---------------)  + I ggee\n\t0x18a41602, // n0x01f3 c0x0062 (n0x0996-n0x099b)  + I gh\n\t0x18e134c2, // n0x01f4 c0x0063 (n0x099b-n0x09a1)  + I gi\n\t0x00344f44, // n0x01f5 c0x0000 (---------------)  + I gift\n\t0x00344f45, // n0x01f6 c0x0000 (---------------)  + I gifts\n\t0x00269485, // n0x01f7 c0x0000 (---------------)  + I gives\n\t0x003481c6, // n0x01f8 c0x0000 (---------------)  + I giving\n\t0x1920ce42, // n0x01f9 c0x0064 (n0x09a1-n0x09a6)  + I gl\n\t0x00345e85, // n0x01fa c0x0000 (---------------)  + I glade\n\t0x0039ef45, // n0x01fb c0x0000 (---------------)  + I glass\n\t0x00285d83, // n0x01fc c0x0000 (---------------)  + I gle\n\t0x0020d846, // n0x01fd c0x0000 (---------------)  + I global\n\t0x0020e345, // n0x01fe c0x0000 (---------------)  + I globo\n\t0x00215582, // n0x01ff c0x0000 (---------------)  + I gm\n\t0x00335e45, // n0x0200 c0x0000 (---------------)  + I gmail\n\t0x00215584, // n0x0201 c0x0000 (---------------)  + I gmbh\n\t0x002182c3, // n0x0202 c0x0000 (---------------)  + I gmo\n\t0x0021bac3, // n0x0203 c0x0000 (---------------)  + I gmx\n\t0x19608342, // n0x0204 c0x0065 (n0x09a6-n0x09ac)  + I gn\n\t0x002e9bc7, // n0x0205 c0x0000 (---------------)  + I godaddy\n\t0x0024dbc4, // n0x0206 c0x0000 (---------------)  + I gold\n\t0x0024dbc9, // n0x0207 c0x0000 (---------------)  + I goldpoint\n\t0x0024e1c4, // n0x0208 c0x0000 (---------------)  + I golf\n\t0x00299dc3, // n0x0209 c0x0000 (---------------)  + I goo\n\t0x0031bac9, // n0x020a c0x0000 (---------------)  + I goodhands\n\t0x0034a9c8, // n0x020b c0x0000 (---------------)  + I goodyear\n\t0x0029bb84, // n0x020c c0x0000 (---------------)  + I goog\n\t0x0029bb86, // n0x020d c0x0000 (---------------)  + I google\n\t0x002a36c3, // n0x020e c0x0000 (---------------)  + I gop\n\t0x00211ec3, // n0x020f c0x0000 (---------------)  + I got\n\t0x002dc504, // n0x0210 c0x0000 (---------------)  + I gotv\n\t0x0026cc83, // n0x0211 c0x0000 (---------------)  + I gov\n\t0x19adad02, // n0x0212 c0x0066 (n0x09ac-n0x09b2)  + I gp\n\t0x003010c2, // n0x0213 c0x0000 (---------------)  + I gq\n\t0x19e00c82, // n0x0214 c0x0067 (n0x09b2-n0x09b8)  + I gr\n\t0x00315908, // n0x0215 c0x0000 (---------------)  + I grainger\n\t0x003216c8, // n0x0216 c0x0000 (---------------)  + I graphics\n\t0x0038b986, // n0x0217 c0x0000 (---------------)  + I gratis\n\t0x002503c5, // n0x0218 c0x0000 (---------------)  + I green\n\t0x0022fd05, // n0x0219 c0x0000 (---------------)  + I gripe\n\t0x0020ab45, // n0x021a c0x0000 (---------------)  + I group\n\t0x0023a242, // n0x021b c0x0000 (---------------)  + I gs\n\t0x1a23f142, // n0x021c c0x0068 (n0x09b8-n0x09bf)  + I gt\n\t0x0160dd42, // n0x021d c0x0005 (---------------)* o I gu\n\t0x00350588, // n0x021e c0x0000 (---------------)  + I guardian\n\t0x0023fd45, // n0x021f c0x0000 (---------------)  + I gucci\n\t0x002e05c4, // n0x0220 c0x0000 (---------------)  + I guge\n\t0x00232905, // n0x0221 c0x0000 (---------------)  + I guide\n\t0x0023cc87, // n0x0222 c0x0000 (---------------)  + I guitars\n\t0x002594c4, // n0x0223 c0x0000 (---------------)  + I guru\n\t0x002167c2, // n0x0224 c0x0000 (---------------)  + I gw\n\t0x1a602302, // n0x0225 c0x0069 (n0x09bf-n0x09c5)  + I gy\n\t0x0030c744, // n0x0226 c0x0000 (---------------)  + I hair\n\t0x0020ccc7, // n0x0227 c0x0000 (---------------)  + I hamburg\n\t0x00394c47, // n0x0228 c0x0000 (---------------)  + I hangout\n\t0x0035fd04, // n0x0229 c0x0000 (---------------)  + I haus\n\t0x00290b43, // n0x022a c0x0000 (---------------)  + I hbo\n\t0x0024b1c4, // n0x022b c0x0000 (---------------)  + I hdfc\n\t0x0024b1c8, // n0x022c c0x0000 (---------------)  + I hdfcbank\n\t0x0036b386, // n0x022d c0x0000 (---------------)  + I health\n\t0x0036b38a, // n0x022e c0x0000 (---------------)  + I healthcare\n\t0x002073c4, // n0x022f c0x0000 (---------------)  + I help\n\t0x0020ebc8, // n0x0230 c0x0000 (---------------)  + I helsinki\n\t0x00254184, // n0x0231 c0x0000 (---------------)  + I here\n\t0x00222106, // n0x0232 c0x0000 (---------------)  + I hermes\n\t0x00292304, // n0x0233 c0x0000 (---------------)  + I hgtv\n\t0x00358b86, // n0x0234 c0x0000 (---------------)  + I hiphop\n\t0x002ebcc9, // n0x0235 c0x0000 (---------------)  + I hisamitsu\n\t0x002a27c7, // n0x0236 c0x0000 (---------------)  + I hitachi\n\t0x0027d3c3, // n0x0237 c0x0000 (---------------)  + I hiv\n\t0x1aa0a882, // n0x0238 c0x006a (n0x09c5-n0x09dd)  + I hk\n\t0x0026da43, // n0x0239 c0x0000 (---------------)  + I hkt\n\t0x0020e942, // n0x023a c0x0000 (---------------)  + I hm\n\t0x1ae1ab42, // n0x023b c0x006b (n0x09dd-n0x09e3)  + I hn\n\t0x002df846, // n0x023c c0x0000 (---------------)  + I hockey\n\t0x0035e208, // n0x023d c0x0000 (---------------)  + I holdings\n\t0x002a5007, // n0x023e c0x0000 (---------------)  + I holiday\n\t0x00274049, // n0x023f c0x0000 (---------------)  + I homedepot\n\t0x00299cc9, // n0x0240 c0x0000 (---------------)  + I homegoods\n\t0x002a60c5, // n0x0241 c0x0000 (---------------)  + I homes\n\t0x002a60c9, // n0x0242 c0x0000 (---------------)  + I homesense\n\t0x002a7985, // n0x0243 c0x0000 (---------------)  + I honda\n\t0x002a8409, // n0x0244 c0x0000 (---------------)  + I honeywell\n\t0x002a91c5, // n0x0245 c0x0000 (---------------)  + I horse\n\t0x00297e04, // n0x0246 c0x0000 (---------------)  + I host\n\t0x00297e07, // n0x0247 c0x0000 (---------------)  + I hosting\n\t0x00234dc3, // n0x0248 c0x0000 (---------------)  + I hot\n\t0x002a98c7, // n0x0249 c0x0000 (---------------)  + I hoteles\n\t0x002a9fc7, // n0x024a c0x0000 (---------------)  + I hotmail\n\t0x002a2105, // n0x024b c0x0000 (---------------)  + I house\n\t0x002a1343, // n0x024c c0x0000 (---------------)  + I how\n\t0x1b20e4c2, // n0x024d c0x006c (n0x09e3-n0x09e8)  + I hr\n\t0x00389404, // n0x024e c0x0000 (---------------)  + I hsbc\n\t0x1b62a682, // n0x024f c0x006d (n0x09e8-n0x09f9)  + I ht\n\t0x0025d0c3, // n0x0250 c0x0000 (---------------)  + I htc\n\t0x1ba195c2, // n0x0251 c0x006e (n0x09f9-n0x0a19)  + I hu\n\t0x002f94c6, // n0x0252 c0x0000 (---------------)  + I hughes\n\t0x0031fe45, // n0x0253 c0x0000 (---------------)  + I hyatt\n\t0x002ac1c7, // n0x0254 c0x0000 (---------------)  + I hyundai\n\t0x00321f03, // n0x0255 c0x0000 (---------------)  + I ibm\n\t0x00239ac4, // n0x0256 c0x0000 (---------------)  + I icbc\n\t0x00206903, // n0x0257 c0x0000 (---------------)  + I ice\n\t0x00209d43, // n0x0258 c0x0000 (---------------)  + I icu\n\t0x1be0c782, // n0x0259 c0x006f (n0x0a19-n0x0a24)  + I id\n\t0x1c600042, // n0x025a c0x0071 (n0x0a25-n0x0a27)  + I ie\n\t0x00365804, // n0x025b c0x0000 (---------------)  + I ieee\n\t0x002428c3, // n0x025c c0x0000 (---------------)  + I ifm\n\t0x00322905, // n0x025d c0x0000 (---------------)  + I iinet\n\t0x00322745, // n0x025e c0x0000 (---------------)  + I ikano\n\t0x1ca02902, // n0x025f c0x0072 (n0x0a27-n0x0a2f)  + I il\n\t0x1d205c42, // n0x0260 c0x0074 (n0x0a30-n0x0a37)  + I im\n\t0x00256dc6, // n0x0261 c0x0000 (---------------)  + I imamat\n\t0x0025ee44, // n0x0262 c0x0000 (---------------)  + I imdb\n\t0x00207084, // n0x0263 c0x0000 (---------------)  + I immo\n\t0x0020708a, // n0x0264 c0x0000 (---------------)  + I immobilien\n\t0x1da013c2, // n0x0265 c0x0076 (n0x0a39-n0x0a46)  + I in\n\t0x0036728a, // n0x0266 c0x0000 (---------------)  + I industries\n\t0x003a1088, // n0x0267 c0x0000 (---------------)  + I infiniti\n\t0x1dfa1244, // n0x0268 c0x0077 (n0x0a46-n0x0a50)  + I info\n\t0x0020e2c3, // n0x0269 c0x0000 (---------------)  + I ing\n\t0x0020ecc3, // n0x026a c0x0000 (---------------)  + I ink\n\t0x0030ea89, // n0x026b c0x0000 (---------------)  + I institute\n\t0x0023e7c9, // n0x026c c0x0000 (---------------)  + I insurance\n\t0x00339fc6, // n0x026d c0x0000 (---------------)  + I insure\n\t0x1e201603, // n0x026e c0x0078 (n0x0a50-n0x0a51)  + I int\n\t0x0024dd45, // n0x026f c0x0000 (---------------)  + I intel\n\t0x0031940d, // n0x0270 c0x0000 (---------------)  + I international\n\t0x002f8946, // n0x0271 c0x0000 (---------------)  + I intuit\n\t0x00203d0b, // n0x0272 c0x0000 (---------------)  + I investments\n\t0x1e600ac2, // n0x0273 c0x0079 (n0x0a51-n0x0a57)  + I io\n\t0x0026bb88, // n0x0274 c0x0000 (---------------)  + I ipiranga\n\t0x1ea00dc2, // n0x0275 c0x007a (n0x0a57-n0x0a5d)  + I iq\n\t0x1ee04302, // n0x0276 c0x007b (n0x0a5d-n0x0a66)  + I ir\n\t0x002a5605, // n0x0277 c0x0000 (---------------)  + I irish\n\t0x1f2006c2, // n0x0278 c0x007c (n0x0a66-n0x0a6e)  + I is\n\t0x0025b307, // n0x0279 c0x0000 (---------------)  + I iselect\n\t0x0033c007, // n0x027a c0x0000 (---------------)  + I ismaili\n\t0x00215003, // n0x027b c0x0000 (---------------)  + I ist\n\t0x00215008, // n0x027c c0x0000 (---------------)  + I istanbul\n\t0x1f601e42, // n0x027d c0x007d (n0x0a6e-n0x0bdf)  + I it\n\t0x002804c4, // n0x027e c0x0000 (---------------)  + I itau\n\t0x00360743, // n0x027f c0x0000 (---------------)  + I itv\n\t0x00323145, // n0x0280 c0x0000 (---------------)  + I iveco\n\t0x0036ab83, // n0x0281 c0x0000 (---------------)  + I iwc\n\t0x0031f906, // n0x0282 c0x0000 (---------------)  + I jaguar\n\t0x00323d44, // n0x0283 c0x0000 (---------------)  + I java\n\t0x00247743, // n0x0284 c0x0000 (---------------)  + I jcb\n\t0x0026e183, // n0x0285 c0x0000 (---------------)  + I jcp\n\t0x1fa06f02, // n0x0286 c0x007e (n0x0bdf-n0x0be2)  + I je\n\t0x003299c4, // n0x0287 c0x0000 (---------------)  + I jeep\n\t0x0034ea85, // n0x0288 c0x0000 (---------------)  + I jetzt\n\t0x00360f47, // n0x0289 c0x0000 (---------------)  + I jewelry\n\t0x00278d43, // n0x028a c0x0000 (---------------)  + I jio\n\t0x002ac643, // n0x028b c0x0000 (---------------)  + I jlc\n\t0x002ad103, // n0x028c c0x0000 (---------------)  + I jll\n\t0x016308c2, // n0x028d c0x0005 (---------------)* o I jm\n\t0x002ad1c3, // n0x028e c0x0000 (---------------)  + I jmp\n\t0x002ad803, // n0x028f c0x0000 (---------------)  + I jnj\n\t0x1fe04042, // n0x0290 c0x007f (n0x0be2-n0x0bea)  + I jo\n\t0x002ddc44, // n0x0291 c0x0000 (---------------)  + I jobs\n\t0x0027cb06, // n0x0292 c0x0000 (---------------)  + I joburg\n\t0x00204043, // n0x0293 c0x0000 (---------------)  + I jot\n\t0x002adb83, // n0x0294 c0x0000 (---------------)  + I joy\n\t0x202ae3c2, // n0x0295 c0x0080 (n0x0bea-n0x0c59)  + I jp\n\t0x002ae3c8, // n0x0296 c0x0000 (---------------)  + I jpmorgan\n\t0x002aefc4, // n0x0297 c0x0000 (---------------)  + I jprs\n\t0x002d7906, // n0x0298 c0x0000 (---------------)  + I juegos\n\t0x002af287, // n0x0299 c0x0000 (---------------)  + I juniper\n\t0x00227e46, // n0x029a c0x0000 (---------------)  + I kaufen\n\t0x00238144, // n0x029b c0x0000 (---------------)  + I kddi\n\t0x2de025c2, // n0x029c c0x00b7 (n0x12ed-n0x12ee)* o I ke\n\t0x00234c8b, // n0x029d c0x0000 (---------------)  + I kerryhotels\n\t0x002e2c0e, // n0x029e c0x0000 (---------------)  + I kerrylogistics\n\t0x00220d0f, // n0x029f c0x0000 (---------------)  + I kerryproperties\n\t0x0023f303, // n0x02a0 c0x0000 (---------------)  + I kfh\n\t0x2e6b5502, // n0x02a1 c0x00b9 (n0x12ef-n0x12f5)  + I kg\n\t0x0161acc2, // n0x02a2 c0x0005 (---------------)* o I kh\n\t0x2ea01e02, // n0x02a3 c0x00ba (n0x12f5-n0x12fc)  + I ki\n\t0x00226f83, // n0x02a4 c0x0000 (---------------)  + I kia\n\t0x002303c3, // n0x02a5 c0x0000 (---------------)  + I kim\n\t0x002e7706, // n0x02a6 c0x0000 (---------------)  + I kinder\n\t0x0037c506, // n0x02a7 c0x0000 (---------------)  + I kindle\n\t0x003703c7, // n0x02a8 c0x0000 (---------------)  + I kitchen\n\t0x002eed84, // n0x02a9 c0x0000 (---------------)  + I kiwi\n\t0x2ee316c2, // n0x02aa c0x00bb (n0x12fc-n0x130d)  + I km\n\t0x2f269c82, // n0x02ab c0x00bc (n0x130d-n0x1311)  + I kn\n\t0x0036bd45, // n0x02ac c0x0000 (---------------)  + I koeln\n\t0x002aa707, // n0x02ad c0x0000 (---------------)  + I komatsu\n\t0x0035cbc6, // n0x02ae c0x0000 (---------------)  + I kosher\n\t0x2f60d782, // n0x02af c0x00bd (n0x1311-n0x1317)  + I kp\n\t0x0020d784, // n0x02b0 c0x0000 (---------------)  + I kpmg\n\t0x0036a3c3, // n0x02b1 c0x0000 (---------------)  + I kpn\n\t0x2fa06fc2, // n0x02b2 c0x00be (n0x1317-n0x1335)  + I kr\n\t0x0034df03, // n0x02b3 c0x0000 (---------------)  + I krd\n\t0x003a2b04, // n0x02b4 c0x0000 (---------------)  + I kred\n\t0x002b5449, // n0x02b5 c0x0000 (---------------)  + I kuokgroup\n\t0x016bd182, // n0x02b6 c0x0005 (---------------)* o I kw\n\t0x2fe36902, // n0x02b7 c0x00bf (n0x1335-n0x133a)  + I ky\n\t0x00269c06, // n0x02b8 c0x0000 (---------------)  + I kyknet\n\t0x002be0c5, // n0x02b9 c0x0000 (---------------)  + I kyoto\n\t0x30392a42, // n0x02ba c0x00c0 (n0x133a-n0x1340)  + I kz\n\t0x30600802, // n0x02bb c0x00c1 (n0x1340-n0x1349)  + I la\n\t0x0033aa87, // n0x02bc c0x0000 (---------------)  + I lacaixa\n\t0x00293449, // n0x02bd c0x0000 (---------------)  + I ladbrokes\n\t0x00352d0b, // n0x02be c0x0000 (---------------)  + I lamborghini\n\t0x00247245, // n0x02bf c0x0000 (---------------)  + I lamer\n\t0x0036c449, // n0x02c0 c0x0000 (---------------)  + I lancaster\n\t0x002c0706, // n0x02c1 c0x0000 (---------------)  + I lancia\n\t0x00259007, // n0x02c2 c0x0000 (---------------)  + I lancome\n\t0x00200804, // n0x02c3 c0x0000 (---------------)  + I land\n\t0x0025e089, // n0x02c4 c0x0000 (---------------)  + I landrover\n\t0x0035a387, // n0x02c5 c0x0000 (---------------)  + I lanxess\n\t0x00279f47, // n0x02c6 c0x0000 (---------------)  + I lasalle\n\t0x00223603, // n0x02c7 c0x0000 (---------------)  + I lat\n\t0x0025ef86, // n0x02c8 c0x0000 (---------------)  + I latino\n\t0x002cca47, // n0x02c9 c0x0000 (---------------)  + I latrobe\n\t0x00274483, // n0x02ca c0x0000 (---------------)  + I law\n\t0x00274486, // n0x02cb c0x0000 (---------------)  + I lawyer\n\t0x30a02942, // n0x02cc c0x00c2 (n0x1349-n0x134e)  + I lb\n\t0x30e3aa02, // n0x02cd c0x00c3 (n0x134e-n0x1354)  + I lc\n\t0x00226843, // n0x02ce c0x0000 (---------------)  + I lds\n\t0x0027a085, // n0x02cf c0x0000 (---------------)  + I lease\n\t0x0022c487, // n0x02d0 c0x0000 (---------------)  + I leclerc\n\t0x0037c006, // n0x02d1 c0x0000 (---------------)  + I lefrak\n\t0x00336305, // n0x02d2 c0x0000 (---------------)  + I legal\n\t0x0024db44, // n0x02d3 c0x0000 (---------------)  + I lego\n\t0x00241385, // n0x02d4 c0x0000 (---------------)  + I lexus\n\t0x002e65c4, // n0x02d5 c0x0000 (---------------)  + I lgbt\n\t0x31207202, // n0x02d6 c0x00c4 (n0x1354-n0x1355)  + I li\n\t0x00308447, // n0x02d7 c0x0000 (---------------)  + I liaison\n\t0x002bb904, // n0x02d8 c0x0000 (---------------)  + I lidl\n\t0x0023e6c4, // n0x02d9 c0x0000 (---------------)  + I life\n\t0x0023e6cd, // n0x02da c0x0000 (---------------)  + I lifeinsurance\n\t0x00253cc9, // n0x02db c0x0000 (---------------)  + I lifestyle\n\t0x00312248, // n0x02dc c0x0000 (---------------)  + I lighting\n\t0x00258c44, // n0x02dd c0x0000 (---------------)  + I like\n\t0x00249785, // n0x02de c0x0000 (---------------)  + I lilly\n\t0x0025d747, // n0x02df c0x0000 (---------------)  + I limited\n\t0x0025db44, // n0x02e0 c0x0000 (---------------)  + I limo\n\t0x0022e787, // n0x02e1 c0x0000 (---------------)  + I lincoln\n\t0x00345ac5, // n0x02e2 c0x0000 (---------------)  + I linde\n\t0x00398ec4, // n0x02e3 c0x0000 (---------------)  + I link\n\t0x002d3a85, // n0x02e4 c0x0000 (---------------)  + I lipsy\n\t0x002622c4, // n0x02e5 c0x0000 (---------------)  + I live\n\t0x002414c6, // n0x02e6 c0x0000 (---------------)  + I living\n\t0x0025da45, // n0x02e7 c0x0000 (---------------)  + I lixil\n\t0x3160d742, // n0x02e8 c0x00c5 (n0x1355-n0x1364)  + I lk\n\t0x00210b84, // n0x02e9 c0x0000 (---------------)  + I loan\n\t0x00210b85, // n0x02ea c0x0000 (---------------)  + I loans\n\t0x00376f06, // n0x02eb c0x0000 (---------------)  + I locker\n\t0x00336445, // n0x02ec c0x0000 (---------------)  + I locus\n\t0x002ccfc4, // n0x02ed c0x0000 (---------------)  + I loft\n\t0x002c21c3, // n0x02ee c0x0000 (---------------)  + I lol\n\t0x00321906, // n0x02ef c0x0000 (---------------)  + I london\n\t0x0021b685, // n0x02f0 c0x0000 (---------------)  + I lotte\n\t0x00222845, // n0x02f1 c0x0000 (---------------)  + I lotto\n\t0x00230204, // n0x02f2 c0x0000 (---------------)  + I love\n\t0x00207443, // n0x02f3 c0x0000 (---------------)  + I lpl\n\t0x0020744c, // n0x02f4 c0x0000 (---------------)  + I lplfinancial\n\t0x31a88142, // n0x02f5 c0x00c6 (n0x1364-n0x1369)  + I lr\n\t0x31e04e42, // n0x02f6 c0x00c7 (n0x1369-n0x136b)  + I ls\n\t0x32209e02, // n0x02f7 c0x00c8 (n0x136b-n0x136d)  + I lt\n\t0x00322cc3, // n0x02f8 c0x0000 (---------------)  + I ltd\n\t0x00322cc4, // n0x02f9 c0x0000 (---------------)  + I ltda\n\t0x32602f42, // n0x02fa c0x00c9 (n0x136d-n0x136e)  + I lu\n\t0x002fb348, // n0x02fb c0x0000 (---------------)  + I lundbeck\n\t0x002dd745, // n0x02fc c0x0000 (---------------)  + I lupin\n\t0x0023ca44, // n0x02fd c0x0000 (---------------)  + I luxe\n\t0x0023d206, // n0x02fe c0x0000 (---------------)  + I luxury\n\t0x32a05d02, // n0x02ff c0x00ca (n0x136e-n0x1377)  + I lv\n\t0x32e09082, // n0x0300 c0x00cb (n0x1377-n0x1380)  + I ly\n\t0x33200182, // n0x0301 c0x00cc (n0x1380-n0x1386)  + I ma\n\t0x00375105, // n0x0302 c0x0000 (---------------)  + I macys\n\t0x00317146, // n0x0303 c0x0000 (---------------)  + I madrid\n\t0x00271c44, // n0x0304 c0x0000 (---------------)  + I maif\n\t0x0022bdc6, // n0x0305 c0x0000 (---------------)  + I maison\n\t0x00248d06, // n0x0306 c0x0000 (---------------)  + I makeup\n\t0x002018c3, // n0x0307 c0x0000 (---------------)  + I man\n\t0x0036f20a, // n0x0308 c0x0000 (---------------)  + I management\n\t0x00242c05, // n0x0309 c0x0000 (---------------)  + I mango\n\t0x002f1386, // n0x030a c0x0000 (---------------)  + I market\n\t0x002f1389, // n0x030b c0x0000 (---------------)  + I marketing\n\t0x00331387, // n0x030c c0x0000 (---------------)  + I markets\n\t0x00366448, // n0x030d c0x0000 (---------------)  + I marriott\n\t0x0020f009, // n0x030e c0x0000 (---------------)  + I marshalls\n\t0x002be9c8, // n0x030f c0x0000 (---------------)  + I maserati\n\t0x0022f706, // n0x0310 c0x0000 (---------------)  + I mattel\n\t0x00209c03, // n0x0311 c0x0000 (---------------)  + I mba\n\t0x3362ac02, // n0x0312 c0x00cd (n0x1386-n0x1388)  + I mc\n\t0x0037cec3, // n0x0313 c0x0000 (---------------)  + I mcd\n\t0x0037cec9, // n0x0314 c0x0000 (---------------)  + I mcdonalds\n\t0x00327b88, // n0x0315 c0x0000 (---------------)  + I mckinsey\n\t0x33a4da82, // n0x0316 c0x00ce (n0x1388-n0x1389)  + I md\n\t0x33e03e82, // n0x0317 c0x00cf (n0x1389-n0x1396)  + I me\n\t0x00213ac3, // n0x0318 c0x0000 (---------------)  + I med\n\t0x003025c5, // n0x0319 c0x0000 (---------------)  + I media\n\t0x0026ad84, // n0x031a c0x0000 (---------------)  + I meet\n\t0x002e1809, // n0x031b c0x0000 (---------------)  + I melbourne\n\t0x002c4604, // n0x031c c0x0000 (---------------)  + I meme\n\t0x0026cf88, // n0x031d c0x0000 (---------------)  + I memorial\n\t0x00203e83, // n0x031e c0x0000 (---------------)  + I men\n\t0x002ede44, // n0x031f c0x0000 (---------------)  + I menu\n\t0x0022adc3, // n0x0320 c0x0000 (---------------)  + I meo\n\t0x0023e607, // n0x0321 c0x0000 (---------------)  + I metlife\n\t0x3420d802, // n0x0322 c0x00d0 (n0x1396-n0x139f)  + I mg\n\t0x0025aa42, // n0x0323 c0x0000 (---------------)  + I mh\n\t0x00231f45, // n0x0324 c0x0000 (---------------)  + I miami\n\t0x0026b149, // n0x0325 c0x0000 (---------------)  + I microsoft\n\t0x00209003, // n0x0326 c0x0000 (---------------)  + I mil\n\t0x0027d144, // n0x0327 c0x0000 (---------------)  + I mini\n\t0x003193c4, // n0x0328 c0x0000 (---------------)  + I mint\n\t0x00229ac3, // n0x0329 c0x0000 (---------------)  + I mit\n\t0x0027e0ca, // n0x032a c0x0000 (---------------)  + I mitsubishi\n\t0x34767142, // n0x032b c0x00d1 (n0x139f-n0x13a7)  + I mk\n\t0x34a10b42, // n0x032c c0x00d2 (n0x13a7-n0x13ae)  + I ml\n\t0x002c1243, // n0x032d c0x0000 (---------------)  + I mlb\n\t0x00369503, // n0x032e c0x0000 (---------------)  + I mls\n\t0x016070c2, // n0x032f c0x0005 (---------------)* o I mm\n\t0x00375603, // n0x0330 c0x0000 (---------------)  + I mma\n\t0x34e1fdc2, // n0x0331 c0x00d3 (n0x13ae-n0x13b2)  + I mn\n\t0x0021fdc4, // n0x0332 c0x0000 (---------------)  + I mnet\n\t0x35207102, // n0x0333 c0x00d4 (n0x13b2-n0x13b7)  + I mo\n\t0x35607104, // n0x0334 c0x00d5 (n0x13b7-n0x13b8)  + I mobi\n\t0x002e2606, // n0x0335 c0x0000 (---------------)  + I mobily\n\t0x0026c084, // n0x0336 c0x0000 (---------------)  + I moda\n\t0x002d7d03, // n0x0337 c0x0000 (---------------)  + I moe\n\t0x00282043, // n0x0338 c0x0000 (---------------)  + I moi\n\t0x002e3783, // n0x0339 c0x0000 (---------------)  + I mom\n\t0x00244dc6, // n0x033a c0x0000 (---------------)  + I monash\n\t0x002c6d85, // n0x033b c0x0000 (---------------)  + I money\n\t0x002c1e07, // n0x033c c0x0000 (---------------)  + I monster\n\t0x00258ec9, // n0x033d c0x0000 (---------------)  + I montblanc\n\t0x002c5285, // n0x033e c0x0000 (---------------)  + I mopar\n\t0x002c6cc6, // n0x033f c0x0000 (---------------)  + I mormon\n\t0x002c72c8, // n0x0340 c0x0000 (---------------)  + I mortgage\n\t0x002c74c6, // n0x0341 c0x0000 (---------------)  + I moscow\n\t0x00278644, // n0x0342 c0x0000 (---------------)  + I moto\n\t0x0029af0b, // n0x0343 c0x0000 (---------------)  + I motorcycles\n\t0x002c9083, // n0x0344 c0x0000 (---------------)  + I mov\n\t0x002c9085, // n0x0345 c0x0000 (---------------)  + I movie\n\t0x002c91c8, // n0x0346 c0x0000 (---------------)  + I movistar\n\t0x0022a482, // n0x0347 c0x0000 (---------------)  + I mp\n\t0x0033ad82, // n0x0348 c0x0000 (---------------)  + I mq\n\t0x35a4aa02, // n0x0349 c0x00d6 (n0x13b8-n0x13ba)  + I mr\n\t0x35e0f702, // n0x034a c0x00d7 (n0x13ba-n0x13bf)  + I ms\n\t0x0025d643, // n0x034b c0x0000 (---------------)  + I msd\n\t0x36204c02, // n0x034c c0x00d8 (n0x13bf-n0x13c3)  + I mt\n\t0x0026c8c3, // n0x034d c0x0000 (---------------)  + I mtn\n\t0x002c94c4, // n0x034e c0x0000 (---------------)  + I mtpc\n\t0x002c9d03, // n0x034f c0x0000 (---------------)  + I mtr\n\t0x36a03ac2, // n0x0350 c0x00da (n0x13c4-n0x13cb)  + I mu\n\t0x002cbb0b, // n0x0351 c0x0000 (---------------)  + I multichoice\n\t0x36ed0106, // n0x0352 c0x00db (n0x13cb-n0x15ef)  + I museum\n\t0x0023db46, // n0x0353 c0x0000 (---------------)  + I mutual\n\t0x002d0748, // n0x0354 c0x0000 (---------------)  + I mutuelle\n\t0x372b7382, // n0x0355 c0x00dc (n0x15ef-n0x15fd)  + I mv\n\t0x3760fc82, // n0x0356 c0x00dd (n0x15fd-n0x1608)  + I mw\n\t0x37a1bb02, // n0x0357 c0x00de (n0x1608-n0x160e)  + I mx\n\t0x37e26f02, // n0x0358 c0x00df (n0x160e-n0x1616)  + I my\n\t0x38214382, // n0x0359 c0x00e0 (n0x1616-n0x1617)* o I mz\n\t0x0021438b, // n0x035a c0x0000 (---------------)  + I mzansimagic\n\t0x38601402, // n0x035b c0x00e1 (n0x1617-n0x1628)  + I na\n\t0x00223703, // n0x035c c0x0000 (---------------)  + I nab\n\t0x002393c5, // n0x035d c0x0000 (---------------)  + I nadex\n\t0x0030f646, // n0x035e c0x0000 (---------------)  + I nagoya\n\t0x38a05284, // n0x035f c0x00e2 (n0x1628-n0x162a)  + I name\n\t0x0028cec7, // n0x0360 c0x0000 (---------------)  + I naspers\n\t0x00238e4a, // n0x0361 c0x0000 (---------------)  + I nationwide\n\t0x002ea486, // n0x0362 c0x0000 (---------------)  + I natura\n\t0x0039fb84, // n0x0363 c0x0000 (---------------)  + I navy\n\t0x0025d243, // n0x0364 c0x0000 (---------------)  + I nba\n\t0x39600642, // n0x0365 c0x00e5 (n0x162c-n0x162d)  + I nc\n\t0x00202c02, // n0x0366 c0x0000 (---------------)  + I ne\n\t0x00249b43, // n0x0367 c0x0000 (---------------)  + I nec\n\t0x39a1fe03, // n0x0368 c0x00e6 (n0x162d-n0x1663)  + I net\n\t0x003928c7, // n0x0369 c0x0000 (---------------)  + I netbank\n\t0x0025d947, // n0x036a c0x0000 (---------------)  + I netflix\n\t0x00255b87, // n0x036b c0x0000 (---------------)  + I network\n\t0x00228847, // n0x036c c0x0000 (---------------)  + I neustar\n\t0x00221dc3, // n0x036d c0x0000 (---------------)  + I new\n\t0x002f0d8a, // n0x036e c0x0000 (---------------)  + I newholland\n\t0x00221dc4, // n0x036f c0x0000 (---------------)  + I news\n\t0x0024d684, // n0x0370 c0x0000 (---------------)  + I next\n\t0x0024d68a, // n0x0371 c0x0000 (---------------)  + I nextdirect\n\t0x0026d605, // n0x0372 c0x0000 (---------------)  + I nexus\n\t0x3ae00542, // n0x0373 c0x00eb (n0x166b-n0x1675)  + I nf\n\t0x00251bc3, // n0x0374 c0x0000 (---------------)  + I nfl\n\t0x3b202802, // n0x0375 c0x00ec (n0x1675-n0x167f)  + I ng\n\t0x00202d03, // n0x0376 c0x0000 (---------------)  + I ngo\n\t0x0026da03, // n0x0377 c0x0000 (---------------)  + I nhk\n\t0x3ba03182, // n0x0378 c0x00ee (n0x1680-n0x168e)  o I ni\n\t0x002a6b04, // n0x0379 c0x0000 (---------------)  + I nico\n\t0x0021da84, // n0x037a c0x0000 (---------------)  + I nike\n\t0x00206b05, // n0x037b c0x0000 (---------------)  + I nikon\n\t0x002c8e05, // n0x037c c0x0000 (---------------)  + I ninja\n\t0x0022e906, // n0x037d c0x0000 (---------------)  + I nissan\n\t0x0022ec86, // n0x037e c0x0000 (---------------)  + I nissay\n\t0x3be47802, // n0x037f c0x00ef (n0x168e-n0x1691)  + I nl\n\t0x3c200c02, // n0x0380 c0x00f0 (n0x1691-n0x1967)  + I no\n\t0x00318785, // n0x0381 c0x0000 (---------------)  + I nokia\n\t0x0023d852, // n0x0382 c0x0000 (---------------)  + I northwesternmutual\n\t0x00366106, // n0x0383 c0x0000 (---------------)  + I norton\n\t0x00224d83, // n0x0384 c0x0000 (---------------)  + I now\n\t0x0029cec6, // n0x0385 c0x0000 (---------------)  + I nowruz\n\t0x00224d85, // n0x0386 c0x0000 (---------------)  + I nowtv\n\t0x01610502, // n0x0387 c0x0005 (---------------)* o I np\n\t0x4460d382, // n0x0388 c0x0111 (n0x198f-n0x1996)  + I nr\n\t0x002e23c3, // n0x0389 c0x0000 (---------------)  + I nra\n\t0x002b5e83, // n0x038a c0x0000 (---------------)  + I nrw\n\t0x00373b03, // n0x038b c0x0000 (---------------)  + I ntt\n\t0x44a017c2, // n0x038c c0x0112 (n0x1996-n0x1999)  + I nu\n\t0x0036ef83, // n0x038d c0x0000 (---------------)  + I nyc\n\t0x44e094c2, // n0x038e c0x0113 (n0x1999-n0x19a9)  + I nz\n\t0x00207143, // n0x038f c0x0000 (---------------)  + I obi\n\t0x002ddc88, // n0x0390 c0x0000 (---------------)  + I observer\n\t0x0020b283, // n0x0391 c0x0000 (---------------)  + I off\n\t0x00221686, // n0x0392 c0x0000 (---------------)  + I office\n\t0x00395b47, // n0x0393 c0x0000 (---------------)  + I okinawa\n\t0x0020a9c6, // n0x0394 c0x0000 (---------------)  + I olayan\n\t0x0020a9cb, // n0x0395 c0x0000 (---------------)  + I olayangroup\n\t0x0039fac7, // n0x0396 c0x0000 (---------------)  + I oldnavy\n\t0x00389204, // n0x0397 c0x0000 (---------------)  + I ollo\n\t0x456014c2, // n0x0398 c0x0115 (n0x19aa-n0x19b3)  + I om\n\t0x002dd5c5, // n0x0399 c0x0000 (---------------)  + I omega\n\t0x00214843, // n0x039a c0x0000 (---------------)  + I one\n\t0x002082c3, // n0x039b c0x0000 (---------------)  + I ong\n\t0x003175c3, // n0x039c c0x0000 (---------------)  + I onl\n\t0x003175c6, // n0x039d c0x0000 (---------------)  + I online\n\t0x003a008a, // n0x039e c0x0000 (---------------)  + I onyourside\n\t0x0028d703, // n0x039f c0x0000 (---------------)  + I ooo\n\t0x0023de44, // n0x03a0 c0x0000 (---------------)  + I open\n\t0x00224206, // n0x03a1 c0x0000 (---------------)  + I oracle\n\t0x00396286, // n0x03a2 c0x0000 (---------------)  + I orange\n\t0x45a2d1c3, // n0x03a3 c0x0116 (n0x19b3-n0x19f0)  + I org\n\t0x002ae487, // n0x03a4 c0x0000 (---------------)  + I organic\n\t0x002db3cd, // n0x03a5 c0x0000 (---------------)  + I orientexpress\n\t0x00383487, // n0x03a6 c0x0000 (---------------)  + I origins\n\t0x0029ac45, // n0x03a7 c0x0000 (---------------)  + I osaka\n\t0x00269e06, // n0x03a8 c0x0000 (---------------)  + I otsuka\n\t0x0021b6c3, // n0x03a9 c0x0000 (---------------)  + I ott\n\t0x0020da83, // n0x03aa c0x0000 (---------------)  + I ovh\n\t0x4720ac42, // n0x03ab c0x011c (n0x1a2d-n0x1a38)  + I pa\n\t0x002eaf04, // n0x03ac c0x0000 (---------------)  + I page\n\t0x0024c94c, // n0x03ad c0x0000 (---------------)  + I pamperedchef\n\t0x002646c9, // n0x03ae c0x0000 (---------------)  + I panasonic\n\t0x00338507, // n0x03af c0x0000 (---------------)  + I panerai\n\t0x00277905, // n0x03b0 c0x0000 (---------------)  + I paris\n\t0x002994c4, // n0x03b1 c0x0000 (---------------)  + I pars\n\t0x002a5308, // n0x03b2 c0x0000 (---------------)  + I partners\n\t0x002ad245, // n0x03b3 c0x0000 (---------------)  + I parts\n\t0x002b4c45, // n0x03b4 c0x0000 (---------------)  + I party\n\t0x002cc549, // n0x03b5 c0x0000 (---------------)  + I passagens\n\t0x002bc0c3, // n0x03b6 c0x0000 (---------------)  + I pay\n\t0x002bc0c4, // n0x03b7 c0x0000 (---------------)  + I payu\n\t0x002c9544, // n0x03b8 c0x0000 (---------------)  + I pccw\n\t0x47607782, // n0x03b9 c0x011d (n0x1a38-n0x1a40)  + I pe\n\t0x00207783, // n0x03ba c0x0000 (---------------)  + I pet\n\t0x47af7d02, // n0x03bb c0x011e (n0x1a40-n0x1a43)  + I pf\n\t0x002f7d06, // n0x03bc c0x0000 (---------------)  + I pfizer\n\t0x016495c2, // n0x03bd c0x0005 (---------------)* o I pg\n\t0x47e00d42, // n0x03be c0x011f (n0x1a43-n0x1a4b)  + I ph\n\t0x00375008, // n0x03bf c0x0000 (---------------)  + I pharmacy\n\t0x002d39c7, // n0x03c0 c0x0000 (---------------)  + I philips\n\t0x00299085, // n0x03c1 c0x0000 (---------------)  + I photo\n\t0x002d404b, // n0x03c2 c0x0000 (---------------)  + I photography\n\t0x002d11c6, // n0x03c3 c0x0000 (---------------)  + I photos\n\t0x002d4246, // n0x03c4 c0x0000 (---------------)  + I physio\n\t0x002d43c6, // n0x03c5 c0x0000 (---------------)  + I piaget\n\t0x00225704, // n0x03c6 c0x0000 (---------------)  + I pics\n\t0x002d4b46, // n0x03c7 c0x0000 (---------------)  + I pictet\n\t0x002d5008, // n0x03c8 c0x0000 (---------------)  + I pictures\n\t0x00241b83, // n0x03c9 c0x0000 (---------------)  + I pid\n\t0x002699c3, // n0x03ca c0x0000 (---------------)  + I pin\n\t0x002699c4, // n0x03cb c0x0000 (---------------)  + I ping\n\t0x002d6d84, // n0x03cc c0x0000 (---------------)  + I pink\n\t0x002d7107, // n0x03cd c0x0000 (---------------)  + I pioneer\n\t0x002d85c5, // n0x03ce c0x0000 (---------------)  + I pizza\n\t0x482d8702, // n0x03cf c0x0120 (n0x1a4b-n0x1a59)  + I pk\n\t0x486063c2, // n0x03d0 c0x0121 (n0x1a59-n0x1afe)  + I pl\n\t0x002063c5, // n0x03d1 c0x0000 (---------------)  + I place\n\t0x0029e944, // n0x03d2 c0x0000 (---------------)  + I play\n\t0x002dad4b, // n0x03d3 c0x0000 (---------------)  + I playstation\n\t0x002dc348, // n0x03d4 c0x0000 (---------------)  + I plumbing\n\t0x002dcac4, // n0x03d5 c0x0000 (---------------)  + I plus\n\t0x0020d7c2, // n0x03d6 c0x0000 (---------------)  + I pm\n\t0x48e493c2, // n0x03d7 c0x0123 (n0x1b2d-n0x1b32)  + I pn\n\t0x002aee03, // n0x03d8 c0x0000 (---------------)  + I pnc\n\t0x002dcf04, // n0x03d9 c0x0000 (---------------)  + I pohl\n\t0x002dd005, // n0x03da c0x0000 (---------------)  + I poker\n\t0x002de547, // n0x03db c0x0000 (---------------)  + I politie\n\t0x002e0104, // n0x03dc c0x0000 (---------------)  + I porn\n\t0x0035fe04, // n0x03dd c0x0000 (---------------)  + I post\n\t0x49204602, // n0x03de c0x0124 (n0x1b32-n0x1b3f)  + I pr\n\t0x003598c9, // n0x03df c0x0000 (---------------)  + I pramerica\n\t0x002e0b05, // n0x03e0 c0x0000 (---------------)  + I praxi\n\t0x00247505, // n0x03e1 c0x0000 (---------------)  + I press\n\t0x002e1745, // n0x03e2 c0x0000 (---------------)  + I prime\n\t0x49620e43, // n0x03e3 c0x0125 (n0x1b3f-n0x1b4a)  + I pro\n\t0x002e2044, // n0x03e4 c0x0000 (---------------)  + I prod\n\t0x002e204b, // n0x03e5 c0x0000 (---------------)  + I productions\n\t0x002e2484, // n0x03e6 c0x0000 (---------------)  + I prof\n\t0x002e278b, // n0x03e7 c0x0000 (---------------)  + I progressive\n\t0x002e36c5, // n0x03e8 c0x0000 (---------------)  + I promo\n\t0x00220e4a, // n0x03e9 c0x0000 (---------------)  + I properties\n\t0x002e3e48, // n0x03ea c0x0000 (---------------)  + I property\n\t0x002e404a, // n0x03eb c0x0000 (---------------)  + I protection\n\t0x002e42c3, // n0x03ec c0x0000 (---------------)  + I pru\n\t0x002e42ca, // n0x03ed c0x0000 (---------------)  + I prudential\n\t0x49a09342, // n0x03ee c0x0126 (n0x1b4a-n0x1b51)  + I ps\n\t0x49e8c9c2, // n0x03ef c0x0127 (n0x1b51-n0x1b5a)  + I pt\n\t0x00297403, // n0x03f0 c0x0000 (---------------)  + I pub\n\t0x4a2e5942, // n0x03f1 c0x0128 (n0x1b5a-n0x1b60)  + I pw\n\t0x002e5943, // n0x03f2 c0x0000 (---------------)  + I pwc\n\t0x4a734802, // n0x03f3 c0x0129 (n0x1b60-n0x1b67)  + I py\n\t0x4ab14682, // n0x03f4 c0x012a (n0x1b67-n0x1b70)  + I qa\n\t0x002e6444, // n0x03f5 c0x0000 (---------------)  + I qpon\n\t0x0021b906, // n0x03f6 c0x0000 (---------------)  + I quebec\n\t0x0022bb05, // n0x03f7 c0x0000 (---------------)  + I quest\n\t0x002e6ac3, // n0x03f8 c0x0000 (---------------)  + I qvc\n\t0x00355bc6, // n0x03f9 c0x0000 (---------------)  + I racing\n\t0x00351c84, // n0x03fa c0x0000 (---------------)  + I raid\n\t0x4ae07002, // n0x03fb c0x012b (n0x1b70-n0x1b74)  + I re\n\t0x002d3404, // n0x03fc c0x0000 (---------------)  + I read\n\t0x002c238a, // n0x03fd c0x0000 (---------------)  + I realestate\n\t0x00338907, // n0x03fe c0x0000 (---------------)  + I realtor\n\t0x0031fc86, // n0x03ff c0x0000 (---------------)  + I realty\n\t0x0031c747, // n0x0400 c0x0000 (---------------)  + I recipes\n\t0x00244803, // n0x0401 c0x0000 (---------------)  + I red\n\t0x003a2b48, // n0x0402 c0x0000 (---------------)  + I redstone\n\t0x00337f4b, // n0x0403 c0x0000 (---------------)  + I redumbrella\n\t0x002c9b05, // n0x0404 c0x0000 (---------------)  + I rehab\n\t0x0033a0c5, // n0x0405 c0x0000 (---------------)  + I reise\n\t0x0033a0c6, // n0x0406 c0x0000 (---------------)  + I reisen\n\t0x002b75c4, // n0x0407 c0x0000 (---------------)  + I reit\n\t0x00327f48, // n0x0408 c0x0000 (---------------)  + I reliance\n\t0x00209ec3, // n0x0409 c0x0000 (---------------)  + I ren\n\t0x0020bd84, // n0x040a c0x0000 (---------------)  + I rent\n\t0x0020bd87, // n0x040b c0x0000 (---------------)  + I rentals\n\t0x0022b7c6, // n0x040c c0x0000 (---------------)  + I repair\n\t0x00309586, // n0x040d c0x0000 (---------------)  + I report\n\t0x0029f6ca, // n0x040e c0x0000 (---------------)  + I republican\n\t0x0024d544, // n0x040f c0x0000 (---------------)  + I rest\n\t0x0037adca, // n0x0410 c0x0000 (---------------)  + I restaurant\n\t0x002eaac6, // n0x0411 c0x0000 (---------------)  + I review\n\t0x002eaac7, // n0x0412 c0x0000 (---------------)  + I reviews\n\t0x00257607, // n0x0413 c0x0000 (---------------)  + I rexroth\n\t0x00273a04, // n0x0414 c0x0000 (---------------)  + I rich\n\t0x00273a09, // n0x0415 c0x0000 (---------------)  + I richardli\n\t0x002b6f85, // n0x0416 c0x0000 (---------------)  + I ricoh\n\t0x0034618b, // n0x0417 c0x0000 (---------------)  + I rightathome\n\t0x00257f83, // n0x0418 c0x0000 (---------------)  + I ril\n\t0x00200a83, // n0x0419 c0x0000 (---------------)  + I rio\n\t0x0022fd43, // n0x041a c0x0000 (---------------)  + I rip\n\t0x002684c4, // n0x041b c0x0000 (---------------)  + I rmit\n\t0x4b202202, // n0x041c c0x012c (n0x1b74-n0x1b80)  + I ro\n\t0x00289806, // n0x041d c0x0000 (---------------)  + I rocher\n\t0x002a10c5, // n0x041e c0x0000 (---------------)  + I rocks\n\t0x002d2f85, // n0x041f c0x0000 (---------------)  + I rodeo\n\t0x0039c1c6, // n0x0420 c0x0000 (---------------)  + I rogers\n\t0x0037ed04, // n0x0421 c0x0000 (---------------)  + I room\n\t0x4b609702, // n0x0422 c0x012d (n0x1b80-n0x1b87)  + I rs\n\t0x0039c2c4, // n0x0423 c0x0000 (---------------)  + I rsvp\n\t0x4ba11302, // n0x0424 c0x012e (n0x1b87-n0x1c0a)  + I ru\n\t0x00236144, // n0x0425 c0x0000 (---------------)  + I ruhr\n\t0x00222b43, // n0x0426 c0x0000 (---------------)  + I run\n\t0x4beb5ec2, // n0x0427 c0x012f (n0x1c0a-n0x1c13)  + I rw\n\t0x003274c3, // n0x0428 c0x0000 (---------------)  + I rwe\n\t0x0036acc6, // n0x0429 c0x0000 (---------------)  + I ryukyu\n\t0x4c2004c2, // n0x042a c0x0130 (n0x1c13-n0x1c1b)  + I sa\n\t0x0030c348, // n0x042b c0x0000 (---------------)  + I saarland\n\t0x00215944, // n0x042c c0x0000 (---------------)  + I safe\n\t0x00215946, // n0x042d c0x0000 (---------------)  + I safety\n\t0x00307fc6, // n0x042e c0x0000 (---------------)  + I sakura\n\t0x00259844, // n0x042f c0x0000 (---------------)  + I sale\n\t0x00321885, // n0x0430 c0x0000 (---------------)  + I salon\n\t0x00398bc8, // n0x0431 c0x0000 (---------------)  + I samsclub\n\t0x0039edc7, // n0x0432 c0x0000 (---------------)  + I samsung\n\t0x003a0747, // n0x0433 c0x0000 (---------------)  + I sandvik\n\t0x003a074f, // n0x0434 c0x0000 (---------------)  + I sandvikcoromant\n\t0x00294646, // n0x0435 c0x0000 (---------------)  + I sanofi\n\t0x00219dc3, // n0x0436 c0x0000 (---------------)  + I sap\n\t0x00219dc4, // n0x0437 c0x0000 (---------------)  + I sapo\n\t0x0022b604, // n0x0438 c0x0000 (---------------)  + I sarl\n\t0x00228143, // n0x0439 c0x0000 (---------------)  + I sas\n\t0x00222244, // n0x043a c0x0000 (---------------)  + I save\n\t0x00235144, // n0x043b c0x0000 (---------------)  + I saxo\n\t0x4c62d142, // n0x043c c0x0131 (n0x1c1b-n0x1c20)  + I sb\n\t0x00288e03, // n0x043d c0x0000 (---------------)  + I sbi\n\t0x00237503, // n0x043e c0x0000 (---------------)  + I sbs\n\t0x4ca00702, // n0x043f c0x0132 (n0x1c20-n0x1c25)  + I sc\n\t0x00236a03, // n0x0440 c0x0000 (---------------)  + I sca\n\t0x002ee403, // n0x0441 c0x0000 (---------------)  + I scb\n\t0x0021744a, // n0x0442 c0x0000 (---------------)  + I schaeffler\n\t0x002e5d47, // n0x0443 c0x0000 (---------------)  + I schmidt\n\t0x0023ce0c, // n0x0444 c0x0000 (---------------)  + I scholarships\n\t0x0023d0c6, // n0x0445 c0x0000 (---------------)  + I school\n\t0x00241286, // n0x0446 c0x0000 (---------------)  + I schule\n\t0x00242547, // n0x0447 c0x0000 (---------------)  + I schwarz\n\t0x002358c7, // n0x0448 c0x0000 (---------------)  + I science\n\t0x00246cc9, // n0x0449 c0x0000 (---------------)  + I scjohnson\n\t0x0021c544, // n0x044a c0x0000 (---------------)  + I scor\n\t0x00200704, // n0x044b c0x0000 (---------------)  + I scot\n\t0x4ce496c2, // n0x044c c0x0133 (n0x1c25-n0x1c2d)  + I sd\n\t0x4d2046c2, // n0x044d c0x0134 (n0x1c2d-n0x1c56)  + I se\n\t0x00316b84, // n0x044e c0x0000 (---------------)  + I seat\n\t0x0031c646, // n0x044f c0x0000 (---------------)  + I secure\n\t0x00235d48, // n0x0450 c0x0000 (---------------)  + I security\n\t0x0027a144, // n0x0451 c0x0000 (---------------)  + I seek\n\t0x0025b346, // n0x0452 c0x0000 (---------------)  + I select\n\t0x002cb485, // n0x0453 c0x0000 (---------------)  + I sener\n\t0x00206808, // n0x0454 c0x0000 (---------------)  + I services\n\t0x002046c3, // n0x0455 c0x0000 (---------------)  + I ses\n\t0x00251f05, // n0x0456 c0x0000 (---------------)  + I seven\n\t0x00253b43, // n0x0457 c0x0000 (---------------)  + I sew\n\t0x00247603, // n0x0458 c0x0000 (---------------)  + I sex\n\t0x00247604, // n0x0459 c0x0000 (---------------)  + I sexy\n\t0x00256a83, // n0x045a c0x0000 (---------------)  + I sfr\n\t0x4d66d702, // n0x045b c0x0135 (n0x1c56-n0x1c5d)  + I sg\n\t0x4da01342, // n0x045c c0x0136 (n0x1c5d-n0x1c64)  + I sh\n\t0x00257e49, // n0x045d c0x0000 (---------------)  + I shangrila\n\t0x0025b885, // n0x045e c0x0000 (---------------)  + I sharp\n\t0x0025cb44, // n0x045f c0x0000 (---------------)  + I shaw\n\t0x0025fd45, // n0x0460 c0x0000 (---------------)  + I shell\n\t0x00211884, // n0x0461 c0x0000 (---------------)  + I shia\n\t0x002fea47, // n0x0462 c0x0000 (---------------)  + I shiksha\n\t0x003896c5, // n0x0463 c0x0000 (---------------)  + I shoes\n\t0x002be486, // n0x0464 c0x0000 (---------------)  + I shouji\n\t0x002c4484, // n0x0465 c0x0000 (---------------)  + I show\n\t0x002c4488, // n0x0466 c0x0000 (---------------)  + I showtime\n\t0x002c8307, // n0x0467 c0x0000 (---------------)  + I shriram\n\t0x4de0a402, // n0x0468 c0x0137 (n0x1c64-n0x1c65)  + I si\n\t0x00341f84, // n0x0469 c0x0000 (---------------)  + I silk\n\t0x002f7b84, // n0x046a c0x0000 (---------------)  + I sina\n\t0x00285cc7, // n0x046b c0x0000 (---------------)  + I singles\n\t0x002810c4, // n0x046c c0x0000 (---------------)  + I site\n\t0x0022eb82, // n0x046d c0x0000 (---------------)  + I sj\n\t0x4e207842, // n0x046e c0x0138 (n0x1c65-n0x1c66)  + I sk\n\t0x00209743, // n0x046f c0x0000 (---------------)  + I ski\n\t0x002e76c4, // n0x0470 c0x0000 (---------------)  + I skin\n\t0x002368c3, // n0x0471 c0x0000 (---------------)  + I sky\n\t0x002368c5, // n0x0472 c0x0000 (---------------)  + I skype\n\t0x4e624b82, // n0x0473 c0x0139 (n0x1c66-n0x1c6b)  + I sl\n\t0x00375205, // n0x0474 c0x0000 (---------------)  + I sling\n\t0x0024cdc2, // n0x0475 c0x0000 (---------------)  + I sm\n\t0x00368185, // n0x0476 c0x0000 (---------------)  + I smart\n\t0x0035e3c5, // n0x0477 c0x0000 (---------------)  + I smile\n\t0x4ea14182, // n0x0478 c0x013a (n0x1c6b-n0x1c73)  + I sn\n\t0x00214184, // n0x0479 c0x0000 (---------------)  + I sncf\n\t0x4ee05682, // n0x047a c0x013b (n0x1c73-n0x1c76)  + I so\n\t0x00325706, // n0x047b c0x0000 (---------------)  + I soccer\n\t0x002a3986, // n0x047c c0x0000 (---------------)  + I social\n\t0x0026b288, // n0x047d c0x0000 (---------------)  + I softbank\n\t0x002b8688, // n0x047e c0x0000 (---------------)  + I software\n\t0x002f9444, // n0x047f c0x0000 (---------------)  + I sohu\n\t0x00359f05, // n0x0480 c0x0000 (---------------)  + I solar\n\t0x00359d09, // n0x0481 c0x0000 (---------------)  + I solutions\n\t0x00356144, // n0x0482 c0x0000 (---------------)  + I song\n\t0x003a0044, // n0x0483 c0x0000 (---------------)  + I sony\n\t0x002bd0c3, // n0x0484 c0x0000 (---------------)  + I soy\n\t0x0020bb45, // n0x0485 c0x0000 (---------------)  + I space\n\t0x00371ac7, // n0x0486 c0x0000 (---------------)  + I spiegel\n\t0x00209384, // n0x0487 c0x0000 (---------------)  + I spot\n\t0x00332e4d, // n0x0488 c0x0000 (---------------)  + I spreadbetting\n\t0x0033b802, // n0x0489 c0x0000 (---------------)  + I sr\n\t0x0033b803, // n0x048a c0x0000 (---------------)  + I srl\n\t0x0035a503, // n0x048b c0x0000 (---------------)  + I srt\n\t0x4f202742, // n0x048c c0x013c (n0x1c76-n0x1c82)  + I st\n\t0x00380745, // n0x048d c0x0000 (---------------)  + I stada\n\t0x002320c7, // n0x048e c0x0000 (---------------)  + I staples\n\t0x00228904, // n0x048f c0x0000 (---------------)  + I star\n\t0x00228907, // n0x0490 c0x0000 (---------------)  + I starhub\n\t0x0020f209, // n0x0491 c0x0000 (---------------)  + I statebank\n\t0x002c24c9, // n0x0492 c0x0000 (---------------)  + I statefarm\n\t0x003a0dc7, // n0x0493 c0x0000 (---------------)  + I statoil\n\t0x00277743, // n0x0494 c0x0000 (---------------)  + I stc\n\t0x00277748, // n0x0495 c0x0000 (---------------)  + I stcgroup\n\t0x002a8009, // n0x0496 c0x0000 (---------------)  + I stockholm\n\t0x00364547, // n0x0497 c0x0000 (---------------)  + I storage\n\t0x00391185, // n0x0498 c0x0000 (---------------)  + I store\n\t0x002e74c6, // n0x0499 c0x0000 (---------------)  + I stream\n\t0x002e7906, // n0x049a c0x0000 (---------------)  + I studio\n\t0x002e7a85, // n0x049b c0x0000 (---------------)  + I study\n\t0x00253dc5, // n0x049c c0x0000 (---------------)  + I style\n\t0x4f6023c2, // n0x049d c0x013d (n0x1c82-n0x1ca2)  + I su\n\t0x00332385, // n0x049e c0x0000 (---------------)  + I sucks\n\t0x002ba24a, // n0x049f c0x0000 (---------------)  + I supersport\n\t0x002be2c8, // n0x04a0 c0x0000 (---------------)  + I supplies\n\t0x002a7806, // n0x04a1 c0x0000 (---------------)  + I supply\n\t0x002e3907, // n0x04a2 c0x0000 (---------------)  + I support\n\t0x0024c144, // n0x04a3 c0x0000 (---------------)  + I surf\n\t0x002a9e07, // n0x04a4 c0x0000 (---------------)  + I surgery\n\t0x002eef06, // n0x04a5 c0x0000 (---------------)  + I suzuki\n\t0x4fa35f42, // n0x04a6 c0x013e (n0x1ca2-n0x1ca7)  + I sv\n\t0x00376c06, // n0x04a7 c0x0000 (---------------)  + I swatch\n\t0x002f15ca, // n0x04a8 c0x0000 (---------------)  + I swiftcover\n\t0x002f1f85, // n0x04a9 c0x0000 (---------------)  + I swiss\n\t0x4fef2802, // n0x04aa c0x013f (n0x1ca7-n0x1ca8)  + I sx\n\t0x50289a02, // n0x04ab c0x0140 (n0x1ca8-n0x1cae)  + I sy\n\t0x00329bc6, // n0x04ac c0x0000 (---------------)  + I sydney\n\t0x002d5f48, // n0x04ad c0x0000 (---------------)  + I symantec\n\t0x00394e07, // n0x04ae c0x0000 (---------------)  + I systems\n\t0x5060b982, // n0x04af c0x0141 (n0x1cae-n0x1cb1)  + I sz\n\t0x00210d43, // n0x04b0 c0x0000 (---------------)  + I tab\n\t0x003a6506, // n0x04b1 c0x0000 (---------------)  + I taipei\n\t0x0021eb04, // n0x04b2 c0x0000 (---------------)  + I talk\n\t0x00395a06, // n0x04b3 c0x0000 (---------------)  + I taobao\n\t0x00357846, // n0x04b4 c0x0000 (---------------)  + I target\n\t0x00322a0a, // n0x04b5 c0x0000 (---------------)  + I tatamotors\n\t0x0036cc45, // n0x04b6 c0x0000 (---------------)  + I tatar\n\t0x00219906, // n0x04b7 c0x0000 (---------------)  + I tattoo\n\t0x002203c3, // n0x04b8 c0x0000 (---------------)  + I tax\n\t0x002203c4, // n0x04b9 c0x0000 (---------------)  + I taxi\n\t0x00204442, // n0x04ba c0x0000 (---------------)  + I tc\n\t0x0025edc3, // n0x04bb c0x0000 (---------------)  + I tci\n\t0x50a0b182, // n0x04bc c0x0142 (n0x1cb1-n0x1cb2)  + I td\n\t0x002c9683, // n0x04bd c0x0000 (---------------)  + I tdk\n\t0x00367504, // n0x04be c0x0000 (---------------)  + I team\n\t0x002d59c4, // n0x04bf c0x0000 (---------------)  + I tech\n\t0x002d608a, // n0x04c0 c0x0000 (---------------)  + I technology\n\t0x0022f7c3, // n0x04c1 c0x0000 (---------------)  + I tel\n\t0x00286648, // n0x04c2 c0x0000 (---------------)  + I telecity\n\t0x0030ec4a, // n0x04c3 c0x0000 (---------------)  + I telefonica\n\t0x0023fa07, // n0x04c4 c0x0000 (---------------)  + I temasek\n\t0x002f4806, // n0x04c5 c0x0000 (---------------)  + I tennis\n\t0x0032ce44, // n0x04c6 c0x0000 (---------------)  + I teva\n\t0x0025d9c2, // n0x04c7 c0x0000 (---------------)  + I tf\n\t0x00204c42, // n0x04c8 c0x0000 (---------------)  + I tg\n\t0x50e06342, // n0x04c9 c0x0143 (n0x1cb2-n0x1cb9)  + I th\n\t0x0024b183, // n0x04ca c0x0000 (---------------)  + I thd\n\t0x002573c7, // n0x04cb c0x0000 (---------------)  + I theater\n\t0x00355e87, // n0x04cc c0x0000 (---------------)  + I theatre\n\t0x003504cb, // n0x04cd c0x0000 (---------------)  + I theguardian\n\t0x0034d4c4, // n0x04ce c0x0000 (---------------)  + I tiaa\n\t0x002f6847, // n0x04cf c0x0000 (---------------)  + I tickets\n\t0x002de646, // n0x04d0 c0x0000 (---------------)  + I tienda\n\t0x00215707, // n0x04d1 c0x0000 (---------------)  + I tiffany\n\t0x002e5c84, // n0x04d2 c0x0000 (---------------)  + I tips\n\t0x0033d385, // n0x04d3 c0x0000 (---------------)  + I tires\n\t0x002b7905, // n0x04d4 c0x0000 (---------------)  + I tirol\n\t0x51226782, // n0x04d5 c0x0144 (n0x1cb9-n0x1cc8)  + I tj\n\t0x00230886, // n0x04d6 c0x0000 (---------------)  + I tjmaxx\n\t0x0036f443, // n0x04d7 c0x0000 (---------------)  + I tjx\n\t0x0022ad02, // n0x04d8 c0x0000 (---------------)  + I tk\n\t0x00231686, // n0x04d9 c0x0000 (---------------)  + I tkmaxx\n\t0x516007c2, // n0x04da c0x0145 (n0x1cc8-n0x1cc9)  + I tl\n\t0x51a00142, // n0x04db c0x0146 (n0x1cc9-n0x1cd1)  + I tm\n\t0x00200145, // n0x04dc c0x0000 (---------------)  + I tmall\n\t0x51e4f882, // n0x04dd c0x0147 (n0x1cd1-n0x1ce5)  + I tn\n\t0x52208082, // n0x04de c0x0148 (n0x1ce5-n0x1ceb)  + I to\n\t0x00265905, // n0x04df c0x0000 (---------------)  + I today\n\t0x00341c05, // n0x04e0 c0x0000 (---------------)  + I tokyo\n\t0x002199c5, // n0x04e1 c0x0000 (---------------)  + I tools\n\t0x00208083, // n0x04e2 c0x0000 (---------------)  + I top\n\t0x00376345, // n0x04e3 c0x0000 (---------------)  + I toray\n\t0x002d1287, // n0x04e4 c0x0000 (---------------)  + I toshiba\n\t0x0025b605, // n0x04e5 c0x0000 (---------------)  + I total\n\t0x002fd7c5, // n0x04e6 c0x0000 (---------------)  + I tours\n\t0x002dc244, // n0x04e7 c0x0000 (---------------)  + I town\n\t0x0025bb86, // n0x04e8 c0x0000 (---------------)  + I toyota\n\t0x0026dac4, // n0x04e9 c0x0000 (---------------)  + I toys\n\t0x52603002, // n0x04ea c0x0149 (n0x1ceb-n0x1d00)  + I tr\n\t0x002673c5, // n0x04eb c0x0000 (---------------)  + I trade\n\t0x002a4607, // n0x04ec c0x0000 (---------------)  + I trading\n\t0x0022a6c8, // n0x04ed c0x0000 (---------------)  + I training\n\t0x0029bec6, // n0x04ee c0x0000 (---------------)  + I travel\n\t0x0029becd, // n0x04ef c0x0000 (---------------)  + I travelchannel\n\t0x002a1a89, // n0x04f0 c0x0000 (---------------)  + I travelers\n\t0x002a1a92, // n0x04f1 c0x0000 (---------------)  + I travelersinsurance\n\t0x00329245, // n0x04f2 c0x0000 (---------------)  + I trust\n\t0x0033f2c3, // n0x04f3 c0x0000 (---------------)  + I trv\n\t0x5320e842, // n0x04f4 c0x014c (n0x1d02-n0x1d13)  + I tt\n\t0x002e48c4, // n0x04f5 c0x0000 (---------------)  + I tube\n\t0x002f89c3, // n0x04f6 c0x0000 (---------------)  + I tui\n\t0x0035d745, // n0x04f7 c0x0000 (---------------)  + I tunes\n\t0x002f2e45, // n0x04f8 c0x0000 (---------------)  + I tushu\n\t0x53624e42, // n0x04f9 c0x014d (n0x1d13-n0x1d17)  + I tv\n\t0x003644c3, // n0x04fa c0x0000 (---------------)  + I tvs\n\t0x53a4e502, // n0x04fb c0x014e (n0x1d17-n0x1d25)  + I tw\n\t0x53e1fe82, // n0x04fc c0x014f (n0x1d25-n0x1d31)  + I tz\n\t0x54220502, // n0x04fd c0x0150 (n0x1d31-n0x1d80)  + I ua\n\t0x0033bbc5, // n0x04fe c0x0000 (---------------)  + I ubank\n\t0x0024a4c3, // n0x04ff c0x0000 (---------------)  + I ubs\n\t0x00249a48, // n0x0500 c0x0000 (---------------)  + I uconnect\n\t0x54601cc2, // n0x0501 c0x0151 (n0x1d80-n0x1d89)  + I ug\n\t0x54a00f82, // n0x0502 c0x0152 (n0x1d89-n0x1d94)  + I uk\n\t0x002a6ac6, // n0x0503 c0x0000 (---------------)  + I unicom\n\t0x00320a0a, // n0x0504 c0x0000 (---------------)  + I university\n\t0x0020d503, // n0x0505 c0x0000 (---------------)  + I uno\n\t0x00259d43, // n0x0506 c0x0000 (---------------)  + I uol\n\t0x002d5243, // n0x0507 c0x0000 (---------------)  + I ups\n\t0x55602382, // n0x0508 c0x0155 (n0x1d96-n0x1dd5)  + I us\n\t0x63a01802, // n0x0509 c0x018e (n0x1e78-n0x1e7e)  + I uy\n\t0x64211342, // n0x050a c0x0190 (n0x1e7f-n0x1e83)  + I uz\n\t0x002000c2, // n0x050b c0x0000 (---------------)  + I va\n\t0x00376a09, // n0x050c c0x0000 (---------------)  + I vacations\n\t0x002bc5c4, // n0x050d c0x0000 (---------------)  + I vana\n\t0x00344588, // n0x050e c0x0000 (---------------)  + I vanguard\n\t0x646e6b02, // n0x050f c0x0191 (n0x1e83-n0x1e89)  + I vc\n\t0x64a02b82, // n0x0510 c0x0192 (n0x1e89-n0x1e9a)  + I ve\n\t0x00230285, // n0x0511 c0x0000 (---------------)  + I vegas\n\t0x0023b808, // n0x0512 c0x0000 (---------------)  + I ventures\n\t0x002f1788, // n0x0513 c0x0000 (---------------)  + I verisign\n\t0x0039440c, // n0x0514 c0x0000 (---------------)  + I versicherung\n\t0x0023f943, // n0x0515 c0x0000 (---------------)  + I vet\n\t0x0023fd02, // n0x0516 c0x0000 (---------------)  + I vg\n\t0x64e05d42, // n0x0517 c0x0193 (n0x1e9a-n0x1e9f)  + I vi\n\t0x002c5706, // n0x0518 c0x0000 (---------------)  + I viajes\n\t0x002f5685, // n0x0519 c0x0000 (---------------)  + I video\n\t0x0031a003, // n0x051a c0x0000 (---------------)  + I vig\n\t0x00311a06, // n0x051b c0x0000 (---------------)  + I viking\n\t0x002f57c6, // n0x051c c0x0000 (---------------)  + I villas\n\t0x00241543, // n0x051d c0x0000 (---------------)  + I vin\n\t0x002f7ac3, // n0x051e c0x0000 (---------------)  + I vip\n\t0x002f7e86, // n0x051f c0x0000 (---------------)  + I virgin\n\t0x002f8404, // n0x0520 c0x0000 (---------------)  + I visa\n\t0x002b48c6, // n0x0521 c0x0000 (---------------)  + I vision\n\t0x002c9245, // n0x0522 c0x0000 (---------------)  + I vista\n\t0x002f878a, // n0x0523 c0x0000 (---------------)  + I vistaprint\n\t0x00240444, // n0x0524 c0x0000 (---------------)  + I viva\n\t0x002f97c4, // n0x0525 c0x0000 (---------------)  + I vivo\n\t0x0034710a, // n0x0526 c0x0000 (---------------)  + I vlaanderen\n\t0x65203442, // n0x0527 c0x0194 (n0x1e9f-n0x1eac)  + I vn\n\t0x002760c5, // n0x0528 c0x0000 (---------------)  + I vodka\n\t0x002fbd0a, // n0x0529 c0x0000 (---------------)  + I volkswagen\n\t0x002fc945, // n0x052a c0x0000 (---------------)  + I volvo\n\t0x002fd4c4, // n0x052b c0x0000 (---------------)  + I vote\n\t0x002fd5c6, // n0x052c c0x0000 (---------------)  + I voting\n\t0x002fd744, // n0x052d c0x0000 (---------------)  + I voto\n\t0x00231006, // n0x052e c0x0000 (---------------)  + I voyage\n\t0x65672082, // n0x052f c0x0195 (n0x1eac-n0x1eb0)  + I vu\n\t0x0031f5c6, // n0x0530 c0x0000 (---------------)  + I vuelos\n\t0x00320685, // n0x0531 c0x0000 (---------------)  + I wales\n\t0x002010c7, // n0x0532 c0x0000 (---------------)  + I walmart\n\t0x00293986, // n0x0533 c0x0000 (---------------)  + I walter\n\t0x00242744, // n0x0534 c0x0000 (---------------)  + I wang\n\t0x0033d6c7, // n0x0535 c0x0000 (---------------)  + I wanggou\n\t0x0036f146, // n0x0536 c0x0000 (---------------)  + I warman\n\t0x002aca45, // n0x0537 c0x0000 (---------------)  + I watch\n\t0x003a3d87, // n0x0538 c0x0000 (---------------)  + I watches\n\t0x00391887, // n0x0539 c0x0000 (---------------)  + I weather\n\t0x0039188e, // n0x053a c0x0000 (---------------)  + I weatherchannel\n\t0x00221a06, // n0x053b c0x0000 (---------------)  + I webcam\n\t0x0022e645, // n0x053c c0x0000 (---------------)  + I weber\n\t0x00281007, // n0x053d c0x0000 (---------------)  + I website\n\t0x002f08c3, // n0x053e c0x0000 (---------------)  + I wed\n\t0x0032f407, // n0x053f c0x0000 (---------------)  + I wedding\n\t0x0020fe05, // n0x0540 c0x0000 (---------------)  + I weibo\n\t0x002109c4, // n0x0541 c0x0000 (---------------)  + I weir\n\t0x0022fe82, // n0x0542 c0x0000 (---------------)  + I wf\n\t0x003a43c7, // n0x0543 c0x0000 (---------------)  + I whoswho\n\t0x002eee04, // n0x0544 c0x0000 (---------------)  + I wien\n\t0x0037c484, // n0x0545 c0x0000 (---------------)  + I wiki\n\t0x0025a8cb, // n0x0546 c0x0000 (---------------)  + I williamhill\n\t0x0021cbc3, // n0x0547 c0x0000 (---------------)  + I win\n\t0x002afe07, // n0x0548 c0x0000 (---------------)  + I windows\n\t0x0021cbc4, // n0x0549 c0x0000 (---------------)  + I wine\n\t0x002b0f07, // n0x054a c0x0000 (---------------)  + I winners\n\t0x00231c43, // n0x054b c0x0000 (---------------)  + I wme\n\t0x0032ae4d, // n0x054c c0x0000 (---------------)  + I wolterskluwer\n\t0x00380f88, // n0x054d c0x0000 (---------------)  + I woodside\n\t0x00255c44, // n0x054e c0x0000 (---------------)  + I work\n\t0x00351f05, // n0x054f c0x0000 (---------------)  + I works\n\t0x00300b85, // n0x0550 c0x0000 (---------------)  + I world\n\t0x002ff3c3, // n0x0551 c0x0000 (---------------)  + I wow\n\t0x65a0b942, // n0x0552 c0x0196 (n0x1eb0-n0x1eb7)  + I ws\n\t0x003002c3, // n0x0553 c0x0000 (---------------)  + I wtc\n\t0x00300783, // n0x0554 c0x0000 (---------------)  + I wtf\n\t0x0021bb44, // n0x0555 c0x0000 (---------------)  + I xbox\n\t0x0027bec5, // n0x0556 c0x0000 (---------------)  + I xerox\n\t0x00230a07, // n0x0557 c0x0000 (---------------)  + I xfinity\n\t0x00220446, // n0x0558 c0x0000 (---------------)  + I xihuan\n\t0x00367243, // n0x0559 c0x0000 (---------------)  + I xin\n\t0x002317cb, // n0x055a c0x0000 (---------------)  + I xn--11b4c3d\n\t0x0024830b, // n0x055b c0x0000 (---------------)  + I xn--1ck2e1b\n\t0x0026a7cb, // n0x055c c0x0000 (---------------)  + I xn--1qqw23a\n\t0x0027bfca, // n0x055d c0x0000 (---------------)  + I xn--30rr7y\n\t0x002a718b, // n0x055e c0x0000 (---------------)  + I xn--3bst00m\n\t0x002daa8b, // n0x055f c0x0000 (---------------)  + I xn--3ds443g\n\t0x002d3d4c, // n0x0560 c0x0000 (---------------)  + I xn--3e0b707e\n\t0x002f2851, // n0x0561 c0x0000 (---------------)  + I xn--3oq18vl8pn36a\n\t0x00339a8a, // n0x0562 c0x0000 (---------------)  + I xn--3pxu8k\n\t0x0034a00b, // n0x0563 c0x0000 (---------------)  + I xn--42c2d9a\n\t0x00370d8b, // n0x0564 c0x0000 (---------------)  + I xn--45brj9c\n\t0x003a374a, // n0x0565 c0x0000 (---------------)  + I xn--45q11c\n\t0x003a5a0a, // n0x0566 c0x0000 (---------------)  + I xn--4gbrim\n\t0x00300f8d, // n0x0567 c0x0000 (---------------)  + I xn--4gq48lf9j\n\t0x0030218e, // n0x0568 c0x0000 (---------------)  + I xn--54b7fta0cc\n\t0x0030270b, // n0x0569 c0x0000 (---------------)  + I xn--55qw42g\n\t0x003029ca, // n0x056a c0x0000 (---------------)  + I xn--55qx5d\n\t0x00303d11, // n0x056b c0x0000 (---------------)  + I xn--5su34j936bgsg\n\t0x0030414a, // n0x056c c0x0000 (---------------)  + I xn--5tzm5g\n\t0x0030464b, // n0x056d c0x0000 (---------------)  + I xn--6frz82g\n\t0x00304b8e, // n0x056e c0x0000 (---------------)  + I xn--6qq986b3xl\n\t0x0030550c, // n0x056f c0x0000 (---------------)  + I xn--80adxhks\n\t0x0030648b, // n0x0570 c0x0000 (---------------)  + I xn--80ao21a\n\t0x0030674e, // n0x0571 c0x0000 (---------------)  + I xn--80aqecdr1a\n\t0x00306acc, // n0x0572 c0x0000 (---------------)  + I xn--80asehdb\n\t0x00309b8a, // n0x0573 c0x0000 (---------------)  + I xn--80aswg\n\t0x0030a9cc, // n0x0574 c0x0000 (---------------)  + I xn--8y0a063a\n\t0x65f0acca, // n0x0575 c0x0197 (n0x1eb7-n0x1ebd)  + I xn--90a3ac\n\t0x0030bb89, // n0x0576 c0x0000 (---------------)  + I xn--90ais\n\t0x0030d14a, // n0x0577 c0x0000 (---------------)  + I xn--9dbq2a\n\t0x0030d3ca, // n0x0578 c0x0000 (---------------)  + I xn--9et52u\n\t0x0030d64b, // n0x0579 c0x0000 (---------------)  + I xn--9krt00a\n\t0x00310c4e, // n0x057a c0x0000 (---------------)  + I xn--b4w605ferd\n\t0x00310fd1, // n0x057b c0x0000 (---------------)  + I xn--bck1b9a5dre4c\n\t0x00318cc9, // n0x057c c0x0000 (---------------)  + I xn--c1avg\n\t0x00318f0a, // n0x057d c0x0000 (---------------)  + I xn--c2br7g\n\t0x00319a4b, // n0x057e c0x0000 (---------------)  + I xn--cck2b3b\n\t0x0031b68a, // n0x057f c0x0000 (---------------)  + I xn--cg4bki\n\t0x0031bfd6, // n0x0580 c0x0000 (---------------)  + I xn--clchc0ea0b2g2a9gcd\n\t0x0031e50b, // n0x0581 c0x0000 (---------------)  + I xn--czr694b\n\t0x0032398a, // n0x0582 c0x0000 (---------------)  + I xn--czrs0t\n\t0x003241ca, // n0x0583 c0x0000 (---------------)  + I xn--czru2d\n\t0x0032674b, // n0x0584 c0x0000 (---------------)  + I xn--d1acj3b\n\t0x00328cc9, // n0x0585 c0x0000 (---------------)  + I xn--d1alf\n\t0x0032b7cd, // n0x0586 c0x0000 (---------------)  + I xn--eckvdtc9d\n\t0x0032c18b, // n0x0587 c0x0000 (---------------)  + I xn--efvy88h\n\t0x0032d08b, // n0x0588 c0x0000 (---------------)  + I xn--estv75g\n\t0x0032da4b, // n0x0589 c0x0000 (---------------)  + I xn--fct429k\n\t0x0032dec9, // n0x058a c0x0000 (---------------)  + I xn--fhbei\n\t0x0032e50e, // n0x058b c0x0000 (---------------)  + I xn--fiq228c5hs\n\t0x0032ebca, // n0x058c c0x0000 (---------------)  + I xn--fiq64b\n\t0x003328ca, // n0x058d c0x0000 (---------------)  + I xn--fiqs8s\n\t0x00332c0a, // n0x058e c0x0000 (---------------)  + I xn--fiqz9s\n\t0x003334cb, // n0x058f c0x0000 (---------------)  + I xn--fjq720a\n\t0x00333d0b, // n0x0590 c0x0000 (---------------)  + I xn--flw351e\n\t0x00333fcd, // n0x0591 c0x0000 (---------------)  + I xn--fpcrj9c3d\n\t0x0033558d, // n0x0592 c0x0000 (---------------)  + I xn--fzc2c9e2c\n\t0x00335ad0, // n0x0593 c0x0000 (---------------)  + I xn--fzys8d69uvgm\n\t0x00335f8b, // n0x0594 c0x0000 (---------------)  + I xn--g2xx48c\n\t0x00336d4c, // n0x0595 c0x0000 (---------------)  + I xn--gckr3f0f\n\t0x00337a0b, // n0x0596 c0x0000 (---------------)  + I xn--gecrj9c\n\t0x0033a58b, // n0x0597 c0x0000 (---------------)  + I xn--gk3at1e\n\t0x0033ca0b, // n0x0598 c0x0000 (---------------)  + I xn--h2brj9c\n\t0x0034034b, // n0x0599 c0x0000 (---------------)  + I xn--hxt814e\n\t0x00340dcf, // n0x059a c0x0000 (---------------)  + I xn--i1b6b1a6a2e\n\t0x0034118b, // n0x059b c0x0000 (---------------)  + I xn--imr513n\n\t0x0034280a, // n0x059c c0x0000 (---------------)  + I xn--io0a7i\n\t0x00343209, // n0x059d c0x0000 (---------------)  + I xn--j1aef\n\t0x00343e49, // n0x059e c0x0000 (---------------)  + I xn--j1amh\n\t0x0034478b, // n0x059f c0x0000 (---------------)  + I xn--j6w193g\n\t0x00344a4e, // n0x05a0 c0x0000 (---------------)  + I xn--jlq61u9w7b\n\t0x0034778b, // n0x05a1 c0x0000 (---------------)  + I xn--jvr189m\n\t0x00348bcf, // n0x05a2 c0x0000 (---------------)  + I xn--kcrx77d1x4a\n\t0x0034afcb, // n0x05a3 c0x0000 (---------------)  + I xn--kprw13d\n\t0x0034b28b, // n0x05a4 c0x0000 (---------------)  + I xn--kpry57d\n\t0x0034b54b, // n0x05a5 c0x0000 (---------------)  + I xn--kpu716f\n\t0x0034b98a, // n0x05a6 c0x0000 (---------------)  + I xn--kput3i\n\t0x00352909, // n0x05a7 c0x0000 (---------------)  + I xn--l1acc\n\t0x0035800f, // n0x05a8 c0x0000 (---------------)  + I xn--lgbbat1ad8j\n\t0x0035c74c, // n0x05a9 c0x0000 (---------------)  + I xn--mgb2ddes\n\t0x0035cfcc, // n0x05aa c0x0000 (---------------)  + I xn--mgb9awbf\n\t0x0035d40e, // n0x05ab c0x0000 (---------------)  + I xn--mgba3a3ejt\n\t0x0035d94f, // n0x05ac c0x0000 (---------------)  + I xn--mgba3a4f16a\n\t0x0035dd0e, // n0x05ad c0x0000 (---------------)  + I xn--mgba3a4fra\n\t0x0035e6d0, // n0x05ae c0x0000 (---------------)  + I xn--mgba7c0bbn0a\n\t0x0035eacf, // n0x05af c0x0000 (---------------)  + I xn--mgbaakc7dvf\n\t0x0035f04e, // n0x05b0 c0x0000 (---------------)  + I xn--mgbaam7a8h\n\t0x0035f50c, // n0x05b1 c0x0000 (---------------)  + I xn--mgbab2bd\n\t0x0035f812, // n0x05b2 c0x0000 (---------------)  + I xn--mgbai9a5eva00b\n\t0x00360b51, // n0x05b3 c0x0000 (---------------)  + I xn--mgbai9azgqp6j\n\t0x0036110e, // n0x05b4 c0x0000 (---------------)  + I xn--mgbayh7gpa\n\t0x0036154e, // n0x05b5 c0x0000 (---------------)  + I xn--mgbb9fbpob\n\t0x00361a8e, // n0x05b6 c0x0000 (---------------)  + I xn--mgbbh1a71e\n\t0x00361e0f, // n0x05b7 c0x0000 (---------------)  + I xn--mgbc0a9azcg\n\t0x003621ce, // n0x05b8 c0x0000 (---------------)  + I xn--mgbca7dzdo\n\t0x00362553, // n0x05b9 c0x0000 (---------------)  + I xn--mgberp4a5d4a87g\n\t0x00362a11, // n0x05ba c0x0000 (---------------)  + I xn--mgberp4a5d4ar\n\t0x00362e4e, // n0x05bb c0x0000 (---------------)  + I xn--mgbi4ecexp\n\t0x003632cc, // n0x05bc c0x0000 (---------------)  + I xn--mgbpl2fh\n\t0x00363713, // n0x05bd c0x0000 (---------------)  + I xn--mgbqly7c0a67fbc\n\t0x00363e90, // n0x05be c0x0000 (---------------)  + I xn--mgbqly7cvafr\n\t0x0036470c, // n0x05bf c0x0000 (---------------)  + I xn--mgbt3dhd\n\t0x00364a0c, // n0x05c0 c0x0000 (---------------)  + I xn--mgbtf8fl\n\t0x00364f4b, // n0x05c1 c0x0000 (---------------)  + I xn--mgbtx2b\n\t0x0036540e, // n0x05c2 c0x0000 (---------------)  + I xn--mgbx4cd0ab\n\t0x0036590b, // n0x05c3 c0x0000 (---------------)  + I xn--mix082f\n\t0x0036688b, // n0x05c4 c0x0000 (---------------)  + I xn--mix891f\n\t0x003678cc, // n0x05c5 c0x0000 (---------------)  + I xn--mk1bu44c\n\t0x0036fa4a, // n0x05c6 c0x0000 (---------------)  + I xn--mxtq1m\n\t0x0037058c, // n0x05c7 c0x0000 (---------------)  + I xn--ngbc5azd\n\t0x0037088c, // n0x05c8 c0x0000 (---------------)  + I xn--ngbe9e0a\n\t0x00370b89, // n0x05c9 c0x0000 (---------------)  + I xn--ngbrx\n\t0x0037254b, // n0x05ca c0x0000 (---------------)  + I xn--nnx388a\n\t0x00372808, // n0x05cb c0x0000 (---------------)  + I xn--node\n\t0x00372cc9, // n0x05cc c0x0000 (---------------)  + I xn--nqv7f\n\t0x00372ccf, // n0x05cd c0x0000 (---------------)  + I xn--nqv7fs00ema\n\t0x0037464b, // n0x05ce c0x0000 (---------------)  + I xn--nyqy26a\n\t0x0037534a, // n0x05cf c0x0000 (---------------)  + I xn--o3cw4h\n\t0x0037708c, // n0x05d0 c0x0000 (---------------)  + I xn--ogbpf8fl\n\t0x00379349, // n0x05d1 c0x0000 (---------------)  + I xn--p1acf\n\t0x003795c8, // n0x05d2 c0x0000 (---------------)  + I xn--p1ai\n\t0x003797cb, // n0x05d3 c0x0000 (---------------)  + I xn--pbt977c\n\t0x0037a58b, // n0x05d4 c0x0000 (---------------)  + I xn--pgbs0dh\n\t0x0037b44a, // n0x05d5 c0x0000 (---------------)  + I xn--pssy2u\n\t0x0037b6cb, // n0x05d6 c0x0000 (---------------)  + I xn--q9jyb4c\n\t0x0037cc4c, // n0x05d7 c0x0000 (---------------)  + I xn--qcka1pmc\n\t0x0037d688, // n0x05d8 c0x0000 (---------------)  + I xn--qxam\n\t0x0038118b, // n0x05d9 c0x0000 (---------------)  + I xn--rhqv96g\n\t0x0038390b, // n0x05da c0x0000 (---------------)  + I xn--rovu88b\n\t0x00386f0b, // n0x05db c0x0000 (---------------)  + I xn--s9brj9c\n\t0x0038860b, // n0x05dc c0x0000 (---------------)  + I xn--ses554g\n\t0x0039140b, // n0x05dd c0x0000 (---------------)  + I xn--t60b56a\n\t0x003916c9, // n0x05de c0x0000 (---------------)  + I xn--tckwe\n\t0x00391c0d, // n0x05df c0x0000 (---------------)  + I xn--tiq49xqyj\n\t0x0039654a, // n0x05e0 c0x0000 (---------------)  + I xn--unup4y\n\t0x00397497, // n0x05e1 c0x0000 (---------------)  + I xn--vermgensberater-ctb\n\t0x003982d8, // n0x05e2 c0x0000 (---------------)  + I xn--vermgensberatung-pwb\n\t0x0039a849, // n0x05e3 c0x0000 (---------------)  + I xn--vhquv\n\t0x0039ba4b, // n0x05e4 c0x0000 (---------------)  + I xn--vuq861b\n\t0x0039c814, // n0x05e5 c0x0000 (---------------)  + I xn--w4r85el8fhu5dnra\n\t0x0039cd0b, // n0x05e6 c0x0000 (---------------)  + I xn--w4rs40l\n\t0x0039d28a, // n0x05e7 c0x0000 (---------------)  + I xn--wgbh1c\n\t0x0039d84a, // n0x05e8 c0x0000 (---------------)  + I xn--wgbl6a\n\t0x0039dacb, // n0x05e9 c0x0000 (---------------)  + I xn--xhq521b\n\t0x003a1450, // n0x05ea c0x0000 (---------------)  + I xn--xkc2al3hye2a\n\t0x003a1851, // n0x05eb c0x0000 (---------------)  + I xn--xkc2dl3a5ee0h\n\t0x003a210a, // n0x05ec c0x0000 (---------------)  + I xn--y9a3aq\n\t0x003a2d4d, // n0x05ed c0x0000 (---------------)  + I xn--yfro4i67o\n\t0x003a344d, // n0x05ee c0x0000 (---------------)  + I xn--ygbi2ammx\n\t0x003a5dcb, // n0x05ef c0x0000 (---------------)  + I xn--zfr164b\n\t0x003a6b46, // n0x05f0 c0x0000 (---------------)  + I xperia\n\t0x00230983, // n0x05f1 c0x0000 (---------------)  + I xxx\n\t0x00247683, // n0x05f2 c0x0000 (---------------)  + I xyz\n\t0x00307e86, // n0x05f3 c0x0000 (---------------)  + I yachts\n\t0x0028d645, // n0x05f4 c0x0000 (---------------)  + I yahoo\n\t0x002c7947, // n0x05f5 c0x0000 (---------------)  + I yamaxun\n\t0x00339946, // n0x05f6 c0x0000 (---------------)  + I yandex\n\t0x01608242, // n0x05f7 c0x0005 (---------------)* o I ye\n\t0x003710c9, // n0x05f8 c0x0000 (---------------)  + I yodobashi\n\t0x003559c4, // n0x05f9 c0x0000 (---------------)  + I yoga\n\t0x002d09c8, // n0x05fa c0x0000 (---------------)  + I yokohama\n\t0x0024b0c3, // n0x05fb c0x0000 (---------------)  + I you\n\t0x002e4807, // n0x05fc c0x0000 (---------------)  + I youtube\n\t0x00244002, // n0x05fd c0x0000 (---------------)  + I yt\n\t0x002ac203, // n0x05fe c0x0000 (---------------)  + I yun\n\t0x66205f82, // n0x05ff c0x0198 (n0x1ebd-n0x1ece)  o I za\n\t0x002c3fc6, // n0x0600 c0x0000 (---------------)  + I zappos\n\t0x002c4d04, // n0x0601 c0x0000 (---------------)  + I zara\n\t0x002eb584, // n0x0602 c0x0000 (---------------)  + I zero\n\t0x002432c3, // n0x0603 c0x0000 (---------------)  + I zip\n\t0x002432c5, // n0x0604 c0x0000 (---------------)  + I zippo\n\t0x01700d02, // n0x0605 c0x0005 (---------------)* o I zm\n\t0x002dce04, // n0x0606 c0x0000 (---------------)  + I zone\n\t0x00273947, // n0x0607 c0x0000 (---------------)  + I zuerich\n\t0x016afdc2, // n0x0608 c0x0005 (---------------)* o I zw\n\t0x00233503, // n0x0609 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x060a c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x060b c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x060c c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x060d c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x060e c0x0000 (---------------)  + I org\n\t0x00201483, // n0x060f c0x0000 (---------------)  + I nom\n\t0x00201542, // n0x0610 c0x0000 (---------------)  + I ac\n\t0x000ffa08, // n0x0611 c0x0000 (---------------)  +   blogspot\n\t0x00200742, // n0x0612 c0x0000 (---------------)  + I co\n\t0x0026cc83, // n0x0613 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x0614 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x0615 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0616 c0x0000 (---------------)  + I org\n\t0x00217443, // n0x0617 c0x0000 (---------------)  + I sch\n\t0x00316196, // n0x0618 c0x0000 (---------------)  + I accident-investigation\n\t0x00317cd3, // n0x0619 c0x0000 (---------------)  + I accident-prevention\n\t0x002f66c9, // n0x061a c0x0000 (---------------)  + I aerobatic\n\t0x002389c8, // n0x061b c0x0000 (---------------)  + I aeroclub\n\t0x002dd449, // n0x061c c0x0000 (---------------)  + I aerodrome\n\t0x002fbe86, // n0x061d c0x0000 (---------------)  + I agents\n\t0x0030c790, // n0x061e c0x0000 (---------------)  + I air-surveillance\n\t0x00358d93, // n0x061f c0x0000 (---------------)  + I air-traffic-control\n\t0x00204908, // n0x0620 c0x0000 (---------------)  + I aircraft\n\t0x002d7e07, // n0x0621 c0x0000 (---------------)  + I airline\n\t0x002793c7, // n0x0622 c0x0000 (---------------)  + I airport\n\t0x0021868a, // n0x0623 c0x0000 (---------------)  + I airtraffic\n\t0x002c8609, // n0x0624 c0x0000 (---------------)  + I ambulance\n\t0x0037d809, // n0x0625 c0x0000 (---------------)  + I amusement\n\t0x002d488b, // n0x0626 c0x0000 (---------------)  + I association\n\t0x0031a686, // n0x0627 c0x0000 (---------------)  + I author\n\t0x0022faca, // n0x0628 c0x0000 (---------------)  + I ballooning\n\t0x00220c46, // n0x0629 c0x0000 (---------------)  + I broker\n\t0x003555c3, // n0x062a c0x0000 (---------------)  + I caa\n\t0x002e9b05, // n0x062b c0x0000 (---------------)  + I cargo\n\t0x00351008, // n0x062c c0x0000 (---------------)  + I catering\n\t0x003257cd, // n0x062d c0x0000 (---------------)  + I certification\n\t0x0035894c, // n0x062e c0x0000 (---------------)  + I championship\n\t0x00320347, // n0x062f c0x0000 (---------------)  + I charter\n\t0x0035b70d, // n0x0630 c0x0000 (---------------)  + I civilaviation\n\t0x00238ac4, // n0x0631 c0x0000 (---------------)  + I club\n\t0x00236cca, // n0x0632 c0x0000 (---------------)  + I conference\n\t0x0023784a, // n0x0633 c0x0000 (---------------)  + I consultant\n\t0x00237d0a, // n0x0634 c0x0000 (---------------)  + I consulting\n\t0x00308c87, // n0x0635 c0x0000 (---------------)  + I control\n\t0x00242207, // n0x0636 c0x0000 (---------------)  + I council\n\t0x00245184, // n0x0637 c0x0000 (---------------)  + I crew\n\t0x0022dcc6, // n0x0638 c0x0000 (---------------)  + I design\n\t0x00356f44, // n0x0639 c0x0000 (---------------)  + I dgca\n\t0x002fe188, // n0x063a c0x0000 (---------------)  + I educator\n\t0x00322189, // n0x063b c0x0000 (---------------)  + I emergency\n\t0x00369146, // n0x063c c0x0000 (---------------)  + I engine\n\t0x00369148, // n0x063d c0x0000 (---------------)  + I engineer\n\t0x00247acd, // n0x063e c0x0000 (---------------)  + I entertainment\n\t0x002c2709, // n0x063f c0x0000 (---------------)  + I equipment\n\t0x00239488, // n0x0640 c0x0000 (---------------)  + I exchange\n\t0x00247487, // n0x0641 c0x0000 (---------------)  + I express\n\t0x0030eeca, // n0x0642 c0x0000 (---------------)  + I federation\n\t0x00251286, // n0x0643 c0x0000 (---------------)  + I flight\n\t0x0025cf87, // n0x0644 c0x0000 (---------------)  + I freight\n\t0x00240d04, // n0x0645 c0x0000 (---------------)  + I fuel\n\t0x0026e307, // n0x0646 c0x0000 (---------------)  + I gliding\n\t0x0026cc8a, // n0x0647 c0x0000 (---------------)  + I government\n\t0x0031240e, // n0x0648 c0x0000 (---------------)  + I groundhandling\n\t0x0020ab45, // n0x0649 c0x0000 (---------------)  + I group\n\t0x002ff10b, // n0x064a c0x0000 (---------------)  + I hanggliding\n\t0x002e9e49, // n0x064b c0x0000 (---------------)  + I homebuilt\n\t0x0023e7c9, // n0x064c c0x0000 (---------------)  + I insurance\n\t0x0033be47, // n0x064d c0x0000 (---------------)  + I journal\n\t0x0038e60a, // n0x064e c0x0000 (---------------)  + I journalist\n\t0x00285c07, // n0x064f c0x0000 (---------------)  + I leasing\n\t0x002e2d49, // n0x0650 c0x0000 (---------------)  + I logistics\n\t0x00395fc8, // n0x0651 c0x0000 (---------------)  + I magazine\n\t0x0027634b, // n0x0652 c0x0000 (---------------)  + I maintenance\n\t0x003025c5, // n0x0653 c0x0000 (---------------)  + I media\n\t0x0031210a, // n0x0654 c0x0000 (---------------)  + I microlight\n\t0x002a3209, // n0x0655 c0x0000 (---------------)  + I modelling\n\t0x00319f8a, // n0x0656 c0x0000 (---------------)  + I navigation\n\t0x002c530b, // n0x0657 c0x0000 (---------------)  + I parachuting\n\t0x0026e20b, // n0x0658 c0x0000 (---------------)  + I paragliding\n\t0x002d4615, // n0x0659 c0x0000 (---------------)  + I passenger-association\n\t0x002d6505, // n0x065a c0x0000 (---------------)  + I pilot\n\t0x00247505, // n0x065b c0x0000 (---------------)  + I press\n\t0x002e204a, // n0x065c c0x0000 (---------------)  + I production\n\t0x00336aca, // n0x065d c0x0000 (---------------)  + I recreation\n\t0x002fae47, // n0x065e c0x0000 (---------------)  + I repbody\n\t0x0021d683, // n0x065f c0x0000 (---------------)  + I res\n\t0x0029fa08, // n0x0660 c0x0000 (---------------)  + I research\n\t0x002ce74a, // n0x0661 c0x0000 (---------------)  + I rotorcraft\n\t0x00215946, // n0x0662 c0x0000 (---------------)  + I safety\n\t0x002466c9, // n0x0663 c0x0000 (---------------)  + I scientist\n\t0x00206808, // n0x0664 c0x0000 (---------------)  + I services\n\t0x002c4484, // n0x0665 c0x0000 (---------------)  + I show\n\t0x0027d709, // n0x0666 c0x0000 (---------------)  + I skydiving\n\t0x002b8688, // n0x0667 c0x0000 (---------------)  + I software\n\t0x002abd47, // n0x0668 c0x0000 (---------------)  + I student\n\t0x002673c6, // n0x0669 c0x0000 (---------------)  + I trader\n\t0x002a4607, // n0x066a c0x0000 (---------------)  + I trading\n\t0x00295207, // n0x066b c0x0000 (---------------)  + I trainer\n\t0x00244bc5, // n0x066c c0x0000 (---------------)  + I union\n\t0x002dbd0c, // n0x066d c0x0000 (---------------)  + I workinggroup\n\t0x00351f05, // n0x066e c0x0000 (---------------)  + I works\n\t0x00233503, // n0x066f c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x0670 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x0671 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x0672 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0673 c0x0000 (---------------)  + I org\n\t0x00200742, // n0x0674 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x0675 c0x0000 (---------------)  + I com\n\t0x0021fe03, // n0x0676 c0x0000 (---------------)  + I net\n\t0x00201483, // n0x0677 c0x0000 (---------------)  + I nom\n\t0x0022d1c3, // n0x0678 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x0679 c0x0000 (---------------)  + I com\n\t0x0021fe03, // n0x067a c0x0000 (---------------)  + I net\n\t0x0020b283, // n0x067b c0x0000 (---------------)  + I off\n\t0x0022d1c3, // n0x067c c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x067d c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x067e c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x067f c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x0680 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x0681 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x0682 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0683 c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x0684 c0x0000 (---------------)  +   blogspot\n\t0x00200742, // n0x0685 c0x0000 (---------------)  + I co\n\t0x00202602, // n0x0686 c0x0000 (---------------)  + I ed\n\t0x00237f42, // n0x0687 c0x0000 (---------------)  + I gv\n\t0x00201e42, // n0x0688 c0x0000 (---------------)  + I it\n\t0x00200c42, // n0x0689 c0x0000 (---------------)  + I og\n\t0x002718c2, // n0x068a c0x0000 (---------------)  + I pb\n\t0x04633503, // n0x068b c0x0011 (n0x0694-n0x0695)  + I com\n\t0x0023a783, // n0x068c c0x0000 (---------------)  + I edu\n\t0x00213183, // n0x068d c0x0000 (---------------)  + I gob\n\t0x0026cc83, // n0x068e c0x0000 (---------------)  + I gov\n\t0x00201603, // n0x068f c0x0000 (---------------)  + I int\n\t0x00209003, // n0x0690 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x0691 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0692 c0x0000 (---------------)  + I org\n\t0x00209e43, // n0x0693 c0x0000 (---------------)  + I tur\n\t0x000ffa08, // n0x0694 c0x0000 (---------------)  +   blogspot\n\t0x00255704, // n0x0695 c0x0000 (---------------)  + I e164\n\t0x002edc07, // n0x0696 c0x0000 (---------------)  + I in-addr\n\t0x00215dc3, // n0x0697 c0x0000 (---------------)  + I ip6\n\t0x00238804, // n0x0698 c0x0000 (---------------)  + I iris\n\t0x0020dd83, // n0x0699 c0x0000 (---------------)  + I uri\n\t0x00285383, // n0x069a c0x0000 (---------------)  + I urn\n\t0x0026cc83, // n0x069b c0x0000 (---------------)  + I gov\n\t0x00201542, // n0x069c c0x0000 (---------------)  + I ac\n\t0x00130b83, // n0x069d c0x0000 (---------------)  +   biz\n\t0x05600742, // n0x069e c0x0015 (n0x06a3-n0x06a4)  + I co\n\t0x00237f42, // n0x069f c0x0000 (---------------)  + I gv\n\t0x001a1244, // n0x06a0 c0x0000 (---------------)  +   info\n\t0x00200282, // n0x06a1 c0x0000 (---------------)  + I or\n\t0x000e1c44, // n0x06a2 c0x0000 (---------------)  +   priv\n\t0x000ffa08, // n0x06a3 c0x0000 (---------------)  +   blogspot\n\t0x00239a03, // n0x06a4 c0x0000 (---------------)  + I act\n\t0x002afc83, // n0x06a5 c0x0000 (---------------)  + I asn\n\t0x05e33503, // n0x06a6 c0x0017 (n0x06b6-n0x06b7)  + I com\n\t0x00236cc4, // n0x06a7 c0x0000 (---------------)  + I conf\n\t0x0623a783, // n0x06a8 c0x0018 (n0x06b7-n0x06bf)  + I edu\n\t0x0666cc83, // n0x06a9 c0x0019 (n0x06bf-n0x06c4)  + I gov\n\t0x0020c782, // n0x06aa c0x0000 (---------------)  + I id\n\t0x003a1244, // n0x06ab c0x0000 (---------------)  + I info\n\t0x0021fe03, // n0x06ac c0x0000 (---------------)  + I net\n\t0x002f09c3, // n0x06ad c0x0000 (---------------)  + I nsw\n\t0x002009c2, // n0x06ae c0x0000 (---------------)  + I nt\n\t0x0022d1c3, // n0x06af c0x0000 (---------------)  + I org\n\t0x0021c142, // n0x06b0 c0x0000 (---------------)  + I oz\n\t0x002e6383, // n0x06b1 c0x0000 (---------------)  + I qld\n\t0x002004c2, // n0x06b2 c0x0000 (---------------)  + I sa\n\t0x00201e83, // n0x06b3 c0x0000 (---------------)  + I tas\n\t0x002068c3, // n0x06b4 c0x0000 (---------------)  + I vic\n\t0x002010c2, // n0x06b5 c0x0000 (---------------)  + I wa\n\t0x000ffa08, // n0x06b6 c0x0000 (---------------)  +   blogspot\n\t0x00239a03, // n0x06b7 c0x0000 (---------------)  + I act\n\t0x002f09c3, // n0x06b8 c0x0000 (---------------)  + I nsw\n\t0x002009c2, // n0x06b9 c0x0000 (---------------)  + I nt\n\t0x002e6383, // n0x06ba c0x0000 (---------------)  + I qld\n\t0x002004c2, // n0x06bb c0x0000 (---------------)  + I sa\n\t0x00201e83, // n0x06bc c0x0000 (---------------)  + I tas\n\t0x002068c3, // n0x06bd c0x0000 (---------------)  + I vic\n\t0x002010c2, // n0x06be c0x0000 (---------------)  + I wa\n\t0x002e6383, // n0x06bf c0x0000 (---------------)  + I qld\n\t0x002004c2, // n0x06c0 c0x0000 (---------------)  + I sa\n\t0x00201e83, // n0x06c1 c0x0000 (---------------)  + I tas\n\t0x002068c3, // n0x06c2 c0x0000 (---------------)  + I vic\n\t0x002010c2, // n0x06c3 c0x0000 (---------------)  + I wa\n\t0x00233503, // n0x06c4 c0x0000 (---------------)  + I com\n\t0x00330b83, // n0x06c5 c0x0000 (---------------)  + I biz\n\t0x00233503, // n0x06c6 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x06c7 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x06c8 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x06c9 c0x0000 (---------------)  + I info\n\t0x00201603, // n0x06ca c0x0000 (---------------)  + I int\n\t0x00209003, // n0x06cb c0x0000 (---------------)  + I mil\n\t0x00205284, // n0x06cc c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x06cd c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x06ce c0x0000 (---------------)  + I org\n\t0x00209302, // n0x06cf c0x0000 (---------------)  + I pp\n\t0x00220e43, // n0x06d0 c0x0000 (---------------)  + I pro\n\t0x000ffa08, // n0x06d1 c0x0000 (---------------)  +   blogspot\n\t0x00200742, // n0x06d2 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x06d3 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x06d4 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x06d5 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x06d6 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x06d7 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x06d8 c0x0000 (---------------)  + I org\n\t0x00209702, // n0x06d9 c0x0000 (---------------)  + I rs\n\t0x002d8144, // n0x06da c0x0000 (---------------)  + I unbi\n\t0x003a6844, // n0x06db c0x0000 (---------------)  + I unsa\n\t0x00330b83, // n0x06dc c0x0000 (---------------)  + I biz\n\t0x00200742, // n0x06dd c0x0000 (---------------)  + I co\n\t0x00233503, // n0x06de c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x06df c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x06e0 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x06e1 c0x0000 (---------------)  + I info\n\t0x0021fe03, // n0x06e2 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x06e3 c0x0000 (---------------)  + I org\n\t0x00391185, // n0x06e4 c0x0000 (---------------)  + I store\n\t0x00224e42, // n0x06e5 c0x0000 (---------------)  + I tv\n\t0x00201542, // n0x06e6 c0x0000 (---------------)  + I ac\n\t0x000ffa08, // n0x06e7 c0x0000 (---------------)  +   blogspot\n\t0x0026cc83, // n0x06e8 c0x0000 (---------------)  + I gov\n\t0x0025c3c1, // n0x06e9 c0x0000 (---------------)  + I 0\n\t0x0022a0c1, // n0x06ea c0x0000 (---------------)  + I 1\n\t0x002484c1, // n0x06eb c0x0000 (---------------)  + I 2\n\t0x00231a01, // n0x06ec c0x0000 (---------------)  + I 3\n\t0x00231981, // n0x06ed c0x0000 (---------------)  + I 4\n\t0x002736c1, // n0x06ee c0x0000 (---------------)  + I 5\n\t0x00215e41, // n0x06ef c0x0000 (---------------)  + I 6\n\t0x0023e381, // n0x06f0 c0x0000 (---------------)  + I 7\n\t0x002f2a41, // n0x06f1 c0x0000 (---------------)  + I 8\n\t0x00301241, // n0x06f2 c0x0000 (---------------)  + I 9\n\t0x00200101, // n0x06f3 c0x0000 (---------------)  + I a\n\t0x00200001, // n0x06f4 c0x0000 (---------------)  + I b\n\t0x000ffa08, // n0x06f5 c0x0000 (---------------)  +   blogspot\n\t0x00200301, // n0x06f6 c0x0000 (---------------)  + I c\n\t0x00200381, // n0x06f7 c0x0000 (---------------)  + I d\n\t0x00200081, // n0x06f8 c0x0000 (---------------)  + I e\n\t0x00200581, // n0x06f9 c0x0000 (---------------)  + I f\n\t0x00200c81, // n0x06fa c0x0000 (---------------)  + I g\n\t0x00200d81, // n0x06fb c0x0000 (---------------)  + I h\n\t0x00200041, // n0x06fc c0x0000 (---------------)  + I i\n\t0x00201741, // n0x06fd c0x0000 (---------------)  + I j\n\t0x00200fc1, // n0x06fe c0x0000 (---------------)  + I k\n\t0x00200201, // n0x06ff c0x0000 (---------------)  + I l\n\t0x00200181, // n0x0700 c0x0000 (---------------)  + I m\n\t0x00200541, // n0x0701 c0x0000 (---------------)  + I n\n\t0x00200281, // n0x0702 c0x0000 (---------------)  + I o\n\t0x00200941, // n0x0703 c0x0000 (---------------)  + I p\n\t0x00200401, // n0x0704 c0x0000 (---------------)  + I q\n\t0x002002c1, // n0x0705 c0x0000 (---------------)  + I r\n\t0x002004c1, // n0x0706 c0x0000 (---------------)  + I s\n\t0x00200141, // n0x0707 c0x0000 (---------------)  + I t\n\t0x00200441, // n0x0708 c0x0000 (---------------)  + I u\n\t0x002000c1, // n0x0709 c0x0000 (---------------)  + I v\n\t0x002010c1, // n0x070a c0x0000 (---------------)  + I w\n\t0x00205381, // n0x070b c0x0000 (---------------)  + I x\n\t0x00201841, // n0x070c c0x0000 (---------------)  + I y\n\t0x00205f81, // n0x070d c0x0000 (---------------)  + I z\n\t0x00233503, // n0x070e c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x070f c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x0710 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x0711 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0712 c0x0000 (---------------)  + I org\n\t0x00200742, // n0x0713 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x0714 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x0715 c0x0000 (---------------)  + I edu\n\t0x00200282, // n0x0716 c0x0000 (---------------)  + I or\n\t0x0022d1c3, // n0x0717 c0x0000 (---------------)  + I org\n\t0x00009107, // n0x0718 c0x0000 (---------------)  +   dscloud\n\t0x00013886, // n0x0719 c0x0000 (---------------)  +   dyndns\n\t0x00055e8a, // n0x071a c0x0000 (---------------)  +   for-better\n\t0x00087d88, // n0x071b c0x0000 (---------------)  +   for-more\n\t0x00056488, // n0x071c c0x0000 (---------------)  +   for-some\n\t0x000572c7, // n0x071d c0x0000 (---------------)  +   for-the\n\t0x0006ba86, // n0x071e c0x0000 (---------------)  +   selfip\n\t0x000eadc6, // n0x071f c0x0000 (---------------)  +   webhop\n\t0x002d4884, // n0x0720 c0x0000 (---------------)  + I asso\n\t0x00319cc7, // n0x0721 c0x0000 (---------------)  + I barreau\n\t0x000ffa08, // n0x0722 c0x0000 (---------------)  +   blogspot\n\t0x0033d7c4, // n0x0723 c0x0000 (---------------)  + I gouv\n\t0x00233503, // n0x0724 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x0725 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x0726 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x0727 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0728 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x0729 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x072a c0x0000 (---------------)  + I edu\n\t0x00213183, // n0x072b c0x0000 (---------------)  + I gob\n\t0x0026cc83, // n0x072c c0x0000 (---------------)  + I gov\n\t0x00201603, // n0x072d c0x0000 (---------------)  + I int\n\t0x00209003, // n0x072e c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x072f c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0730 c0x0000 (---------------)  + I org\n\t0x00224e42, // n0x0731 c0x0000 (---------------)  + I tv\n\t0x002c3503, // n0x0732 c0x0000 (---------------)  + I adm\n\t0x002f4fc3, // n0x0733 c0x0000 (---------------)  + I adv\n\t0x00209c83, // n0x0734 c0x0000 (---------------)  + I agr\n\t0x00201882, // n0x0735 c0x0000 (---------------)  + I am\n\t0x0024f183, // n0x0736 c0x0000 (---------------)  + I arq\n\t0x002011c3, // n0x0737 c0x0000 (---------------)  + I art\n\t0x00217b03, // n0x0738 c0x0000 (---------------)  + I ato\n\t0x00200001, // n0x0739 c0x0000 (---------------)  + I b\n\t0x00203a03, // n0x073a c0x0000 (---------------)  + I bio\n\t0x002a4004, // n0x073b c0x0000 (---------------)  + I blog\n\t0x00321f43, // n0x073c c0x0000 (---------------)  + I bmd\n\t0x0025ee03, // n0x073d c0x0000 (---------------)  + I cim\n\t0x0021ba43, // n0x073e c0x0000 (---------------)  + I cng\n\t0x00231603, // n0x073f c0x0000 (---------------)  + I cnt\n\t0x0a233503, // n0x0740 c0x0028 (n0x0778-n0x0779)  + I com\n\t0x0023d684, // n0x0741 c0x0000 (---------------)  + I coop\n\t0x0021ba03, // n0x0742 c0x0000 (---------------)  + I ecn\n\t0x0020b203, // n0x0743 c0x0000 (---------------)  + I eco\n\t0x0023a783, // n0x0744 c0x0000 (---------------)  + I edu\n\t0x0023a4c3, // n0x0745 c0x0000 (---------------)  + I emp\n\t0x00213703, // n0x0746 c0x0000 (---------------)  + I eng\n\t0x0029bdc3, // n0x0747 c0x0000 (---------------)  + I esp\n\t0x0025ed83, // n0x0748 c0x0000 (---------------)  + I etc\n\t0x002234c3, // n0x0749 c0x0000 (---------------)  + I eti\n\t0x00212983, // n0x074a c0x0000 (---------------)  + I far\n\t0x002522c4, // n0x074b c0x0000 (---------------)  + I flog\n\t0x00242902, // n0x074c c0x0000 (---------------)  + I fm\n\t0x00255803, // n0x074d c0x0000 (---------------)  + I fnd\n\t0x0025bb03, // n0x074e c0x0000 (---------------)  + I fot\n\t0x00277703, // n0x074f c0x0000 (---------------)  + I fst\n\t0x002ee4c3, // n0x0750 c0x0000 (---------------)  + I g12\n\t0x002ece03, // n0x0751 c0x0000 (---------------)  + I ggf\n\t0x0026cc83, // n0x0752 c0x0000 (---------------)  + I gov\n\t0x002cc783, // n0x0753 c0x0000 (---------------)  + I imb\n\t0x0021d883, // n0x0754 c0x0000 (---------------)  + I ind\n\t0x003a1083, // n0x0755 c0x0000 (---------------)  + I inf\n\t0x00215b43, // n0x0756 c0x0000 (---------------)  + I jor\n\t0x002f3143, // n0x0757 c0x0000 (---------------)  + I jus\n\t0x0022e283, // n0x0758 c0x0000 (---------------)  + I leg\n\t0x002d08c3, // n0x0759 c0x0000 (---------------)  + I lel\n\t0x0021f803, // n0x075a c0x0000 (---------------)  + I mat\n\t0x00213ac3, // n0x075b c0x0000 (---------------)  + I med\n\t0x00209003, // n0x075c c0x0000 (---------------)  + I mil\n\t0x0022a482, // n0x075d c0x0000 (---------------)  + I mp\n\t0x00283a83, // n0x075e c0x0000 (---------------)  + I mus\n\t0x0021fe03, // n0x075f c0x0000 (---------------)  + I net\n\t0x01601483, // n0x0760 c0x0005 (---------------)* o I nom\n\t0x002547c3, // n0x0761 c0x0000 (---------------)  + I not\n\t0x0023b443, // n0x0762 c0x0000 (---------------)  + I ntr\n\t0x00213243, // n0x0763 c0x0000 (---------------)  + I odo\n\t0x0022d1c3, // n0x0764 c0x0000 (---------------)  + I org\n\t0x00249583, // n0x0765 c0x0000 (---------------)  + I ppg\n\t0x00220e43, // n0x0766 c0x0000 (---------------)  + I pro\n\t0x0023d083, // n0x0767 c0x0000 (---------------)  + I psc\n\t0x002f7b43, // n0x0768 c0x0000 (---------------)  + I psi\n\t0x002e6543, // n0x0769 c0x0000 (---------------)  + I qsl\n\t0x00264b85, // n0x076a c0x0000 (---------------)  + I radio\n\t0x0022a5c3, // n0x076b c0x0000 (---------------)  + I rec\n\t0x002e6583, // n0x076c c0x0000 (---------------)  + I slg\n\t0x0035ca03, // n0x076d c0x0000 (---------------)  + I srv\n\t0x002203c4, // n0x076e c0x0000 (---------------)  + I taxi\n\t0x00336843, // n0x076f c0x0000 (---------------)  + I teo\n\t0x00239f83, // n0x0770 c0x0000 (---------------)  + I tmp\n\t0x002a9803, // n0x0771 c0x0000 (---------------)  + I trd\n\t0x00209e43, // n0x0772 c0x0000 (---------------)  + I tur\n\t0x00224e42, // n0x0773 c0x0000 (---------------)  + I tv\n\t0x0023f943, // n0x0774 c0x0000 (---------------)  + I vet\n\t0x002fa5c4, // n0x0775 c0x0000 (---------------)  + I vlog\n\t0x0037c484, // n0x0776 c0x0000 (---------------)  + I wiki\n\t0x002645c3, // n0x0777 c0x0000 (---------------)  + I zlg\n\t0x000ffa08, // n0x0778 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x0779 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x077a c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x077b c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x077c c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x077d c0x0000 (---------------)  + I org\n\t0x00233503, // n0x077e c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x077f c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x0780 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x0781 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0782 c0x0000 (---------------)  + I org\n\t0x00200742, // n0x0783 c0x0000 (---------------)  + I co\n\t0x0022d1c3, // n0x0784 c0x0000 (---------------)  + I org\n\t0x0b633503, // n0x0785 c0x002d (n0x0789-n0x078a)  + I com\n\t0x0026cc83, // n0x0786 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x0787 c0x0000 (---------------)  + I mil\n\t0x0020b282, // n0x0788 c0x0000 (---------------)  + I of\n\t0x000ffa08, // n0x0789 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x078a c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x078b c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x078c c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x078d c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x078e c0x0000 (---------------)  + I org\n\t0x00005f82, // n0x078f c0x0000 (---------------)  +   za\n\t0x002020c2, // n0x0790 c0x0000 (---------------)  + I ab\n\t0x00221a82, // n0x0791 c0x0000 (---------------)  + I bc\n\t0x000ffa08, // n0x0792 c0x0000 (---------------)  +   blogspot\n\t0x00000742, // n0x0793 c0x0000 (---------------)  +   co\n\t0x0023c3c2, // n0x0794 c0x0000 (---------------)  + I gc\n\t0x00208602, // n0x0795 c0x0000 (---------------)  + I mb\n\t0x00215102, // n0x0796 c0x0000 (---------------)  + I nb\n\t0x00200542, // n0x0797 c0x0000 (---------------)  + I nf\n\t0x00247802, // n0x0798 c0x0000 (---------------)  + I nl\n\t0x00210c42, // n0x0799 c0x0000 (---------------)  + I ns\n\t0x002009c2, // n0x079a c0x0000 (---------------)  + I nt\n\t0x002017c2, // n0x079b c0x0000 (---------------)  + I nu\n\t0x00200982, // n0x079c c0x0000 (---------------)  + I on\n\t0x00207782, // n0x079d c0x0000 (---------------)  + I pe\n\t0x0037cd42, // n0x079e c0x0000 (---------------)  + I qc\n\t0x00207842, // n0x079f c0x0000 (---------------)  + I sk\n\t0x00226f42, // n0x07a0 c0x0000 (---------------)  + I yk\n\t0x00146449, // n0x07a1 c0x0000 (---------------)  +   ftpaccess\n\t0x00173f0b, // n0x07a2 c0x0000 (---------------)  +   game-server\n\t0x000d1148, // n0x07a3 c0x0000 (---------------)  +   myphotos\n\t0x00143a09, // n0x07a4 c0x0000 (---------------)  +   scrapping\n\t0x0026cc83, // n0x07a5 c0x0000 (---------------)  + I gov\n\t0x000ffa08, // n0x07a6 c0x0000 (---------------)  +   blogspot\n\t0x000ffa08, // n0x07a7 c0x0000 (---------------)  +   blogspot\n\t0x00201542, // n0x07a8 c0x0000 (---------------)  + I ac\n\t0x002d4884, // n0x07a9 c0x0000 (---------------)  + I asso\n\t0x00200742, // n0x07aa c0x0000 (---------------)  + I co\n\t0x00233503, // n0x07ab c0x0000 (---------------)  + I com\n\t0x00202602, // n0x07ac c0x0000 (---------------)  + I ed\n\t0x0023a783, // n0x07ad c0x0000 (---------------)  + I edu\n\t0x00202d42, // n0x07ae c0x0000 (---------------)  + I go\n\t0x0033d7c4, // n0x07af c0x0000 (---------------)  + I gouv\n\t0x00201603, // n0x07b0 c0x0000 (---------------)  + I int\n\t0x0024da82, // n0x07b1 c0x0000 (---------------)  + I md\n\t0x0021fe03, // n0x07b2 c0x0000 (---------------)  + I net\n\t0x00200282, // n0x07b3 c0x0000 (---------------)  + I or\n\t0x0022d1c3, // n0x07b4 c0x0000 (---------------)  + I org\n\t0x00247506, // n0x07b5 c0x0000 (---------------)  + I presse\n\t0x0030dc0f, // n0x07b6 c0x0000 (---------------)  + I xn--aroport-bya\n\t0x00700b03, // n0x07b7 c0x0001 (---------------)  ! I www\n\t0x000ffa08, // n0x07b8 c0x0000 (---------------)  +   blogspot\n\t0x00200742, // n0x07b9 c0x0000 (---------------)  + I co\n\t0x00213183, // n0x07ba c0x0000 (---------------)  + I gob\n\t0x0026cc83, // n0x07bb c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x07bc c0x0000 (---------------)  + I mil\n\t0x00200742, // n0x07bd c0x0000 (---------------)  + I co\n\t0x00233503, // n0x07be c0x0000 (---------------)  + I com\n\t0x0026cc83, // n0x07bf c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x07c0 c0x0000 (---------------)  + I net\n\t0x00201542, // n0x07c1 c0x0000 (---------------)  + I ac\n\t0x00204f02, // n0x07c2 c0x0000 (---------------)  + I ah\n\t0x0e6f6409, // n0x07c3 c0x0039 (n0x07ee-n0x07ef)  o I amazonaws\n\t0x00206502, // n0x07c4 c0x0000 (---------------)  + I bj\n\t0x0ee33503, // n0x07c5 c0x003b (n0x07f0-n0x07f1)  + I com\n\t0x00243b42, // n0x07c6 c0x0000 (---------------)  + I cq\n\t0x0023a783, // n0x07c7 c0x0000 (---------------)  + I edu\n\t0x00215b02, // n0x07c8 c0x0000 (---------------)  + I fj\n\t0x00222d42, // n0x07c9 c0x0000 (---------------)  + I gd\n\t0x0026cc83, // n0x07ca c0x0000 (---------------)  + I gov\n\t0x0023a242, // n0x07cb c0x0000 (---------------)  + I gs\n\t0x00260202, // n0x07cc c0x0000 (---------------)  + I gx\n\t0x00264642, // n0x07cd c0x0000 (---------------)  + I gz\n\t0x00202442, // n0x07ce c0x0000 (---------------)  + I ha\n\t0x0028c342, // n0x07cf c0x0000 (---------------)  + I hb\n\t0x002073c2, // n0x07d0 c0x0000 (---------------)  + I he\n\t0x00200d82, // n0x07d1 c0x0000 (---------------)  + I hi\n\t0x0020a882, // n0x07d2 c0x0000 (---------------)  + I hk\n\t0x00248fc2, // n0x07d3 c0x0000 (---------------)  + I hl\n\t0x0021ab42, // n0x07d4 c0x0000 (---------------)  + I hn\n\t0x002ac642, // n0x07d5 c0x0000 (---------------)  + I jl\n\t0x00251742, // n0x07d6 c0x0000 (---------------)  + I js\n\t0x00313402, // n0x07d7 c0x0000 (---------------)  + I jx\n\t0x0022e8c2, // n0x07d8 c0x0000 (---------------)  + I ln\n\t0x00209003, // n0x07d9 c0x0000 (---------------)  + I mil\n\t0x00207102, // n0x07da c0x0000 (---------------)  + I mo\n\t0x0021fe03, // n0x07db c0x0000 (---------------)  + I net\n\t0x0023db02, // n0x07dc c0x0000 (---------------)  + I nm\n\t0x0026a782, // n0x07dd c0x0000 (---------------)  + I nx\n\t0x0022d1c3, // n0x07de c0x0000 (---------------)  + I org\n\t0x0024f202, // n0x07df c0x0000 (---------------)  + I qh\n\t0x00200702, // n0x07e0 c0x0000 (---------------)  + I sc\n\t0x002496c2, // n0x07e1 c0x0000 (---------------)  + I sd\n\t0x00201342, // n0x07e2 c0x0000 (---------------)  + I sh\n\t0x00214182, // n0x07e3 c0x0000 (---------------)  + I sn\n\t0x002f2802, // n0x07e4 c0x0000 (---------------)  + I sx\n\t0x00226782, // n0x07e5 c0x0000 (---------------)  + I tj\n\t0x0024e502, // n0x07e6 c0x0000 (---------------)  + I tw\n\t0x0036f4c2, // n0x07e7 c0x0000 (---------------)  + I xj\n\t0x003029ca, // n0x07e8 c0x0000 (---------------)  + I xn--55qx5d\n\t0x0034280a, // n0x07e9 c0x0000 (---------------)  + I xn--io0a7i\n\t0x0037648a, // n0x07ea c0x0000 (---------------)  + I xn--od0alg\n\t0x003a6cc2, // n0x07eb c0x0000 (---------------)  + I xz\n\t0x00213642, // n0x07ec c0x0000 (---------------)  + I yn\n\t0x00247702, // n0x07ed c0x0000 (---------------)  + I zj\n\t0x0e835247, // n0x07ee c0x003a (n0x07ef-n0x07f0)  +   compute\n\t0x00039b8a, // n0x07ef c0x0000 (---------------)  +   cn-north-1\n\t0x0f2f6409, // n0x07f0 c0x003c (n0x07f1-n0x07f2)  o I amazonaws\n\t0x0f639b8a, // n0x07f1 c0x003d (n0x07f2-n0x07f3)  o I cn-north-1\n\t0x0004a542, // n0x07f2 c0x0000 (---------------)  +   s3\n\t0x0024bf84, // n0x07f3 c0x0000 (---------------)  + I arts\n\t0x0fe33503, // n0x07f4 c0x003f (n0x0800-n0x0801)  + I com\n\t0x0023a783, // n0x07f5 c0x0000 (---------------)  + I edu\n\t0x0024d9c4, // n0x07f6 c0x0000 (---------------)  + I firm\n\t0x0026cc83, // n0x07f7 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x07f8 c0x0000 (---------------)  + I info\n\t0x00201603, // n0x07f9 c0x0000 (---------------)  + I int\n\t0x00209003, // n0x07fa c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x07fb c0x0000 (---------------)  + I net\n\t0x00201483, // n0x07fc c0x0000 (---------------)  + I nom\n\t0x0022d1c3, // n0x07fd c0x0000 (---------------)  + I org\n\t0x0022a5c3, // n0x07fe c0x0000 (---------------)  + I rec\n\t0x00221a03, // n0x07ff c0x0000 (---------------)  + I web\n\t0x000ffa08, // n0x0800 c0x0000 (---------------)  +   blogspot\n\t0x00131905, // n0x0801 c0x0000 (---------------)  +   1kapp\n\t0x0010a942, // n0x0802 c0x0000 (---------------)  +   4u\n\t0x00175846, // n0x0803 c0x0000 (---------------)  +   africa\n\t0x106f6409, // n0x0804 c0x0041 (n0x08d7-n0x08eb)  o I amazonaws\n\t0x000092c7, // n0x0805 c0x0000 (---------------)  +   appspot\n\t0x00000a42, // n0x0806 c0x0000 (---------------)  +   ar\n\t0x0019bcca, // n0x0807 c0x0000 (---------------)  +   betainabox\n\t0x000fb147, // n0x0808 c0x0000 (---------------)  +   blogdns\n\t0x000ffa08, // n0x0809 c0x0000 (---------------)  +   blogspot\n\t0x0001c402, // n0x080a c0x0000 (---------------)  +   br\n\t0x001387c7, // n0x080b c0x0000 (---------------)  +   cechire\n\t0x00194fcf, // n0x080c c0x0000 (---------------)  +   cloudcontrolapp\n\t0x00108b4f, // n0x080d c0x0000 (---------------)  +   cloudcontrolled\n\t0x0001ba42, // n0x080e c0x0000 (---------------)  +   cn\n\t0x00000742, // n0x080f c0x0000 (---------------)  +   co\n\t0x0009bd08, // n0x0810 c0x0000 (---------------)  +   codespot\n\t0x00004d82, // n0x0811 c0x0000 (---------------)  +   de\n\t0x0014c048, // n0x0812 c0x0000 (---------------)  +   dnsalias\n\t0x0007c9c7, // n0x0813 c0x0000 (---------------)  +   dnsdojo\n\t0x00014e0b, // n0x0814 c0x0000 (---------------)  +   doesntexist\n\t0x0016a009, // n0x0815 c0x0000 (---------------)  +   dontexist\n\t0x0014bf47, // n0x0816 c0x0000 (---------------)  +   doomdns\n\t0x000f410c, // n0x0817 c0x0000 (---------------)  +   dreamhosters\n\t0x0008cdc7, // n0x0818 c0x0000 (---------------)  +   dsmynas\n\t0x0012328a, // n0x0819 c0x0000 (---------------)  +   dyn-o-saur\n\t0x00197b48, // n0x081a c0x0000 (---------------)  +   dynalias\n\t0x00073dce, // n0x081b c0x0000 (---------------)  +   dyndns-at-home\n\t0x000dba8e, // n0x081c c0x0000 (---------------)  +   dyndns-at-work\n\t0x000faf8b, // n0x081d c0x0000 (---------------)  +   dyndns-blog\n\t0x000e7b4b, // n0x081e c0x0000 (---------------)  +   dyndns-free\n\t0x0001388b, // n0x081f c0x0000 (---------------)  +   dyndns-home\n\t0x00015c09, // n0x0820 c0x0000 (---------------)  +   dyndns-ip\n\t0x0001b40b, // n0x0821 c0x0000 (---------------)  +   dyndns-mail\n\t0x000214cd, // n0x0822 c0x0000 (---------------)  +   dyndns-office\n\t0x0002554b, // n0x0823 c0x0000 (---------------)  +   dyndns-pics\n\t0x0002698d, // n0x0824 c0x0000 (---------------)  +   dyndns-remote\n\t0x0002d40d, // n0x0825 c0x0000 (---------------)  +   dyndns-server\n\t0x0002e48a, // n0x0826 c0x0000 (---------------)  +   dyndns-web\n\t0x0017c2cb, // n0x0827 c0x0000 (---------------)  +   dyndns-wiki\n\t0x00151d4b, // n0x0828 c0x0000 (---------------)  +   dyndns-work\n\t0x0001e810, // n0x0829 c0x0000 (---------------)  +   elasticbeanstalk\n\t0x0002bb8f, // n0x082a c0x0000 (---------------)  +   est-a-la-maison\n\t0x0000a14f, // n0x082b c0x0000 (---------------)  +   est-a-la-masion\n\t0x0015234d, // n0x082c c0x0000 (---------------)  +   est-le-patron\n\t0x0013c450, // n0x082d c0x0000 (---------------)  +   est-mon-blogueur\n\t0x00004b82, // n0x082e c0x0000 (---------------)  +   eu\n\t0x00008f88, // n0x082f c0x0000 (---------------)  +   familyds\n\t0x11a4e285, // n0x0830 c0x0046 (n0x08f9-n0x08fa)  o I fbsbx\n\t0x0004c6cb, // n0x0831 c0x0000 (---------------)  +   firebaseapp\n\t0x000549c8, // n0x0832 c0x0000 (---------------)  +   flynnhub\n\t0x00063d87, // n0x0833 c0x0000 (---------------)  +   from-ak\n\t0x000640c7, // n0x0834 c0x0000 (---------------)  +   from-al\n\t0x00064287, // n0x0835 c0x0000 (---------------)  +   from-ar\n\t0x00065347, // n0x0836 c0x0000 (---------------)  +   from-ca\n\t0x00065e07, // n0x0837 c0x0000 (---------------)  +   from-ct\n\t0x00066587, // n0x0838 c0x0000 (---------------)  +   from-dc\n\t0x00067007, // n0x0839 c0x0000 (---------------)  +   from-de\n\t0x00067547, // n0x083a c0x0000 (---------------)  +   from-fl\n\t0x00067b87, // n0x083b c0x0000 (---------------)  +   from-ga\n\t0x00067f07, // n0x083c c0x0000 (---------------)  +   from-hi\n\t0x00068787, // n0x083d c0x0000 (---------------)  +   from-ia\n\t0x00068947, // n0x083e c0x0000 (---------------)  +   from-id\n\t0x00068b07, // n0x083f c0x0000 (---------------)  +   from-il\n\t0x00068cc7, // n0x0840 c0x0000 (---------------)  +   from-in\n\t0x00068fc7, // n0x0841 c0x0000 (---------------)  +   from-ks\n\t0x00069ac7, // n0x0842 c0x0000 (---------------)  +   from-ky\n\t0x0006a5c7, // n0x0843 c0x0000 (---------------)  +   from-ma\n\t0x0006aa87, // n0x0844 c0x0000 (---------------)  +   from-md\n\t0x0006b007, // n0x0845 c0x0000 (---------------)  +   from-mi\n\t0x0006bd87, // n0x0846 c0x0000 (---------------)  +   from-mn\n\t0x0006bf47, // n0x0847 c0x0000 (---------------)  +   from-mo\n\t0x0006c247, // n0x0848 c0x0000 (---------------)  +   from-ms\n\t0x0006c787, // n0x0849 c0x0000 (---------------)  +   from-mt\n\t0x0006c987, // n0x084a c0x0000 (---------------)  +   from-nc\n\t0x0006d307, // n0x084b c0x0000 (---------------)  +   from-nd\n\t0x0006d4c7, // n0x084c c0x0000 (---------------)  +   from-ne\n\t0x0006d8c7, // n0x084d c0x0000 (---------------)  +   from-nh\n\t0x0006e007, // n0x084e c0x0000 (---------------)  +   from-nj\n\t0x0006e4c7, // n0x084f c0x0000 (---------------)  +   from-nm\n\t0x0006ef87, // n0x0850 c0x0000 (---------------)  +   from-nv\n\t0x0006f587, // n0x0851 c0x0000 (---------------)  +   from-oh\n\t0x0006f847, // n0x0852 c0x0000 (---------------)  +   from-ok\n\t0x0006fbc7, // n0x0853 c0x0000 (---------------)  +   from-or\n\t0x0006fd87, // n0x0854 c0x0000 (---------------)  +   from-pa\n\t0x00070107, // n0x0855 c0x0000 (---------------)  +   from-pr\n\t0x000708c7, // n0x0856 c0x0000 (---------------)  +   from-ri\n\t0x00070f07, // n0x0857 c0x0000 (---------------)  +   from-sc\n\t0x00071307, // n0x0858 c0x0000 (---------------)  +   from-sd\n\t0x00073147, // n0x0859 c0x0000 (---------------)  +   from-tn\n\t0x00073307, // n0x085a c0x0000 (---------------)  +   from-tx\n\t0x00073747, // n0x085b c0x0000 (---------------)  +   from-ut\n\t0x00074607, // n0x085c c0x0000 (---------------)  +   from-va\n\t0x00074c47, // n0x085d c0x0000 (---------------)  +   from-vt\n\t0x00074f47, // n0x085e c0x0000 (---------------)  +   from-wa\n\t0x00075107, // n0x085f c0x0000 (---------------)  +   from-wi\n\t0x00075487, // n0x0860 c0x0000 (---------------)  +   from-wv\n\t0x00076607, // n0x0861 c0x0000 (---------------)  +   from-wy\n\t0x0000d202, // n0x0862 c0x0000 (---------------)  +   gb\n\t0x000d4487, // n0x0863 c0x0000 (---------------)  +   getmyip\n\t0x11cca40b, // n0x0864 c0x0047 (n0x08fa-n0x08fd)  +   githubcloud\n\t0x014ca416, // n0x0865 c0x0005 (---------------)* o   githubcloudusercontent\n\t0x00019511, // n0x0866 c0x0000 (---------------)  +   githubusercontent\n\t0x000df54a, // n0x0867 c0x0000 (---------------)  +   googleapis\n\t0x0009bb8a, // n0x0868 c0x0000 (---------------)  +   googlecode\n\t0x00057d06, // n0x0869 c0x0000 (---------------)  +   gotdns\n\t0x00011ecb, // n0x086a c0x0000 (---------------)  +   gotpantheon\n\t0x00000c82, // n0x086b c0x0000 (---------------)  +   gr\n\t0x000992c9, // n0x086c c0x0000 (---------------)  +   herokuapp\n\t0x00091f49, // n0x086d c0x0000 (---------------)  +   herokussl\n\t0x0000a882, // n0x086e c0x0000 (---------------)  +   hk\n\t0x0014cfca, // n0x086f c0x0000 (---------------)  +   hobby-site\n\t0x000a59c9, // n0x0870 c0x0000 (---------------)  +   homelinux\n\t0x000a6fc8, // n0x0871 c0x0000 (---------------)  +   homeunix\n\t0x000195c2, // n0x0872 c0x0000 (---------------)  +   hu\n\t0x00116f89, // n0x0873 c0x0000 (---------------)  +   iamallama\n\t0x0016d68e, // n0x0874 c0x0000 (---------------)  +   is-a-anarchist\n\t0x000a3ecc, // n0x0875 c0x0000 (---------------)  +   is-a-blogger\n\t0x000d254f, // n0x0876 c0x0000 (---------------)  +   is-a-bookkeeper\n\t0x0018ba8e, // n0x0877 c0x0000 (---------------)  +   is-a-bulls-fan\n\t0x0000de0c, // n0x0878 c0x0000 (---------------)  +   is-a-caterer\n\t0x00012789, // n0x0879 c0x0000 (---------------)  +   is-a-chef\n\t0x00013d11, // n0x087a c0x0000 (---------------)  +   is-a-conservative\n\t0x00016c08, // n0x087b c0x0000 (---------------)  +   is-a-cpa\n\t0x00024852, // n0x087c c0x0000 (---------------)  +   is-a-cubicle-slave\n\t0x0002648d, // n0x087d c0x0000 (---------------)  +   is-a-democrat\n\t0x0002db8d, // n0x087e c0x0000 (---------------)  +   is-a-designer\n\t0x0017614b, // n0x087f c0x0000 (---------------)  +   is-a-doctor\n\t0x00178815, // n0x0880 c0x0000 (---------------)  +   is-a-financialadvisor\n\t0x0004e989, // n0x0881 c0x0000 (---------------)  +   is-a-geek\n\t0x0005028a, // n0x0882 c0x0000 (---------------)  +   is-a-green\n\t0x00059389, // n0x0883 c0x0000 (---------------)  +   is-a-guru\n\t0x0005bd50, // n0x0884 c0x0000 (---------------)  +   is-a-hard-worker\n\t0x000662cb, // n0x0885 c0x0000 (---------------)  +   is-a-hunter\n\t0x00070a4f, // n0x0886 c0x0000 (---------------)  +   is-a-landscaper\n\t0x0007434b, // n0x0887 c0x0000 (---------------)  +   is-a-lawyer\n\t0x0007b5cc, // n0x0888 c0x0000 (---------------)  +   is-a-liberal\n\t0x0007dbd0, // n0x0889 c0x0000 (---------------)  +   is-a-libertarian\n\t0x00082fca, // n0x088a c0x0000 (---------------)  +   is-a-llama\n\t0x0008394d, // n0x088b c0x0000 (---------------)  +   is-a-musician\n\t0x0008894e, // n0x088c c0x0000 (---------------)  +   is-a-nascarfan\n\t0x0014414a, // n0x088d c0x0000 (---------------)  +   is-a-nurse\n\t0x00089f0c, // n0x088e c0x0000 (---------------)  +   is-a-painter\n\t0x00094ed4, // n0x088f c0x0000 (---------------)  +   is-a-personaltrainer\n\t0x00098f51, // n0x0890 c0x0000 (---------------)  +   is-a-photographer\n\t0x0009e80b, // n0x0891 c0x0000 (---------------)  +   is-a-player\n\t0x0009f58f, // n0x0892 c0x0000 (---------------)  +   is-a-republican\n\t0x000a0f8d, // n0x0893 c0x0000 (---------------)  +   is-a-rockstar\n\t0x000a384e, // n0x0894 c0x0000 (---------------)  +   is-a-socialist\n\t0x000abc0c, // n0x0895 c0x0000 (---------------)  +   is-a-student\n\t0x000d5b8c, // n0x0896 c0x0000 (---------------)  +   is-a-teacher\n\t0x000d588b, // n0x0897 c0x0000 (---------------)  +   is-a-techie\n\t0x000beb8e, // n0x0898 c0x0000 (---------------)  +   is-a-therapist\n\t0x000d9990, // n0x0899 c0x0000 (---------------)  +   is-an-accountant\n\t0x000ad54b, // n0x089a c0x0000 (---------------)  +   is-an-actor\n\t0x000d540d, // n0x089b c0x0000 (---------------)  +   is-an-actress\n\t0x000fb60f, // n0x089c c0x0000 (---------------)  +   is-an-anarchist\n\t0x0010390c, // n0x089d c0x0000 (---------------)  +   is-an-artist\n\t0x00168fce, // n0x089e c0x0000 (---------------)  +   is-an-engineer\n\t0x000b2bd1, // n0x089f c0x0000 (---------------)  +   is-an-entertainer\n\t0x000b924c, // n0x08a0 c0x0000 (---------------)  +   is-certified\n\t0x000bb247, // n0x08a1 c0x0000 (---------------)  +   is-gone\n\t0x000be5cd, // n0x08a2 c0x0000 (---------------)  +   is-into-anime\n\t0x00105d8c, // n0x08a3 c0x0000 (---------------)  +   is-into-cars\n\t0x00147b50, // n0x08a4 c0x0000 (---------------)  +   is-into-cartoons\n\t0x0016fecd, // n0x08a5 c0x0000 (---------------)  +   is-into-games\n\t0x000cf347, // n0x08a6 c0x0000 (---------------)  +   is-leet\n\t0x0017e2d0, // n0x08a7 c0x0000 (---------------)  +   is-not-certified\n\t0x000e9488, // n0x08a8 c0x0000 (---------------)  +   is-slick\n\t0x000ef04b, // n0x08a9 c0x0000 (---------------)  +   is-uberleet\n\t0x0014bbcf, // n0x08aa c0x0000 (---------------)  +   is-with-theband\n\t0x0008e588, // n0x08ab c0x0000 (---------------)  +   isa-geek\n\t0x000df74d, // n0x08ac c0x0000 (---------------)  +   isa-hockeynut\n\t0x00168110, // n0x08ad c0x0000 (---------------)  +   issmarterthanyou\n\t0x000aedc3, // n0x08ae c0x0000 (---------------)  +   jpn\n\t0x00006fc2, // n0x08af c0x0000 (---------------)  +   kr\n\t0x00058c49, // n0x08b0 c0x0000 (---------------)  +   likes-pie\n\t0x00073bca, // n0x08b1 c0x0000 (---------------)  +   likescandy\n\t0x00005303, // n0x08b2 c0x0000 (---------------)  +   mex\n\t0x0010b007, // n0x08b3 c0x0000 (---------------)  +   mydrobo\n\t0x001176c8, // n0x08b4 c0x0000 (---------------)  +   neat-url\n\t0x00184847, // n0x08b5 c0x0000 (---------------)  +   nfshost\n\t0x00000c02, // n0x08b6 c0x0000 (---------------)  +   no\n\t0x00064d0a, // n0x08b7 c0x0000 (---------------)  +   operaunite\n\t0x00194d4f, // n0x08b8 c0x0000 (---------------)  +   outsystemscloud\n\t0x000eaf0c, // n0x08b9 c0x0000 (---------------)  +   pagefrontapp\n\t0x000eb1d2, // n0x08ba c0x0000 (---------------)  +   pagespeedmobilizer\n\t0x122e1605, // n0x08bb c0x0048 (n0x08fd-n0x08fe)  o I prgmr\n\t0x00114683, // n0x08bc c0x0000 (---------------)  +   qa2\n\t0x0017cd42, // n0x08bd c0x0000 (---------------)  +   qc\n\t0x000ecb08, // n0x08be c0x0000 (---------------)  +   rackmaze\n\t0x00108ac7, // n0x08bf c0x0000 (---------------)  +   rhcloud\n\t0x00002202, // n0x08c0 c0x0000 (---------------)  +   ro\n\t0x00011302, // n0x08c1 c0x0000 (---------------)  +   ru\n\t0x000004c2, // n0x08c2 c0x0000 (---------------)  +   sa\n\t0x00033810, // n0x08c3 c0x0000 (---------------)  +   saves-the-whales\n\t0x000046c2, // n0x08c4 c0x0000 (---------------)  +   se\n\t0x0006ba86, // n0x08c5 c0x0000 (---------------)  +   selfip\n\t0x0013738e, // n0x08c6 c0x0000 (---------------)  +   sells-for-less\n\t0x0008becb, // n0x08c7 c0x0000 (---------------)  +   sells-for-u\n\t0x000cb7c8, // n0x08c8 c0x0000 (---------------)  +   servebbs\n\t0x000d0eca, // n0x08c9 c0x0000 (---------------)  +   simple-url\n\t0x000f7b87, // n0x08ca c0x0000 (---------------)  +   sinaapp\n\t0x0000bb4d, // n0x08cb c0x0000 (---------------)  +   space-to-rent\n\t0x001557cc, // n0x08cc c0x0000 (---------------)  +   teaches-yoga\n\t0x00000f82, // n0x08cd c0x0000 (---------------)  +   uk\n\t0x00002382, // n0x08ce c0x0000 (---------------)  +   us\n\t0x00001802, // n0x08cf c0x0000 (---------------)  +   uy\n\t0x000f7aca, // n0x08d0 c0x0000 (---------------)  +   vipsinaapp\n\t0x000df44a, // n0x08d1 c0x0000 (---------------)  +   withgoogle\n\t0x000e470b, // n0x08d2 c0x0000 (---------------)  +   withyoutube\n\t0x000ff78e, // n0x08d3 c0x0000 (---------------)  +   writesthisblog\n\t0x0001bc0d, // n0x08d4 c0x0000 (---------------)  +   xenapponazure\n\t0x000d6f08, // n0x08d5 c0x0000 (---------------)  +   yolasite\n\t0x00005f82, // n0x08d6 c0x0000 (---------------)  +   za\n\t0x10a5f44e, // n0x08d7 c0x0042 (n0x08eb-n0x08ec)  o I ap-northeast-2\n\t0x10c35247, // n0x08d8 c0x0043 (n0x08ec-n0x08f6)  +   compute\n\t0x11035249, // n0x08d9 c0x0044 (n0x08f6-n0x08f8)  +   compute-1\n\t0x00010743, // n0x08da c0x0000 (---------------)  +   elb\n\t0x11672e4c, // n0x08db c0x0045 (n0x08f8-n0x08f9)  o I eu-central-1\n\t0x0004a542, // n0x08dc c0x0000 (---------------)  +   s3\n\t0x00132491, // n0x08dd c0x0000 (---------------)  +   s3-ap-northeast-1\n\t0x0005f391, // n0x08de c0x0000 (---------------)  +   s3-ap-northeast-2\n\t0x00131511, // n0x08df c0x0000 (---------------)  +   s3-ap-southeast-1\n\t0x0004a551, // n0x08e0 c0x0000 (---------------)  +   s3-ap-southeast-2\n\t0x00072d8f, // n0x08e1 c0x0000 (---------------)  +   s3-eu-central-1\n\t0x001101cc, // n0x08e2 c0x0000 (---------------)  +   s3-eu-west-1\n\t0x0011b34d, // n0x08e3 c0x0000 (---------------)  +   s3-external-1\n\t0x0012364d, // n0x08e4 c0x0000 (---------------)  +   s3-external-2\n\t0x00126215, // n0x08e5 c0x0000 (---------------)  +   s3-fips-us-gov-west-1\n\t0x0014694c, // n0x08e6 c0x0000 (---------------)  +   s3-sa-east-1\n\t0x000de150, // n0x08e7 c0x0000 (---------------)  +   s3-us-gov-west-1\n\t0x000c158c, // n0x08e8 c0x0000 (---------------)  +   s3-us-west-1\n\t0x000dc7cc, // n0x08e9 c0x0000 (---------------)  +   s3-us-west-2\n\t0x0017ca09, // n0x08ea c0x0000 (---------------)  +   us-east-1\n\t0x0004a542, // n0x08eb c0x0000 (---------------)  +   s3\n\t0x0013254e, // n0x08ec c0x0000 (---------------)  +   ap-northeast-1\n\t0x0005f44e, // n0x08ed c0x0000 (---------------)  +   ap-northeast-2\n\t0x001315ce, // n0x08ee c0x0000 (---------------)  +   ap-southeast-1\n\t0x0004a60e, // n0x08ef c0x0000 (---------------)  +   ap-southeast-2\n\t0x00072e4c, // n0x08f0 c0x0000 (---------------)  +   eu-central-1\n\t0x00110289, // n0x08f1 c0x0000 (---------------)  +   eu-west-1\n\t0x00146a09, // n0x08f2 c0x0000 (---------------)  +   sa-east-1\n\t0x000de20d, // n0x08f3 c0x0000 (---------------)  +   us-gov-west-1\n\t0x000c1649, // n0x08f4 c0x0000 (---------------)  +   us-west-1\n\t0x000dc889, // n0x08f5 c0x0000 (---------------)  +   us-west-2\n\t0x0002a043, // n0x08f6 c0x0000 (---------------)  +   z-1\n\t0x0013e5c3, // n0x08f7 c0x0000 (---------------)  +   z-2\n\t0x0004a542, // n0x08f8 c0x0000 (---------------)  +   s3\n\t0x000092c4, // n0x08f9 c0x0000 (---------------)  +   apps\n\t0x014bedc3, // n0x08fa c0x0005 (---------------)* o   api\n\t0x0140ba03, // n0x08fb c0x0005 (---------------)* o   ext\n\t0x000e2dc4, // n0x08fc c0x0000 (---------------)  +   gist\n\t0x0001bc03, // n0x08fd c0x0000 (---------------)  +   xen\n\t0x00201542, // n0x08fe c0x0000 (---------------)  + I ac\n\t0x00200742, // n0x08ff c0x0000 (---------------)  + I co\n\t0x00202602, // n0x0900 c0x0000 (---------------)  + I ed\n\t0x00207502, // n0x0901 c0x0000 (---------------)  + I fi\n\t0x00202d42, // n0x0902 c0x0000 (---------------)  + I go\n\t0x00200282, // n0x0903 c0x0000 (---------------)  + I or\n\t0x002004c2, // n0x0904 c0x0000 (---------------)  + I sa\n\t0x00233503, // n0x0905 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x0906 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x0907 c0x0000 (---------------)  + I gov\n\t0x003a1083, // n0x0908 c0x0000 (---------------)  + I inf\n\t0x0021fe03, // n0x0909 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x090a c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x090b c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x090c c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x090d c0x0000 (---------------)  + I edu\n\t0x0021fe03, // n0x090e c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x090f c0x0000 (---------------)  + I org\n\t0x00048f43, // n0x0910 c0x0000 (---------------)  +   ath\n\t0x0026cc83, // n0x0911 c0x0000 (---------------)  + I gov\n\t0x00201542, // n0x0912 c0x0000 (---------------)  + I ac\n\t0x00330b83, // n0x0913 c0x0000 (---------------)  + I biz\n\t0x13e33503, // n0x0914 c0x004f (n0x091f-n0x0920)  + I com\n\t0x0027a1c7, // n0x0915 c0x0000 (---------------)  + I ekloges\n\t0x0026cc83, // n0x0916 c0x0000 (---------------)  + I gov\n\t0x00322cc3, // n0x0917 c0x0000 (---------------)  + I ltd\n\t0x00205284, // n0x0918 c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x0919 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x091a c0x0000 (---------------)  + I org\n\t0x0028440a, // n0x091b c0x0000 (---------------)  + I parliament\n\t0x00247505, // n0x091c c0x0000 (---------------)  + I press\n\t0x00220e43, // n0x091d c0x0000 (---------------)  + I pro\n\t0x00200142, // n0x091e c0x0000 (---------------)  + I tm\n\t0x000ffa08, // n0x091f c0x0000 (---------------)  +   blogspot\n\t0x000ffa08, // n0x0920 c0x0000 (---------------)  +   blogspot\n\t0x00000742, // n0x0921 c0x0000 (---------------)  +   co\n\t0x000ffa08, // n0x0922 c0x0000 (---------------)  +   blogspot\n\t0x00033503, // n0x0923 c0x0000 (---------------)  +   com\n\t0x000afa4f, // n0x0924 c0x0000 (---------------)  +   fuettertdasnetz\n\t0x0016a18a, // n0x0925 c0x0000 (---------------)  +   isteingeek\n\t0x000a3b07, // n0x0926 c0x0000 (---------------)  +   istmein\n\t0x0001fc8a, // n0x0927 c0x0000 (---------------)  +   lebtimnetz\n\t0x0018460a, // n0x0928 c0x0000 (---------------)  +   leitungsen\n\t0x00004acd, // n0x0929 c0x0000 (---------------)  +   traeumtgerade\n\t0x000ffa08, // n0x092a c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x092b c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x092c c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x092d c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x092e c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x092f c0x0000 (---------------)  + I org\n\t0x002011c3, // n0x0930 c0x0000 (---------------)  + I art\n\t0x00233503, // n0x0931 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x0932 c0x0000 (---------------)  + I edu\n\t0x00213183, // n0x0933 c0x0000 (---------------)  + I gob\n\t0x0026cc83, // n0x0934 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x0935 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x0936 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0937 c0x0000 (---------------)  + I org\n\t0x00292103, // n0x0938 c0x0000 (---------------)  + I sld\n\t0x00221a03, // n0x0939 c0x0000 (---------------)  + I web\n\t0x002011c3, // n0x093a c0x0000 (---------------)  + I art\n\t0x002d4884, // n0x093b c0x0000 (---------------)  + I asso\n\t0x00233503, // n0x093c c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x093d c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x093e c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x093f c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0940 c0x0000 (---------------)  + I org\n\t0x00208103, // n0x0941 c0x0000 (---------------)  + I pol\n\t0x00233503, // n0x0942 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x0943 c0x0000 (---------------)  + I edu\n\t0x00207503, // n0x0944 c0x0000 (---------------)  + I fin\n\t0x00213183, // n0x0945 c0x0000 (---------------)  + I gob\n\t0x0026cc83, // n0x0946 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x0947 c0x0000 (---------------)  + I info\n\t0x00309ac3, // n0x0948 c0x0000 (---------------)  + I k12\n\t0x00213ac3, // n0x0949 c0x0000 (---------------)  + I med\n\t0x00209003, // n0x094a c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x094b c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x094c c0x0000 (---------------)  + I org\n\t0x00220e43, // n0x094d c0x0000 (---------------)  + I pro\n\t0x003a6543, // n0x094e c0x0000 (---------------)  + I aip\n\t0x16233503, // n0x094f c0x0058 (n0x0958-n0x0959)  + I com\n\t0x0023a783, // n0x0950 c0x0000 (---------------)  + I edu\n\t0x002b9443, // n0x0951 c0x0000 (---------------)  + I fie\n\t0x0026cc83, // n0x0952 c0x0000 (---------------)  + I gov\n\t0x0027b703, // n0x0953 c0x0000 (---------------)  + I lib\n\t0x00213ac3, // n0x0954 c0x0000 (---------------)  + I med\n\t0x0022d1c3, // n0x0955 c0x0000 (---------------)  + I org\n\t0x00204603, // n0x0956 c0x0000 (---------------)  + I pri\n\t0x00320cc4, // n0x0957 c0x0000 (---------------)  + I riik\n\t0x000ffa08, // n0x0958 c0x0000 (---------------)  +   blogspot\n\t0x16a33503, // n0x0959 c0x005a (n0x0962-n0x0963)  + I com\n\t0x0023a783, // n0x095a c0x0000 (---------------)  + I edu\n\t0x002a7083, // n0x095b c0x0000 (---------------)  + I eun\n\t0x0026cc83, // n0x095c c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x095d c0x0000 (---------------)  + I mil\n\t0x00205284, // n0x095e c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x095f c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0960 c0x0000 (---------------)  + I org\n\t0x0021d703, // n0x0961 c0x0000 (---------------)  + I sci\n\t0x000ffa08, // n0x0962 c0x0000 (---------------)  +   blogspot\n\t0x17233503, // n0x0963 c0x005c (n0x0968-n0x0969)  + I com\n\t0x0023a783, // n0x0964 c0x0000 (---------------)  + I edu\n\t0x00213183, // n0x0965 c0x0000 (---------------)  + I gob\n\t0x00201483, // n0x0966 c0x0000 (---------------)  + I nom\n\t0x0022d1c3, // n0x0967 c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x0968 c0x0000 (---------------)  +   blogspot\n\t0x00330b83, // n0x0969 c0x0000 (---------------)  + I biz\n\t0x00233503, // n0x096a c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x096b c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x096c c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x096d c0x0000 (---------------)  + I info\n\t0x00205284, // n0x096e c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x096f c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0970 c0x0000 (---------------)  + I org\n\t0x0031a845, // n0x0971 c0x0000 (---------------)  + I aland\n\t0x000ffa08, // n0x0972 c0x0000 (---------------)  +   blogspot\n\t0x0003be03, // n0x0973 c0x0000 (---------------)  +   iki\n\t0x002ec408, // n0x0974 c0x0000 (---------------)  + I aeroport\n\t0x00350d87, // n0x0975 c0x0000 (---------------)  + I assedic\n\t0x002d4884, // n0x0976 c0x0000 (---------------)  + I asso\n\t0x0032f106, // n0x0977 c0x0000 (---------------)  + I avocat\n\t0x00346806, // n0x0978 c0x0000 (---------------)  + I avoues\n\t0x000ffa08, // n0x0979 c0x0000 (---------------)  +   blogspot\n\t0x0023fdc3, // n0x097a c0x0000 (---------------)  + I cci\n\t0x00209b49, // n0x097b c0x0000 (---------------)  + I chambagri\n\t0x002b2115, // n0x097c c0x0000 (---------------)  + I chirurgiens-dentistes\n\t0x00233503, // n0x097d c0x0000 (---------------)  + I com\n\t0x0031ee12, // n0x097e c0x0000 (---------------)  + I experts-comptables\n\t0x0031ebcf, // n0x097f c0x0000 (---------------)  + I geometre-expert\n\t0x0033d7c4, // n0x0980 c0x0000 (---------------)  + I gouv\n\t0x0022a885, // n0x0981 c0x0000 (---------------)  + I greta\n\t0x002f2f10, // n0x0982 c0x0000 (---------------)  + I huissier-justice\n\t0x00238bc7, // n0x0983 c0x0000 (---------------)  + I medecin\n\t0x00201483, // n0x0984 c0x0000 (---------------)  + I nom\n\t0x0025c988, // n0x0985 c0x0000 (---------------)  + I notaires\n\t0x0034d60a, // n0x0986 c0x0000 (---------------)  + I pharmacien\n\t0x00246184, // n0x0987 c0x0000 (---------------)  + I port\n\t0x002e1043, // n0x0988 c0x0000 (---------------)  + I prd\n\t0x00247506, // n0x0989 c0x0000 (---------------)  + I presse\n\t0x00200142, // n0x098a c0x0000 (---------------)  + I tm\n\t0x002d1c8b, // n0x098b c0x0000 (---------------)  + I veterinaire\n\t0x00233503, // n0x098c c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x098d c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x098e c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x098f c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x0990 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0991 c0x0000 (---------------)  + I org\n\t0x002e5543, // n0x0992 c0x0000 (---------------)  + I pvt\n\t0x00200742, // n0x0993 c0x0000 (---------------)  + I co\n\t0x0021fe03, // n0x0994 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0995 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x0996 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x0997 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x0998 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x0999 c0x0000 (---------------)  + I mil\n\t0x0022d1c3, // n0x099a c0x0000 (---------------)  + I org\n\t0x00233503, // n0x099b c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x099c c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x099d c0x0000 (---------------)  + I gov\n\t0x00322cc3, // n0x099e c0x0000 (---------------)  + I ltd\n\t0x00218303, // n0x099f c0x0000 (---------------)  + I mod\n\t0x0022d1c3, // n0x09a0 c0x0000 (---------------)  + I org\n\t0x00200742, // n0x09a1 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x09a2 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x09a3 c0x0000 (---------------)  + I edu\n\t0x0021fe03, // n0x09a4 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x09a5 c0x0000 (---------------)  + I org\n\t0x00201542, // n0x09a6 c0x0000 (---------------)  + I ac\n\t0x00233503, // n0x09a7 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x09a8 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x09a9 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x09aa c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x09ab c0x0000 (---------------)  + I org\n\t0x002d4884, // n0x09ac c0x0000 (---------------)  + I asso\n\t0x00233503, // n0x09ad c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x09ae c0x0000 (---------------)  + I edu\n\t0x00207104, // n0x09af c0x0000 (---------------)  + I mobi\n\t0x0021fe03, // n0x09b0 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x09b1 c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x09b2 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x09b3 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x09b4 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x09b5 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x09b6 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x09b7 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x09b8 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x09b9 c0x0000 (---------------)  + I edu\n\t0x00213183, // n0x09ba c0x0000 (---------------)  + I gob\n\t0x0021d883, // n0x09bb c0x0000 (---------------)  + I ind\n\t0x00209003, // n0x09bc c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x09bd c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x09be c0x0000 (---------------)  + I org\n\t0x00200742, // n0x09bf c0x0000 (---------------)  + I co\n\t0x00233503, // n0x09c0 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x09c1 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x09c2 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x09c3 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x09c4 c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x09c5 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x09c6 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x09c7 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x09c8 c0x0000 (---------------)  + I gov\n\t0x00317243, // n0x09c9 c0x0000 (---------------)  + I idv\n\t0x0002e7c3, // n0x09ca c0x0000 (---------------)  +   inc\n\t0x00122cc3, // n0x09cb c0x0000 (---------------)  +   ltd\n\t0x0021fe03, // n0x09cc c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x09cd c0x0000 (---------------)  + I org\n\t0x003029ca, // n0x09ce c0x0000 (---------------)  + I xn--55qx5d\n\t0x0031bd89, // n0x09cf c0x0000 (---------------)  + I xn--ciqpn\n\t0x0033ac4b, // n0x09d0 c0x0000 (---------------)  + I xn--gmq050i\n\t0x0033b1ca, // n0x09d1 c0x0000 (---------------)  + I xn--gmqw5a\n\t0x0034280a, // n0x09d2 c0x0000 (---------------)  + I xn--io0a7i\n\t0x00353a8b, // n0x09d3 c0x0000 (---------------)  + I xn--lcvr32d\n\t0x0036704a, // n0x09d4 c0x0000 (---------------)  + I xn--mk0axi\n\t0x0036fa4a, // n0x09d5 c0x0000 (---------------)  + I xn--mxtq1m\n\t0x0037648a, // n0x09d6 c0x0000 (---------------)  + I xn--od0alg\n\t0x0037670b, // n0x09d7 c0x0000 (---------------)  + I xn--od0aq3b\n\t0x00392609, // n0x09d8 c0x0000 (---------------)  + I xn--tn0ag\n\t0x003941ca, // n0x09d9 c0x0000 (---------------)  + I xn--uc0atv\n\t0x0039470b, // n0x09da c0x0000 (---------------)  + I xn--uc0ay4a\n\t0x0039cfcb, // n0x09db c0x0000 (---------------)  + I xn--wcvs22d\n\t0x003a57ca, // n0x09dc c0x0000 (---------------)  + I xn--zf0avx\n\t0x00233503, // n0x09dd c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x09de c0x0000 (---------------)  + I edu\n\t0x00213183, // n0x09df c0x0000 (---------------)  + I gob\n\t0x00209003, // n0x09e0 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x09e1 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x09e2 c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x09e3 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x09e4 c0x0000 (---------------)  + I com\n\t0x00263d84, // n0x09e5 c0x0000 (---------------)  + I from\n\t0x00212582, // n0x09e6 c0x0000 (---------------)  + I iz\n\t0x00205284, // n0x09e7 c0x0000 (---------------)  + I name\n\t0x002a1985, // n0x09e8 c0x0000 (---------------)  + I adult\n\t0x002011c3, // n0x09e9 c0x0000 (---------------)  + I art\n\t0x002d4884, // n0x09ea c0x0000 (---------------)  + I asso\n\t0x00233503, // n0x09eb c0x0000 (---------------)  + I com\n\t0x0023d684, // n0x09ec c0x0000 (---------------)  + I coop\n\t0x0023a783, // n0x09ed c0x0000 (---------------)  + I edu\n\t0x0024d9c4, // n0x09ee c0x0000 (---------------)  + I firm\n\t0x0033d7c4, // n0x09ef c0x0000 (---------------)  + I gouv\n\t0x003a1244, // n0x09f0 c0x0000 (---------------)  + I info\n\t0x00213ac3, // n0x09f1 c0x0000 (---------------)  + I med\n\t0x0021fe03, // n0x09f2 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x09f3 c0x0000 (---------------)  + I org\n\t0x00295005, // n0x09f4 c0x0000 (---------------)  + I perso\n\t0x00208103, // n0x09f5 c0x0000 (---------------)  + I pol\n\t0x00220e43, // n0x09f6 c0x0000 (---------------)  + I pro\n\t0x00285b43, // n0x09f7 c0x0000 (---------------)  + I rel\n\t0x00352004, // n0x09f8 c0x0000 (---------------)  + I shop\n\t0x002ee544, // n0x09f9 c0x0000 (---------------)  + I 2000\n\t0x00258185, // n0x09fa c0x0000 (---------------)  + I agrar\n\t0x000ffa08, // n0x09fb c0x0000 (---------------)  +   blogspot\n\t0x002f9244, // n0x09fc c0x0000 (---------------)  + I bolt\n\t0x0037bc46, // n0x09fd c0x0000 (---------------)  + I casino\n\t0x00286744, // n0x09fe c0x0000 (---------------)  + I city\n\t0x00200742, // n0x09ff c0x0000 (---------------)  + I co\n\t0x00343507, // n0x0a00 c0x0000 (---------------)  + I erotica\n\t0x00250887, // n0x0a01 c0x0000 (---------------)  + I erotika\n\t0x0024b784, // n0x0a02 c0x0000 (---------------)  + I film\n\t0x0025b085, // n0x0a03 c0x0000 (---------------)  + I forum\n\t0x003700c5, // n0x0a04 c0x0000 (---------------)  + I games\n\t0x00234dc5, // n0x0a05 c0x0000 (---------------)  + I hotel\n\t0x003a1244, // n0x0a06 c0x0000 (---------------)  + I info\n\t0x00224408, // n0x0a07 c0x0000 (---------------)  + I ingatlan\n\t0x00293246, // n0x0a08 c0x0000 (---------------)  + I jogasz\n\t0x002cce48, // n0x0a09 c0x0000 (---------------)  + I konyvelo\n\t0x002435c5, // n0x0a0a c0x0000 (---------------)  + I lakas\n\t0x003025c5, // n0x0a0b c0x0000 (---------------)  + I media\n\t0x00221dc4, // n0x0a0c c0x0000 (---------------)  + I news\n\t0x0022d1c3, // n0x0a0d c0x0000 (---------------)  + I org\n\t0x002e1c44, // n0x0a0e c0x0000 (---------------)  + I priv\n\t0x00352c46, // n0x0a0f c0x0000 (---------------)  + I reklam\n\t0x00247603, // n0x0a10 c0x0000 (---------------)  + I sex\n\t0x00352004, // n0x0a11 c0x0000 (---------------)  + I shop\n\t0x00294905, // n0x0a12 c0x0000 (---------------)  + I sport\n\t0x0023c004, // n0x0a13 c0x0000 (---------------)  + I suli\n\t0x0020b984, // n0x0a14 c0x0000 (---------------)  + I szex\n\t0x00200142, // n0x0a15 c0x0000 (---------------)  + I tm\n\t0x00270746, // n0x0a16 c0x0000 (---------------)  + I tozsde\n\t0x00389006, // n0x0a17 c0x0000 (---------------)  + I utazas\n\t0x002f5685, // n0x0a18 c0x0000 (---------------)  + I video\n\t0x00201542, // n0x0a19 c0x0000 (---------------)  + I ac\n\t0x00330b83, // n0x0a1a c0x0000 (---------------)  + I biz\n\t0x1c200742, // n0x0a1b c0x0070 (n0x0a24-n0x0a25)  + I co\n\t0x0023bb04, // n0x0a1c c0x0000 (---------------)  + I desa\n\t0x00202d42, // n0x0a1d c0x0000 (---------------)  + I go\n\t0x00209003, // n0x0a1e c0x0000 (---------------)  + I mil\n\t0x00226f02, // n0x0a1f c0x0000 (---------------)  + I my\n\t0x0021fe03, // n0x0a20 c0x0000 (---------------)  + I net\n\t0x00200282, // n0x0a21 c0x0000 (---------------)  + I or\n\t0x00217443, // n0x0a22 c0x0000 (---------------)  + I sch\n\t0x00221a03, // n0x0a23 c0x0000 (---------------)  + I web\n\t0x000ffa08, // n0x0a24 c0x0000 (---------------)  +   blogspot\n\t0x000ffa08, // n0x0a25 c0x0000 (---------------)  +   blogspot\n\t0x0026cc83, // n0x0a26 c0x0000 (---------------)  + I gov\n\t0x00201542, // n0x0a27 c0x0000 (---------------)  + I ac\n\t0x1ce00742, // n0x0a28 c0x0073 (n0x0a2f-n0x0a30)  + I co\n\t0x0026cc83, // n0x0a29 c0x0000 (---------------)  + I gov\n\t0x00268a83, // n0x0a2a c0x0000 (---------------)  + I idf\n\t0x00309ac3, // n0x0a2b c0x0000 (---------------)  + I k12\n\t0x002335c4, // n0x0a2c c0x0000 (---------------)  + I muni\n\t0x0021fe03, // n0x0a2d c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0a2e c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x0a2f c0x0000 (---------------)  +   blogspot\n\t0x00201542, // n0x0a30 c0x0000 (---------------)  + I ac\n\t0x1d600742, // n0x0a31 c0x0075 (n0x0a37-n0x0a39)  + I co\n\t0x00233503, // n0x0a32 c0x0000 (---------------)  + I com\n\t0x0021fe03, // n0x0a33 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0a34 c0x0000 (---------------)  + I org\n\t0x0020e842, // n0x0a35 c0x0000 (---------------)  + I tt\n\t0x00224e42, // n0x0a36 c0x0000 (---------------)  + I tv\n\t0x00322cc3, // n0x0a37 c0x0000 (---------------)  + I ltd\n\t0x002db143, // n0x0a38 c0x0000 (---------------)  + I plc\n\t0x00201542, // n0x0a39 c0x0000 (---------------)  + I ac\n\t0x000ffa08, // n0x0a3a c0x0000 (---------------)  +   blogspot\n\t0x00200742, // n0x0a3b c0x0000 (---------------)  + I co\n\t0x0023a783, // n0x0a3c c0x0000 (---------------)  + I edu\n\t0x0024d9c4, // n0x0a3d c0x0000 (---------------)  + I firm\n\t0x00205843, // n0x0a3e c0x0000 (---------------)  + I gen\n\t0x0026cc83, // n0x0a3f c0x0000 (---------------)  + I gov\n\t0x0021d883, // n0x0a40 c0x0000 (---------------)  + I ind\n\t0x00209003, // n0x0a41 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x0a42 c0x0000 (---------------)  + I net\n\t0x00218f83, // n0x0a43 c0x0000 (---------------)  + I nic\n\t0x0022d1c3, // n0x0a44 c0x0000 (---------------)  + I org\n\t0x0021d683, // n0x0a45 c0x0000 (---------------)  + I res\n\t0x0011e793, // n0x0a46 c0x0000 (---------------)  +   barrel-of-knowledge\n\t0x001246d4, // n0x0a47 c0x0000 (---------------)  +   barrell-of-knowledge\n\t0x00013886, // n0x0a48 c0x0000 (---------------)  +   dyndns\n\t0x000562c7, // n0x0a49 c0x0000 (---------------)  +   for-our\n\t0x00155d09, // n0x0a4a c0x0000 (---------------)  +   groks-the\n\t0x000ebb0a, // n0x0a4b c0x0000 (---------------)  +   groks-this\n\t0x00087c4d, // n0x0a4c c0x0000 (---------------)  +   here-for-more\n\t0x001a408a, // n0x0a4d c0x0000 (---------------)  +   knowsitall\n\t0x0006ba86, // n0x0a4e c0x0000 (---------------)  +   selfip\n\t0x000eadc6, // n0x0a4f c0x0000 (---------------)  +   webhop\n\t0x00204b82, // n0x0a50 c0x0000 (---------------)  + I eu\n\t0x00233503, // n0x0a51 c0x0000 (---------------)  + I com\n\t0x00019506, // n0x0a52 c0x0000 (---------------)  +   github\n\t0x00155cc5, // n0x0a53 c0x0000 (---------------)  +   ngrok\n\t0x0000cb83, // n0x0a54 c0x0000 (---------------)  +   nid\n\t0x00011f88, // n0x0a55 c0x0000 (---------------)  +   pantheon\n\t0x000af708, // n0x0a56 c0x0000 (---------------)  +   sandcats\n\t0x00233503, // n0x0a57 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x0a58 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x0a59 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x0a5a c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x0a5b c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0a5c c0x0000 (---------------)  + I org\n\t0x00201542, // n0x0a5d c0x0000 (---------------)  + I ac\n\t0x00200742, // n0x0a5e c0x0000 (---------------)  + I co\n\t0x0026cc83, // n0x0a5f c0x0000 (---------------)  + I gov\n\t0x0020c782, // n0x0a60 c0x0000 (---------------)  + I id\n\t0x0021fe03, // n0x0a61 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0a62 c0x0000 (---------------)  + I org\n\t0x00217443, // n0x0a63 c0x0000 (---------------)  + I sch\n\t0x0035d94f, // n0x0a64 c0x0000 (---------------)  + I xn--mgba3a4f16a\n\t0x0035dd0e, // n0x0a65 c0x0000 (---------------)  + I xn--mgba3a4fra\n\t0x000ffa08, // n0x0a66 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x0a67 c0x0000 (---------------)  + I com\n\t0x00048107, // n0x0a68 c0x0000 (---------------)  +   cupcake\n\t0x0023a783, // n0x0a69 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x0a6a c0x0000 (---------------)  + I gov\n\t0x00201603, // n0x0a6b c0x0000 (---------------)  + I int\n\t0x0021fe03, // n0x0a6c c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0a6d c0x0000 (---------------)  + I org\n\t0x0021ca03, // n0x0a6e c0x0000 (---------------)  + I abr\n\t0x002ed6c7, // n0x0a6f c0x0000 (---------------)  + I abruzzo\n\t0x00201002, // n0x0a70 c0x0000 (---------------)  + I ag\n\t0x002cd4c9, // n0x0a71 c0x0000 (---------------)  + I agrigento\n\t0x002001c2, // n0x0a72 c0x0000 (---------------)  + I al\n\t0x00233b0b, // n0x0a73 c0x0000 (---------------)  + I alessandria\n\t0x002dfc4a, // n0x0a74 c0x0000 (---------------)  + I alto-adige\n\t0x002e3489, // n0x0a75 c0x0000 (---------------)  + I altoadige\n\t0x00200502, // n0x0a76 c0x0000 (---------------)  + I an\n\t0x00350806, // n0x0a77 c0x0000 (---------------)  + I ancona\n\t0x002847d5, // n0x0a78 c0x0000 (---------------)  + I andria-barletta-trani\n\t0x00233c55, // n0x0a79 c0x0000 (---------------)  + I andria-trani-barletta\n\t0x00290513, // n0x0a7a c0x0000 (---------------)  + I andriabarlettatrani\n\t0x002341d3, // n0x0a7b c0x0000 (---------------)  + I andriatranibarletta\n\t0x002029c2, // n0x0a7c c0x0000 (---------------)  + I ao\n\t0x00216fc5, // n0x0a7d c0x0000 (---------------)  + I aosta\n\t0x0030f30c, // n0x0a7e c0x0000 (---------------)  + I aosta-valley\n\t0x00216fcb, // n0x0a7f c0x0000 (---------------)  + I aostavalley\n\t0x00251085, // n0x0a80 c0x0000 (---------------)  + I aoste\n\t0x00200d02, // n0x0a81 c0x0000 (---------------)  + I ap\n\t0x002003c2, // n0x0a82 c0x0000 (---------------)  + I aq\n\t0x0036c346, // n0x0a83 c0x0000 (---------------)  + I aquila\n\t0x00200a42, // n0x0a84 c0x0000 (---------------)  + I ar\n\t0x0027a406, // n0x0a85 c0x0000 (---------------)  + I arezzo\n\t0x00397ccd, // n0x0a86 c0x0000 (---------------)  + I ascoli-piceno\n\t0x0034c1cc, // n0x0a87 c0x0000 (---------------)  + I ascolipiceno\n\t0x0021e884, // n0x0a88 c0x0000 (---------------)  + I asti\n\t0x00200102, // n0x0a89 c0x0000 (---------------)  + I at\n\t0x00203402, // n0x0a8a c0x0000 (---------------)  + I av\n\t0x00224c08, // n0x0a8b c0x0000 (---------------)  + I avellino\n\t0x00202002, // n0x0a8c c0x0000 (---------------)  + I ba\n\t0x00248586, // n0x0a8d c0x0000 (---------------)  + I balsan\n\t0x00249204, // n0x0a8e c0x0000 (---------------)  + I bari\n\t0x00284995, // n0x0a8f c0x0000 (---------------)  + I barletta-trani-andria\n\t0x00290693, // n0x0a90 c0x0000 (---------------)  + I barlettatraniandria\n\t0x00207fc3, // n0x0a91 c0x0000 (---------------)  + I bas\n\t0x0032ee0a, // n0x0a92 c0x0000 (---------------)  + I basilicata\n\t0x0028e2c7, // n0x0a93 c0x0000 (---------------)  + I belluno\n\t0x002e4949, // n0x0a94 c0x0000 (---------------)  + I benevento\n\t0x00228d47, // n0x0a95 c0x0000 (---------------)  + I bergamo\n\t0x002ee482, // n0x0a96 c0x0000 (---------------)  + I bg\n\t0x00200002, // n0x0a97 c0x0000 (---------------)  + I bi\n\t0x003a4cc6, // n0x0a98 c0x0000 (---------------)  + I biella\n\t0x0020c8c2, // n0x0a99 c0x0000 (---------------)  + I bl\n\t0x000ffa08, // n0x0a9a c0x0000 (---------------)  +   blogspot\n\t0x002104c2, // n0x0a9b c0x0000 (---------------)  + I bn\n\t0x0020e402, // n0x0a9c c0x0000 (---------------)  + I bo\n\t0x0038df47, // n0x0a9d c0x0000 (---------------)  + I bologna\n\t0x0020fec7, // n0x0a9e c0x0000 (---------------)  + I bolzano\n\t0x0021c105, // n0x0a9f c0x0000 (---------------)  + I bozen\n\t0x0021c402, // n0x0aa0 c0x0000 (---------------)  + I br\n\t0x0021d647, // n0x0aa1 c0x0000 (---------------)  + I brescia\n\t0x0021d808, // n0x0aa2 c0x0000 (---------------)  + I brindisi\n\t0x00237542, // n0x0aa3 c0x0000 (---------------)  + I bs\n\t0x0021fd02, // n0x0aa4 c0x0000 (---------------)  + I bt\n\t0x00230bc2, // n0x0aa5 c0x0000 (---------------)  + I bz\n\t0x00200302, // n0x0aa6 c0x0000 (---------------)  + I ca\n\t0x0023eb48, // n0x0aa7 c0x0000 (---------------)  + I cagliari\n\t0x00213543, // n0x0aa8 c0x0000 (---------------)  + I cal\n\t0x00285688, // n0x0aa9 c0x0000 (---------------)  + I calabria\n\t0x0023ad8d, // n0x0aaa c0x0000 (---------------)  + I caltanissetta\n\t0x00221ac3, // n0x0aab c0x0000 (---------------)  + I cam\n\t0x00316e08, // n0x0aac c0x0000 (---------------)  + I campania\n\t0x00241acf, // n0x0aad c0x0000 (---------------)  + I campidano-medio\n\t0x00241e8e, // n0x0aae c0x0000 (---------------)  + I campidanomedio\n\t0x0034364a, // n0x0aaf c0x0000 (---------------)  + I campobasso\n\t0x002f6e11, // n0x0ab0 c0x0000 (---------------)  + I carbonia-iglesias\n\t0x002f7290, // n0x0ab1 c0x0000 (---------------)  + I carboniaiglesias\n\t0x002b3b4d, // n0x0ab2 c0x0000 (---------------)  + I carrara-massa\n\t0x002b3e8c, // n0x0ab3 c0x0000 (---------------)  + I carraramassa\n\t0x0022c607, // n0x0ab4 c0x0000 (---------------)  + I caserta\n\t0x0032ef87, // n0x0ab5 c0x0000 (---------------)  + I catania\n\t0x0032f1c9, // n0x0ab6 c0x0000 (---------------)  + I catanzaro\n\t0x0021e982, // n0x0ab7 c0x0000 (---------------)  + I cb\n\t0x00200b42, // n0x0ab8 c0x0000 (---------------)  + I ce\n\t0x0025870c, // n0x0ab9 c0x0000 (---------------)  + I cesena-forli\n\t0x00258a0b, // n0x0aba c0x0000 (---------------)  + I cesenaforli\n\t0x00201582, // n0x0abb c0x0000 (---------------)  + I ch\n\t0x002d5a46, // n0x0abc c0x0000 (---------------)  + I chieti\n\t0x00200682, // n0x0abd c0x0000 (---------------)  + I ci\n\t0x00209182, // n0x0abe c0x0000 (---------------)  + I cl\n\t0x0021ba42, // n0x0abf c0x0000 (---------------)  + I cn\n\t0x00200742, // n0x0ac0 c0x0000 (---------------)  + I co\n\t0x00234804, // n0x0ac1 c0x0000 (---------------)  + I como\n\t0x00240e07, // n0x0ac2 c0x0000 (---------------)  + I cosenza\n\t0x002049c2, // n0x0ac3 c0x0000 (---------------)  + I cr\n\t0x00244d07, // n0x0ac4 c0x0000 (---------------)  + I cremona\n\t0x00245f87, // n0x0ac5 c0x0000 (---------------)  + I crotone\n\t0x00211c82, // n0x0ac6 c0x0000 (---------------)  + I cs\n\t0x00231382, // n0x0ac7 c0x0000 (---------------)  + I ct\n\t0x00247fc5, // n0x0ac8 c0x0000 (---------------)  + I cuneo\n\t0x00229ec2, // n0x0ac9 c0x0000 (---------------)  + I cz\n\t0x0025a38e, // n0x0aca c0x0000 (---------------)  + I dell-ogliastra\n\t0x0026714d, // n0x0acb c0x0000 (---------------)  + I dellogliastra\n\t0x0023a783, // n0x0acc c0x0000 (---------------)  + I edu\n\t0x002543ce, // n0x0acd c0x0000 (---------------)  + I emilia-romagna\n\t0x0036dc0d, // n0x0ace c0x0000 (---------------)  + I emiliaromagna\n\t0x00360a83, // n0x0acf c0x0000 (---------------)  + I emr\n\t0x00202bc2, // n0x0ad0 c0x0000 (---------------)  + I en\n\t0x00205a84, // n0x0ad1 c0x0000 (---------------)  + I enna\n\t0x0024b242, // n0x0ad2 c0x0000 (---------------)  + I fc\n\t0x0020b302, // n0x0ad3 c0x0000 (---------------)  + I fe\n\t0x002e2545, // n0x0ad4 c0x0000 (---------------)  + I fermo\n\t0x00300807, // n0x0ad5 c0x0000 (---------------)  + I ferrara\n\t0x0035d282, // n0x0ad6 c0x0000 (---------------)  + I fg\n\t0x00207502, // n0x0ad7 c0x0000 (---------------)  + I fi\n\t0x0024d307, // n0x0ad8 c0x0000 (---------------)  + I firenze\n\t0x00252748, // n0x0ad9 c0x0000 (---------------)  + I florence\n\t0x00242902, // n0x0ada c0x0000 (---------------)  + I fm\n\t0x003a12c6, // n0x0adb c0x0000 (---------------)  + I foggia\n\t0x0025858c, // n0x0adc c0x0000 (---------------)  + I forli-cesena\n\t0x002588cb, // n0x0add c0x0000 (---------------)  + I forlicesena\n\t0x00200582, // n0x0ade c0x0000 (---------------)  + I fr\n\t0x0026050f, // n0x0adf c0x0000 (---------------)  + I friuli-v-giulia\n\t0x002608d0, // n0x0ae0 c0x0000 (---------------)  + I friuli-ve-giulia\n\t0x00260ccf, // n0x0ae1 c0x0000 (---------------)  + I friuli-vegiulia\n\t0x00261095, // n0x0ae2 c0x0000 (---------------)  + I friuli-venezia-giulia\n\t0x002615d4, // n0x0ae3 c0x0000 (---------------)  + I friuli-veneziagiulia\n\t0x00261ace, // n0x0ae4 c0x0000 (---------------)  + I friuli-vgiulia\n\t0x00261e4e, // n0x0ae5 c0x0000 (---------------)  + I friuliv-giulia\n\t0x002621cf, // n0x0ae6 c0x0000 (---------------)  + I friulive-giulia\n\t0x0026258e, // n0x0ae7 c0x0000 (---------------)  + I friulivegiulia\n\t0x00262914, // n0x0ae8 c0x0000 (---------------)  + I friulivenezia-giulia\n\t0x00262e13, // n0x0ae9 c0x0000 (---------------)  + I friuliveneziagiulia\n\t0x002632cd, // n0x0aea c0x0000 (---------------)  + I friulivgiulia\n\t0x002767c9, // n0x0aeb c0x0000 (---------------)  + I frosinone\n\t0x00288803, // n0x0aec c0x0000 (---------------)  + I fvg\n\t0x002026c2, // n0x0aed c0x0000 (---------------)  + I ge\n\t0x00307105, // n0x0aee c0x0000 (---------------)  + I genoa\n\t0x00205846, // n0x0aef c0x0000 (---------------)  + I genova\n\t0x00202d42, // n0x0af0 c0x0000 (---------------)  + I go\n\t0x0026edc7, // n0x0af1 c0x0000 (---------------)  + I gorizia\n\t0x0026cc83, // n0x0af2 c0x0000 (---------------)  + I gov\n\t0x00200c82, // n0x0af3 c0x0000 (---------------)  + I gr\n\t0x00311b48, // n0x0af4 c0x0000 (---------------)  + I grosseto\n\t0x002f7051, // n0x0af5 c0x0000 (---------------)  + I iglesias-carbonia\n\t0x002f7490, // n0x0af6 c0x0000 (---------------)  + I iglesiascarbonia\n\t0x00205c42, // n0x0af7 c0x0000 (---------------)  + I im\n\t0x00352747, // n0x0af8 c0x0000 (---------------)  + I imperia\n\t0x002006c2, // n0x0af9 c0x0000 (---------------)  + I is\n\t0x0025dc87, // n0x0afa c0x0000 (---------------)  + I isernia\n\t0x00206fc2, // n0x0afb c0x0000 (---------------)  + I kr\n\t0x0025e389, // n0x0afc c0x0000 (---------------)  + I la-spezia\n\t0x0036c307, // n0x0afd c0x0000 (---------------)  + I laquila\n\t0x0025fe48, // n0x0afe c0x0000 (---------------)  + I laspezia\n\t0x00223606, // n0x0aff c0x0000 (---------------)  + I latina\n\t0x002db043, // n0x0b00 c0x0000 (---------------)  + I laz\n\t0x00309045, // n0x0b01 c0x0000 (---------------)  + I lazio\n\t0x0023aa02, // n0x0b02 c0x0000 (---------------)  + I lc\n\t0x0020acc2, // n0x0b03 c0x0000 (---------------)  + I le\n\t0x003a50c5, // n0x0b04 c0x0000 (---------------)  + I lecce\n\t0x0022e105, // n0x0b05 c0x0000 (---------------)  + I lecco\n\t0x00207202, // n0x0b06 c0x0000 (---------------)  + I li\n\t0x0023c083, // n0x0b07 c0x0000 (---------------)  + I lig\n\t0x0023c087, // n0x0b08 c0x0000 (---------------)  + I liguria\n\t0x00210307, // n0x0b09 c0x0000 (---------------)  + I livorno\n\t0x00200242, // n0x0b0a c0x0000 (---------------)  + I lo\n\t0x00259dc4, // n0x0b0b c0x0000 (---------------)  + I lodi\n\t0x00214303, // n0x0b0c c0x0000 (---------------)  + I lom\n\t0x002c4149, // n0x0b0d c0x0000 (---------------)  + I lombardia\n\t0x002db908, // n0x0b0e c0x0000 (---------------)  + I lombardy\n\t0x00209e02, // n0x0b0f c0x0000 (---------------)  + I lt\n\t0x00202f42, // n0x0b10 c0x0000 (---------------)  + I lu\n\t0x0026d147, // n0x0b11 c0x0000 (---------------)  + I lucania\n\t0x002b6305, // n0x0b12 c0x0000 (---------------)  + I lucca\n\t0x00316908, // n0x0b13 c0x0000 (---------------)  + I macerata\n\t0x003a0a07, // n0x0b14 c0x0000 (---------------)  + I mantova\n\t0x00201183, // n0x0b15 c0x0000 (---------------)  + I mar\n\t0x00284246, // n0x0b16 c0x0000 (---------------)  + I marche\n\t0x002b39cd, // n0x0b17 c0x0000 (---------------)  + I massa-carrara\n\t0x002b3d4c, // n0x0b18 c0x0000 (---------------)  + I massacarrara\n\t0x00256e86, // n0x0b19 c0x0000 (---------------)  + I matera\n\t0x00208602, // n0x0b1a c0x0000 (---------------)  + I mb\n\t0x0022ac02, // n0x0b1b c0x0000 (---------------)  + I mc\n\t0x00203e82, // n0x0b1c c0x0000 (---------------)  + I me\n\t0x0024194f, // n0x0b1d c0x0000 (---------------)  + I medio-campidano\n\t0x00241d4e, // n0x0b1e c0x0000 (---------------)  + I mediocampidano\n\t0x00370147, // n0x0b1f c0x0000 (---------------)  + I messina\n\t0x00209002, // n0x0b20 c0x0000 (---------------)  + I mi\n\t0x00342685, // n0x0b21 c0x0000 (---------------)  + I milan\n\t0x00342686, // n0x0b22 c0x0000 (---------------)  + I milano\n\t0x0021fdc2, // n0x0b23 c0x0000 (---------------)  + I mn\n\t0x00207102, // n0x0b24 c0x0000 (---------------)  + I mo\n\t0x00218306, // n0x0b25 c0x0000 (---------------)  + I modena\n\t0x002133c3, // n0x0b26 c0x0000 (---------------)  + I mol\n\t0x0025dbc6, // n0x0b27 c0x0000 (---------------)  + I molise\n\t0x002c2d45, // n0x0b28 c0x0000 (---------------)  + I monza\n\t0x002c2d4d, // n0x0b29 c0x0000 (---------------)  + I monza-brianza\n\t0x002c3595, // n0x0b2a c0x0000 (---------------)  + I monza-e-della-brianza\n\t0x002c3d4c, // n0x0b2b c0x0000 (---------------)  + I monzabrianza\n\t0x002c4a4d, // n0x0b2c c0x0000 (---------------)  + I monzaebrianza\n\t0x002c4e12, // n0x0b2d c0x0000 (---------------)  + I monzaedellabrianza\n\t0x0020f702, // n0x0b2e c0x0000 (---------------)  + I ms\n\t0x00204c02, // n0x0b2f c0x0000 (---------------)  + I mt\n\t0x00201402, // n0x0b30 c0x0000 (---------------)  + I na\n\t0x00235006, // n0x0b31 c0x0000 (---------------)  + I naples\n\t0x002a3d86, // n0x0b32 c0x0000 (---------------)  + I napoli\n\t0x00200c02, // n0x0b33 c0x0000 (---------------)  + I no\n\t0x002058c6, // n0x0b34 c0x0000 (---------------)  + I novara\n\t0x002017c2, // n0x0b35 c0x0000 (---------------)  + I nu\n\t0x0039c105, // n0x0b36 c0x0000 (---------------)  + I nuoro\n\t0x00200c42, // n0x0b37 c0x0000 (---------------)  + I og\n\t0x0025a4c9, // n0x0b38 c0x0000 (---------------)  + I ogliastra\n\t0x0027568c, // n0x0b39 c0x0000 (---------------)  + I olbia-tempio\n\t0x002759cb, // n0x0b3a c0x0000 (---------------)  + I olbiatempio\n\t0x00200282, // n0x0b3b c0x0000 (---------------)  + I or\n\t0x00252b88, // n0x0b3c c0x0000 (---------------)  + I oristano\n\t0x00200782, // n0x0b3d c0x0000 (---------------)  + I ot\n\t0x0020ac42, // n0x0b3e c0x0000 (---------------)  + I pa\n\t0x00216d86, // n0x0b3f c0x0000 (---------------)  + I padova\n\t0x00361405, // n0x0b40 c0x0000 (---------------)  + I padua\n\t0x00379f47, // n0x0b41 c0x0000 (---------------)  + I palermo\n\t0x00395345, // n0x0b42 c0x0000 (---------------)  + I parma\n\t0x002dbfc5, // n0x0b43 c0x0000 (---------------)  + I pavia\n\t0x00248182, // n0x0b44 c0x0000 (---------------)  + I pc\n\t0x00352102, // n0x0b45 c0x0000 (---------------)  + I pd\n\t0x00207782, // n0x0b46 c0x0000 (---------------)  + I pe\n\t0x00270d47, // n0x0b47 c0x0000 (---------------)  + I perugia\n\t0x0031c84d, // n0x0b48 c0x0000 (---------------)  + I pesaro-urbino\n\t0x0031cbcc, // n0x0b49 c0x0000 (---------------)  + I pesarourbino\n\t0x00236987, // n0x0b4a c0x0000 (---------------)  + I pescara\n\t0x002495c2, // n0x0b4b c0x0000 (---------------)  + I pg\n\t0x00225702, // n0x0b4c c0x0000 (---------------)  + I pi\n\t0x00338288, // n0x0b4d c0x0000 (---------------)  + I piacenza\n\t0x00258dc8, // n0x0b4e c0x0000 (---------------)  + I piedmont\n\t0x002d6308, // n0x0b4f c0x0000 (---------------)  + I piemonte\n\t0x002df704, // n0x0b50 c0x0000 (---------------)  + I pisa\n\t0x002bee07, // n0x0b51 c0x0000 (---------------)  + I pistoia\n\t0x002dcc83, // n0x0b52 c0x0000 (---------------)  + I pmn\n\t0x002493c2, // n0x0b53 c0x0000 (---------------)  + I pn\n\t0x00200942, // n0x0b54 c0x0000 (---------------)  + I po\n\t0x002dfec9, // n0x0b55 c0x0000 (---------------)  + I pordenone\n\t0x002093c7, // n0x0b56 c0x0000 (---------------)  + I potenza\n\t0x00204602, // n0x0b57 c0x0000 (---------------)  + I pr\n\t0x00270245, // n0x0b58 c0x0000 (---------------)  + I prato\n\t0x0028c9c2, // n0x0b59 c0x0000 (---------------)  + I pt\n\t0x00235302, // n0x0b5a c0x0000 (---------------)  + I pu\n\t0x00278843, // n0x0b5b c0x0000 (---------------)  + I pug\n\t0x00278846, // n0x0b5c c0x0000 (---------------)  + I puglia\n\t0x002e5542, // n0x0b5d c0x0000 (---------------)  + I pv\n\t0x002e6302, // n0x0b5e c0x0000 (---------------)  + I pz\n\t0x002005c2, // n0x0b5f c0x0000 (---------------)  + I ra\n\t0x0030c246, // n0x0b60 c0x0000 (---------------)  + I ragusa\n\t0x002059c7, // n0x0b61 c0x0000 (---------------)  + I ravenna\n\t0x002002c2, // n0x0b62 c0x0000 (---------------)  + I rc\n\t0x00207002, // n0x0b63 c0x0000 (---------------)  + I re\n\t0x002ed34f, // n0x0b64 c0x0000 (---------------)  + I reggio-calabria\n\t0x0025420d, // n0x0b65 c0x0000 (---------------)  + I reggio-emilia\n\t0x0028550e, // n0x0b66 c0x0000 (---------------)  + I reggiocalabria\n\t0x0036da8c, // n0x0b67 c0x0000 (---------------)  + I reggioemilia\n\t0x0020ce02, // n0x0b68 c0x0000 (---------------)  + I rg\n\t0x00200a82, // n0x0b69 c0x0000 (---------------)  + I ri\n\t0x00223445, // n0x0b6a c0x0000 (---------------)  + I rieti\n\t0x003a5bc6, // n0x0b6b c0x0000 (---------------)  + I rimini\n\t0x00222182, // n0x0b6c c0x0000 (---------------)  + I rm\n\t0x0020cb42, // n0x0b6d c0x0000 (---------------)  + I rn\n\t0x00202202, // n0x0b6e c0x0000 (---------------)  + I ro\n\t0x00254584, // n0x0b6f c0x0000 (---------------)  + I roma\n\t0x002dd584, // n0x0b70 c0x0000 (---------------)  + I rome\n\t0x00334fc6, // n0x0b71 c0x0000 (---------------)  + I rovigo\n\t0x002004c2, // n0x0b72 c0x0000 (---------------)  + I sa\n\t0x00279747, // n0x0b73 c0x0000 (---------------)  + I salerno\n\t0x002257c3, // n0x0b74 c0x0000 (---------------)  + I sar\n\t0x00226048, // n0x0b75 c0x0000 (---------------)  + I sardegna\n\t0x00227248, // n0x0b76 c0x0000 (---------------)  + I sardinia\n\t0x00378687, // n0x0b77 c0x0000 (---------------)  + I sassari\n\t0x00234f06, // n0x0b78 c0x0000 (---------------)  + I savona\n\t0x0020a402, // n0x0b79 c0x0000 (---------------)  + I si\n\t0x0023eac3, // n0x0b7a c0x0000 (---------------)  + I sic\n\t0x0036e647, // n0x0b7b c0x0000 (---------------)  + I sicilia\n\t0x00252146, // n0x0b7c c0x0000 (---------------)  + I sicily\n\t0x002c8945, // n0x0b7d c0x0000 (---------------)  + I siena\n\t0x003419c8, // n0x0b7e c0x0000 (---------------)  + I siracusa\n\t0x00205682, // n0x0b7f c0x0000 (---------------)  + I so\n\t0x00308547, // n0x0b80 c0x0000 (---------------)  + I sondrio\n\t0x00209382, // n0x0b81 c0x0000 (---------------)  + I sp\n\t0x0033b802, // n0x0b82 c0x0000 (---------------)  + I sr\n\t0x002067c2, // n0x0b83 c0x0000 (---------------)  + I ss\n\t0x002cebc9, // n0x0b84 c0x0000 (---------------)  + I suedtirol\n\t0x00235f42, // n0x0b85 c0x0000 (---------------)  + I sv\n\t0x00200a02, // n0x0b86 c0x0000 (---------------)  + I ta\n\t0x00234603, // n0x0b87 c0x0000 (---------------)  + I taa\n\t0x003096c7, // n0x0b88 c0x0000 (---------------)  + I taranto\n\t0x002012c2, // n0x0b89 c0x0000 (---------------)  + I te\n\t0x0027580c, // n0x0b8a c0x0000 (---------------)  + I tempio-olbia\n\t0x00275b0b, // n0x0b8b c0x0000 (---------------)  + I tempioolbia\n\t0x00256f06, // n0x0b8c c0x0000 (---------------)  + I teramo\n\t0x0020cac5, // n0x0b8d c0x0000 (---------------)  + I terni\n\t0x0024f882, // n0x0b8e c0x0000 (---------------)  + I tn\n\t0x00208082, // n0x0b8f c0x0000 (---------------)  + I to\n\t0x002b1946, // n0x0b90 c0x0000 (---------------)  + I torino\n\t0x002280c3, // n0x0b91 c0x0000 (---------------)  + I tos\n\t0x00324e47, // n0x0b92 c0x0000 (---------------)  + I toscana\n\t0x00211f42, // n0x0b93 c0x0000 (---------------)  + I tp\n\t0x00203002, // n0x0b94 c0x0000 (---------------)  + I tr\n\t0x00284655, // n0x0b95 c0x0000 (---------------)  + I trani-andria-barletta\n\t0x00233e15, // n0x0b96 c0x0000 (---------------)  + I trani-barletta-andria\n\t0x002903d3, // n0x0b97 c0x0000 (---------------)  + I traniandriabarletta\n\t0x00234353, // n0x0b98 c0x0000 (---------------)  + I tranibarlettaandria\n\t0x00294a07, // n0x0b99 c0x0000 (---------------)  + I trapani\n\t0x002b7688, // n0x0b9a c0x0000 (---------------)  + I trentino\n\t0x002cf4d0, // n0x0b9b c0x0000 (---------------)  + I trentino-a-adige\n\t0x002ef2cf, // n0x0b9c c0x0000 (---------------)  + I trentino-aadige\n\t0x00342d53, // n0x0b9d c0x0000 (---------------)  + I trentino-alto-adige\n\t0x0034eb92, // n0x0b9e c0x0000 (---------------)  + I trentino-altoadige\n\t0x002cd090, // n0x0b9f c0x0000 (---------------)  + I trentino-s-tirol\n\t0x002b768f, // n0x0ba0 c0x0000 (---------------)  + I trentino-stirol\n\t0x002ba492, // n0x0ba1 c0x0000 (---------------)  + I trentino-sud-tirol\n\t0x002c2911, // n0x0ba2 c0x0000 (---------------)  + I trentino-sudtirol\n\t0x002ca953, // n0x0ba3 c0x0000 (---------------)  + I trentino-sued-tirol\n\t0x002ce992, // n0x0ba4 c0x0000 (---------------)  + I trentino-suedtirol\n\t0x002cfd4f, // n0x0ba5 c0x0000 (---------------)  + I trentinoa-adige\n\t0x002d4c8e, // n0x0ba6 c0x0000 (---------------)  + I trentinoaadige\n\t0x002dfa52, // n0x0ba7 c0x0000 (---------------)  + I trentinoalto-adige\n\t0x002e3291, // n0x0ba8 c0x0000 (---------------)  + I trentinoaltoadige\n\t0x002e3a8f, // n0x0ba9 c0x0000 (---------------)  + I trentinos-tirol\n\t0x002e55ce, // n0x0baa c0x0000 (---------------)  + I trentinostirol\n\t0x002e6691, // n0x0bab c0x0000 (---------------)  + I trentinosud-tirol\n\t0x002f3a90, // n0x0bac c0x0000 (---------------)  + I trentinosudtirol\n\t0x0035a592, // n0x0bad c0x0000 (---------------)  + I trentinosued-tirol\n\t0x002e8b91, // n0x0bae c0x0000 (---------------)  + I trentinosuedtirol\n\t0x002f8a86, // n0x0baf c0x0000 (---------------)  + I trento\n\t0x002f9307, // n0x0bb0 c0x0000 (---------------)  + I treviso\n\t0x003673c7, // n0x0bb1 c0x0000 (---------------)  + I trieste\n\t0x00203f42, // n0x0bb2 c0x0000 (---------------)  + I ts\n\t0x0027f145, // n0x0bb3 c0x0000 (---------------)  + I turin\n\t0x002f2c87, // n0x0bb4 c0x0000 (---------------)  + I tuscany\n\t0x00224e42, // n0x0bb5 c0x0000 (---------------)  + I tv\n\t0x00209242, // n0x0bb6 c0x0000 (---------------)  + I ud\n\t0x0022a285, // n0x0bb7 c0x0000 (---------------)  + I udine\n\t0x0021e183, // n0x0bb8 c0x0000 (---------------)  + I umb\n\t0x00258406, // n0x0bb9 c0x0000 (---------------)  + I umbria\n\t0x0031ca0d, // n0x0bba c0x0000 (---------------)  + I urbino-pesaro\n\t0x0031cd4c, // n0x0bbb c0x0000 (---------------)  + I urbinopesaro\n\t0x002000c2, // n0x0bbc c0x0000 (---------------)  + I va\n\t0x0030f18b, // n0x0bbd c0x0000 (---------------)  + I val-d-aosta\n\t0x00216e8a, // n0x0bbe c0x0000 (---------------)  + I val-daosta\n\t0x00323dca, // n0x0bbf c0x0000 (---------------)  + I vald-aosta\n\t0x002b09c9, // n0x0bc0 c0x0000 (---------------)  + I valdaosta\n\t0x002deb4b, // n0x0bc1 c0x0000 (---------------)  + I valle-aosta\n\t0x003a0b4d, // n0x0bc2 c0x0000 (---------------)  + I valle-d-aosta\n\t0x002f338c, // n0x0bc3 c0x0000 (---------------)  + I valle-daosta\n\t0x00224e8a, // n0x0bc4 c0x0000 (---------------)  + I valleaosta\n\t0x0022594c, // n0x0bc5 c0x0000 (---------------)  + I valled-aosta\n\t0x0024098b, // n0x0bc6 c0x0000 (---------------)  + I valledaosta\n\t0x00250ecc, // n0x0bc7 c0x0000 (---------------)  + I vallee-aoste\n\t0x0025184b, // n0x0bc8 c0x0000 (---------------)  + I valleeaoste\n\t0x00275603, // n0x0bc9 c0x0000 (---------------)  + I vao\n\t0x002894c6, // n0x0bca c0x0000 (---------------)  + I varese\n\t0x002dc5c2, // n0x0bcb c0x0000 (---------------)  + I vb\n\t0x002e6b02, // n0x0bcc c0x0000 (---------------)  + I vc\n\t0x00210243, // n0x0bcd c0x0000 (---------------)  + I vda\n\t0x00202b82, // n0x0bce c0x0000 (---------------)  + I ve\n\t0x00202b83, // n0x0bcf c0x0000 (---------------)  + I ven\n\t0x00375e46, // n0x0bd0 c0x0000 (---------------)  + I veneto\n\t0x00261247, // n0x0bd1 c0x0000 (---------------)  + I venezia\n\t0x0026f246, // n0x0bd2 c0x0000 (---------------)  + I venice\n\t0x0022d688, // n0x0bd3 c0x0000 (---------------)  + I verbania\n\t0x002dddc8, // n0x0bd4 c0x0000 (---------------)  + I vercelli\n\t0x003607c6, // n0x0bd5 c0x0000 (---------------)  + I verona\n\t0x00205d42, // n0x0bd6 c0x0000 (---------------)  + I vi\n\t0x002f504d, // n0x0bd7 c0x0000 (---------------)  + I vibo-valentia\n\t0x002f538c, // n0x0bd8 c0x0000 (---------------)  + I vibovalentia\n\t0x0033d887, // n0x0bd9 c0x0000 (---------------)  + I vicenza\n\t0x002f9107, // n0x0bda c0x0000 (---------------)  + I viterbo\n\t0x00211082, // n0x0bdb c0x0000 (---------------)  + I vr\n\t0x00227982, // n0x0bdc c0x0000 (---------------)  + I vs\n\t0x00271f82, // n0x0bdd c0x0000 (---------------)  + I vt\n\t0x00214982, // n0x0bde c0x0000 (---------------)  + I vv\n\t0x00200742, // n0x0bdf c0x0000 (---------------)  + I co\n\t0x0021fe03, // n0x0be0 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0be1 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x0be2 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x0be3 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x0be4 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x0be5 c0x0000 (---------------)  + I mil\n\t0x00205284, // n0x0be6 c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x0be7 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x0be8 c0x0000 (---------------)  + I org\n\t0x00217443, // n0x0be9 c0x0000 (---------------)  + I sch\n\t0x00201542, // n0x0bea c0x0000 (---------------)  + I ac\n\t0x00200342, // n0x0beb c0x0000 (---------------)  + I ad\n\t0x2068f505, // n0x0bec c0x0081 (n0x0c59-n0x0c8d)  + I aichi\n\t0x20a01dc5, // n0x0bed c0x0082 (n0x0c8d-n0x0ca9)  + I akita\n\t0x20f0bf06, // n0x0bee c0x0083 (n0x0ca9-n0x0cbf)  + I aomori\n\t0x000ffa08, // n0x0bef c0x0000 (---------------)  +   blogspot\n\t0x212add45, // n0x0bf0 c0x0084 (n0x0cbf-n0x0cf9)  + I chiba\n\t0x00200742, // n0x0bf1 c0x0000 (---------------)  + I co\n\t0x00202602, // n0x0bf2 c0x0000 (---------------)  + I ed\n\t0x21629005, // n0x0bf3 c0x0085 (n0x0cf9-n0x0d0f)  + I ehime\n\t0x21a7dac5, // n0x0bf4 c0x0086 (n0x0d0f-n0x0d1e)  + I fukui\n\t0x21e7e807, // n0x0bf5 c0x0087 (n0x0d1e-n0x0d5d)  + I fukuoka\n\t0x2232fcc9, // n0x0bf6 c0x0088 (n0x0d5d-n0x0d90)  + I fukushima\n\t0x2276aec4, // n0x0bf7 c0x0089 (n0x0d90-n0x0db6)  + I gifu\n\t0x00202d42, // n0x0bf8 c0x0000 (---------------)  + I go\n\t0x00200c82, // n0x0bf9 c0x0000 (---------------)  + I gr\n\t0x22b66385, // n0x0bfa c0x008a (n0x0db6-n0x0dda)  + I gunma\n\t0x22e0ee49, // n0x0bfb c0x008b (n0x0dda-n0x0df3)  + I hiroshima\n\t0x23369e88, // n0x0bfc c0x008c (n0x0df3-n0x0e81)  + I hokkaido\n\t0x236aba85, // n0x0bfd c0x008d (n0x0e81-n0x0eaf)  + I hyogo\n\t0x23ac1ac7, // n0x0bfe c0x008e (n0x0eaf-n0x0ee2)  + I ibaraki\n\t0x23e1a4c8, // n0x0bff c0x008f (n0x0ee2-n0x0ef5)  + I ishikawa\n\t0x242d8485, // n0x0c00 c0x0090 (n0x0ef5-n0x0f17)  + I iwate\n\t0x24600fc6, // n0x0c01 c0x0091 (n0x0f17-n0x0f26)  + I kagawa\n\t0x24a76189, // n0x0c02 c0x0092 (n0x0f26-n0x0f3a)  + I kagoshima\n\t0x24f1a4c8, // n0x0c03 c0x0093 (n0x0f3a-n0x0f58)  + I kanagawa\n\t0x252b9088, // n0x0c04 c0x0094 (n0x0f58-n0x0f59)* o I kawasaki\n\t0x2569c90a, // n0x0c05 c0x0095 (n0x0f59-n0x0f5a)* o I kitakyushu\n\t0x25a4f544, // n0x0c06 c0x0096 (n0x0f5a-n0x0f5b)* o I kobe\n\t0x25ecb145, // n0x0c07 c0x0097 (n0x0f5b-n0x0f7a)  + I kochi\n\t0x262b3748, // n0x0c08 c0x0098 (n0x0f7a-n0x0f94)  + I kumamoto\n\t0x266be0c5, // n0x0c09 c0x0099 (n0x0f94-n0x0fb3)  + I kyoto\n\t0x00219082, // n0x0c0a c0x0000 (---------------)  + I lg\n\t0x26a4b943, // n0x0c0b c0x009a (n0x0fb3-n0x0fd1)  + I mie\n\t0x26ea29c6, // n0x0c0c c0x009b (n0x0fd1-n0x0ff2)  + I miyagi\n\t0x27266108, // n0x0c0d c0x009c (n0x0ff2-n0x100d)  + I miyazaki\n\t0x27754f86, // n0x0c0e c0x009d (n0x100d-n0x1058)  + I nagano\n\t0x27adda48, // n0x0c0f c0x009e (n0x1058-n0x106e)  + I nagasaki\n\t0x27f0f646, // n0x0c10 c0x009f (n0x106e-n0x106f)* o I nagoya\n\t0x282c8a04, // n0x0c11 c0x00a0 (n0x106f-n0x1095)  + I nara\n\t0x00202c02, // n0x0c12 c0x0000 (---------------)  + I ne\n\t0x2863ff87, // n0x0c13 c0x00a1 (n0x1095-n0x10b7)  + I niigata\n\t0x28aa8984, // n0x0c14 c0x00a2 (n0x10b7-n0x10ca)  + I oita\n\t0x28e78dc7, // n0x0c15 c0x00a3 (n0x10ca-n0x10e4)  + I okayama\n\t0x29395b47, // n0x0c16 c0x00a4 (n0x10e4-n0x110e)  + I okinawa\n\t0x00200282, // n0x0c17 c0x0000 (---------------)  + I or\n\t0x2969ac45, // n0x0c18 c0x00a5 (n0x110e-n0x1140)  + I osaka\n\t0x29a38904, // n0x0c19 c0x00a6 (n0x1140-n0x115a)  + I saga\n\t0x29ed9247, // n0x0c1a c0x00a7 (n0x115a-n0x119f)  + I saitama\n\t0x2a221087, // n0x0c1b c0x00a8 (n0x119f-n0x11a0)* o I sapporo\n\t0x2a682b06, // n0x0c1c c0x00a9 (n0x11a0-n0x11a1)* o I sendai\n\t0x2aa285c5, // n0x0c1d c0x00aa (n0x11a1-n0x11b8)  + I shiga\n\t0x2ae93dc7, // n0x0c1e c0x00ab (n0x11b8-n0x11cf)  + I shimane\n\t0x2b2b2608, // n0x0c1f c0x00ac (n0x11cf-n0x11f3)  + I shizuoka\n\t0x2b744e07, // n0x0c20 c0x00ad (n0x11f3-n0x1212)  + I tochigi\n\t0x2ba99fc9, // n0x0c21 c0x00ae (n0x1212-n0x1223)  + I tokushima\n\t0x2bf41c05, // n0x0c22 c0x00af (n0x1223-n0x125c)  + I tokyo\n\t0x2c2f8b87, // n0x0c23 c0x00b0 (n0x125c-n0x1269)  + I tottori\n\t0x2c68e9c6, // n0x0c24 c0x00b1 (n0x1269-n0x1281)  + I toyama\n\t0x2ca23ac8, // n0x0c25 c0x00b2 (n0x1281-n0x129e)  + I wakayama\n\t0x0038988d, // n0x0c26 c0x0000 (---------------)  + I xn--0trq7p7nn\n\t0x0024e389, // n0x0c27 c0x0000 (---------------)  + I xn--1ctwo\n\t0x0025c1cb, // n0x0c28 c0x0000 (---------------)  + I xn--1lqs03n\n\t0x0026024b, // n0x0c29 c0x0000 (---------------)  + I xn--1lqs71d\n\t0x0027348b, // n0x0c2a c0x0000 (---------------)  + I xn--2m4a15e\n\t0x002a5bcb, // n0x0c2b c0x0000 (---------------)  + I xn--32vp30h\n\t0x0030168b, // n0x0c2c c0x0000 (---------------)  + I xn--4it168d\n\t0x0030194b, // n0x0c2d c0x0000 (---------------)  + I xn--4it797k\n\t0x00301d89, // n0x0c2e c0x0000 (---------------)  + I xn--4pvxs\n\t0x00302c4b, // n0x0c2f c0x0000 (---------------)  + I xn--5js045d\n\t0x00302f0b, // n0x0c30 c0x0000 (---------------)  + I xn--5rtp49c\n\t0x0030338b, // n0x0c31 c0x0000 (---------------)  + I xn--5rtq34k\n\t0x003043ca, // n0x0c32 c0x0000 (---------------)  + I xn--6btw5a\n\t0x0030490a, // n0x0c33 c0x0000 (---------------)  + I xn--6orx2r\n\t0x00304f0c, // n0x0c34 c0x0000 (---------------)  + I xn--7t0a264c\n\t0x0030a1cb, // n0x0c35 c0x0000 (---------------)  + I xn--8ltr62k\n\t0x0030a74a, // n0x0c36 c0x0000 (---------------)  + I xn--8pvr4u\n\t0x0031918a, // n0x0c37 c0x0000 (---------------)  + I xn--c3s14m\n\t0x0032940e, // n0x0c38 c0x0000 (---------------)  + I xn--d5qv7z876c\n\t0x0032a1ce, // n0x0c39 c0x0000 (---------------)  + I xn--djrs72d6uy\n\t0x0032a54a, // n0x0c3a c0x0000 (---------------)  + I xn--djty4k\n\t0x0032bb0a, // n0x0c3b c0x0000 (---------------)  + I xn--efvn9s\n\t0x0032c78b, // n0x0c3c c0x0000 (---------------)  + I xn--ehqz56n\n\t0x0032ca4b, // n0x0c3d c0x0000 (---------------)  + I xn--elqq16h\n\t0x0032d78b, // n0x0c3e c0x0000 (---------------)  + I xn--f6qx53a\n\t0x0034834b, // n0x0c3f c0x0000 (---------------)  + I xn--k7yn95e\n\t0x0034894a, // n0x0c40 c0x0000 (---------------)  + I xn--kbrq7o\n\t0x0034960b, // n0x0c41 c0x0000 (---------------)  + I xn--klt787d\n\t0x003498ca, // n0x0c42 c0x0000 (---------------)  + I xn--kltp7d\n\t0x00349b4a, // n0x0c43 c0x0000 (---------------)  + I xn--kltx9a\n\t0x00349dca, // n0x0c44 c0x0000 (---------------)  + I xn--klty5x\n\t0x00367e8b, // n0x0c45 c0x0000 (---------------)  + I xn--mkru45i\n\t0x0037178b, // n0x0c46 c0x0000 (---------------)  + I xn--nit225k\n\t0x003733ce, // n0x0c47 c0x0000 (---------------)  + I xn--ntso0iqx3a\n\t0x0037374b, // n0x0c48 c0x0000 (---------------)  + I xn--ntsq17g\n\t0x0037b18b, // n0x0c49 c0x0000 (---------------)  + I xn--pssu33l\n\t0x0037d28b, // n0x0c4a c0x0000 (---------------)  + I xn--qqqt11m\n\t0x0038144a, // n0x0c4b c0x0000 (---------------)  + I xn--rht27z\n\t0x003816c9, // n0x0c4c c0x0000 (---------------)  + I xn--rht3d\n\t0x0038190a, // n0x0c4d c0x0000 (---------------)  + I xn--rht61e\n\t0x00382f8a, // n0x0c4e c0x0000 (---------------)  + I xn--rny31h\n\t0x00392e8b, // n0x0c4f c0x0000 (---------------)  + I xn--tor131o\n\t0x003949cb, // n0x0c50 c0x0000 (---------------)  + I xn--uist22h\n\t0x0039548a, // n0x0c51 c0x0000 (---------------)  + I xn--uisz3g\n\t0x003967cb, // n0x0c52 c0x0000 (---------------)  + I xn--uuwu58a\n\t0x0039a30b, // n0x0c53 c0x0000 (---------------)  + I xn--vgu402c\n\t0x003a520b, // n0x0c54 c0x0000 (---------------)  + I xn--zbx025d\n\t0x2ce808c8, // n0x0c55 c0x00b3 (n0x129e-n0x12c0)  + I yamagata\n\t0x2d2873c9, // n0x0c56 c0x00b4 (n0x12c0-n0x12d0)  + I yamaguchi\n\t0x2d6a15c9, // n0x0c57 c0x00b5 (n0x12d0-n0x12ec)  + I yamanashi\n\t0x2dad09c8, // n0x0c58 c0x00b6 (n0x12ec-n0x12ed)* o I yokohama\n\t0x00334d45, // n0x0c59 c0x0000 (---------------)  + I aisai\n\t0x00201883, // n0x0c5a c0x0000 (---------------)  + I ama\n\t0x00203fc4, // n0x0c5b c0x0000 (---------------)  + I anjo\n\t0x00360985, // n0x0c5c c0x0000 (---------------)  + I asuke\n\t0x0036ac06, // n0x0c5d c0x0000 (---------------)  + I chiryu\n\t0x002ac6c5, // n0x0c5e c0x0000 (---------------)  + I chita\n\t0x00286bc4, // n0x0c5f c0x0000 (---------------)  + I fuso\n\t0x0026ecc8, // n0x0c60 c0x0000 (---------------)  + I gamagori\n\t0x00256185, // n0x0c61 c0x0000 (---------------)  + I handa\n\t0x0028ff84, // n0x0c62 c0x0000 (---------------)  + I hazu\n\t0x002c3247, // n0x0c63 c0x0000 (---------------)  + I hekinan\n\t0x0029d24a, // n0x0c64 c0x0000 (---------------)  + I higashiura\n\t0x002d218a, // n0x0c65 c0x0000 (---------------)  + I ichinomiya\n\t0x0032bfc7, // n0x0c66 c0x0000 (---------------)  + I inazawa\n\t0x00201787, // n0x0c67 c0x0000 (---------------)  + I inuyama\n\t0x002f2007, // n0x0c68 c0x0000 (---------------)  + I isshiki\n\t0x0031d107, // n0x0c69 c0x0000 (---------------)  + I iwakura\n\t0x002a25c5, // n0x0c6a c0x0000 (---------------)  + I kanie\n\t0x00325246, // n0x0c6b c0x0000 (---------------)  + I kariya\n\t0x00321d87, // n0x0c6c c0x0000 (---------------)  + I kasugai\n\t0x002571c4, // n0x0c6d c0x0000 (---------------)  + I kira\n\t0x002f0206, // n0x0c6e c0x0000 (---------------)  + I kiyosu\n\t0x00296f06, // n0x0c6f c0x0000 (---------------)  + I komaki\n\t0x00206b85, // n0x0c70 c0x0000 (---------------)  + I konan\n\t0x00229444, // n0x0c71 c0x0000 (---------------)  + I kota\n\t0x002da306, // n0x0c72 c0x0000 (---------------)  + I mihama\n\t0x0029c447, // n0x0c73 c0x0000 (---------------)  + I miyoshi\n\t0x002251c6, // n0x0c74 c0x0000 (---------------)  + I nishio\n\t0x00266c47, // n0x0c75 c0x0000 (---------------)  + I nisshin\n\t0x0027cb43, // n0x0c76 c0x0000 (---------------)  + I obu\n\t0x00252346, // n0x0c77 c0x0000 (---------------)  + I oguchi\n\t0x00236085, // n0x0c78 c0x0000 (---------------)  + I oharu\n\t0x0027e907, // n0x0c79 c0x0000 (---------------)  + I okazaki\n\t0x002bf04a, // n0x0c7a c0x0000 (---------------)  + I owariasahi\n\t0x002ae744, // n0x0c7b c0x0000 (---------------)  + I seto\n\t0x00219288, // n0x0c7c c0x0000 (---------------)  + I shikatsu\n\t0x00299589, // n0x0c7d c0x0000 (---------------)  + I shinshiro\n\t0x002aff87, // n0x0c7e c0x0000 (---------------)  + I shitara\n\t0x002e8506, // n0x0c7f c0x0000 (---------------)  + I tahara\n\t0x00365ec8, // n0x0c80 c0x0000 (---------------)  + I takahama\n\t0x00307489, // n0x0c81 c0x0000 (---------------)  + I tobishima\n\t0x00375f44, // n0x0c82 c0x0000 (---------------)  + I toei\n\t0x00337204, // n0x0c83 c0x0000 (---------------)  + I togo\n\t0x002fa0c5, // n0x0c84 c0x0000 (---------------)  + I tokai\n\t0x002bfec8, // n0x0c85 c0x0000 (---------------)  + I tokoname\n\t0x002c0907, // n0x0c86 c0x0000 (---------------)  + I toyoake\n\t0x0028df09, // n0x0c87 c0x0000 (---------------)  + I toyohashi\n\t0x00247dc8, // n0x0c88 c0x0000 (---------------)  + I toyokawa\n\t0x00366606, // n0x0c89 c0x0000 (---------------)  + I toyone\n\t0x0025bb86, // n0x0c8a c0x0000 (---------------)  + I toyota\n\t0x00297a48, // n0x0c8b c0x0000 (---------------)  + I tsushima\n\t0x0036a786, // n0x0c8c c0x0000 (---------------)  + I yatomi\n\t0x00201dc5, // n0x0c8d c0x0000 (---------------)  + I akita\n\t0x00282bc6, // n0x0c8e c0x0000 (---------------)  + I daisen\n\t0x002790c8, // n0x0c8f c0x0000 (---------------)  + I fujisato\n\t0x0023ab86, // n0x0c90 c0x0000 (---------------)  + I gojome\n\t0x0025778b, // n0x0c91 c0x0000 (---------------)  + I hachirogata\n\t0x0028ab86, // n0x0c92 c0x0000 (---------------)  + I happou\n\t0x002997cd, // n0x0c93 c0x0000 (---------------)  + I higashinaruse\n\t0x0038e545, // n0x0c94 c0x0000 (---------------)  + I honjo\n\t0x002a8846, // n0x0c95 c0x0000 (---------------)  + I honjyo\n\t0x0021a585, // n0x0c96 c0x0000 (---------------)  + I ikawa\n\t0x00296349, // n0x0c97 c0x0000 (---------------)  + I kamikoani\n\t0x00320ec7, // n0x0c98 c0x0000 (---------------)  + I kamioka\n\t0x00378048, // n0x0c99 c0x0000 (---------------)  + I katagami\n\t0x00305386, // n0x0c9a c0x0000 (---------------)  + I kazuno\n\t0x002983c9, // n0x0c9b c0x0000 (---------------)  + I kitaakita\n\t0x002dd306, // n0x0c9c c0x0000 (---------------)  + I kosaka\n\t0x002befc5, // n0x0c9d c0x0000 (---------------)  + I kyowa\n\t0x0022f486, // n0x0c9e c0x0000 (---------------)  + I misato\n\t0x002b16c6, // n0x0c9f c0x0000 (---------------)  + I mitane\n\t0x002c6849, // n0x0ca0 c0x0000 (---------------)  + I moriyoshi\n\t0x0033cfc6, // n0x0ca1 c0x0000 (---------------)  + I nikaho\n\t0x0037ebc7, // n0x0ca2 c0x0000 (---------------)  + I noshiro\n\t0x002c5f85, // n0x0ca3 c0x0000 (---------------)  + I odate\n\t0x00202a03, // n0x0ca4 c0x0000 (---------------)  + I oga\n\t0x00223845, // n0x0ca5 c0x0000 (---------------)  + I ogata\n\t0x002a6287, // n0x0ca6 c0x0000 (---------------)  + I semboku\n\t0x00330a06, // n0x0ca7 c0x0000 (---------------)  + I yokote\n\t0x0038e449, // n0x0ca8 c0x0000 (---------------)  + I yurihonjo\n\t0x0030bf06, // n0x0ca9 c0x0000 (---------------)  + I aomori\n\t0x00282e06, // n0x0caa c0x0000 (---------------)  + I gonohe\n\t0x0020db09, // n0x0cab c0x0000 (---------------)  + I hachinohe\n\t0x002825c9, // n0x0cac c0x0000 (---------------)  + I hashikami\n\t0x0029f407, // n0x0cad c0x0000 (---------------)  + I hiranai\n\t0x002eb708, // n0x0cae c0x0000 (---------------)  + I hirosaki\n\t0x002692c9, // n0x0caf c0x0000 (---------------)  + I itayanagi\n\t0x0027edc8, // n0x0cb0 c0x0000 (---------------)  + I kuroishi\n\t0x0037d506, // n0x0cb1 c0x0000 (---------------)  + I misawa\n\t0x002d0505, // n0x0cb2 c0x0000 (---------------)  + I mutsu\n\t0x0021e54a, // n0x0cb3 c0x0000 (---------------)  + I nakadomari\n\t0x00282e86, // n0x0cb4 c0x0000 (---------------)  + I noheji\n\t0x00207e46, // n0x0cb5 c0x0000 (---------------)  + I oirase\n\t0x002a2b85, // n0x0cb6 c0x0000 (---------------)  + I owani\n\t0x0036b208, // n0x0cb7 c0x0000 (---------------)  + I rokunohe\n\t0x0020ea87, // n0x0cb8 c0x0000 (---------------)  + I sannohe\n\t0x0023638a, // n0x0cb9 c0x0000 (---------------)  + I shichinohe\n\t0x0024e0c6, // n0x0cba c0x0000 (---------------)  + I shingo\n\t0x00240bc5, // n0x0cbb c0x0000 (---------------)  + I takko\n\t0x0024a2c6, // n0x0cbc c0x0000 (---------------)  + I towada\n\t0x00297647, // n0x0cbd c0x0000 (---------------)  + I tsugaru\n\t0x002e83c7, // n0x0cbe c0x0000 (---------------)  + I tsuruta\n\t0x0037e845, // n0x0cbf c0x0000 (---------------)  + I abiko\n\t0x002bf185, // n0x0cc0 c0x0000 (---------------)  + I asahi\n\t0x002e59c6, // n0x0cc1 c0x0000 (---------------)  + I chonan\n\t0x002e6b46, // n0x0cc2 c0x0000 (---------------)  + I chosei\n\t0x00300346, // n0x0cc3 c0x0000 (---------------)  + I choshi\n\t0x0030ba84, // n0x0cc4 c0x0000 (---------------)  + I chuo\n\t0x00281689, // n0x0cc5 c0x0000 (---------------)  + I funabashi\n\t0x00288286, // n0x0cc6 c0x0000 (---------------)  + I futtsu\n\t0x0034ad4a, // n0x0cc7 c0x0000 (---------------)  + I hanamigawa\n\t0x0028f548, // n0x0cc8 c0x0000 (---------------)  + I ichihara\n\t0x00265608, // n0x0cc9 c0x0000 (---------------)  + I ichikawa\n\t0x002d218a, // n0x0cca c0x0000 (---------------)  + I ichinomiya\n\t0x003a0f85, // n0x0ccb c0x0000 (---------------)  + I inzai\n\t0x0029c385, // n0x0ccc c0x0000 (---------------)  + I isumi\n\t0x00307d08, // n0x0ccd c0x0000 (---------------)  + I kamagaya\n\t0x002caec8, // n0x0cce c0x0000 (---------------)  + I kamogawa\n\t0x002037c7, // n0x0ccf c0x0000 (---------------)  + I kashiwa\n\t0x00294d86, // n0x0cd0 c0x0000 (---------------)  + I katori\n\t0x003141c8, // n0x0cd1 c0x0000 (---------------)  + I katsuura\n\t0x002303c7, // n0x0cd2 c0x0000 (---------------)  + I kimitsu\n\t0x00280d88, // n0x0cd3 c0x0000 (---------------)  + I kisarazu\n\t0x00368e86, // n0x0cd4 c0x0000 (---------------)  + I kozaki\n\t0x00283fc8, // n0x0cd5 c0x0000 (---------------)  + I kujukuri\n\t0x002b4246, // n0x0cd6 c0x0000 (---------------)  + I kyonan\n\t0x00243747, // n0x0cd7 c0x0000 (---------------)  + I matsudo\n\t0x00298e06, // n0x0cd8 c0x0000 (---------------)  + I midori\n\t0x002da306, // n0x0cd9 c0x0000 (---------------)  + I mihama\n\t0x0023c6ca, // n0x0cda c0x0000 (---------------)  + I minamiboso\n\t0x00234886, // n0x0cdb c0x0000 (---------------)  + I mobara\n\t0x002d0509, // n0x0cdc c0x0000 (---------------)  + I mutsuzawa\n\t0x002ae046, // n0x0cdd c0x0000 (---------------)  + I nagara\n\t0x002d164a, // n0x0cde c0x0000 (---------------)  + I nagareyama\n\t0x002c8a09, // n0x0cdf c0x0000 (---------------)  + I narashino\n\t0x0037df46, // n0x0ce0 c0x0000 (---------------)  + I narita\n\t0x0037f944, // n0x0ce1 c0x0000 (---------------)  + I noda\n\t0x003071cd, // n0x0ce2 c0x0000 (---------------)  + I oamishirasato\n\t0x00287647, // n0x0ce3 c0x0000 (---------------)  + I omigawa\n\t0x00316686, // n0x0ce4 c0x0000 (---------------)  + I onjuku\n\t0x002b8f45, // n0x0ce5 c0x0000 (---------------)  + I otaki\n\t0x002dd385, // n0x0ce6 c0x0000 (---------------)  + I sakae\n\t0x00307fc6, // n0x0ce7 c0x0000 (---------------)  + I sakura\n\t0x0028d9c9, // n0x0ce8 c0x0000 (---------------)  + I shimofusa\n\t0x002aaf87, // n0x0ce9 c0x0000 (---------------)  + I shirako\n\t0x0027a9c6, // n0x0cea c0x0000 (---------------)  + I shiroi\n\t0x002af8c6, // n0x0ceb c0x0000 (---------------)  + I shisui\n\t0x00286c49, // n0x0cec c0x0000 (---------------)  + I sodegaura\n\t0x0021f484, // n0x0ced c0x0000 (---------------)  + I sosa\n\t0x0036bcc4, // n0x0cee c0x0000 (---------------)  + I tako\n\t0x002040c8, // n0x0cef c0x0000 (---------------)  + I tateyama\n\t0x002aea86, // n0x0cf0 c0x0000 (---------------)  + I togane\n\t0x0029ed88, // n0x0cf1 c0x0000 (---------------)  + I tohnosho\n\t0x0022f408, // n0x0cf2 c0x0000 (---------------)  + I tomisato\n\t0x00280587, // n0x0cf3 c0x0000 (---------------)  + I urayasu\n\t0x003a6349, // n0x0cf4 c0x0000 (---------------)  + I yachimata\n\t0x00300547, // n0x0cf5 c0x0000 (---------------)  + I yachiyo\n\t0x002adc0a, // n0x0cf6 c0x0000 (---------------)  + I yokaichiba\n\t0x0022edcf, // n0x0cf7 c0x0000 (---------------)  + I yokoshibahikari\n\t0x00269dca, // n0x0cf8 c0x0000 (---------------)  + I yotsukaido\n\t0x00223245, // n0x0cf9 c0x0000 (---------------)  + I ainan\n\t0x00279305, // n0x0cfa c0x0000 (---------------)  + I honai\n\t0x00216985, // n0x0cfb c0x0000 (---------------)  + I ikata\n\t0x00249147, // n0x0cfc c0x0000 (---------------)  + I imabari\n\t0x00206043, // n0x0cfd c0x0000 (---------------)  + I iyo\n\t0x002eb908, // n0x0cfe c0x0000 (---------------)  + I kamijima\n\t0x002f5c86, // n0x0cff c0x0000 (---------------)  + I kihoku\n\t0x002f5d89, // n0x0d00 c0x0000 (---------------)  + I kumakogen\n\t0x003a3b06, // n0x0d01 c0x0000 (---------------)  + I masaki\n\t0x002c02c7, // n0x0d02 c0x0000 (---------------)  + I matsuno\n\t0x00298189, // n0x0d03 c0x0000 (---------------)  + I matsuyama\n\t0x00377f48, // n0x0d04 c0x0000 (---------------)  + I namikata\n\t0x002a2c47, // n0x0d05 c0x0000 (---------------)  + I niihama\n\t0x00300a43, // n0x0d06 c0x0000 (---------------)  + I ozu\n\t0x00334dc5, // n0x0d07 c0x0000 (---------------)  + I saijo\n\t0x002396c5, // n0x0d08 c0x0000 (---------------)  + I seiyo\n\t0x0030b8cb, // n0x0d09 c0x0000 (---------------)  + I shikokuchuo\n\t0x002be184, // n0x0d0a c0x0000 (---------------)  + I tobe\n\t0x0020b004, // n0x0d0b c0x0000 (---------------)  + I toon\n\t0x00278086, // n0x0d0c c0x0000 (---------------)  + I uchiko\n\t0x00300dc7, // n0x0d0d c0x0000 (---------------)  + I uwajima\n\t0x0038f14a, // n0x0d0e c0x0000 (---------------)  + I yawatahama\n\t0x0024b9c7, // n0x0d0f c0x0000 (---------------)  + I echizen\n\t0x00375fc7, // n0x0d10 c0x0000 (---------------)  + I eiheiji\n\t0x0027dac5, // n0x0d11 c0x0000 (---------------)  + I fukui\n\t0x00202585, // n0x0d12 c0x0000 (---------------)  + I ikeda\n\t0x0021ebc9, // n0x0d13 c0x0000 (---------------)  + I katsuyama\n\t0x002da306, // n0x0d14 c0x0000 (---------------)  + I mihama\n\t0x0024b84d, // n0x0d15 c0x0000 (---------------)  + I minamiechizen\n\t0x00395f05, // n0x0d16 c0x0000 (---------------)  + I obama\n\t0x00299783, // n0x0d17 c0x0000 (---------------)  + I ohi\n\t0x0020a703, // n0x0d18 c0x0000 (---------------)  + I ono\n\t0x002f6605, // n0x0d19 c0x0000 (---------------)  + I sabae\n\t0x0034ca05, // n0x0d1a c0x0000 (---------------)  + I sakai\n\t0x00365ec8, // n0x0d1b c0x0000 (---------------)  + I takahama\n\t0x0027b9c7, // n0x0d1c c0x0000 (---------------)  + I tsuruga\n\t0x0036ba46, // n0x0d1d c0x0000 (---------------)  + I wakasa\n\t0x0029d906, // n0x0d1e c0x0000 (---------------)  + I ashiya\n\t0x0022d885, // n0x0d1f c0x0000 (---------------)  + I buzen\n\t0x0023aa47, // n0x0d20 c0x0000 (---------------)  + I chikugo\n\t0x00201a07, // n0x0d21 c0x0000 (---------------)  + I chikuho\n\t0x00293107, // n0x0d22 c0x0000 (---------------)  + I chikujo\n\t0x002cb1ca, // n0x0d23 c0x0000 (---------------)  + I chikushino\n\t0x00252408, // n0x0d24 c0x0000 (---------------)  + I chikuzen\n\t0x0030ba84, // n0x0d25 c0x0000 (---------------)  + I chuo\n\t0x00214b07, // n0x0d26 c0x0000 (---------------)  + I dazaifu\n\t0x0027cc87, // n0x0d27 c0x0000 (---------------)  + I fukuchi\n\t0x0032c406, // n0x0d28 c0x0000 (---------------)  + I hakata\n\t0x00268047, // n0x0d29 c0x0000 (---------------)  + I higashi\n\t0x002d2bc8, // n0x0d2a c0x0000 (---------------)  + I hirokawa\n\t0x002a14c8, // n0x0d2b c0x0000 (---------------)  + I hisayama\n\t0x0026e786, // n0x0d2c c0x0000 (---------------)  + I iizuka\n\t0x0022b108, // n0x0d2d c0x0000 (---------------)  + I inatsuki\n\t0x002c6404, // n0x0d2e c0x0000 (---------------)  + I kaho\n\t0x00321d86, // n0x0d2f c0x0000 (---------------)  + I kasuga\n\t0x0020f406, // n0x0d30 c0x0000 (---------------)  + I kasuya\n\t0x00206106, // n0x0d31 c0x0000 (---------------)  + I kawara\n\t0x002ebf06, // n0x0d32 c0x0000 (---------------)  + I keisen\n\t0x00226304, // n0x0d33 c0x0000 (---------------)  + I koga\n\t0x0031d1c6, // n0x0d34 c0x0000 (---------------)  + I kurate\n\t0x002b81c6, // n0x0d35 c0x0000 (---------------)  + I kurogi\n\t0x002969c6, // n0x0d36 c0x0000 (---------------)  + I kurume\n\t0x00228406, // n0x0d37 c0x0000 (---------------)  + I minami\n\t0x0020a5c6, // n0x0d38 c0x0000 (---------------)  + I miyako\n\t0x002d2a06, // n0x0d39 c0x0000 (---------------)  + I miyama\n\t0x0036b948, // n0x0d3a c0x0000 (---------------)  + I miyawaka\n\t0x002f0088, // n0x0d3b c0x0000 (---------------)  + I mizumaki\n\t0x002cbdc8, // n0x0d3c c0x0000 (---------------)  + I munakata\n\t0x002ac8c8, // n0x0d3d c0x0000 (---------------)  + I nakagawa\n\t0x00307c86, // n0x0d3e c0x0000 (---------------)  + I nakama\n\t0x00211805, // n0x0d3f c0x0000 (---------------)  + I nishi\n\t0x00223806, // n0x0d40 c0x0000 (---------------)  + I nogata\n\t0x002abb05, // n0x0d41 c0x0000 (---------------)  + I ogori\n\t0x00380887, // n0x0d42 c0x0000 (---------------)  + I okagaki\n\t0x002060c5, // n0x0d43 c0x0000 (---------------)  + I okawa\n\t0x00215483, // n0x0d44 c0x0000 (---------------)  + I oki\n\t0x00203a85, // n0x0d45 c0x0000 (---------------)  + I omuta\n\t0x002b6104, // n0x0d46 c0x0000 (---------------)  + I onga\n\t0x0020a705, // n0x0d47 c0x0000 (---------------)  + I onojo\n\t0x00216003, // n0x0d48 c0x0000 (---------------)  + I oto\n\t0x002d87c7, // n0x0d49 c0x0000 (---------------)  + I saigawa\n\t0x0036fd08, // n0x0d4a c0x0000 (---------------)  + I sasaguri\n\t0x00266d06, // n0x0d4b c0x0000 (---------------)  + I shingu\n\t0x002a224d, // n0x0d4c c0x0000 (---------------)  + I shinyoshitomi\n\t0x002792c6, // n0x0d4d c0x0000 (---------------)  + I shonai\n\t0x00295a45, // n0x0d4e c0x0000 (---------------)  + I soeda\n\t0x002c6c03, // n0x0d4f c0x0000 (---------------)  + I sue\n\t0x002b3109, // n0x0d50 c0x0000 (---------------)  + I tachiarai\n\t0x002c1c86, // n0x0d51 c0x0000 (---------------)  + I tagawa\n\t0x00238646, // n0x0d52 c0x0000 (---------------)  + I takata\n\t0x0034cf44, // n0x0d53 c0x0000 (---------------)  + I toho\n\t0x00269d47, // n0x0d54 c0x0000 (---------------)  + I toyotsu\n\t0x0023bd46, // n0x0d55 c0x0000 (---------------)  + I tsuiki\n\t0x0036b045, // n0x0d56 c0x0000 (---------------)  + I ukiha\n\t0x0020b583, // n0x0d57 c0x0000 (---------------)  + I umi\n\t0x002066c4, // n0x0d58 c0x0000 (---------------)  + I usui\n\t0x0027ce46, // n0x0d59 c0x0000 (---------------)  + I yamada\n\t0x002a7d84, // n0x0d5a c0x0000 (---------------)  + I yame\n\t0x0030df48, // n0x0d5b c0x0000 (---------------)  + I yanagawa\n\t0x00383d09, // n0x0d5c c0x0000 (---------------)  + I yukuhashi\n\t0x002bde89, // n0x0d5d c0x0000 (---------------)  + I aizubange\n\t0x0029eb8a, // n0x0d5e c0x0000 (---------------)  + I aizumisato\n\t0x002453cd, // n0x0d5f c0x0000 (---------------)  + I aizuwakamatsu\n\t0x00248a07, // n0x0d60 c0x0000 (---------------)  + I asakawa\n\t0x00207cc6, // n0x0d61 c0x0000 (---------------)  + I bandai\n\t0x0020c7c4, // n0x0d62 c0x0000 (---------------)  + I date\n\t0x0032fcc9, // n0x0d63 c0x0000 (---------------)  + I fukushima\n\t0x002860c8, // n0x0d64 c0x0000 (---------------)  + I furudono\n\t0x00287246, // n0x0d65 c0x0000 (---------------)  + I futaba\n\t0x0025a746, // n0x0d66 c0x0000 (---------------)  + I hanawa\n\t0x00268047, // n0x0d67 c0x0000 (---------------)  + I higashi\n\t0x00347f46, // n0x0d68 c0x0000 (---------------)  + I hirata\n\t0x0021d4c6, // n0x0d69 c0x0000 (---------------)  + I hirono\n\t0x00384006, // n0x0d6a c0x0000 (---------------)  + I iitate\n\t0x00395bca, // n0x0d6b c0x0000 (---------------)  + I inawashiro\n\t0x0021a4c8, // n0x0d6c c0x0000 (---------------)  + I ishikawa\n\t0x0022da85, // n0x0d6d c0x0000 (---------------)  + I iwaki\n\t0x002802c9, // n0x0d6e c0x0000 (---------------)  + I izumizaki\n\t0x0028128a, // n0x0d6f c0x0000 (---------------)  + I kagamiishi\n\t0x002c7848, // n0x0d70 c0x0000 (---------------)  + I kaneyama\n\t0x0029b888, // n0x0d71 c0x0000 (---------------)  + I kawamata\n\t0x00295fc8, // n0x0d72 c0x0000 (---------------)  + I kitakata\n\t0x00201e0c, // n0x0d73 c0x0000 (---------------)  + I kitashiobara\n\t0x002d5305, // n0x0d74 c0x0000 (---------------)  + I koori\n\t0x0029db88, // n0x0d75 c0x0000 (---------------)  + I koriyama\n\t0x00342586, // n0x0d76 c0x0000 (---------------)  + I kunimi\n\t0x00306306, // n0x0d77 c0x0000 (---------------)  + I miharu\n\t0x002bf3c7, // n0x0d78 c0x0000 (---------------)  + I mishima\n\t0x0024b8c5, // n0x0d79 c0x0000 (---------------)  + I namie\n\t0x00282d45, // n0x0d7a c0x0000 (---------------)  + I nango\n\t0x002bdd49, // n0x0d7b c0x0000 (---------------)  + I nishiaizu\n\t0x00211d87, // n0x0d7c c0x0000 (---------------)  + I nishigo\n\t0x002f5d45, // n0x0d7d c0x0000 (---------------)  + I okuma\n\t0x0021f187, // n0x0d7e c0x0000 (---------------)  + I omotego\n\t0x0020a703, // n0x0d7f c0x0000 (---------------)  + I ono\n\t0x002c0e45, // n0x0d80 c0x0000 (---------------)  + I otama\n\t0x00346648, // n0x0d81 c0x0000 (---------------)  + I samegawa\n\t0x002b1287, // n0x0d82 c0x0000 (---------------)  + I shimogo\n\t0x0029b749, // n0x0d83 c0x0000 (---------------)  + I shirakawa\n\t0x00319905, // n0x0d84 c0x0000 (---------------)  + I showa\n\t0x0035d844, // n0x0d85 c0x0000 (---------------)  + I soma\n\t0x002a0308, // n0x0d86 c0x0000 (---------------)  + I sukagawa\n\t0x0022c747, // n0x0d87 c0x0000 (---------------)  + I taishin\n\t0x002a2e08, // n0x0d88 c0x0000 (---------------)  + I tamakawa\n\t0x00330f48, // n0x0d89 c0x0000 (---------------)  + I tanagura\n\t0x002d9885, // n0x0d8a c0x0000 (---------------)  + I tenei\n\t0x00350b06, // n0x0d8b c0x0000 (---------------)  + I yabuki\n\t0x0028f086, // n0x0d8c c0x0000 (---------------)  + I yamato\n\t0x00250089, // n0x0d8d c0x0000 (---------------)  + I yamatsuri\n\t0x00314a47, // n0x0d8e c0x0000 (---------------)  + I yanaizu\n\t0x002abfc6, // n0x0d8f c0x0000 (---------------)  + I yugawa\n\t0x0028ca87, // n0x0d90 c0x0000 (---------------)  + I anpachi\n\t0x002183c3, // n0x0d91 c0x0000 (---------------)  + I ena\n\t0x0036aec4, // n0x0d92 c0x0000 (---------------)  + I gifu\n\t0x002a0c45, // n0x0d93 c0x0000 (---------------)  + I ginan\n\t0x00214d84, // n0x0d94 c0x0000 (---------------)  + I godo\n\t0x00343c04, // n0x0d95 c0x0000 (---------------)  + I gujo\n\t0x00280b47, // n0x0d96 c0x0000 (---------------)  + I hashima\n\t0x00218a07, // n0x0d97 c0x0000 (---------------)  + I hichiso\n\t0x0027ab84, // n0x0d98 c0x0000 (---------------)  + I hida\n\t0x0029b590, // n0x0d99 c0x0000 (---------------)  + I higashishirakawa\n\t0x00308147, // n0x0d9a c0x0000 (---------------)  + I ibigawa\n\t0x00202585, // n0x0d9b c0x0000 (---------------)  + I ikeda\n\t0x002ef98c, // n0x0d9c c0x0000 (---------------)  + I kakamigahara\n\t0x00279cc4, // n0x0d9d c0x0000 (---------------)  + I kani\n\t0x0029b388, // n0x0d9e c0x0000 (---------------)  + I kasahara\n\t0x00243649, // n0x0d9f c0x0000 (---------------)  + I kasamatsu\n\t0x00301506, // n0x0da0 c0x0000 (---------------)  + I kawaue\n\t0x0021f588, // n0x0da1 c0x0000 (---------------)  + I kitagata\n\t0x0024ff84, // n0x0da2 c0x0000 (---------------)  + I mino\n\t0x002d7b88, // n0x0da3 c0x0000 (---------------)  + I minokamo\n\t0x00268506, // n0x0da4 c0x0000 (---------------)  + I mitake\n\t0x00228288, // n0x0da5 c0x0000 (---------------)  + I mizunami\n\t0x002a0946, // n0x0da6 c0x0000 (---------------)  + I motosu\n\t0x0037a2cb, // n0x0da7 c0x0000 (---------------)  + I nakatsugawa\n\t0x00202a05, // n0x0da8 c0x0000 (---------------)  + I ogaki\n\t0x002c6388, // n0x0da9 c0x0000 (---------------)  + I sakahogi\n\t0x00217fc4, // n0x0daa c0x0000 (---------------)  + I seki\n\t0x0028224a, // n0x0dab c0x0000 (---------------)  + I sekigahara\n\t0x0029b749, // n0x0dac c0x0000 (---------------)  + I shirakawa\n\t0x00312006, // n0x0dad c0x0000 (---------------)  + I tajimi\n\t0x002c0148, // n0x0dae c0x0000 (---------------)  + I takayama\n\t0x00274245, // n0x0daf c0x0000 (---------------)  + I tarui\n\t0x00222904, // n0x0db0 c0x0000 (---------------)  + I toki\n\t0x0029b286, // n0x0db1 c0x0000 (---------------)  + I tomika\n\t0x00292fc8, // n0x0db2 c0x0000 (---------------)  + I wanouchi\n\t0x002808c8, // n0x0db3 c0x0000 (---------------)  + I yamagata\n\t0x00341746, // n0x0db4 c0x0000 (---------------)  + I yaotsu\n\t0x00321484, // n0x0db5 c0x0000 (---------------)  + I yoro\n\t0x0021e4c6, // n0x0db6 c0x0000 (---------------)  + I annaka\n\t0x003005c7, // n0x0db7 c0x0000 (---------------)  + I chiyoda\n\t0x00278cc7, // n0x0db8 c0x0000 (---------------)  + I fujioka\n\t0x0026804f, // n0x0db9 c0x0000 (---------------)  + I higashiagatsuma\n\t0x00204687, // n0x0dba c0x0000 (---------------)  + I isesaki\n\t0x0037e007, // n0x0dbb c0x0000 (---------------)  + I itakura\n\t0x003061c5, // n0x0dbc c0x0000 (---------------)  + I kanna\n\t0x002e2345, // n0x0dbd c0x0000 (---------------)  + I kanra\n\t0x0029f0c9, // n0x0dbe c0x0000 (---------------)  + I katashina\n\t0x0026b7c6, // n0x0dbf c0x0000 (---------------)  + I kawaba\n\t0x0027f4c5, // n0x0dc0 c0x0000 (---------------)  + I kiryu\n\t0x002828c7, // n0x0dc1 c0x0000 (---------------)  + I kusatsu\n\t0x002c5d48, // n0x0dc2 c0x0000 (---------------)  + I maebashi\n\t0x002be885, // n0x0dc3 c0x0000 (---------------)  + I meiwa\n\t0x00298e06, // n0x0dc4 c0x0000 (---------------)  + I midori\n\t0x00216448, // n0x0dc5 c0x0000 (---------------)  + I minakami\n\t0x00354f8a, // n0x0dc6 c0x0000 (---------------)  + I naganohara\n\t0x00356448, // n0x0dc7 c0x0000 (---------------)  + I nakanojo\n\t0x003a1d07, // n0x0dc8 c0x0000 (---------------)  + I nanmoku\n\t0x0022f206, // n0x0dc9 c0x0000 (---------------)  + I numata\n\t0x00280286, // n0x0dca c0x0000 (---------------)  + I oizumi\n\t0x0021c683, // n0x0dcb c0x0000 (---------------)  + I ora\n\t0x00204083, // n0x0dcc c0x0000 (---------------)  + I ota\n\t0x00281449, // n0x0dcd c0x0000 (---------------)  + I shibukawa\n\t0x00269149, // n0x0dce c0x0000 (---------------)  + I shimonita\n\t0x00299ec6, // n0x0dcf c0x0000 (---------------)  + I shinto\n\t0x00319905, // n0x0dd0 c0x0000 (---------------)  + I showa\n\t0x002a06c8, // n0x0dd1 c0x0000 (---------------)  + I takasaki\n\t0x002c0148, // n0x0dd2 c0x0000 (---------------)  + I takayama\n\t0x0039a108, // n0x0dd3 c0x0000 (---------------)  + I tamamura\n\t0x0038408b, // n0x0dd4 c0x0000 (---------------)  + I tatebayashi\n\t0x002a2487, // n0x0dd5 c0x0000 (---------------)  + I tomioka\n\t0x002ff549, // n0x0dd6 c0x0000 (---------------)  + I tsukiyono\n\t0x002682c8, // n0x0dd7 c0x0000 (---------------)  + I tsumagoi\n\t0x00387304, // n0x0dd8 c0x0000 (---------------)  + I ueno\n\t0x002c6948, // n0x0dd9 c0x0000 (---------------)  + I yoshioka\n\t0x0028bb49, // n0x0dda c0x0000 (---------------)  + I asaminami\n\t0x002ac2c5, // n0x0ddb c0x0000 (---------------)  + I daiwa\n\t0x00249047, // n0x0ddc c0x0000 (---------------)  + I etajima\n\t0x002bc1c5, // n0x0ddd c0x0000 (---------------)  + I fuchu\n\t0x002807c8, // n0x0dde c0x0000 (---------------)  + I fukuyama\n\t0x0028f38b, // n0x0ddf c0x0000 (---------------)  + I hatsukaichi\n\t0x00293b10, // n0x0de0 c0x0000 (---------------)  + I higashihiroshima\n\t0x002a8645, // n0x0de1 c0x0000 (---------------)  + I hongo\n\t0x00217f0c, // n0x0de2 c0x0000 (---------------)  + I jinsekikogen\n\t0x0036bc05, // n0x0de3 c0x0000 (---------------)  + I kaita\n\t0x0027db43, // n0x0de4 c0x0000 (---------------)  + I kui\n\t0x00383786, // n0x0de5 c0x0000 (---------------)  + I kumano\n\t0x002b7544, // n0x0de6 c0x0000 (---------------)  + I kure\n\t0x003a69c6, // n0x0de7 c0x0000 (---------------)  + I mihara\n\t0x0029c447, // n0x0de8 c0x0000 (---------------)  + I miyoshi\n\t0x002164c4, // n0x0de9 c0x0000 (---------------)  + I naka\n\t0x002d2088, // n0x0dea c0x0000 (---------------)  + I onomichi\n\t0x002eb7cd, // n0x0deb c0x0000 (---------------)  + I osakikamijima\n\t0x00305a45, // n0x0dec c0x0000 (---------------)  + I otake\n\t0x002458c4, // n0x0ded c0x0000 (---------------)  + I saka\n\t0x00222f84, // n0x0dee c0x0000 (---------------)  + I sera\n\t0x0027fd49, // n0x0def c0x0000 (---------------)  + I seranishi\n\t0x00286908, // n0x0df0 c0x0000 (---------------)  + I shinichi\n\t0x0030bd87, // n0x0df1 c0x0000 (---------------)  + I shobara\n\t0x00268588, // n0x0df2 c0x0000 (---------------)  + I takehara\n\t0x00281748, // n0x0df3 c0x0000 (---------------)  + I abashiri\n\t0x0027acc5, // n0x0df4 c0x0000 (---------------)  + I abira\n\t0x00208b87, // n0x0df5 c0x0000 (---------------)  + I aibetsu\n\t0x0027ac47, // n0x0df6 c0x0000 (---------------)  + I akabira\n\t0x00209907, // n0x0df7 c0x0000 (---------------)  + I akkeshi\n\t0x002bf189, // n0x0df8 c0x0000 (---------------)  + I asahikawa\n\t0x0023bbc9, // n0x0df9 c0x0000 (---------------)  + I ashibetsu\n\t0x00244e86, // n0x0dfa c0x0000 (---------------)  + I ashoro\n\t0x002b4086, // n0x0dfb c0x0000 (---------------)  + I assabu\n\t0x00268286, // n0x0dfc c0x0000 (---------------)  + I atsuma\n\t0x0026a3c5, // n0x0dfd c0x0000 (---------------)  + I bibai\n\t0x002d81c4, // n0x0dfe c0x0000 (---------------)  + I biei\n\t0x00200ec6, // n0x0dff c0x0000 (---------------)  + I bifuka\n\t0x00202106, // n0x0e00 c0x0000 (---------------)  + I bihoro\n\t0x0027ad08, // n0x0e01 c0x0000 (---------------)  + I biratori\n\t0x0029730b, // n0x0e02 c0x0000 (---------------)  + I chippubetsu\n\t0x002ae607, // n0x0e03 c0x0000 (---------------)  + I chitose\n\t0x0020c7c4, // n0x0e04 c0x0000 (---------------)  + I date\n\t0x00223e46, // n0x0e05 c0x0000 (---------------)  + I ebetsu\n\t0x00283707, // n0x0e06 c0x0000 (---------------)  + I embetsu\n\t0x002f5f45, // n0x0e07 c0x0000 (---------------)  + I eniwa\n\t0x00239145, // n0x0e08 c0x0000 (---------------)  + I erimo\n\t0x00200484, // n0x0e09 c0x0000 (---------------)  + I esan\n\t0x0023bb46, // n0x0e0a c0x0000 (---------------)  + I esashi\n\t0x00200f48, // n0x0e0b c0x0000 (---------------)  + I fukagawa\n\t0x0032fcc9, // n0x0e0c c0x0000 (---------------)  + I fukushima\n\t0x00253846, // n0x0e0d c0x0000 (---------------)  + I furano\n\t0x00285888, // n0x0e0e c0x0000 (---------------)  + I furubira\n\t0x0036b106, // n0x0e0f c0x0000 (---------------)  + I haboro\n\t0x0032ccc8, // n0x0e10 c0x0000 (---------------)  + I hakodate\n\t0x002a9b8c, // n0x0e11 c0x0000 (---------------)  + I hamatonbetsu\n\t0x0027ab86, // n0x0e12 c0x0000 (---------------)  + I hidaka\n\t0x0029570d, // n0x0e13 c0x0000 (---------------)  + I higashikagura\n\t0x00295b8b, // n0x0e14 c0x0000 (---------------)  + I higashikawa\n\t0x0037ec85, // n0x0e15 c0x0000 (---------------)  + I hiroo\n\t0x00201b47, // n0x0e16 c0x0000 (---------------)  + I hokuryu\n\t0x0033d0c6, // n0x0e17 c0x0000 (---------------)  + I hokuto\n\t0x002e8288, // n0x0e18 c0x0000 (---------------)  + I honbetsu\n\t0x00244f09, // n0x0e19 c0x0000 (---------------)  + I horokanai\n\t0x002bd888, // n0x0e1a c0x0000 (---------------)  + I horonobe\n\t0x00202585, // n0x0e1b c0x0000 (---------------)  + I ikeda\n\t0x002fe547, // n0x0e1c c0x0000 (---------------)  + I imakane\n\t0x0027eec8, // n0x0e1d c0x0000 (---------------)  + I ishikari\n\t0x00272289, // n0x0e1e c0x0000 (---------------)  + I iwamizawa\n\t0x0023b0c6, // n0x0e1f c0x0000 (---------------)  + I iwanai\n\t0x0025c78a, // n0x0e20 c0x0000 (---------------)  + I kamifurano\n\t0x002e8008, // n0x0e21 c0x0000 (---------------)  + I kamikawa\n\t0x002bd6cb, // n0x0e22 c0x0000 (---------------)  + I kamishihoro\n\t0x00291a4c, // n0x0e23 c0x0000 (---------------)  + I kamisunagawa\n\t0x002d7c88, // n0x0e24 c0x0000 (---------------)  + I kamoenai\n\t0x0027c586, // n0x0e25 c0x0000 (---------------)  + I kayabe\n\t0x00208588, // n0x0e26 c0x0000 (---------------)  + I kembuchi\n\t0x002047c7, // n0x0e27 c0x0000 (---------------)  + I kikonai\n\t0x0023be49, // n0x0e28 c0x0000 (---------------)  + I kimobetsu\n\t0x0020ed4d, // n0x0e29 c0x0000 (---------------)  + I kitahiroshima\n\t0x0029d586, // n0x0e2a c0x0000 (---------------)  + I kitami\n\t0x00297008, // n0x0e2b c0x0000 (---------------)  + I kiyosato\n\t0x002eff49, // n0x0e2c c0x0000 (---------------)  + I koshimizu\n\t0x002b4a48, // n0x0e2d c0x0000 (---------------)  + I kunneppu\n\t0x002840c8, // n0x0e2e c0x0000 (---------------)  + I kuriyama\n\t0x002b8a8c, // n0x0e2f c0x0000 (---------------)  + I kuromatsunai\n\t0x002b9a07, // n0x0e30 c0x0000 (---------------)  + I kushiro\n\t0x002ba907, // n0x0e31 c0x0000 (---------------)  + I kutchan\n\t0x002befc5, // n0x0e32 c0x0000 (---------------)  + I kyowa\n\t0x0024eec7, // n0x0e33 c0x0000 (---------------)  + I mashike\n\t0x002c5c08, // n0x0e34 c0x0000 (---------------)  + I matsumae\n\t0x0029b306, // n0x0e35 c0x0000 (---------------)  + I mikasa\n\t0x002536cc, // n0x0e36 c0x0000 (---------------)  + I minamifurano\n\t0x002e3788, // n0x0e37 c0x0000 (---------------)  + I mombetsu\n\t0x002c7c48, // n0x0e38 c0x0000 (---------------)  + I moseushi\n\t0x002b6d86, // n0x0e39 c0x0000 (---------------)  + I mukawa\n\t0x003961c7, // n0x0e3a c0x0000 (---------------)  + I muroran\n\t0x00245084, // n0x0e3b c0x0000 (---------------)  + I naie\n\t0x002ac8c8, // n0x0e3c c0x0000 (---------------)  + I nakagawa\n\t0x0021840c, // n0x0e3d c0x0000 (---------------)  + I nakasatsunai\n\t0x0036decc, // n0x0e3e c0x0000 (---------------)  + I nakatombetsu\n\t0x002232c5, // n0x0e3f c0x0000 (---------------)  + I nanae\n\t0x0038ae07, // n0x0e40 c0x0000 (---------------)  + I nanporo\n\t0x00321406, // n0x0e41 c0x0000 (---------------)  + I nayoro\n\t0x00396146, // n0x0e42 c0x0000 (---------------)  + I nemuro\n\t0x00296508, // n0x0e43 c0x0000 (---------------)  + I niikappu\n\t0x0039e6c4, // n0x0e44 c0x0000 (---------------)  + I niki\n\t0x002251cb, // n0x0e45 c0x0000 (---------------)  + I nishiokoppe\n\t0x0033214b, // n0x0e46 c0x0000 (---------------)  + I noboribetsu\n\t0x0022f206, // n0x0e47 c0x0000 (---------------)  + I numata\n\t0x002eb647, // n0x0e48 c0x0000 (---------------)  + I obihiro\n\t0x00309145, // n0x0e49 c0x0000 (---------------)  + I obira\n\t0x0026f985, // n0x0e4a c0x0000 (---------------)  + I oketo\n\t0x00225306, // n0x0e4b c0x0000 (---------------)  + I okoppe\n\t0x00274205, // n0x0e4c c0x0000 (---------------)  + I otaru\n\t0x002be145, // n0x0e4d c0x0000 (---------------)  + I otobe\n\t0x002bf687, // n0x0e4e c0x0000 (---------------)  + I otofuke\n\t0x00278689, // n0x0e4f c0x0000 (---------------)  + I otoineppu\n\t0x002e6d04, // n0x0e50 c0x0000 (---------------)  + I oumu\n\t0x00277145, // n0x0e51 c0x0000 (---------------)  + I ozora\n\t0x002d72c5, // n0x0e52 c0x0000 (---------------)  + I pippu\n\t0x00289ac8, // n0x0e53 c0x0000 (---------------)  + I rankoshi\n\t0x002d1ec5, // n0x0e54 c0x0000 (---------------)  + I rebun\n\t0x002a7649, // n0x0e55 c0x0000 (---------------)  + I rikubetsu\n\t0x002a5647, // n0x0e56 c0x0000 (---------------)  + I rishiri\n\t0x002a564b, // n0x0e57 c0x0000 (---------------)  + I rishirifuji\n\t0x0031cf46, // n0x0e58 c0x0000 (---------------)  + I saroma\n\t0x0036b689, // n0x0e59 c0x0000 (---------------)  + I sarufutsu\n\t0x00229388, // n0x0e5a c0x0000 (---------------)  + I shakotan\n\t0x00259285, // n0x0e5b c0x0000 (---------------)  + I shari\n\t0x00209a08, // n0x0e5c c0x0000 (---------------)  + I shibecha\n\t0x0023bc08, // n0x0e5d c0x0000 (---------------)  + I shibetsu\n\t0x0021afc7, // n0x0e5e c0x0000 (---------------)  + I shikabe\n\t0x00280147, // n0x0e5f c0x0000 (---------------)  + I shikaoi\n\t0x00280bc9, // n0x0e60 c0x0000 (---------------)  + I shimamaki\n\t0x002281c7, // n0x0e61 c0x0000 (---------------)  + I shimizu\n\t0x00263849, // n0x0e62 c0x0000 (---------------)  + I shimokawa\n\t0x0029120c, // n0x0e63 c0x0000 (---------------)  + I shinshinotsu\n\t0x00299ec8, // n0x0e64 c0x0000 (---------------)  + I shintoku\n\t0x002d9d89, // n0x0e65 c0x0000 (---------------)  + I shiranuka\n\t0x002d5707, // n0x0e66 c0x0000 (---------------)  + I shiraoi\n\t0x00281809, // n0x0e67 c0x0000 (---------------)  + I shiriuchi\n\t0x00218b47, // n0x0e68 c0x0000 (---------------)  + I sobetsu\n\t0x00291b48, // n0x0e69 c0x0000 (---------------)  + I sunagawa\n\t0x00289e05, // n0x0e6a c0x0000 (---------------)  + I taiki\n\t0x00321d06, // n0x0e6b c0x0000 (---------------)  + I takasu\n\t0x002b8f88, // n0x0e6c c0x0000 (---------------)  + I takikawa\n\t0x002f8588, // n0x0e6d c0x0000 (---------------)  + I takinoue\n\t0x00281149, // n0x0e6e c0x0000 (---------------)  + I teshikaga\n\t0x002be187, // n0x0e6f c0x0000 (---------------)  + I tobetsu\n\t0x00270305, // n0x0e70 c0x0000 (---------------)  + I tohma\n\t0x0020bf49, // n0x0e71 c0x0000 (---------------)  + I tomakomai\n\t0x00269686, // n0x0e72 c0x0000 (---------------)  + I tomari\n\t0x0028e9c4, // n0x0e73 c0x0000 (---------------)  + I toya\n\t0x0034cc46, // n0x0e74 c0x0000 (---------------)  + I toyako\n\t0x00265f88, // n0x0e75 c0x0000 (---------------)  + I toyotomi\n\t0x0026ae47, // n0x0e76 c0x0000 (---------------)  + I toyoura\n\t0x00297508, // n0x0e77 c0x0000 (---------------)  + I tsubetsu\n\t0x0022b1c9, // n0x0e78 c0x0000 (---------------)  + I tsukigata\n\t0x002b6b07, // n0x0e79 c0x0000 (---------------)  + I urakawa\n\t0x0029d406, // n0x0e7a c0x0000 (---------------)  + I urausu\n\t0x00201c04, // n0x0e7b c0x0000 (---------------)  + I uryu\n\t0x00203b09, // n0x0e7c c0x0000 (---------------)  + I utashinai\n\t0x00208a08, // n0x0e7d c0x0000 (---------------)  + I wakkanai\n\t0x002b6c47, // n0x0e7e c0x0000 (---------------)  + I wassamu\n\t0x00325346, // n0x0e7f c0x0000 (---------------)  + I yakumo\n\t0x00239786, // n0x0e80 c0x0000 (---------------)  + I yoichi\n\t0x00207dc4, // n0x0e81 c0x0000 (---------------)  + I aioi\n\t0x002a8a46, // n0x0e82 c0x0000 (---------------)  + I akashi\n\t0x0020a683, // n0x0e83 c0x0000 (---------------)  + I ako\n\t0x002ec709, // n0x0e84 c0x0000 (---------------)  + I amagasaki\n\t0x002029c6, // n0x0e85 c0x0000 (---------------)  + I aogaki\n\t0x0029bac5, // n0x0e86 c0x0000 (---------------)  + I asago\n\t0x0029d906, // n0x0e87 c0x0000 (---------------)  + I ashiya\n\t0x002a2f45, // n0x0e88 c0x0000 (---------------)  + I awaji\n\t0x0027f348, // n0x0e89 c0x0000 (---------------)  + I fukusaki\n\t0x002d79c7, // n0x0e8a c0x0000 (---------------)  + I goshiki\n\t0x00205b86, // n0x0e8b c0x0000 (---------------)  + I harima\n\t0x00229046, // n0x0e8c c0x0000 (---------------)  + I himeji\n\t0x00265608, // n0x0e8d c0x0000 (---------------)  + I ichikawa\n\t0x0029f247, // n0x0e8e c0x0000 (---------------)  + I inagawa\n\t0x0029d5c5, // n0x0e8f c0x0000 (---------------)  + I itami\n\t0x0029de08, // n0x0e90 c0x0000 (---------------)  + I kakogawa\n\t0x00383348, // n0x0e91 c0x0000 (---------------)  + I kamigori\n\t0x002e8008, // n0x0e92 c0x0000 (---------------)  + I kamikawa\n\t0x0036bac5, // n0x0e93 c0x0000 (---------------)  + I kasai\n\t0x00321d86, // n0x0e94 c0x0000 (---------------)  + I kasuga\n\t0x002bdc49, // n0x0e95 c0x0000 (---------------)  + I kawanishi\n\t0x0028ef04, // n0x0e96 c0x0000 (---------------)  + I miki\n\t0x0036a88b, // n0x0e97 c0x0000 (---------------)  + I minamiawaji\n\t0x0021d1cb, // n0x0e98 c0x0000 (---------------)  + I nishinomiya\n\t0x0022d989, // n0x0e99 c0x0000 (---------------)  + I nishiwaki\n\t0x0020a703, // n0x0e9a c0x0000 (---------------)  + I ono\n\t0x00259bc5, // n0x0e9b c0x0000 (---------------)  + I sanda\n\t0x002069c6, // n0x0e9c c0x0000 (---------------)  + I sannan\n\t0x002db6c8, // n0x0e9d c0x0000 (---------------)  + I sasayama\n\t0x0022ed44, // n0x0e9e c0x0000 (---------------)  + I sayo\n\t0x00266d06, // n0x0e9f c0x0000 (---------------)  + I shingu\n\t0x002cb309, // n0x0ea0 c0x0000 (---------------)  + I shinonsen\n\t0x002af085, // n0x0ea1 c0x0000 (---------------)  + I shiso\n\t0x002bf5c6, // n0x0ea2 c0x0000 (---------------)  + I sumoto\n\t0x0022c746, // n0x0ea3 c0x0000 (---------------)  + I taishi\n\t0x00216a44, // n0x0ea4 c0x0000 (---------------)  + I taka\n\t0x0029614a, // n0x0ea5 c0x0000 (---------------)  + I takarazuka\n\t0x0029ba08, // n0x0ea6 c0x0000 (---------------)  + I takasago\n\t0x002f8586, // n0x0ea7 c0x0000 (---------------)  + I takino\n\t0x002ce105, // n0x0ea8 c0x0000 (---------------)  + I tamba\n\t0x0020d407, // n0x0ea9 c0x0000 (---------------)  + I tatsuno\n\t0x0024fbc7, // n0x0eaa c0x0000 (---------------)  + I toyooka\n\t0x00350b04, // n0x0eab c0x0000 (---------------)  + I yabu\n\t0x0021d407, // n0x0eac c0x0000 (---------------)  + I yashiro\n\t0x00206084, // n0x0ead c0x0000 (---------------)  + I yoka\n\t0x00206086, // n0x0eae c0x0000 (---------------)  + I yokawa\n\t0x00208fc3, // n0x0eaf c0x0000 (---------------)  + I ami\n\t0x002bf185, // n0x0eb0 c0x0000 (---------------)  + I asahi\n\t0x0034be85, // n0x0eb1 c0x0000 (---------------)  + I bando\n\t0x0022cac8, // n0x0eb2 c0x0000 (---------------)  + I chikusei\n\t0x00214cc5, // n0x0eb3 c0x0000 (---------------)  + I daigo\n\t0x0027a8c9, // n0x0eb4 c0x0000 (---------------)  + I fujishiro\n\t0x002a27c7, // n0x0eb5 c0x0000 (---------------)  + I hitachi\n\t0x002ac70b, // n0x0eb6 c0x0000 (---------------)  + I hitachinaka\n\t0x002a27cc, // n0x0eb7 c0x0000 (---------------)  + I hitachiomiya\n\t0x002a344a, // n0x0eb8 c0x0000 (---------------)  + I hitachiota\n\t0x002c1ac7, // n0x0eb9 c0x0000 (---------------)  + I ibaraki\n\t0x002013c3, // n0x0eba c0x0000 (---------------)  + I ina\n\t0x00370248, // n0x0ebb c0x0000 (---------------)  + I inashiki\n\t0x0036bc85, // n0x0ebc c0x0000 (---------------)  + I itako\n\t0x002be905, // n0x0ebd c0x0000 (---------------)  + I iwama\n\t0x00334e84, // n0x0ebe c0x0000 (---------------)  + I joso\n\t0x00291a46, // n0x0ebf c0x0000 (---------------)  + I kamisu\n\t0x00243646, // n0x0ec0 c0x0000 (---------------)  + I kasama\n\t0x002a8a87, // n0x0ec1 c0x0000 (---------------)  + I kashima\n\t0x0020b4cb, // n0x0ec2 c0x0000 (---------------)  + I kasumigaura\n\t0x00226304, // n0x0ec3 c0x0000 (---------------)  + I koga\n\t0x003781c4, // n0x0ec4 c0x0000 (---------------)  + I miho\n\t0x0026e904, // n0x0ec5 c0x0000 (---------------)  + I mito\n\t0x002c60c6, // n0x0ec6 c0x0000 (---------------)  + I moriya\n\t0x002164c4, // n0x0ec7 c0x0000 (---------------)  + I naka\n\t0x002bffc8, // n0x0ec8 c0x0000 (---------------)  + I namegata\n\t0x00334c85, // n0x0ec9 c0x0000 (---------------)  + I oarai\n\t0x00245a05, // n0x0eca c0x0000 (---------------)  + I ogawa\n\t0x0039a047, // n0x0ecb c0x0000 (---------------)  + I omitama\n\t0x00201c49, // n0x0ecc c0x0000 (---------------)  + I ryugasaki\n\t0x0034ca05, // n0x0ecd c0x0000 (---------------)  + I sakai\n\t0x00372a4a, // n0x0ece c0x0000 (---------------)  + I sakuragawa\n\t0x002c5e89, // n0x0ecf c0x0000 (---------------)  + I shimodate\n\t0x00285e4a, // n0x0ed0 c0x0000 (---------------)  + I shimotsuma\n\t0x00395d09, // n0x0ed1 c0x0000 (---------------)  + I shirosato\n\t0x00332b04, // n0x0ed2 c0x0000 (---------------)  + I sowa\n\t0x002af985, // n0x0ed3 c0x0000 (---------------)  + I suifu\n\t0x00348048, // n0x0ed4 c0x0000 (---------------)  + I takahagi\n\t0x002d930b, // n0x0ed5 c0x0000 (---------------)  + I tamatsukuri\n\t0x002fa0c5, // n0x0ed6 c0x0000 (---------------)  + I tokai\n\t0x0028e1c6, // n0x0ed7 c0x0000 (---------------)  + I tomobe\n\t0x00221d44, // n0x0ed8 c0x0000 (---------------)  + I tone\n\t0x0027ae06, // n0x0ed9 c0x0000 (---------------)  + I toride\n\t0x002b6989, // n0x0eda c0x0000 (---------------)  + I tsuchiura\n\t0x00223f07, // n0x0edb c0x0000 (---------------)  + I tsukuba\n\t0x0030c0c8, // n0x0edc c0x0000 (---------------)  + I uchihara\n\t0x00245746, // n0x0edd c0x0000 (---------------)  + I ushiku\n\t0x00300547, // n0x0ede c0x0000 (---------------)  + I yachiyo\n\t0x002808c8, // n0x0edf c0x0000 (---------------)  + I yamagata\n\t0x00386686, // n0x0ee0 c0x0000 (---------------)  + I yawara\n\t0x0024e8c4, // n0x0ee1 c0x0000 (---------------)  + I yuki\n\t0x0035e047, // n0x0ee2 c0x0000 (---------------)  + I anamizu\n\t0x00344045, // n0x0ee3 c0x0000 (---------------)  + I hakui\n\t0x0034a747, // n0x0ee4 c0x0000 (---------------)  + I hakusan\n\t0x00200fc4, // n0x0ee5 c0x0000 (---------------)  + I kaga\n\t0x0033d046, // n0x0ee6 c0x0000 (---------------)  + I kahoku\n\t0x0021a748, // n0x0ee7 c0x0000 (---------------)  + I kanazawa\n\t0x00295d48, // n0x0ee8 c0x0000 (---------------)  + I kawakita\n\t0x002aa707, // n0x0ee9 c0x0000 (---------------)  + I komatsu\n\t0x002546c8, // n0x0eea c0x0000 (---------------)  + I nakanoto\n\t0x002b4305, // n0x0eeb c0x0000 (---------------)  + I nanao\n\t0x0020a544, // n0x0eec c0x0000 (---------------)  + I nomi\n\t0x00265508, // n0x0eed c0x0000 (---------------)  + I nonoichi\n\t0x002547c4, // n0x0eee c0x0000 (---------------)  + I noto\n\t0x00216905, // n0x0eef c0x0000 (---------------)  + I shika\n\t0x002eeb44, // n0x0ef0 c0x0000 (---------------)  + I suzu\n\t0x002304c7, // n0x0ef1 c0x0000 (---------------)  + I tsubata\n\t0x00288347, // n0x0ef2 c0x0000 (---------------)  + I tsurugi\n\t0x00281948, // n0x0ef3 c0x0000 (---------------)  + I uchinada\n\t0x002a2f86, // n0x0ef4 c0x0000 (---------------)  + I wajima\n\t0x00214c45, // n0x0ef5 c0x0000 (---------------)  + I fudai\n\t0x0027a6c8, // n0x0ef6 c0x0000 (---------------)  + I fujisawa\n\t0x00356648, // n0x0ef7 c0x0000 (---------------)  + I hanamaki\n\t0x0029eac9, // n0x0ef8 c0x0000 (---------------)  + I hiraizumi\n\t0x0021d4c6, // n0x0ef9 c0x0000 (---------------)  + I hirono\n\t0x00236408, // n0x0efa c0x0000 (---------------)  + I ichinohe\n\t0x002820ca, // n0x0efb c0x0000 (---------------)  + I ichinoseki\n\t0x002f5fc8, // n0x0efc c0x0000 (---------------)  + I iwaizumi\n\t0x002d8485, // n0x0efd c0x0000 (---------------)  + I iwate\n\t0x00224706, // n0x0efe c0x0000 (---------------)  + I joboji\n\t0x0028d888, // n0x0eff c0x0000 (---------------)  + I kamaishi\n\t0x002fe60a, // n0x0f00 c0x0000 (---------------)  + I kanegasaki\n\t0x00271b47, // n0x0f01 c0x0000 (---------------)  + I karumai\n\t0x002864c5, // n0x0f02 c0x0000 (---------------)  + I kawai\n\t0x00294308, // n0x0f03 c0x0000 (---------------)  + I kitakami\n\t0x00371504, // n0x0f04 c0x0000 (---------------)  + I kuji\n\t0x0036b286, // n0x0f05 c0x0000 (---------------)  + I kunohe\n\t0x002bb088, // n0x0f06 c0x0000 (---------------)  + I kuzumaki\n\t0x0020a5c6, // n0x0f07 c0x0000 (---------------)  + I miyako\n\t0x002ea148, // n0x0f08 c0x0000 (---------------)  + I mizusawa\n\t0x0022aa47, // n0x0f09 c0x0000 (---------------)  + I morioka\n\t0x002072c6, // n0x0f0a c0x0000 (---------------)  + I ninohe\n\t0x0037f944, // n0x0f0b c0x0000 (---------------)  + I noda\n\t0x002db247, // n0x0f0c c0x0000 (---------------)  + I ofunato\n\t0x00342084, // n0x0f0d c0x0000 (---------------)  + I oshu\n\t0x002b6947, // n0x0f0e c0x0000 (---------------)  + I otsuchi\n\t0x0023848d, // n0x0f0f c0x0000 (---------------)  + I rikuzentakata\n\t0x00203845, // n0x0f10 c0x0000 (---------------)  + I shiwa\n\t0x002b108b, // n0x0f11 c0x0000 (---------------)  + I shizukuishi\n\t0x002a0a46, // n0x0f12 c0x0000 (---------------)  + I sumita\n\t0x00252c88, // n0x0f13 c0x0000 (---------------)  + I tanohata\n\t0x003895c4, // n0x0f14 c0x0000 (---------------)  + I tono\n\t0x00276f06, // n0x0f15 c0x0000 (---------------)  + I yahaba\n\t0x0027ce46, // n0x0f16 c0x0000 (---------------)  + I yamada\n\t0x002088c7, // n0x0f17 c0x0000 (---------------)  + I ayagawa\n\t0x002953cd, // n0x0f18 c0x0000 (---------------)  + I higashikagawa\n\t0x00322787, // n0x0f19 c0x0000 (---------------)  + I kanonji\n\t0x00339cc8, // n0x0f1a c0x0000 (---------------)  + I kotohira\n\t0x00366045, // n0x0f1b c0x0000 (---------------)  + I manno\n\t0x00297bc8, // n0x0f1c c0x0000 (---------------)  + I marugame\n\t0x002c0886, // n0x0f1d c0x0000 (---------------)  + I mitoyo\n\t0x002b4388, // n0x0f1e c0x0000 (---------------)  + I naoshima\n\t0x00213bc6, // n0x0f1f c0x0000 (---------------)  + I sanuki\n\t0x0032f6c7, // n0x0f20 c0x0000 (---------------)  + I tadotsu\n\t0x0021f709, // n0x0f21 c0x0000 (---------------)  + I takamatsu\n\t0x003895c7, // n0x0f22 c0x0000 (---------------)  + I tonosho\n\t0x00287508, // n0x0f23 c0x0000 (---------------)  + I uchinomi\n\t0x00273885, // n0x0f24 c0x0000 (---------------)  + I utazu\n\t0x0021c188, // n0x0f25 c0x0000 (---------------)  + I zentsuji\n\t0x00309245, // n0x0f26 c0x0000 (---------------)  + I akune\n\t0x00240f85, // n0x0f27 c0x0000 (---------------)  + I amami\n\t0x002e4bc5, // n0x0f28 c0x0000 (---------------)  + I hioki\n\t0x00223543, // n0x0f29 c0x0000 (---------------)  + I isa\n\t0x00282c44, // n0x0f2a c0x0000 (---------------)  + I isen\n\t0x002802c5, // n0x0f2b c0x0000 (---------------)  + I izumi\n\t0x00276189, // n0x0f2c c0x0000 (---------------)  + I kagoshima\n\t0x002b2786, // n0x0f2d c0x0000 (---------------)  + I kanoya\n\t0x002d2cc8, // n0x0f2e c0x0000 (---------------)  + I kawanabe\n\t0x002fe805, // n0x0f2f c0x0000 (---------------)  + I kinko\n\t0x0030b707, // n0x0f30 c0x0000 (---------------)  + I kouyama\n\t0x0032f9ca, // n0x0f31 c0x0000 (---------------)  + I makurazaki\n\t0x002bf509, // n0x0f32 c0x0000 (---------------)  + I matsumoto\n\t0x002b15ca, // n0x0f33 c0x0000 (---------------)  + I minamitane\n\t0x002cbe48, // n0x0f34 c0x0000 (---------------)  + I nakatane\n\t0x0021efcc, // n0x0f35 c0x0000 (---------------)  + I nishinoomote\n\t0x0028294d, // n0x0f36 c0x0000 (---------------)  + I satsumasendai\n\t0x00315283, // n0x0f37 c0x0000 (---------------)  + I soo\n\t0x002ea048, // n0x0f38 c0x0000 (---------------)  + I tarumizu\n\t0x00206685, // n0x0f39 c0x0000 (---------------)  + I yusui\n\t0x00354d46, // n0x0f3a c0x0000 (---------------)  + I aikawa\n\t0x00377dc6, // n0x0f3b c0x0000 (---------------)  + I atsugi\n\t0x0024d085, // n0x0f3c c0x0000 (---------------)  + I ayase\n\t0x0028cb89, // n0x0f3d c0x0000 (---------------)  + I chigasaki\n\t0x00325545, // n0x0f3e c0x0000 (---------------)  + I ebina\n\t0x0027a6c8, // n0x0f3f c0x0000 (---------------)  + I fujisawa\n\t0x0025ad86, // n0x0f40 c0x0000 (---------------)  + I hadano\n\t0x00339046, // n0x0f41 c0x0000 (---------------)  + I hakone\n\t0x002a01c9, // n0x0f42 c0x0000 (---------------)  + I hiratsuka\n\t0x00385e87, // n0x0f43 c0x0000 (---------------)  + I isehara\n\t0x002fdec6, // n0x0f44 c0x0000 (---------------)  + I kaisei\n\t0x0032f948, // n0x0f45 c0x0000 (---------------)  + I kamakura\n\t0x00206008, // n0x0f46 c0x0000 (---------------)  + I kiyokawa\n\t0x002d0bc7, // n0x0f47 c0x0000 (---------------)  + I matsuda\n\t0x0022840e, // n0x0f48 c0x0000 (---------------)  + I minamiashigara\n\t0x002c0ac5, // n0x0f49 c0x0000 (---------------)  + I miura\n\t0x00272185, // n0x0f4a c0x0000 (---------------)  + I nakai\n\t0x0020a4c8, // n0x0f4b c0x0000 (---------------)  + I ninomiya\n\t0x00384a47, // n0x0f4c c0x0000 (---------------)  + I odawara\n\t0x00207e42, // n0x0f4d c0x0000 (---------------)  + I oi\n\t0x002b8604, // n0x0f4e c0x0000 (---------------)  + I oiso\n\t0x003a68ca, // n0x0f4f c0x0000 (---------------)  + I sagamihara\n\t0x002b6d08, // n0x0f50 c0x0000 (---------------)  + I samukawa\n\t0x00283806, // n0x0f51 c0x0000 (---------------)  + I tsukui\n\t0x002982c8, // n0x0f52 c0x0000 (---------------)  + I yamakita\n\t0x0028f086, // n0x0f53 c0x0000 (---------------)  + I yamato\n\t0x00327d48, // n0x0f54 c0x0000 (---------------)  + I yokosuka\n\t0x002abfc8, // n0x0f55 c0x0000 (---------------)  + I yugawara\n\t0x00240f44, // n0x0f56 c0x0000 (---------------)  + I zama\n\t0x0032a845, // n0x0f57 c0x0000 (---------------)  + I zushi\n\t0x00686744, // n0x0f58 c0x0001 (---------------)  ! I city\n\t0x00686744, // n0x0f59 c0x0001 (---------------)  ! I city\n\t0x00686744, // n0x0f5a c0x0001 (---------------)  ! I city\n\t0x00201dc3, // n0x0f5b c0x0000 (---------------)  + I aki\n\t0x00239606, // n0x0f5c c0x0000 (---------------)  + I geisei\n\t0x0027ab86, // n0x0f5d c0x0000 (---------------)  + I hidaka\n\t0x0029cc4c, // n0x0f5e c0x0000 (---------------)  + I higashitsuno\n\t0x00207303, // n0x0f5f c0x0000 (---------------)  + I ino\n\t0x00281286, // n0x0f60 c0x0000 (---------------)  + I kagami\n\t0x00216544, // n0x0f61 c0x0000 (---------------)  + I kami\n\t0x002c1c08, // n0x0f62 c0x0000 (---------------)  + I kitagawa\n\t0x002cb145, // n0x0f63 c0x0000 (---------------)  + I kochi\n\t0x003a69c6, // n0x0f64 c0x0000 (---------------)  + I mihara\n\t0x002b3848, // n0x0f65 c0x0000 (---------------)  + I motoyama\n\t0x002ce6c6, // n0x0f66 c0x0000 (---------------)  + I muroto\n\t0x00205b06, // n0x0f67 c0x0000 (---------------)  + I nahari\n\t0x00365cc8, // n0x0f68 c0x0000 (---------------)  + I nakamura\n\t0x002a0cc7, // n0x0f69 c0x0000 (---------------)  + I nankoku\n\t0x00227f89, // n0x0f6a c0x0000 (---------------)  + I nishitosa\n\t0x0036be4a, // n0x0f6b c0x0000 (---------------)  + I niyodogawa\n\t0x00248784, // n0x0f6c c0x0000 (---------------)  + I ochi\n\t0x002060c5, // n0x0f6d c0x0000 (---------------)  + I okawa\n\t0x0025bb45, // n0x0f6e c0x0000 (---------------)  + I otoyo\n\t0x0021f306, // n0x0f6f c0x0000 (---------------)  + I otsuki\n\t0x00248a46, // n0x0f70 c0x0000 (---------------)  + I sakawa\n\t0x002a66c6, // n0x0f71 c0x0000 (---------------)  + I sukumo\n\t0x002e9346, // n0x0f72 c0x0000 (---------------)  + I susaki\n\t0x002280c4, // n0x0f73 c0x0000 (---------------)  + I tosa\n\t0x002280cb, // n0x0f74 c0x0000 (---------------)  + I tosashimizu\n\t0x00247dc4, // n0x0f75 c0x0000 (---------------)  + I toyo\n\t0x0020d485, // n0x0f76 c0x0000 (---------------)  + I tsuno\n\t0x002ab485, // n0x0f77 c0x0000 (---------------)  + I umaji\n\t0x00280646, // n0x0f78 c0x0000 (---------------)  + I yasuda\n\t0x00202348, // n0x0f79 c0x0000 (---------------)  + I yusuhara\n\t0x00282807, // n0x0f7a c0x0000 (---------------)  + I amakusa\n\t0x0030be84, // n0x0f7b c0x0000 (---------------)  + I arao\n\t0x00264783, // n0x0f7c c0x0000 (---------------)  + I aso\n\t0x00371005, // n0x0f7d c0x0000 (---------------)  + I choyo\n\t0x0024ad87, // n0x0f7e c0x0000 (---------------)  + I gyokuto\n\t0x002a41c9, // n0x0f7f c0x0000 (---------------)  + I hitoyoshi\n\t0x0028270b, // n0x0f80 c0x0000 (---------------)  + I kamiamakusa\n\t0x002a8a87, // n0x0f81 c0x0000 (---------------)  + I kashima\n\t0x0022c9c7, // n0x0f82 c0x0000 (---------------)  + I kikuchi\n\t0x002d8744, // n0x0f83 c0x0000 (---------------)  + I kosa\n\t0x002b3748, // n0x0f84 c0x0000 (---------------)  + I kumamoto\n\t0x002aa987, // n0x0f85 c0x0000 (---------------)  + I mashiki\n\t0x002a4406, // n0x0f86 c0x0000 (---------------)  + I mifune\n\t0x0024e648, // n0x0f87 c0x0000 (---------------)  + I minamata\n\t0x002a68cb, // n0x0f88 c0x0000 (---------------)  + I minamioguni\n\t0x003608c6, // n0x0f89 c0x0000 (---------------)  + I nagasu\n\t0x00212149, // n0x0f8a c0x0000 (---------------)  + I nishihara\n\t0x002a6a45, // n0x0f8b c0x0000 (---------------)  + I oguni\n\t0x00300a43, // n0x0f8c c0x0000 (---------------)  + I ozu\n\t0x002bf5c6, // n0x0f8d c0x0000 (---------------)  + I sumoto\n\t0x0022a948, // n0x0f8e c0x0000 (---------------)  + I takamori\n\t0x00212703, // n0x0f8f c0x0000 (---------------)  + I uki\n\t0x0024ae83, // n0x0f90 c0x0000 (---------------)  + I uto\n\t0x00223bc6, // n0x0f91 c0x0000 (---------------)  + I yamaga\n\t0x0028f086, // n0x0f92 c0x0000 (---------------)  + I yamato\n\t0x00382d0a, // n0x0f93 c0x0000 (---------------)  + I yatsushiro\n\t0x0027c5c5, // n0x0f94 c0x0000 (---------------)  + I ayabe\n\t0x0027cc8b, // n0x0f95 c0x0000 (---------------)  + I fukuchiyama\n\t0x0029d84b, // n0x0f96 c0x0000 (---------------)  + I higashiyama\n\t0x00229943, // n0x0f97 c0x0000 (---------------)  + I ide\n\t0x0021cc03, // n0x0f98 c0x0000 (---------------)  + I ine\n\t0x002adb84, // n0x0f99 c0x0000 (---------------)  + I joyo\n\t0x0022ad47, // n0x0f9a c0x0000 (---------------)  + I kameoka\n\t0x0022a9c4, // n0x0f9b c0x0000 (---------------)  + I kamo\n\t0x00201e04, // n0x0f9c c0x0000 (---------------)  + I kita\n\t0x00342404, // n0x0f9d c0x0000 (---------------)  + I kizu\n\t0x002f62c8, // n0x0f9e c0x0000 (---------------)  + I kumiyama\n\t0x002ce048, // n0x0f9f c0x0000 (---------------)  + I kyotamba\n\t0x0031f2c9, // n0x0fa0 c0x0000 (---------------)  + I kyotanabe\n\t0x00341c88, // n0x0fa1 c0x0000 (---------------)  + I kyotango\n\t0x002d1847, // n0x0fa2 c0x0000 (---------------)  + I maizuru\n\t0x00228406, // n0x0fa3 c0x0000 (---------------)  + I minami\n\t0x002d290f, // n0x0fa4 c0x0000 (---------------)  + I minamiyamashiro\n\t0x002c0c06, // n0x0fa5 c0x0000 (---------------)  + I miyazu\n\t0x002cb0c4, // n0x0fa6 c0x0000 (---------------)  + I muko\n\t0x002cde8a, // n0x0fa7 c0x0000 (---------------)  + I nagaokakyo\n\t0x0024ac87, // n0x0fa8 c0x0000 (---------------)  + I nakagyo\n\t0x00206c06, // n0x0fa9 c0x0000 (---------------)  + I nantan\n\t0x0028ea09, // n0x0faa c0x0000 (---------------)  + I oyamazaki\n\t0x0031f245, // n0x0fab c0x0000 (---------------)  + I sakyo\n\t0x0022cc05, // n0x0fac c0x0000 (---------------)  + I seika\n\t0x0031f386, // n0x0fad c0x0000 (---------------)  + I tanabe\n\t0x0021c2c3, // n0x0fae c0x0000 (---------------)  + I uji\n\t0x00371549, // n0x0faf c0x0000 (---------------)  + I ujitawara\n\t0x0021a646, // n0x0fb0 c0x0000 (---------------)  + I wazuka\n\t0x0022af89, // n0x0fb1 c0x0000 (---------------)  + I yamashina\n\t0x0038f146, // n0x0fb2 c0x0000 (---------------)  + I yawata\n\t0x002bf185, // n0x0fb3 c0x0000 (---------------)  + I asahi\n\t0x002236c5, // n0x0fb4 c0x0000 (---------------)  + I inabe\n\t0x00204683, // n0x0fb5 c0x0000 (---------------)  + I ise\n\t0x0022ae88, // n0x0fb6 c0x0000 (---------------)  + I kameyama\n\t0x0039f7c7, // n0x0fb7 c0x0000 (---------------)  + I kawagoe\n\t0x002f5c84, // n0x0fb8 c0x0000 (---------------)  + I kiho\n\t0x0021f408, // n0x0fb9 c0x0000 (---------------)  + I kisosaki\n\t0x002da084, // n0x0fba c0x0000 (---------------)  + I kiwa\n\t0x002b9886, // n0x0fbb c0x0000 (---------------)  + I komono\n\t0x00383786, // n0x0fbc c0x0000 (---------------)  + I kumano\n\t0x00243e46, // n0x0fbd c0x0000 (---------------)  + I kuwana\n\t0x002c6249, // n0x0fbe c0x0000 (---------------)  + I matsusaka\n\t0x002be885, // n0x0fbf c0x0000 (---------------)  + I meiwa\n\t0x002da306, // n0x0fc0 c0x0000 (---------------)  + I mihama\n\t0x0025b189, // n0x0fc1 c0x0000 (---------------)  + I minamiise\n\t0x002bfd46, // n0x0fc2 c0x0000 (---------------)  + I misugi\n\t0x002d2a06, // n0x0fc3 c0x0000 (---------------)  + I miyama\n\t0x0037fcc6, // n0x0fc4 c0x0000 (---------------)  + I nabari\n\t0x0020ef45, // n0x0fc5 c0x0000 (---------------)  + I shima\n\t0x002eeb46, // n0x0fc6 c0x0000 (---------------)  + I suzuka\n\t0x0032f6c4, // n0x0fc7 c0x0000 (---------------)  + I tado\n\t0x00289e05, // n0x0fc8 c0x0000 (---------------)  + I taiki\n\t0x002b8f84, // n0x0fc9 c0x0000 (---------------)  + I taki\n\t0x003037c6, // n0x0fca c0x0000 (---------------)  + I tamaki\n\t0x00395ec4, // n0x0fcb c0x0000 (---------------)  + I toba\n\t0x00208c83, // n0x0fcc c0x0000 (---------------)  + I tsu\n\t0x00286185, // n0x0fcd c0x0000 (---------------)  + I udono\n\t0x0023b908, // n0x0fce c0x0000 (---------------)  + I ureshino\n\t0x00351b87, // n0x0fcf c0x0000 (---------------)  + I watarai\n\t0x002b1f89, // n0x0fd0 c0x0000 (---------------)  + I yokkaichi\n\t0x002863c8, // n0x0fd1 c0x0000 (---------------)  + I furukawa\n\t0x00297811, // n0x0fd2 c0x0000 (---------------)  + I higashimatsushima\n\t0x0022c7ca, // n0x0fd3 c0x0000 (---------------)  + I ishinomaki\n\t0x0022f147, // n0x0fd4 c0x0000 (---------------)  + I iwanuma\n\t0x0039fd06, // n0x0fd5 c0x0000 (---------------)  + I kakuda\n\t0x00216544, // n0x0fd6 c0x0000 (---------------)  + I kami\n\t0x002b9088, // n0x0fd7 c0x0000 (---------------)  + I kawasaki\n\t0x002935c9, // n0x0fd8 c0x0000 (---------------)  + I kesennuma\n\t0x002a8bc8, // n0x0fd9 c0x0000 (---------------)  + I marumori\n\t0x002979ca, // n0x0fda c0x0000 (---------------)  + I matsushima\n\t0x002a740d, // n0x0fdb c0x0000 (---------------)  + I minamisanriku\n\t0x0022f486, // n0x0fdc c0x0000 (---------------)  + I misato\n\t0x00365dc6, // n0x0fdd c0x0000 (---------------)  + I murata\n\t0x002db306, // n0x0fde c0x0000 (---------------)  + I natori\n\t0x0037e6c7, // n0x0fdf c0x0000 (---------------)  + I ogawara\n\t0x0029ef85, // n0x0fe0 c0x0000 (---------------)  + I ohira\n\t0x003508c7, // n0x0fe1 c0x0000 (---------------)  + I onagawa\n\t0x0021f4c5, // n0x0fe2 c0x0000 (---------------)  + I osaki\n\t0x002a5784, // n0x0fe3 c0x0000 (---------------)  + I rifu\n\t0x002a9286, // n0x0fe4 c0x0000 (---------------)  + I semine\n\t0x00321bc7, // n0x0fe5 c0x0000 (---------------)  + I shibata\n\t0x0037124d, // n0x0fe6 c0x0000 (---------------)  + I shichikashuku\n\t0x0028d7c7, // n0x0fe7 c0x0000 (---------------)  + I shikama\n\t0x0026ebc8, // n0x0fe8 c0x0000 (---------------)  + I shiogama\n\t0x0027a9c9, // n0x0fe9 c0x0000 (---------------)  + I shiroishi\n\t0x00224606, // n0x0fea c0x0000 (---------------)  + I tagajo\n\t0x0023b045, // n0x0feb c0x0000 (---------------)  + I taiwa\n\t0x00216044, // n0x0fec c0x0000 (---------------)  + I tome\n\t0x00266086, // n0x0fed c0x0000 (---------------)  + I tomiya\n\t0x00350a06, // n0x0fee c0x0000 (---------------)  + I wakuya\n\t0x002b6e86, // n0x0fef c0x0000 (---------------)  + I watari\n\t0x0029ae08, // n0x0ff0 c0x0000 (---------------)  + I yamamoto\n\t0x00212d43, // n0x0ff1 c0x0000 (---------------)  + I zao\n\t0x002088c3, // n0x0ff2 c0x0000 (---------------)  + I aya\n\t0x00328105, // n0x0ff3 c0x0000 (---------------)  + I ebino\n\t0x00337286, // n0x0ff4 c0x0000 (---------------)  + I gokase\n\t0x002abf85, // n0x0ff5 c0x0000 (---------------)  + I hyuga\n\t0x00245948, // n0x0ff6 c0x0000 (---------------)  + I kadogawa\n\t0x0029c60a, // n0x0ff7 c0x0000 (---------------)  + I kawaminami\n\t0x002ddbc4, // n0x0ff8 c0x0000 (---------------)  + I kijo\n\t0x002c1c08, // n0x0ff9 c0x0000 (---------------)  + I kitagawa\n\t0x00295fc8, // n0x0ffa c0x0000 (---------------)  + I kitakata\n\t0x00280487, // n0x0ffb c0x0000 (---------------)  + I kitaura\n\t0x002fe8c9, // n0x0ffc c0x0000 (---------------)  + I kobayashi\n\t0x002b3448, // n0x0ffd c0x0000 (---------------)  + I kunitomi\n\t0x0029a047, // n0x0ffe c0x0000 (---------------)  + I kushima\n\t0x00294c06, // n0x0fff c0x0000 (---------------)  + I mimata\n\t0x0020a5ca, // n0x1000 c0x0000 (---------------)  + I miyakonojo\n\t0x00266108, // n0x1001 c0x0000 (---------------)  + I miyazaki\n\t0x002bd509, // n0x1002 c0x0000 (---------------)  + I morotsuka\n\t0x002869c8, // n0x1003 c0x0000 (---------------)  + I nichinan\n\t0x0021c809, // n0x1004 c0x0000 (---------------)  + I nishimera\n\t0x002bd987, // n0x1005 c0x0000 (---------------)  + I nobeoka\n\t0x00341b45, // n0x1006 c0x0000 (---------------)  + I saito\n\t0x002a1746, // n0x1007 c0x0000 (---------------)  + I shiiba\n\t0x0029b188, // n0x1008 c0x0000 (---------------)  + I shintomi\n\t0x00252e08, // n0x1009 c0x0000 (---------------)  + I takaharu\n\t0x0022b388, // n0x100a c0x0000 (---------------)  + I takanabe\n\t0x00216a48, // n0x100b c0x0000 (---------------)  + I takazaki\n\t0x0020d485, // n0x100c c0x0000 (---------------)  + I tsuno\n\t0x00201544, // n0x100d c0x0000 (---------------)  + I achi\n\t0x0039f4c8, // n0x100e c0x0000 (---------------)  + I agematsu\n\t0x00206d04, // n0x100f c0x0000 (---------------)  + I anan\n\t0x00395b04, // n0x1010 c0x0000 (---------------)  + I aoki\n\t0x002bf185, // n0x1011 c0x0000 (---------------)  + I asahi\n\t0x0028ffc7, // n0x1012 c0x0000 (---------------)  + I azumino\n\t0x00201a09, // n0x1013 c0x0000 (---------------)  + I chikuhoku\n\t0x002086c7, // n0x1014 c0x0000 (---------------)  + I chikuma\n\t0x0020db85, // n0x1015 c0x0000 (---------------)  + I chino\n\t0x00278286, // n0x1016 c0x0000 (---------------)  + I fujimi\n\t0x0033bb06, // n0x1017 c0x0000 (---------------)  + I hakuba\n\t0x00202444, // n0x1018 c0x0000 (---------------)  + I hara\n\t0x002a0506, // n0x1019 c0x0000 (---------------)  + I hiraya\n\t0x00214a84, // n0x101a c0x0000 (---------------)  + I iida\n\t0x0025cc86, // n0x101b c0x0000 (---------------)  + I iijima\n\t0x0039e786, // n0x101c c0x0000 (---------------)  + I iiyama\n\t0x00212546, // n0x101d c0x0000 (---------------)  + I iizuna\n\t0x00202585, // n0x101e c0x0000 (---------------)  + I ikeda\n\t0x00245807, // n0x101f c0x0000 (---------------)  + I ikusaka\n\t0x002013c3, // n0x1020 c0x0000 (---------------)  + I ina\n\t0x00249f89, // n0x1021 c0x0000 (---------------)  + I karuizawa\n\t0x002fdbc8, // n0x1022 c0x0000 (---------------)  + I kawakami\n\t0x0021f404, // n0x1023 c0x0000 (---------------)  + I kiso\n\t0x0032fbcd, // n0x1024 c0x0000 (---------------)  + I kisofukushima\n\t0x00295e48, // n0x1025 c0x0000 (---------------)  + I kitaaiki\n\t0x0028e748, // n0x1026 c0x0000 (---------------)  + I komagane\n\t0x002bd486, // n0x1027 c0x0000 (---------------)  + I komoro\n\t0x0021f809, // n0x1028 c0x0000 (---------------)  + I matsukawa\n\t0x002bf509, // n0x1029 c0x0000 (---------------)  + I matsumoto\n\t0x002b6685, // n0x102a c0x0000 (---------------)  + I miasa\n\t0x0029c70a, // n0x102b c0x0000 (---------------)  + I minamiaiki\n\t0x0027f80a, // n0x102c c0x0000 (---------------)  + I minamimaki\n\t0x0028850c, // n0x102d c0x0000 (---------------)  + I minamiminowa\n\t0x00288686, // n0x102e c0x0000 (---------------)  + I minowa\n\t0x00278b46, // n0x102f c0x0000 (---------------)  + I miyada\n\t0x002c0d86, // n0x1030 c0x0000 (---------------)  + I miyota\n\t0x00257009, // n0x1031 c0x0000 (---------------)  + I mochizuki\n\t0x00354f86, // n0x1032 c0x0000 (---------------)  + I nagano\n\t0x00291bc6, // n0x1033 c0x0000 (---------------)  + I nagawa\n\t0x00325606, // n0x1034 c0x0000 (---------------)  + I nagiso\n\t0x002ac8c8, // n0x1035 c0x0000 (---------------)  + I nakagawa\n\t0x002546c6, // n0x1036 c0x0000 (---------------)  + I nakano\n\t0x002c658b, // n0x1037 c0x0000 (---------------)  + I nozawaonsen\n\t0x00290145, // n0x1038 c0x0000 (---------------)  + I obuse\n\t0x00245a05, // n0x1039 c0x0000 (---------------)  + I ogawa\n\t0x00278dc5, // n0x103a c0x0000 (---------------)  + I okaya\n\t0x002014c6, // n0x103b c0x0000 (---------------)  + I omachi\n\t0x0020a583, // n0x103c c0x0000 (---------------)  + I omi\n\t0x00243dc6, // n0x103d c0x0000 (---------------)  + I ookuwa\n\t0x0028d747, // n0x103e c0x0000 (---------------)  + I ooshika\n\t0x002b8f45, // n0x103f c0x0000 (---------------)  + I otaki\n\t0x0025bc45, // n0x1040 c0x0000 (---------------)  + I otari\n\t0x002dd385, // n0x1041 c0x0000 (---------------)  + I sakae\n\t0x00318606, // n0x1042 c0x0000 (---------------)  + I sakaki\n\t0x002b6744, // n0x1043 c0x0000 (---------------)  + I saku\n\t0x00369d86, // n0x1044 c0x0000 (---------------)  + I sakuho\n\t0x0027b309, // n0x1045 c0x0000 (---------------)  + I shimosuwa\n\t0x0020134c, // n0x1046 c0x0000 (---------------)  + I shinanomachi\n\t0x002a54c8, // n0x1047 c0x0000 (---------------)  + I shiojiri\n\t0x0027b444, // n0x1048 c0x0000 (---------------)  + I suwa\n\t0x002ee7c6, // n0x1049 c0x0000 (---------------)  + I suzaka\n\t0x002a0b46, // n0x104a c0x0000 (---------------)  + I takagi\n\t0x0022a948, // n0x104b c0x0000 (---------------)  + I takamori\n\t0x002c0148, // n0x104c c0x0000 (---------------)  + I takayama\n\t0x00201249, // n0x104d c0x0000 (---------------)  + I tateshina\n\t0x0020d407, // n0x104e c0x0000 (---------------)  + I tatsuno\n\t0x002ae7c9, // n0x104f c0x0000 (---------------)  + I togakushi\n\t0x0026fa46, // n0x1050 c0x0000 (---------------)  + I togura\n\t0x0022f404, // n0x1051 c0x0000 (---------------)  + I tomi\n\t0x0020e184, // n0x1052 c0x0000 (---------------)  + I ueda\n\t0x0024a344, // n0x1053 c0x0000 (---------------)  + I wada\n\t0x002808c8, // n0x1054 c0x0000 (---------------)  + I yamagata\n\t0x0020184a, // n0x1055 c0x0000 (---------------)  + I yamanouchi\n\t0x0034c986, // n0x1056 c0x0000 (---------------)  + I yasaka\n\t0x00353407, // n0x1057 c0x0000 (---------------)  + I yasuoka\n\t0x00311d87, // n0x1058 c0x0000 (---------------)  + I chijiwa\n\t0x0036b785, // n0x1059 c0x0000 (---------------)  + I futsu\n\t0x0028de84, // n0x105a c0x0000 (---------------)  + I goto\n\t0x0028bb06, // n0x105b c0x0000 (---------------)  + I hasami\n\t0x00339dc6, // n0x105c c0x0000 (---------------)  + I hirado\n\t0x0023be03, // n0x105d c0x0000 (---------------)  + I iki\n\t0x002fda07, // n0x105e c0x0000 (---------------)  + I isahaya\n\t0x00330e48, // n0x105f c0x0000 (---------------)  + I kawatana\n\t0x002b67ca, // n0x1060 c0x0000 (---------------)  + I kuchinotsu\n\t0x002c9f88, // n0x1061 c0x0000 (---------------)  + I matsuura\n\t0x002dda48, // n0x1062 c0x0000 (---------------)  + I nagasaki\n\t0x00395f05, // n0x1063 c0x0000 (---------------)  + I obama\n\t0x0037ed85, // n0x1064 c0x0000 (---------------)  + I omura\n\t0x002ae705, // n0x1065 c0x0000 (---------------)  + I oseto\n\t0x0036bb46, // n0x1066 c0x0000 (---------------)  + I saikai\n\t0x003a3f06, // n0x1067 c0x0000 (---------------)  + I sasebo\n\t0x00218945, // n0x1068 c0x0000 (---------------)  + I seihi\n\t0x002ec949, // n0x1069 c0x0000 (---------------)  + I shimabara\n\t0x0028dc8c, // n0x106a c0x0000 (---------------)  + I shinkamigoto\n\t0x00240187, // n0x106b c0x0000 (---------------)  + I togitsu\n\t0x00297a48, // n0x106c c0x0000 (---------------)  + I tsushima\n\t0x0028c145, // n0x106d c0x0000 (---------------)  + I unzen\n\t0x00686744, // n0x106e c0x0001 (---------------)  ! I city\n\t0x00259644, // n0x106f c0x0000 (---------------)  + I ando\n\t0x002b13c4, // n0x1070 c0x0000 (---------------)  + I gose\n\t0x0020dcc6, // n0x1071 c0x0000 (---------------)  + I heguri\n\t0x0029e3ce, // n0x1072 c0x0000 (---------------)  + I higashiyoshino\n\t0x0022cc87, // n0x1073 c0x0000 (---------------)  + I ikaruga\n\t0x00296ec5, // n0x1074 c0x0000 (---------------)  + I ikoma\n\t0x0028ee8c, // n0x1075 c0x0000 (---------------)  + I kamikitayama\n\t0x002d9f47, // n0x1076 c0x0000 (---------------)  + I kanmaki\n\t0x00321b47, // n0x1077 c0x0000 (---------------)  + I kashiba\n\t0x00398f89, // n0x1078 c0x0000 (---------------)  + I kashihara\n\t0x00219349, // n0x1079 c0x0000 (---------------)  + I katsuragi\n\t0x002864c5, // n0x107a c0x0000 (---------------)  + I kawai\n\t0x002fdbc8, // n0x107b c0x0000 (---------------)  + I kawakami\n\t0x002bdc49, // n0x107c c0x0000 (---------------)  + I kawanishi\n\t0x002d6e45, // n0x107d c0x0000 (---------------)  + I koryo\n\t0x002b8e88, // n0x107e c0x0000 (---------------)  + I kurotaki\n\t0x002c6b46, // n0x107f c0x0000 (---------------)  + I mitsue\n\t0x002d2306, // n0x1080 c0x0000 (---------------)  + I miyake\n\t0x002c8a04, // n0x1081 c0x0000 (---------------)  + I nara\n\t0x003281c8, // n0x1082 c0x0000 (---------------)  + I nosegawa\n\t0x002247c3, // n0x1083 c0x0000 (---------------)  + I oji\n\t0x00209204, // n0x1084 c0x0000 (---------------)  + I ouda\n\t0x00371085, // n0x1085 c0x0000 (---------------)  + I oyodo\n\t0x00307fc7, // n0x1086 c0x0000 (---------------)  + I sakurai\n\t0x00202c85, // n0x1087 c0x0000 (---------------)  + I sango\n\t0x00281f89, // n0x1088 c0x0000 (---------------)  + I shimoichi\n\t0x0026784d, // n0x1089 c0x0000 (---------------)  + I shimokitayama\n\t0x0033bd46, // n0x108a c0x0000 (---------------)  + I shinjo\n\t0x002647c4, // n0x108b c0x0000 (---------------)  + I soni\n\t0x00294d08, // n0x108c c0x0000 (---------------)  + I takatori\n\t0x002784ca, // n0x108d c0x0000 (---------------)  + I tawaramoto\n\t0x002177c7, // n0x108e c0x0000 (---------------)  + I tenkawa\n\t0x003460c5, // n0x108f c0x0000 (---------------)  + I tenri\n\t0x00209243, // n0x1090 c0x0000 (---------------)  + I uda\n\t0x0029da0e, // n0x1091 c0x0000 (---------------)  + I yamatokoriyama\n\t0x0028f08c, // n0x1092 c0x0000 (---------------)  + I yamatotakada\n\t0x002fa407, // n0x1093 c0x0000 (---------------)  + I yamazoe\n\t0x0029e587, // n0x1094 c0x0000 (---------------)  + I yoshino\n\t0x00201003, // n0x1095 c0x0000 (---------------)  + I aga\n\t0x00354fc5, // n0x1096 c0x0000 (---------------)  + I agano\n\t0x002b13c5, // n0x1097 c0x0000 (---------------)  + I gosen\n\t0x00298688, // n0x1098 c0x0000 (---------------)  + I itoigawa\n\t0x00294149, // n0x1099 c0x0000 (---------------)  + I izumozaki\n\t0x00292e46, // n0x109a c0x0000 (---------------)  + I joetsu\n\t0x0022a9c4, // n0x109b c0x0000 (---------------)  + I kamo\n\t0x0022f086, // n0x109c c0x0000 (---------------)  + I kariwa\n\t0x00205dcb, // n0x109d c0x0000 (---------------)  + I kashiwazaki\n\t0x002c598c, // n0x109e c0x0000 (---------------)  + I minamiuonuma\n\t0x002ebdc7, // n0x109f c0x0000 (---------------)  + I mitsuke\n\t0x002cae05, // n0x10a0 c0x0000 (---------------)  + I muika\n\t0x00383248, // n0x10a1 c0x0000 (---------------)  + I murakami\n\t0x002d0985, // n0x10a2 c0x0000 (---------------)  + I myoko\n\t0x002cde87, // n0x10a3 c0x0000 (---------------)  + I nagaoka\n\t0x0023ff87, // n0x10a4 c0x0000 (---------------)  + I niigata\n\t0x0024f385, // n0x10a5 c0x0000 (---------------)  + I ojiya\n\t0x0020a583, // n0x10a6 c0x0000 (---------------)  + I omi\n\t0x00360584, // n0x10a7 c0x0000 (---------------)  + I sado\n\t0x00203f85, // n0x10a8 c0x0000 (---------------)  + I sanjo\n\t0x002e6c05, // n0x10a9 c0x0000 (---------------)  + I seiro\n\t0x002e6c06, // n0x10aa c0x0000 (---------------)  + I seirou\n\t0x0026c588, // n0x10ab c0x0000 (---------------)  + I sekikawa\n\t0x00321bc7, // n0x10ac c0x0000 (---------------)  + I shibata\n\t0x003780c6, // n0x10ad c0x0000 (---------------)  + I tagami\n\t0x00354c46, // n0x10ae c0x0000 (---------------)  + I tainai\n\t0x002e4b06, // n0x10af c0x0000 (---------------)  + I tochio\n\t0x00297189, // n0x10b0 c0x0000 (---------------)  + I tokamachi\n\t0x00208c87, // n0x10b1 c0x0000 (---------------)  + I tsubame\n\t0x00292cc6, // n0x10b2 c0x0000 (---------------)  + I tsunan\n\t0x002c5b06, // n0x10b3 c0x0000 (---------------)  + I uonuma\n\t0x0024f446, // n0x10b4 c0x0000 (---------------)  + I yahiko\n\t0x002a8945, // n0x10b5 c0x0000 (---------------)  + I yoita\n\t0x00217246, // n0x10b6 c0x0000 (---------------)  + I yuzawa\n\t0x0038de05, // n0x10b7 c0x0000 (---------------)  + I beppu\n\t0x002d1f48, // n0x10b8 c0x0000 (---------------)  + I bungoono\n\t0x00292a0b, // n0x10b9 c0x0000 (---------------)  + I bungotakada\n\t0x0028b906, // n0x10ba c0x0000 (---------------)  + I hasama\n\t0x00311dc4, // n0x10bb c0x0000 (---------------)  + I hiji\n\t0x002fe3c9, // n0x10bc c0x0000 (---------------)  + I himeshima\n\t0x002a27c4, // n0x10bd c0x0000 (---------------)  + I hita\n\t0x002c6ac8, // n0x10be c0x0000 (---------------)  + I kamitsue\n\t0x0028adc7, // n0x10bf c0x0000 (---------------)  + I kokonoe\n\t0x00283fc4, // n0x10c0 c0x0000 (---------------)  + I kuju\n\t0x002b2a08, // n0x10c1 c0x0000 (---------------)  + I kunisaki\n\t0x002ba1c4, // n0x10c2 c0x0000 (---------------)  + I kusu\n\t0x002a8984, // n0x10c3 c0x0000 (---------------)  + I oita\n\t0x00286f45, // n0x10c4 c0x0000 (---------------)  + I saiki\n\t0x00305a86, // n0x10c5 c0x0000 (---------------)  + I taketa\n\t0x002f6207, // n0x10c6 c0x0000 (---------------)  + I tsukumi\n\t0x0022b983, // n0x10c7 c0x0000 (---------------)  + I usa\n\t0x0029d4c5, // n0x10c8 c0x0000 (---------------)  + I usuki\n\t0x002bc144, // n0x10c9 c0x0000 (---------------)  + I yufu\n\t0x002721c6, // n0x10ca c0x0000 (---------------)  + I akaiwa\n\t0x002b6708, // n0x10cb c0x0000 (---------------)  + I asakuchi\n\t0x00330b85, // n0x10cc c0x0000 (---------------)  + I bizen\n\t0x0028fa49, // n0x10cd c0x0000 (---------------)  + I hayashima\n\t0x0020c145, // n0x10ce c0x0000 (---------------)  + I ibara\n\t0x002bbb48, // n0x10cf c0x0000 (---------------)  + I kagamino\n\t0x00320d87, // n0x10d0 c0x0000 (---------------)  + I kasaoka\n\t0x003809c8, // n0x10d1 c0x0000 (---------------)  + I kibichuo\n\t0x002b1dc7, // n0x10d2 c0x0000 (---------------)  + I kumenan\n\t0x0037e0c9, // n0x10d3 c0x0000 (---------------)  + I kurashiki\n\t0x0031d046, // n0x10d4 c0x0000 (---------------)  + I maniwa\n\t0x00347a06, // n0x10d5 c0x0000 (---------------)  + I misaki\n\t0x00269404, // n0x10d6 c0x0000 (---------------)  + I nagi\n\t0x00294b45, // n0x10d7 c0x0000 (---------------)  + I niimi\n\t0x002f48cc, // n0x10d8 c0x0000 (---------------)  + I nishiawakura\n\t0x00278dc7, // n0x10d9 c0x0000 (---------------)  + I okayama\n\t0x002791c7, // n0x10da c0x0000 (---------------)  + I satosho\n\t0x00311c48, // n0x10db c0x0000 (---------------)  + I setouchi\n\t0x0033bd46, // n0x10dc c0x0000 (---------------)  + I shinjo\n\t0x0029eec4, // n0x10dd c0x0000 (---------------)  + I shoo\n\t0x00323cc4, // n0x10de c0x0000 (---------------)  + I soja\n\t0x00280a49, // n0x10df c0x0000 (---------------)  + I takahashi\n\t0x002c0e86, // n0x10e0 c0x0000 (---------------)  + I tamano\n\t0x0021ec47, // n0x10e1 c0x0000 (---------------)  + I tsuyama\n\t0x00208504, // n0x10e2 c0x0000 (---------------)  + I wake\n\t0x002b2886, // n0x10e3 c0x0000 (---------------)  + I yakage\n\t0x00320985, // n0x10e4 c0x0000 (---------------)  + I aguni\n\t0x002a2ac7, // n0x10e5 c0x0000 (---------------)  + I ginowan\n\t0x002c6506, // n0x10e6 c0x0000 (---------------)  + I ginoza\n\t0x0025c649, // n0x10e7 c0x0000 (---------------)  + I gushikami\n\t0x0027f647, // n0x10e8 c0x0000 (---------------)  + I haebaru\n\t0x00268047, // n0x10e9 c0x0000 (---------------)  + I higashi\n\t0x002a0046, // n0x10ea c0x0000 (---------------)  + I hirara\n\t0x002452c5, // n0x10eb c0x0000 (---------------)  + I iheya\n\t0x0027e248, // n0x10ec c0x0000 (---------------)  + I ishigaki\n\t0x0021a4c8, // n0x10ed c0x0000 (---------------)  + I ishikawa\n\t0x00242b46, // n0x10ee c0x0000 (---------------)  + I itoman\n\t0x00330bc5, // n0x10ef c0x0000 (---------------)  + I izena\n\t0x00331c86, // n0x10f0 c0x0000 (---------------)  + I kadena\n\t0x002154c3, // n0x10f1 c0x0000 (---------------)  + I kin\n\t0x00298509, // n0x10f2 c0x0000 (---------------)  + I kitadaito\n\t0x002a644e, // n0x10f3 c0x0000 (---------------)  + I kitanakagusuku\n\t0x002b1ac8, // n0x10f4 c0x0000 (---------------)  + I kumejima\n\t0x002da188, // n0x10f5 c0x0000 (---------------)  + I kunigami\n\t0x0024294b, // n0x10f6 c0x0000 (---------------)  + I minamidaito\n\t0x0028fc86, // n0x10f7 c0x0000 (---------------)  + I motobu\n\t0x002486c4, // n0x10f8 c0x0000 (---------------)  + I nago\n\t0x00205b04, // n0x10f9 c0x0000 (---------------)  + I naha\n\t0x002a654a, // n0x10fa c0x0000 (---------------)  + I nakagusuku\n\t0x00217e07, // n0x10fb c0x0000 (---------------)  + I nakijin\n\t0x00292d85, // n0x10fc c0x0000 (---------------)  + I nanjo\n\t0x00212149, // n0x10fd c0x0000 (---------------)  + I nishihara\n\t0x002b8285, // n0x10fe c0x0000 (---------------)  + I ogimi\n\t0x00395b47, // n0x10ff c0x0000 (---------------)  + I okinawa\n\t0x00301304, // n0x1100 c0x0000 (---------------)  + I onna\n\t0x00383e87, // n0x1101 c0x0000 (---------------)  + I shimoji\n\t0x0022f308, // n0x1102 c0x0000 (---------------)  + I taketomi\n\t0x002b0046, // n0x1103 c0x0000 (---------------)  + I tarama\n\t0x00342249, // n0x1104 c0x0000 (---------------)  + I tokashiki\n\t0x002b354a, // n0x1105 c0x0000 (---------------)  + I tomigusuku\n\t0x00217d86, // n0x1106 c0x0000 (---------------)  + I tonaki\n\t0x00295986, // n0x1107 c0x0000 (---------------)  + I urasoe\n\t0x002ab405, // n0x1108 c0x0000 (---------------)  + I uruma\n\t0x00373d05, // n0x1109 c0x0000 (---------------)  + I yaese\n\t0x00229a47, // n0x110a c0x0000 (---------------)  + I yomitan\n\t0x00249888, // n0x110b c0x0000 (---------------)  + I yonabaru\n\t0x003208c8, // n0x110c c0x0000 (---------------)  + I yonaguni\n\t0x00240f46, // n0x110d c0x0000 (---------------)  + I zamami\n\t0x00223745, // n0x110e c0x0000 (---------------)  + I abeno\n\t0x002487ce, // n0x110f c0x0000 (---------------)  + I chihayaakasaka\n\t0x0030ba84, // n0x1110 c0x0000 (---------------)  + I chuo\n\t0x00242ac5, // n0x1111 c0x0000 (---------------)  + I daito\n\t0x00277c09, // n0x1112 c0x0000 (---------------)  + I fujiidera\n\t0x0026b5c8, // n0x1113 c0x0000 (---------------)  + I habikino\n\t0x003a1c46, // n0x1114 c0x0000 (---------------)  + I hannan\n\t0x0029aa8c, // n0x1115 c0x0000 (---------------)  + I higashiosaka\n\t0x0029c210, // n0x1116 c0x0000 (---------------)  + I higashisumiyoshi\n\t0x0029e00f, // n0x1117 c0x0000 (---------------)  + I higashiyodogawa\n\t0x0029efc8, // n0x1118 c0x0000 (---------------)  + I hirakata\n\t0x002c1ac7, // n0x1119 c0x0000 (---------------)  + I ibaraki\n\t0x00202585, // n0x111a c0x0000 (---------------)  + I ikeda\n\t0x002802c5, // n0x111b c0x0000 (---------------)  + I izumi\n\t0x002f6089, // n0x111c c0x0000 (---------------)  + I izumiotsu\n\t0x00294509, // n0x111d c0x0000 (---------------)  + I izumisano\n\t0x0021e5c6, // n0x111e c0x0000 (---------------)  + I kadoma\n\t0x002fa147, // n0x111f c0x0000 (---------------)  + I kaizuka\n\t0x0038ad85, // n0x1120 c0x0000 (---------------)  + I kanan\n\t0x002037c9, // n0x1121 c0x0000 (---------------)  + I kashiwara\n\t0x0032c486, // n0x1122 c0x0000 (---------------)  + I katano\n\t0x00354dcd, // n0x1123 c0x0000 (---------------)  + I kawachinagano\n\t0x00287009, // n0x1124 c0x0000 (---------------)  + I kishiwada\n\t0x00201e04, // n0x1125 c0x0000 (---------------)  + I kita\n\t0x002b1848, // n0x1126 c0x0000 (---------------)  + I kumatori\n\t0x0039f589, // n0x1127 c0x0000 (---------------)  + I matsubara\n\t0x0034cb46, // n0x1128 c0x0000 (---------------)  + I minato\n\t0x00278385, // n0x1129 c0x0000 (---------------)  + I minoh\n\t0x00347a06, // n0x112a c0x0000 (---------------)  + I misaki\n\t0x0030bf89, // n0x112b c0x0000 (---------------)  + I moriguchi\n\t0x00320008, // n0x112c c0x0000 (---------------)  + I neyagawa\n\t0x00211805, // n0x112d c0x0000 (---------------)  + I nishi\n\t0x0026c504, // n0x112e c0x0000 (---------------)  + I nose\n\t0x0029ac4b, // n0x112f c0x0000 (---------------)  + I osakasayama\n\t0x0034ca05, // n0x1130 c0x0000 (---------------)  + I sakai\n\t0x0029ad86, // n0x1131 c0x0000 (---------------)  + I sayama\n\t0x00282c86, // n0x1132 c0x0000 (---------------)  + I sennan\n\t0x0024c046, // n0x1133 c0x0000 (---------------)  + I settsu\n\t0x0038428b, // n0x1134 c0x0000 (---------------)  + I shijonawate\n\t0x0028fb49, // n0x1135 c0x0000 (---------------)  + I shimamoto\n\t0x00218c85, // n0x1136 c0x0000 (---------------)  + I suita\n\t0x00380787, // n0x1137 c0x0000 (---------------)  + I tadaoka\n\t0x0022c746, // n0x1138 c0x0000 (---------------)  + I taishi\n\t0x00238746, // n0x1139 c0x0000 (---------------)  + I tajiri\n\t0x00281e48, // n0x113a c0x0000 (---------------)  + I takaishi\n\t0x00305b89, // n0x113b c0x0000 (---------------)  + I takatsuki\n\t0x0026e98c, // n0x113c c0x0000 (---------------)  + I tondabayashi\n\t0x0024ab88, // n0x113d c0x0000 (---------------)  + I toyonaka\n\t0x0037b006, // n0x113e c0x0000 (---------------)  + I toyono\n\t0x00341743, // n0x113f c0x0000 (---------------)  + I yao\n\t0x00249246, // n0x1140 c0x0000 (---------------)  + I ariake\n\t0x0027ff85, // n0x1141 c0x0000 (---------------)  + I arita\n\t0x0027cfc8, // n0x1142 c0x0000 (---------------)  + I fukudomi\n\t0x00223146, // n0x1143 c0x0000 (---------------)  + I genkai\n\t0x002a2d08, // n0x1144 c0x0000 (---------------)  + I hamatama\n\t0x0024ba45, // n0x1145 c0x0000 (---------------)  + I hizen\n\t0x0027bc05, // n0x1146 c0x0000 (---------------)  + I imari\n\t0x00321008, // n0x1147 c0x0000 (---------------)  + I kamimine\n\t0x002eec47, // n0x1148 c0x0000 (---------------)  + I kanzaki\n\t0x00377d07, // n0x1149 c0x0000 (---------------)  + I karatsu\n\t0x002a8a87, // n0x114a c0x0000 (---------------)  + I kashima\n\t0x0021f588, // n0x114b c0x0000 (---------------)  + I kitagata\n\t0x0028ebc8, // n0x114c c0x0000 (---------------)  + I kitahata\n\t0x0024edc6, // n0x114d c0x0000 (---------------)  + I kiyama\n\t0x00303607, // n0x114e c0x0000 (---------------)  + I kouhoku\n\t0x0036ad87, // n0x114f c0x0000 (---------------)  + I kyuragi\n\t0x0027fe4a, // n0x1150 c0x0000 (---------------)  + I nishiarita\n\t0x00213483, // n0x1151 c0x0000 (---------------)  + I ogi\n\t0x002014c6, // n0x1152 c0x0000 (---------------)  + I omachi\n\t0x00201985, // n0x1153 c0x0000 (---------------)  + I ouchi\n\t0x00238904, // n0x1154 c0x0000 (---------------)  + I saga\n\t0x0027a9c9, // n0x1155 c0x0000 (---------------)  + I shiroishi\n\t0x0037e044, // n0x1156 c0x0000 (---------------)  + I taku\n\t0x002a1204, // n0x1157 c0x0000 (---------------)  + I tara\n\t0x002a09c4, // n0x1158 c0x0000 (---------------)  + I tosu\n\t0x0029e58b, // n0x1159 c0x0000 (---------------)  + I yoshinogari\n\t0x0039f707, // n0x115a c0x0000 (---------------)  + I arakawa\n\t0x00248a05, // n0x115b c0x0000 (---------------)  + I asaka\n\t0x00292888, // n0x115c c0x0000 (---------------)  + I chichibu\n\t0x00278286, // n0x115d c0x0000 (---------------)  + I fujimi\n\t0x00278288, // n0x115e c0x0000 (---------------)  + I fujimino\n\t0x0027c506, // n0x115f c0x0000 (---------------)  + I fukaya\n\t0x00289385, // n0x1160 c0x0000 (---------------)  + I hanno\n\t0x0028a805, // n0x1161 c0x0000 (---------------)  + I hanyu\n\t0x0028c486, // n0x1162 c0x0000 (---------------)  + I hasuda\n\t0x0028d4c8, // n0x1163 c0x0000 (---------------)  + I hatogaya\n\t0x0028e948, // n0x1164 c0x0000 (---------------)  + I hatoyama\n\t0x0027ab86, // n0x1165 c0x0000 (---------------)  + I hidaka\n\t0x002926cf, // n0x1166 c0x0000 (---------------)  + I higashichichibu\n\t0x00297fd0, // n0x1167 c0x0000 (---------------)  + I higashimatsuyama\n\t0x0038e545, // n0x1168 c0x0000 (---------------)  + I honjo\n\t0x002013c3, // n0x1169 c0x0000 (---------------)  + I ina\n\t0x00251c85, // n0x116a c0x0000 (---------------)  + I iruma\n\t0x002ff488, // n0x116b c0x0000 (---------------)  + I iwatsuki\n\t0x00294409, // n0x116c c0x0000 (---------------)  + I kamiizumi\n\t0x002e8008, // n0x116d c0x0000 (---------------)  + I kamikawa\n\t0x0034cdc8, // n0x116e c0x0000 (---------------)  + I kamisato\n\t0x00207888, // n0x116f c0x0000 (---------------)  + I kasukabe\n\t0x0039f7c7, // n0x1170 c0x0000 (---------------)  + I kawagoe\n\t0x00277f49, // n0x1171 c0x0000 (---------------)  + I kawaguchi\n\t0x002a2f08, // n0x1172 c0x0000 (---------------)  + I kawajima\n\t0x002b7444, // n0x1173 c0x0000 (---------------)  + I kazo\n\t0x002a0848, // n0x1174 c0x0000 (---------------)  + I kitamoto\n\t0x00289b89, // n0x1175 c0x0000 (---------------)  + I koshigaya\n\t0x0030a447, // n0x1176 c0x0000 (---------------)  + I kounosu\n\t0x002a63c4, // n0x1177 c0x0000 (---------------)  + I kuki\n\t0x00208788, // n0x1178 c0x0000 (---------------)  + I kumagaya\n\t0x002455ca, // n0x1179 c0x0000 (---------------)  + I matsubushi\n\t0x002d8c06, // n0x117a c0x0000 (---------------)  + I minano\n\t0x0022f486, // n0x117b c0x0000 (---------------)  + I misato\n\t0x0021d389, // n0x117c c0x0000 (---------------)  + I miyashiro\n\t0x0029c447, // n0x117d c0x0000 (---------------)  + I miyoshi\n\t0x002c6ec8, // n0x117e c0x0000 (---------------)  + I moroyama\n\t0x0038e088, // n0x117f c0x0000 (---------------)  + I nagatoro\n\t0x00208388, // n0x1180 c0x0000 (---------------)  + I namegawa\n\t0x00352f45, // n0x1181 c0x0000 (---------------)  + I niiza\n\t0x00374cc5, // n0x1182 c0x0000 (---------------)  + I ogano\n\t0x00245a05, // n0x1183 c0x0000 (---------------)  + I ogawa\n\t0x002b1385, // n0x1184 c0x0000 (---------------)  + I ogose\n\t0x0035ce07, // n0x1185 c0x0000 (---------------)  + I okegawa\n\t0x0020a585, // n0x1186 c0x0000 (---------------)  + I omiya\n\t0x002b8f45, // n0x1187 c0x0000 (---------------)  + I otaki\n\t0x0033f406, // n0x1188 c0x0000 (---------------)  + I ranzan\n\t0x002e7f47, // n0x1189 c0x0000 (---------------)  + I ryokami\n\t0x002d9247, // n0x118a c0x0000 (---------------)  + I saitama\n\t0x002458c6, // n0x118b c0x0000 (---------------)  + I sakado\n\t0x002cc385, // n0x118c c0x0000 (---------------)  + I satte\n\t0x0029ad86, // n0x118d c0x0000 (---------------)  + I sayama\n\t0x002aaa05, // n0x118e c0x0000 (---------------)  + I shiki\n\t0x00306048, // n0x118f c0x0000 (---------------)  + I shiraoka\n\t0x002e22c4, // n0x1190 c0x0000 (---------------)  + I soka\n\t0x002bfdc6, // n0x1191 c0x0000 (---------------)  + I sugito\n\t0x00265904, // n0x1192 c0x0000 (---------------)  + I toda\n\t0x00222908, // n0x1193 c0x0000 (---------------)  + I tokigawa\n\t0x0038584a, // n0x1194 c0x0000 (---------------)  + I tokorozawa\n\t0x0027b9cc, // n0x1195 c0x0000 (---------------)  + I tsurugashima\n\t0x0020b6c5, // n0x1196 c0x0000 (---------------)  + I urawa\n\t0x00203906, // n0x1197 c0x0000 (---------------)  + I warabi\n\t0x0026eb46, // n0x1198 c0x0000 (---------------)  + I yashio\n\t0x002296c6, // n0x1199 c0x0000 (---------------)  + I yokoze\n\t0x002ff684, // n0x119a c0x0000 (---------------)  + I yono\n\t0x00320c45, // n0x119b c0x0000 (---------------)  + I yorii\n\t0x0027c347, // n0x119c c0x0000 (---------------)  + I yoshida\n\t0x0029c4c9, // n0x119d c0x0000 (---------------)  + I yoshikawa\n\t0x002a42c7, // n0x119e c0x0000 (---------------)  + I yoshimi\n\t0x00686744, // n0x119f c0x0001 (---------------)  ! I city\n\t0x00686744, // n0x11a0 c0x0001 (---------------)  ! I city\n\t0x0030bd05, // n0x11a1 c0x0000 (---------------)  + I aisho\n\t0x00228e04, // n0x11a2 c0x0000 (---------------)  + I gamo\n\t0x0029a44a, // n0x11a3 c0x0000 (---------------)  + I higashiomi\n\t0x00278106, // n0x11a4 c0x0000 (---------------)  + I hikone\n\t0x0034cd44, // n0x11a5 c0x0000 (---------------)  + I koka\n\t0x00206b85, // n0x11a6 c0x0000 (---------------)  + I konan\n\t0x002fb505, // n0x11a7 c0x0000 (---------------)  + I kosei\n\t0x00301bc4, // n0x11a8 c0x0000 (---------------)  + I koto\n\t0x002828c7, // n0x11a9 c0x0000 (---------------)  + I kusatsu\n\t0x0020c0c7, // n0x11aa c0x0000 (---------------)  + I maibara\n\t0x002c60c8, // n0x11ab c0x0000 (---------------)  + I moriyama\n\t0x0025e648, // n0x11ac c0x0000 (---------------)  + I nagahama\n\t0x00211809, // n0x11ad c0x0000 (---------------)  + I nishiazai\n\t0x0025ae88, // n0x11ae c0x0000 (---------------)  + I notogawa\n\t0x0029a60b, // n0x11af c0x0000 (---------------)  + I omihachiman\n\t0x0021f304, // n0x11b0 c0x0000 (---------------)  + I otsu\n\t0x00337145, // n0x11b1 c0x0000 (---------------)  + I ritto\n\t0x0027f545, // n0x11b2 c0x0000 (---------------)  + I ryuoh\n\t0x002a8a09, // n0x11b3 c0x0000 (---------------)  + I takashima\n\t0x00305b89, // n0x11b4 c0x0000 (---------------)  + I takatsuki\n\t0x002fe2c8, // n0x11b5 c0x0000 (---------------)  + I torahime\n\t0x0025b488, // n0x11b6 c0x0000 (---------------)  + I toyosato\n\t0x00280644, // n0x11b7 c0x0000 (---------------)  + I yasu\n\t0x002a0b85, // n0x11b8 c0x0000 (---------------)  + I akagi\n\t0x00201883, // n0x11b9 c0x0000 (---------------)  + I ama\n\t0x0021f2c5, // n0x11ba c0x0000 (---------------)  + I gotsu\n\t0x002da386, // n0x11bb c0x0000 (---------------)  + I hamada\n\t0x00293f8c, // n0x11bc c0x0000 (---------------)  + I higashiizumo\n\t0x0021a546, // n0x11bd c0x0000 (---------------)  + I hikawa\n\t0x002d7a86, // n0x11be c0x0000 (---------------)  + I hikimi\n\t0x00294145, // n0x11bf c0x0000 (---------------)  + I izumo\n\t0x00318688, // n0x11c0 c0x0000 (---------------)  + I kakinoki\n\t0x002b1c46, // n0x11c1 c0x0000 (---------------)  + I masuda\n\t0x0039fe86, // n0x11c2 c0x0000 (---------------)  + I matsue\n\t0x0022f486, // n0x11c3 c0x0000 (---------------)  + I misato\n\t0x0022058c, // n0x11c4 c0x0000 (---------------)  + I nishinoshima\n\t0x002b7044, // n0x11c5 c0x0000 (---------------)  + I ohda\n\t0x002e4c4a, // n0x11c6 c0x0000 (---------------)  + I okinoshima\n\t0x003a1e08, // n0x11c7 c0x0000 (---------------)  + I okuizumo\n\t0x00293dc7, // n0x11c8 c0x0000 (---------------)  + I shimane\n\t0x0024e7c6, // n0x11c9 c0x0000 (---------------)  + I tamayu\n\t0x00292f07, // n0x11ca c0x0000 (---------------)  + I tsuwano\n\t0x002e0845, // n0x11cb c0x0000 (---------------)  + I unnan\n\t0x00325346, // n0x11cc c0x0000 (---------------)  + I yakumo\n\t0x0034fa06, // n0x11cd c0x0000 (---------------)  + I yasugi\n\t0x00377bc7, // n0x11ce c0x0000 (---------------)  + I yatsuka\n\t0x002b3244, // n0x11cf c0x0000 (---------------)  + I arai\n\t0x002305c5, // n0x11d0 c0x0000 (---------------)  + I atami\n\t0x00277c04, // n0x11d1 c0x0000 (---------------)  + I fuji\n\t0x002a5807, // n0x11d2 c0x0000 (---------------)  + I fujieda\n\t0x00277e48, // n0x11d3 c0x0000 (---------------)  + I fujikawa\n\t0x002789ca, // n0x11d4 c0x0000 (---------------)  + I fujinomiya\n\t0x0027ed47, // n0x11d5 c0x0000 (---------------)  + I fukuroi\n\t0x00242cc7, // n0x11d6 c0x0000 (---------------)  + I gotemba\n\t0x002c1a47, // n0x11d7 c0x0000 (---------------)  + I haibara\n\t0x002d0ac9, // n0x11d8 c0x0000 (---------------)  + I hamamatsu\n\t0x00293f8a, // n0x11d9 c0x0000 (---------------)  + I higashiizu\n\t0x00228083, // n0x11da c0x0000 (---------------)  + I ito\n\t0x00351b45, // n0x11db c0x0000 (---------------)  + I iwata\n\t0x00212583, // n0x11dc c0x0000 (---------------)  + I izu\n\t0x00342449, // n0x11dd c0x0000 (---------------)  + I izunokuni\n\t0x002b9588, // n0x11de c0x0000 (---------------)  + I kakegawa\n\t0x003061c7, // n0x11df c0x0000 (---------------)  + I kannami\n\t0x002e8109, // n0x11e0 c0x0000 (---------------)  + I kawanehon\n\t0x0021a5c6, // n0x11e1 c0x0000 (---------------)  + I kawazu\n\t0x003a3c08, // n0x11e2 c0x0000 (---------------)  + I kikugawa\n\t0x002d8745, // n0x11e3 c0x0000 (---------------)  + I kosai\n\t0x0035674a, // n0x11e4 c0x0000 (---------------)  + I makinohara\n\t0x002cf149, // n0x11e5 c0x0000 (---------------)  + I matsuzaki\n\t0x0026e649, // n0x11e6 c0x0000 (---------------)  + I minamiizu\n\t0x002bf3c7, // n0x11e7 c0x0000 (---------------)  + I mishima\n\t0x002a8cc9, // n0x11e8 c0x0000 (---------------)  + I morimachi\n\t0x00212448, // n0x11e9 c0x0000 (---------------)  + I nishiizu\n\t0x002ee946, // n0x11ea c0x0000 (---------------)  + I numazu\n\t0x0037e948, // n0x11eb c0x0000 (---------------)  + I omaezaki\n\t0x00212e87, // n0x11ec c0x0000 (---------------)  + I shimada\n\t0x002281c7, // n0x11ed c0x0000 (---------------)  + I shimizu\n\t0x002c5e87, // n0x11ee c0x0000 (---------------)  + I shimoda\n\t0x002b2608, // n0x11ef c0x0000 (---------------)  + I shizuoka\n\t0x002ee646, // n0x11f0 c0x0000 (---------------)  + I susono\n\t0x00245385, // n0x11f1 c0x0000 (---------------)  + I yaizu\n\t0x0027c347, // n0x11f2 c0x0000 (---------------)  + I yoshida\n\t0x00295488, // n0x11f3 c0x0000 (---------------)  + I ashikaga\n\t0x00344d84, // n0x11f4 c0x0000 (---------------)  + I bato\n\t0x0034ac04, // n0x11f5 c0x0000 (---------------)  + I haga\n\t0x002fddc7, // n0x11f6 c0x0000 (---------------)  + I ichikai\n\t0x002ac347, // n0x11f7 c0x0000 (---------------)  + I iwafune\n\t0x002bdaca, // n0x11f8 c0x0000 (---------------)  + I kaminokawa\n\t0x002ee8c6, // n0x11f9 c0x0000 (---------------)  + I kanuma\n\t0x002fa28a, // n0x11fa c0x0000 (---------------)  + I karasuyama\n\t0x002b8547, // n0x11fb c0x0000 (---------------)  + I kuroiso\n\t0x0030b847, // n0x11fc c0x0000 (---------------)  + I mashiko\n\t0x00241044, // n0x11fd c0x0000 (---------------)  + I mibu\n\t0x00263904, // n0x11fe c0x0000 (---------------)  + I moka\n\t0x00226bc6, // n0x11ff c0x0000 (---------------)  + I motegi\n\t0x002ec144, // n0x1200 c0x0000 (---------------)  + I nasu\n\t0x002ec14c, // n0x1201 c0x0000 (---------------)  + I nasushiobara\n\t0x00203185, // n0x1202 c0x0000 (---------------)  + I nikko\n\t0x00216889, // n0x1203 c0x0000 (---------------)  + I nishikata\n\t0x00279884, // n0x1204 c0x0000 (---------------)  + I nogi\n\t0x0029ef85, // n0x1205 c0x0000 (---------------)  + I ohira\n\t0x00278448, // n0x1206 c0x0000 (---------------)  + I ohtawara\n\t0x00250045, // n0x1207 c0x0000 (---------------)  + I oyama\n\t0x00307fc6, // n0x1208 c0x0000 (---------------)  + I sakura\n\t0x0020f744, // n0x1209 c0x0000 (---------------)  + I sano\n\t0x0027e58a, // n0x120a c0x0000 (---------------)  + I shimotsuke\n\t0x002a7c86, // n0x120b c0x0000 (---------------)  + I shioya\n\t0x002579ca, // n0x120c c0x0000 (---------------)  + I takanezawa\n\t0x00344e07, // n0x120d c0x0000 (---------------)  + I tochigi\n\t0x00297645, // n0x120e c0x0000 (---------------)  + I tsuga\n\t0x0021c2c5, // n0x120f c0x0000 (---------------)  + I ujiie\n\t0x0036b7ca, // n0x1210 c0x0000 (---------------)  + I utsunomiya\n\t0x002a0605, // n0x1211 c0x0000 (---------------)  + I yaita\n\t0x0029eb86, // n0x1212 c0x0000 (---------------)  + I aizumi\n\t0x00206d04, // n0x1213 c0x0000 (---------------)  + I anan\n\t0x002add06, // n0x1214 c0x0000 (---------------)  + I ichiba\n\t0x00229b05, // n0x1215 c0x0000 (---------------)  + I itano\n\t0x00223206, // n0x1216 c0x0000 (---------------)  + I kainan\n\t0x002aa70c, // n0x1217 c0x0000 (---------------)  + I komatsushima\n\t0x002c704a, // n0x1218 c0x0000 (---------------)  + I matsushige\n\t0x0027f904, // n0x1219 c0x0000 (---------------)  + I mima\n\t0x00228406, // n0x121a c0x0000 (---------------)  + I minami\n\t0x0029c447, // n0x121b c0x0000 (---------------)  + I miyoshi\n\t0x002ca384, // n0x121c c0x0000 (---------------)  + I mugi\n\t0x002ac8c8, // n0x121d c0x0000 (---------------)  + I nakagawa\n\t0x00385746, // n0x121e c0x0000 (---------------)  + I naruto\n\t0x00248649, // n0x121f c0x0000 (---------------)  + I sanagochi\n\t0x002ad349, // n0x1220 c0x0000 (---------------)  + I shishikui\n\t0x00299fc9, // n0x1221 c0x0000 (---------------)  + I tokushima\n\t0x0036aa46, // n0x1222 c0x0000 (---------------)  + I wajiki\n\t0x00212f86, // n0x1223 c0x0000 (---------------)  + I adachi\n\t0x0037ea87, // n0x1224 c0x0000 (---------------)  + I akiruno\n\t0x002ec888, // n0x1225 c0x0000 (---------------)  + I akishima\n\t0x00212d89, // n0x1226 c0x0000 (---------------)  + I aogashima\n\t0x0039f707, // n0x1227 c0x0000 (---------------)  + I arakawa\n\t0x002b4186, // n0x1228 c0x0000 (---------------)  + I bunkyo\n\t0x003005c7, // n0x1229 c0x0000 (---------------)  + I chiyoda\n\t0x002db1c5, // n0x122a c0x0000 (---------------)  + I chofu\n\t0x0030ba84, // n0x122b c0x0000 (---------------)  + I chuo\n\t0x0037e647, // n0x122c c0x0000 (---------------)  + I edogawa\n\t0x002bc1c5, // n0x122d c0x0000 (---------------)  + I fuchu\n\t0x00286e85, // n0x122e c0x0000 (---------------)  + I fussa\n\t0x002fc5c7, // n0x122f c0x0000 (---------------)  + I hachijo\n\t0x0024f248, // n0x1230 c0x0000 (---------------)  + I hachioji\n\t0x003831c6, // n0x1231 c0x0000 (---------------)  + I hamura\n\t0x0029680d, // n0x1232 c0x0000 (---------------)  + I higashikurume\n\t0x0029888f, // n0x1233 c0x0000 (---------------)  + I higashimurayama\n\t0x0029d84d, // n0x1234 c0x0000 (---------------)  + I higashiyamato\n\t0x0020dbc4, // n0x1235 c0x0000 (---------------)  + I hino\n\t0x0023ba06, // n0x1236 c0x0000 (---------------)  + I hinode\n\t0x002cfa08, // n0x1237 c0x0000 (---------------)  + I hinohara\n\t0x003255c5, // n0x1238 c0x0000 (---------------)  + I inagi\n\t0x00280008, // n0x1239 c0x0000 (---------------)  + I itabashi\n\t0x0021ae8a, // n0x123a c0x0000 (---------------)  + I katsushika\n\t0x00201e04, // n0x123b c0x0000 (---------------)  + I kita\n\t0x002aaac6, // n0x123c c0x0000 (---------------)  + I kiyose\n\t0x0039c647, // n0x123d c0x0000 (---------------)  + I kodaira\n\t0x00226307, // n0x123e c0x0000 (---------------)  + I koganei\n\t0x002a0d89, // n0x123f c0x0000 (---------------)  + I kokubunji\n\t0x0037e905, // n0x1240 c0x0000 (---------------)  + I komae\n\t0x00301bc4, // n0x1241 c0x0000 (---------------)  + I koto\n\t0x0032a78a, // n0x1242 c0x0000 (---------------)  + I kouzushima\n\t0x002b3009, // n0x1243 c0x0000 (---------------)  + I kunitachi\n\t0x002a8dc7, // n0x1244 c0x0000 (---------------)  + I machida\n\t0x00296ac6, // n0x1245 c0x0000 (---------------)  + I meguro\n\t0x0034cb46, // n0x1246 c0x0000 (---------------)  + I minato\n\t0x002a0ac6, // n0x1247 c0x0000 (---------------)  + I mitaka\n\t0x0035e106, // n0x1248 c0x0000 (---------------)  + I mizuho\n\t0x002cee0f, // n0x1249 c0x0000 (---------------)  + I musashimurayama\n\t0x002cf8c9, // n0x124a c0x0000 (---------------)  + I musashino\n\t0x002546c6, // n0x124b c0x0000 (---------------)  + I nakano\n\t0x00256d06, // n0x124c c0x0000 (---------------)  + I nerima\n\t0x00355a09, // n0x124d c0x0000 (---------------)  + I ogasawara\n\t0x00303707, // n0x124e c0x0000 (---------------)  + I okutama\n\t0x00213a83, // n0x124f c0x0000 (---------------)  + I ome\n\t0x0020ef06, // n0x1250 c0x0000 (---------------)  + I oshima\n\t0x00204083, // n0x1251 c0x0000 (---------------)  + I ota\n\t0x0024cf48, // n0x1252 c0x0000 (---------------)  + I setagaya\n\t0x00300407, // n0x1253 c0x0000 (---------------)  + I shibuya\n\t0x0029f1c9, // n0x1254 c0x0000 (---------------)  + I shinagawa\n\t0x00383608, // n0x1255 c0x0000 (---------------)  + I shinjuku\n\t0x00377e48, // n0x1256 c0x0000 (---------------)  + I suginami\n\t0x0036e146, // n0x1257 c0x0000 (---------------)  + I sumida\n\t0x00223909, // n0x1258 c0x0000 (---------------)  + I tachikawa\n\t0x002400c5, // n0x1259 c0x0000 (---------------)  + I taito\n\t0x0024e7c4, // n0x125a c0x0000 (---------------)  + I tama\n\t0x0024aec7, // n0x125b c0x0000 (---------------)  + I toshima\n\t0x00257085, // n0x125c c0x0000 (---------------)  + I chizu\n\t0x0020dbc4, // n0x125d c0x0000 (---------------)  + I hino\n\t0x00248ac8, // n0x125e c0x0000 (---------------)  + I kawahara\n\t0x002180c4, // n0x125f c0x0000 (---------------)  + I koge\n\t0x00301bc7, // n0x1260 c0x0000 (---------------)  + I kotoura\n\t0x0036fc86, // n0x1261 c0x0000 (---------------)  + I misasa\n\t0x002e5a85, // n0x1262 c0x0000 (---------------)  + I nanbu\n\t0x002869c8, // n0x1263 c0x0000 (---------------)  + I nichinan\n\t0x0034ca0b, // n0x1264 c0x0000 (---------------)  + I sakaiminato\n\t0x002f8b87, // n0x1265 c0x0000 (---------------)  + I tottori\n\t0x0036ba46, // n0x1266 c0x0000 (---------------)  + I wakasa\n\t0x002c0c84, // n0x1267 c0x0000 (---------------)  + I yazu\n\t0x0030f5c6, // n0x1268 c0x0000 (---------------)  + I yonago\n\t0x002bf185, // n0x1269 c0x0000 (---------------)  + I asahi\n\t0x002bc1c5, // n0x126a c0x0000 (---------------)  + I fuchu\n\t0x0027dfc9, // n0x126b c0x0000 (---------------)  + I fukumitsu\n\t0x002824c9, // n0x126c c0x0000 (---------------)  + I funahashi\n\t0x00228204, // n0x126d c0x0000 (---------------)  + I himi\n\t0x00228245, // n0x126e c0x0000 (---------------)  + I imizu\n\t0x00228445, // n0x126f c0x0000 (---------------)  + I inami\n\t0x003565c6, // n0x1270 c0x0000 (---------------)  + I johana\n\t0x002fdcc8, // n0x1271 c0x0000 (---------------)  + I kamiichi\n\t0x002b7bc6, // n0x1272 c0x0000 (---------------)  + I kurobe\n\t0x00330c8b, // n0x1273 c0x0000 (---------------)  + I nakaniikawa\n\t0x0030138a, // n0x1274 c0x0000 (---------------)  + I namerikawa\n\t0x00342185, // n0x1275 c0x0000 (---------------)  + I nanto\n\t0x0028a886, // n0x1276 c0x0000 (---------------)  + I nyuzen\n\t0x002f5985, // n0x1277 c0x0000 (---------------)  + I oyabe\n\t0x00218d45, // n0x1278 c0x0000 (---------------)  + I taira\n\t0x0028ed47, // n0x1279 c0x0000 (---------------)  + I takaoka\n\t0x002040c8, // n0x127a c0x0000 (---------------)  + I tateyama\n\t0x0025af04, // n0x127b c0x0000 (---------------)  + I toga\n\t0x002b6586, // n0x127c c0x0000 (---------------)  + I tonami\n\t0x0028e9c6, // n0x127d c0x0000 (---------------)  + I toyama\n\t0x00212607, // n0x127e c0x0000 (---------------)  + I unazuki\n\t0x00300a04, // n0x127f c0x0000 (---------------)  + I uozu\n\t0x0027ce46, // n0x1280 c0x0000 (---------------)  + I yamada\n\t0x0023ec85, // n0x1281 c0x0000 (---------------)  + I arida\n\t0x0023ec89, // n0x1282 c0x0000 (---------------)  + I aridagawa\n\t0x00213184, // n0x1283 c0x0000 (---------------)  + I gobo\n\t0x0028e009, // n0x1284 c0x0000 (---------------)  + I hashimoto\n\t0x0027ab86, // n0x1285 c0x0000 (---------------)  + I hidaka\n\t0x002b9ac8, // n0x1286 c0x0000 (---------------)  + I hirogawa\n\t0x00228445, // n0x1287 c0x0000 (---------------)  + I inami\n\t0x00311e85, // n0x1288 c0x0000 (---------------)  + I iwade\n\t0x00223206, // n0x1289 c0x0000 (---------------)  + I kainan\n\t0x0026e889, // n0x128a c0x0000 (---------------)  + I kamitonda\n\t0x00219349, // n0x128b c0x0000 (---------------)  + I katsuragi\n\t0x002d7b06, // n0x128c c0x0000 (---------------)  + I kimino\n\t0x0026b6c8, // n0x128d c0x0000 (---------------)  + I kinokawa\n\t0x00267988, // n0x128e c0x0000 (---------------)  + I kitayama\n\t0x002f5944, // n0x128f c0x0000 (---------------)  + I koya\n\t0x0032dcc4, // n0x1290 c0x0000 (---------------)  + I koza\n\t0x0032dcc8, // n0x1291 c0x0000 (---------------)  + I kozagawa\n\t0x00316788, // n0x1292 c0x0000 (---------------)  + I kudoyama\n\t0x002ae8c9, // n0x1293 c0x0000 (---------------)  + I kushimoto\n\t0x002da306, // n0x1294 c0x0000 (---------------)  + I mihama\n\t0x0022f486, // n0x1295 c0x0000 (---------------)  + I misato\n\t0x0031408d, // n0x1296 c0x0000 (---------------)  + I nachikatsuura\n\t0x00266d06, // n0x1297 c0x0000 (---------------)  + I shingu\n\t0x002a9a49, // n0x1298 c0x0000 (---------------)  + I shirahama\n\t0x00201685, // n0x1299 c0x0000 (---------------)  + I taiji\n\t0x0031f386, // n0x129a c0x0000 (---------------)  + I tanabe\n\t0x00223ac8, // n0x129b c0x0000 (---------------)  + I wakayama\n\t0x00310745, // n0x129c c0x0000 (---------------)  + I yuasa\n\t0x0036adc4, // n0x129d c0x0000 (---------------)  + I yura\n\t0x002bf185, // n0x129e c0x0000 (---------------)  + I asahi\n\t0x00281b48, // n0x129f c0x0000 (---------------)  + I funagata\n\t0x0029a209, // n0x12a0 c0x0000 (---------------)  + I higashine\n\t0x00277cc4, // n0x12a1 c0x0000 (---------------)  + I iide\n\t0x0033d046, // n0x12a2 c0x0000 (---------------)  + I kahoku\n\t0x0024ff0a, // n0x12a3 c0x0000 (---------------)  + I kaminoyama\n\t0x002c7848, // n0x12a4 c0x0000 (---------------)  + I kaneyama\n\t0x002bdc49, // n0x12a5 c0x0000 (---------------)  + I kawanishi\n\t0x0029378a, // n0x12a6 c0x0000 (---------------)  + I mamurogawa\n\t0x002e8086, // n0x12a7 c0x0000 (---------------)  + I mikawa\n\t0x00298a48, // n0x12a8 c0x0000 (---------------)  + I murayama\n\t0x002cdc45, // n0x12a9 c0x0000 (---------------)  + I nagai\n\t0x002c9e08, // n0x12aa c0x0000 (---------------)  + I nakayama\n\t0x002b1ec5, // n0x12ab c0x0000 (---------------)  + I nanyo\n\t0x0021a489, // n0x12ac c0x0000 (---------------)  + I nishikawa\n\t0x00361849, // n0x12ad c0x0000 (---------------)  + I obanazawa\n\t0x00203282, // n0x12ae c0x0000 (---------------)  + I oe\n\t0x002a6a45, // n0x12af c0x0000 (---------------)  + I oguni\n\t0x0026f6c6, // n0x12b0 c0x0000 (---------------)  + I ohkura\n\t0x0027aac7, // n0x12b1 c0x0000 (---------------)  + I oishida\n\t0x00238905, // n0x12b2 c0x0000 (---------------)  + I sagae\n\t0x002f8486, // n0x12b3 c0x0000 (---------------)  + I sakata\n\t0x00310808, // n0x12b4 c0x0000 (---------------)  + I sakegawa\n\t0x0033bd46, // n0x12b5 c0x0000 (---------------)  + I shinjo\n\t0x00347f09, // n0x12b6 c0x0000 (---------------)  + I shirataka\n\t0x002792c6, // n0x12b7 c0x0000 (---------------)  + I shonai\n\t0x00281cc8, // n0x12b8 c0x0000 (---------------)  + I takahata\n\t0x002a94c5, // n0x12b9 c0x0000 (---------------)  + I tendo\n\t0x0026de86, // n0x12ba c0x0000 (---------------)  + I tozawa\n\t0x0032f7c8, // n0x12bb c0x0000 (---------------)  + I tsuruoka\n\t0x002808c8, // n0x12bc c0x0000 (---------------)  + I yamagata\n\t0x0039e808, // n0x12bd c0x0000 (---------------)  + I yamanobe\n\t0x00366688, // n0x12be c0x0000 (---------------)  + I yonezawa\n\t0x00217244, // n0x12bf c0x0000 (---------------)  + I yuza\n\t0x0022d843, // n0x12c0 c0x0000 (---------------)  + I abu\n\t0x00348144, // n0x12c1 c0x0000 (---------------)  + I hagi\n\t0x0022f006, // n0x12c2 c0x0000 (---------------)  + I hikari\n\t0x002db204, // n0x12c3 c0x0000 (---------------)  + I hofu\n\t0x002da0c7, // n0x12c4 c0x0000 (---------------)  + I iwakuni\n\t0x0039fd89, // n0x12c5 c0x0000 (---------------)  + I kudamatsu\n\t0x002c0485, // n0x12c6 c0x0000 (---------------)  + I mitou\n\t0x0038e086, // n0x12c7 c0x0000 (---------------)  + I nagato\n\t0x0020ef06, // n0x12c8 c0x0000 (---------------)  + I oshima\n\t0x0026c3cb, // n0x12c9 c0x0000 (---------------)  + I shimonoseki\n\t0x003420c6, // n0x12ca c0x0000 (---------------)  + I shunan\n\t0x00316a86, // n0x12cb c0x0000 (---------------)  + I tabuse\n\t0x0022f588, // n0x12cc c0x0000 (---------------)  + I tokuyama\n\t0x0025bb86, // n0x12cd c0x0000 (---------------)  + I toyota\n\t0x00297443, // n0x12ce c0x0000 (---------------)  + I ube\n\t0x0020f9c3, // n0x12cf c0x0000 (---------------)  + I yuu\n\t0x0030ba84, // n0x12d0 c0x0000 (---------------)  + I chuo\n\t0x00236305, // n0x12d1 c0x0000 (---------------)  + I doshi\n\t0x0036af47, // n0x12d2 c0x0000 (---------------)  + I fuefuki\n\t0x00277e48, // n0x12d3 c0x0000 (---------------)  + I fujikawa\n\t0x00277e4f, // n0x12d4 c0x0000 (---------------)  + I fujikawaguchiko\n\t0x0027c24b, // n0x12d5 c0x0000 (---------------)  + I fujiyoshida\n\t0x002fdac8, // n0x12d6 c0x0000 (---------------)  + I hayakawa\n\t0x0033d0c6, // n0x12d7 c0x0000 (---------------)  + I hokuto\n\t0x0026560e, // n0x12d8 c0x0000 (---------------)  + I ichikawamisato\n\t0x00223203, // n0x12d9 c0x0000 (---------------)  + I kai\n\t0x00240c84, // n0x12da c0x0000 (---------------)  + I kofu\n\t0x00342045, // n0x12db c0x0000 (---------------)  + I koshu\n\t0x00300146, // n0x12dc c0x0000 (---------------)  + I kosuge\n\t0x0028bc0b, // n0x12dd c0x0000 (---------------)  + I minami-alps\n\t0x00290086, // n0x12de c0x0000 (---------------)  + I minobu\n\t0x002164c9, // n0x12df c0x0000 (---------------)  + I nakamichi\n\t0x002e5a85, // n0x12e0 c0x0000 (---------------)  + I nanbu\n\t0x00381e08, // n0x12e1 c0x0000 (---------------)  + I narusawa\n\t0x0020c388, // n0x12e2 c0x0000 (---------------)  + I nirasaki\n\t0x0021920c, // n0x12e3 c0x0000 (---------------)  + I nishikatsura\n\t0x0029e5c6, // n0x12e4 c0x0000 (---------------)  + I oshino\n\t0x0021f306, // n0x12e5 c0x0000 (---------------)  + I otsuki\n\t0x00319905, // n0x12e6 c0x0000 (---------------)  + I showa\n\t0x002872c8, // n0x12e7 c0x0000 (---------------)  + I tabayama\n\t0x0027b9c5, // n0x12e8 c0x0000 (---------------)  + I tsuru\n\t0x00387308, // n0x12e9 c0x0000 (---------------)  + I uenohara\n\t0x0029dc8a, // n0x12ea c0x0000 (---------------)  + I yamanakako\n\t0x002a15c9, // n0x12eb c0x0000 (---------------)  + I yamanashi\n\t0x00686744, // n0x12ec c0x0001 (---------------)  ! I city\n\t0x2e200742, // n0x12ed c0x00b8 (n0x12ee-n0x12ef)  o I co\n\t0x000ffa08, // n0x12ee c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x12ef c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x12f0 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x12f1 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x12f2 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x12f3 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x12f4 c0x0000 (---------------)  + I org\n\t0x00330b83, // n0x12f5 c0x0000 (---------------)  + I biz\n\t0x00233503, // n0x12f6 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x12f7 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x12f8 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x12f9 c0x0000 (---------------)  + I info\n\t0x0021fe03, // n0x12fa c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x12fb c0x0000 (---------------)  + I org\n\t0x0023f743, // n0x12fc c0x0000 (---------------)  + I ass\n\t0x002d4884, // n0x12fd c0x0000 (---------------)  + I asso\n\t0x00233503, // n0x12fe c0x0000 (---------------)  + I com\n\t0x0023d684, // n0x12ff c0x0000 (---------------)  + I coop\n\t0x0023a783, // n0x1300 c0x0000 (---------------)  + I edu\n\t0x0033d7c4, // n0x1301 c0x0000 (---------------)  + I gouv\n\t0x0026cc83, // n0x1302 c0x0000 (---------------)  + I gov\n\t0x00238bc7, // n0x1303 c0x0000 (---------------)  + I medecin\n\t0x00209003, // n0x1304 c0x0000 (---------------)  + I mil\n\t0x00201483, // n0x1305 c0x0000 (---------------)  + I nom\n\t0x0025c988, // n0x1306 c0x0000 (---------------)  + I notaires\n\t0x0022d1c3, // n0x1307 c0x0000 (---------------)  + I org\n\t0x0034d60b, // n0x1308 c0x0000 (---------------)  + I pharmaciens\n\t0x002e1043, // n0x1309 c0x0000 (---------------)  + I prd\n\t0x00247506, // n0x130a c0x0000 (---------------)  + I presse\n\t0x00200142, // n0x130b c0x0000 (---------------)  + I tm\n\t0x002d1c8b, // n0x130c c0x0000 (---------------)  + I veterinaire\n\t0x0023a783, // n0x130d c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x130e c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x130f c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1310 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x1311 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1312 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1313 c0x0000 (---------------)  + I gov\n\t0x0022d1c3, // n0x1314 c0x0000 (---------------)  + I org\n\t0x0022b7c3, // n0x1315 c0x0000 (---------------)  + I rep\n\t0x00203003, // n0x1316 c0x0000 (---------------)  + I tra\n\t0x00201542, // n0x1317 c0x0000 (---------------)  + I ac\n\t0x000ffa08, // n0x1318 c0x0000 (---------------)  +   blogspot\n\t0x0022b945, // n0x1319 c0x0000 (---------------)  + I busan\n\t0x003051c8, // n0x131a c0x0000 (---------------)  + I chungbuk\n\t0x003113c8, // n0x131b c0x0000 (---------------)  + I chungnam\n\t0x00200742, // n0x131c c0x0000 (---------------)  + I co\n\t0x0024a3c5, // n0x131d c0x0000 (---------------)  + I daegu\n\t0x00325007, // n0x131e c0x0000 (---------------)  + I daejeon\n\t0x00200482, // n0x131f c0x0000 (---------------)  + I es\n\t0x00216707, // n0x1320 c0x0000 (---------------)  + I gangwon\n\t0x00202d42, // n0x1321 c0x0000 (---------------)  + I go\n\t0x00242707, // n0x1322 c0x0000 (---------------)  + I gwangju\n\t0x0030b509, // n0x1323 c0x0000 (---------------)  + I gyeongbuk\n\t0x002cd808, // n0x1324 c0x0000 (---------------)  + I gyeonggi\n\t0x00208209, // n0x1325 c0x0000 (---------------)  + I gyeongnam\n\t0x0023f382, // n0x1326 c0x0000 (---------------)  + I hs\n\t0x00268e07, // n0x1327 c0x0000 (---------------)  + I incheon\n\t0x002d7884, // n0x1328 c0x0000 (---------------)  + I jeju\n\t0x003250c7, // n0x1329 c0x0000 (---------------)  + I jeonbuk\n\t0x00301287, // n0x132a c0x0000 (---------------)  + I jeonnam\n\t0x002b5502, // n0x132b c0x0000 (---------------)  + I kg\n\t0x00209003, // n0x132c c0x0000 (---------------)  + I mil\n\t0x0020f702, // n0x132d c0x0000 (---------------)  + I ms\n\t0x00202c02, // n0x132e c0x0000 (---------------)  + I ne\n\t0x00200282, // n0x132f c0x0000 (---------------)  + I or\n\t0x00207782, // n0x1330 c0x0000 (---------------)  + I pe\n\t0x00207002, // n0x1331 c0x0000 (---------------)  + I re\n\t0x00200702, // n0x1332 c0x0000 (---------------)  + I sc\n\t0x00344345, // n0x1333 c0x0000 (---------------)  + I seoul\n\t0x00259585, // n0x1334 c0x0000 (---------------)  + I ulsan\n\t0x00233503, // n0x1335 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1336 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1337 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x1338 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1339 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x133a c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x133b c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x133c c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x133d c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x133e c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x133f c0x0000 (---------------)  + I org\n\t0x00000301, // n0x1340 c0x0000 (---------------)  +   c\n\t0x00233503, // n0x1341 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1342 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1343 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x1344 c0x0000 (---------------)  + I info\n\t0x00201603, // n0x1345 c0x0000 (---------------)  + I int\n\t0x0021fe03, // n0x1346 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1347 c0x0000 (---------------)  + I org\n\t0x00220f03, // n0x1348 c0x0000 (---------------)  + I per\n\t0x00233503, // n0x1349 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x134a c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x134b c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x134c c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x134d c0x0000 (---------------)  + I org\n\t0x00200742, // n0x134e c0x0000 (---------------)  + I co\n\t0x00233503, // n0x134f c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1350 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1351 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x1352 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1353 c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x1354 c0x0000 (---------------)  +   blogspot\n\t0x00201542, // n0x1355 c0x0000 (---------------)  + I ac\n\t0x002bad84, // n0x1356 c0x0000 (---------------)  + I assn\n\t0x00233503, // n0x1357 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1358 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1359 c0x0000 (---------------)  + I gov\n\t0x00379ec3, // n0x135a c0x0000 (---------------)  + I grp\n\t0x00234dc5, // n0x135b c0x0000 (---------------)  + I hotel\n\t0x00201603, // n0x135c c0x0000 (---------------)  + I int\n\t0x00322cc3, // n0x135d c0x0000 (---------------)  + I ltd\n\t0x0021fe03, // n0x135e c0x0000 (---------------)  + I net\n\t0x00202d03, // n0x135f c0x0000 (---------------)  + I ngo\n\t0x0022d1c3, // n0x1360 c0x0000 (---------------)  + I org\n\t0x00217443, // n0x1361 c0x0000 (---------------)  + I sch\n\t0x00274803, // n0x1362 c0x0000 (---------------)  + I soc\n\t0x00221a03, // n0x1363 c0x0000 (---------------)  + I web\n\t0x00233503, // n0x1364 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1365 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1366 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x1367 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1368 c0x0000 (---------------)  + I org\n\t0x00200742, // n0x1369 c0x0000 (---------------)  + I co\n\t0x0022d1c3, // n0x136a c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x136b c0x0000 (---------------)  +   blogspot\n\t0x0026cc83, // n0x136c c0x0000 (---------------)  + I gov\n\t0x000ffa08, // n0x136d c0x0000 (---------------)  +   blogspot\n\t0x002afc83, // n0x136e c0x0000 (---------------)  + I asn\n\t0x00233503, // n0x136f c0x0000 (---------------)  + I com\n\t0x00236cc4, // n0x1370 c0x0000 (---------------)  + I conf\n\t0x0023a783, // n0x1371 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1372 c0x0000 (---------------)  + I gov\n\t0x0020c782, // n0x1373 c0x0000 (---------------)  + I id\n\t0x00209003, // n0x1374 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1375 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1376 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x1377 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1378 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1379 c0x0000 (---------------)  + I gov\n\t0x0020c782, // n0x137a c0x0000 (---------------)  + I id\n\t0x00213ac3, // n0x137b c0x0000 (---------------)  + I med\n\t0x0021fe03, // n0x137c c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x137d c0x0000 (---------------)  + I org\n\t0x002db143, // n0x137e c0x0000 (---------------)  + I plc\n\t0x00217443, // n0x137f c0x0000 (---------------)  + I sch\n\t0x00201542, // n0x1380 c0x0000 (---------------)  + I ac\n\t0x00200742, // n0x1381 c0x0000 (---------------)  + I co\n\t0x0026cc83, // n0x1382 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x1383 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1384 c0x0000 (---------------)  + I org\n\t0x00247505, // n0x1385 c0x0000 (---------------)  + I press\n\t0x002d4884, // n0x1386 c0x0000 (---------------)  + I asso\n\t0x00200142, // n0x1387 c0x0000 (---------------)  + I tm\n\t0x000ffa08, // n0x1388 c0x0000 (---------------)  +   blogspot\n\t0x00201542, // n0x1389 c0x0000 (---------------)  + I ac\n\t0x00200742, // n0x138a c0x0000 (---------------)  + I co\n\t0x00054d8b, // n0x138b c0x0000 (---------------)  +   diskstation\n\t0x00009107, // n0x138c c0x0000 (---------------)  +   dscloud\n\t0x0023a783, // n0x138d c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x138e c0x0000 (---------------)  + I gov\n\t0x00157b84, // n0x138f c0x0000 (---------------)  +   i234\n\t0x00230483, // n0x1390 c0x0000 (---------------)  + I its\n\t0x00156bc4, // n0x1391 c0x0000 (---------------)  +   myds\n\t0x0021fe03, // n0x1392 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1393 c0x0000 (---------------)  + I org\n\t0x002e1c44, // n0x1394 c0x0000 (---------------)  + I priv\n\t0x0010b388, // n0x1395 c0x0000 (---------------)  +   synology\n\t0x00200742, // n0x1396 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1397 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1398 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1399 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x139a c0x0000 (---------------)  + I mil\n\t0x00201483, // n0x139b c0x0000 (---------------)  + I nom\n\t0x0022d1c3, // n0x139c c0x0000 (---------------)  + I org\n\t0x002e1043, // n0x139d c0x0000 (---------------)  + I prd\n\t0x00200142, // n0x139e c0x0000 (---------------)  + I tm\n\t0x000ffa08, // n0x139f c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x13a0 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x13a1 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x13a2 c0x0000 (---------------)  + I gov\n\t0x003a1083, // n0x13a3 c0x0000 (---------------)  + I inf\n\t0x00205284, // n0x13a4 c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x13a5 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x13a6 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x13a7 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x13a8 c0x0000 (---------------)  + I edu\n\t0x0033d7c4, // n0x13a9 c0x0000 (---------------)  + I gouv\n\t0x0026cc83, // n0x13aa c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x13ab c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x13ac c0x0000 (---------------)  + I org\n\t0x00247506, // n0x13ad c0x0000 (---------------)  + I presse\n\t0x0023a783, // n0x13ae c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x13af c0x0000 (---------------)  + I gov\n\t0x0016ef83, // n0x13b0 c0x0000 (---------------)  +   nyc\n\t0x0022d1c3, // n0x13b1 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x13b2 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x13b3 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x13b4 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x13b5 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x13b6 c0x0000 (---------------)  + I org\n\t0x00009107, // n0x13b7 c0x0000 (---------------)  +   dscloud\n\t0x000ffa08, // n0x13b8 c0x0000 (---------------)  +   blogspot\n\t0x0026cc83, // n0x13b9 c0x0000 (---------------)  + I gov\n\t0x00233503, // n0x13ba c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x13bb c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x13bc c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x13bd c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x13be c0x0000 (---------------)  + I org\n\t0x36633503, // n0x13bf c0x00d9 (n0x13c3-n0x13c4)  + I com\n\t0x0023a783, // n0x13c0 c0x0000 (---------------)  + I edu\n\t0x0021fe03, // n0x13c1 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x13c2 c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x13c3 c0x0000 (---------------)  +   blogspot\n\t0x00201542, // n0x13c4 c0x0000 (---------------)  + I ac\n\t0x00200742, // n0x13c5 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x13c6 c0x0000 (---------------)  + I com\n\t0x0026cc83, // n0x13c7 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x13c8 c0x0000 (---------------)  + I net\n\t0x00200282, // n0x13c9 c0x0000 (---------------)  + I or\n\t0x0022d1c3, // n0x13ca c0x0000 (---------------)  + I org\n\t0x0030aec7, // n0x13cb c0x0000 (---------------)  + I academy\n\t0x00209c8b, // n0x13cc c0x0000 (---------------)  + I agriculture\n\t0x00204903, // n0x13cd c0x0000 (---------------)  + I air\n\t0x0023b1c8, // n0x13ce c0x0000 (---------------)  + I airguard\n\t0x002ec607, // n0x13cf c0x0000 (---------------)  + I alabama\n\t0x00279bc6, // n0x13d0 c0x0000 (---------------)  + I alaska\n\t0x00367645, // n0x13d1 c0x0000 (---------------)  + I amber\n\t0x002c8609, // n0x13d2 c0x0000 (---------------)  + I ambulance\n\t0x00208d88, // n0x13d3 c0x0000 (---------------)  + I american\n\t0x002729c9, // n0x13d4 c0x0000 (---------------)  + I americana\n\t0x002729d0, // n0x13d5 c0x0000 (---------------)  + I americanantiques\n\t0x0035994b, // n0x13d6 c0x0000 (---------------)  + I americanart\n\t0x002c8449, // n0x13d7 c0x0000 (---------------)  + I amsterdam\n\t0x00200843, // n0x13d8 c0x0000 (---------------)  + I and\n\t0x00357549, // n0x13d9 c0x0000 (---------------)  + I annefrank\n\t0x00237a06, // n0x13da c0x0000 (---------------)  + I anthro\n\t0x00237a0c, // n0x13db c0x0000 (---------------)  + I anthropology\n\t0x0022ba08, // n0x13dc c0x0000 (---------------)  + I antiques\n\t0x003a2308, // n0x13dd c0x0000 (---------------)  + I aquarium\n\t0x00258249, // n0x13de c0x0000 (---------------)  + I arboretum\n\t0x0029fb0e, // n0x13df c0x0000 (---------------)  + I archaeological\n\t0x0037228b, // n0x13e0 c0x0000 (---------------)  + I archaeology\n\t0x0031fa0c, // n0x13e1 c0x0000 (---------------)  + I architecture\n\t0x002011c3, // n0x13e2 c0x0000 (---------------)  + I art\n\t0x003284cc, // n0x13e3 c0x0000 (---------------)  + I artanddesign\n\t0x002043c9, // n0x13e4 c0x0000 (---------------)  + I artcenter\n\t0x0020b107, // n0x13e5 c0x0000 (---------------)  + I artdeco\n\t0x0023a6cc, // n0x13e6 c0x0000 (---------------)  + I arteducation\n\t0x0039208a, // n0x13e7 c0x0000 (---------------)  + I artgallery\n\t0x0024bf84, // n0x13e8 c0x0000 (---------------)  + I arts\n\t0x0039eacd, // n0x13e9 c0x0000 (---------------)  + I artsandcrafts\n\t0x00328388, // n0x13ea c0x0000 (---------------)  + I asmatart\n\t0x0039efcd, // n0x13eb c0x0000 (---------------)  + I assassination\n\t0x00252046, // n0x13ec c0x0000 (---------------)  + I assisi\n\t0x002d488b, // n0x13ed c0x0000 (---------------)  + I association\n\t0x00356a09, // n0x13ee c0x0000 (---------------)  + I astronomy\n\t0x002244c7, // n0x13ef c0x0000 (---------------)  + I atlanta\n\t0x002ea306, // n0x13f0 c0x0000 (---------------)  + I austin\n\t0x003082c9, // n0x13f1 c0x0000 (---------------)  + I australia\n\t0x00322f8a, // n0x13f2 c0x0000 (---------------)  + I automotive\n\t0x0035b848, // n0x13f3 c0x0000 (---------------)  + I aviation\n\t0x002e0b84, // n0x13f4 c0x0000 (---------------)  + I axis\n\t0x00277007, // n0x13f5 c0x0000 (---------------)  + I badajoz\n\t0x002a1847, // n0x13f6 c0x0000 (---------------)  + I baghdad\n\t0x002ec084, // n0x13f7 c0x0000 (---------------)  + I bahn\n\t0x00228a84, // n0x13f8 c0x0000 (---------------)  + I bale\n\t0x0025d289, // n0x13f9 c0x0000 (---------------)  + I baltimore\n\t0x002dd889, // n0x13fa c0x0000 (---------------)  + I barcelona\n\t0x0022f9c8, // n0x13fb c0x0000 (---------------)  + I baseball\n\t0x00210685, // n0x13fc c0x0000 (---------------)  + I basel\n\t0x00389345, // n0x13fd c0x0000 (---------------)  + I baths\n\t0x0020d246, // n0x13fe c0x0000 (---------------)  + I bauern\n\t0x0039e989, // n0x13ff c0x0000 (---------------)  + I beauxarts\n\t0x0021b10d, // n0x1400 c0x0000 (---------------)  + I beeldengeluid\n\t0x0031f488, // n0x1401 c0x0000 (---------------)  + I bellevue\n\t0x0020d147, // n0x1402 c0x0000 (---------------)  + I bergbau\n\t0x003676c8, // n0x1403 c0x0000 (---------------)  + I berkeley\n\t0x0022e6c6, // n0x1404 c0x0000 (---------------)  + I berlin\n\t0x00390744, // n0x1405 c0x0000 (---------------)  + I bern\n\t0x0037bf45, // n0x1406 c0x0000 (---------------)  + I bible\n\t0x002028c6, // n0x1407 c0x0000 (---------------)  + I bilbao\n\t0x00202e84, // n0x1408 c0x0000 (---------------)  + I bill\n\t0x002042c7, // n0x1409 c0x0000 (---------------)  + I birdart\n\t0x0020628a, // n0x140a c0x0000 (---------------)  + I birthplace\n\t0x00212384, // n0x140b c0x0000 (---------------)  + I bonn\n\t0x00217cc6, // n0x140c c0x0000 (---------------)  + I boston\n\t0x00218e89, // n0x140d c0x0000 (---------------)  + I botanical\n\t0x00218e8f, // n0x140e c0x0000 (---------------)  + I botanicalgarden\n\t0x0021a18d, // n0x140f c0x0000 (---------------)  + I botanicgarden\n\t0x0021a946, // n0x1410 c0x0000 (---------------)  + I botany\n\t0x0021ca50, // n0x1411 c0x0000 (---------------)  + I brandywinevalley\n\t0x0021ce46, // n0x1412 c0x0000 (---------------)  + I brasil\n\t0x0021db87, // n0x1413 c0x0000 (---------------)  + I bristol\n\t0x0021df07, // n0x1414 c0x0000 (---------------)  + I british\n\t0x0021df0f, // n0x1415 c0x0000 (---------------)  + I britishcolumbia\n\t0x0021fa49, // n0x1416 c0x0000 (---------------)  + I broadcast\n\t0x00222b06, // n0x1417 c0x0000 (---------------)  + I brunel\n\t0x00225e87, // n0x1418 c0x0000 (---------------)  + I brussel\n\t0x00225e88, // n0x1419 c0x0000 (---------------)  + I brussels\n\t0x00227049, // n0x141a c0x0000 (---------------)  + I bruxelles\n\t0x0028fd88, // n0x141b c0x0000 (---------------)  + I building\n\t0x002d7647, // n0x141c c0x0000 (---------------)  + I burghof\n\t0x0020ca03, // n0x141d c0x0000 (---------------)  + I bus\n\t0x00233386, // n0x141e c0x0000 (---------------)  + I bushey\n\t0x00200308, // n0x141f c0x0000 (---------------)  + I cadaques\n\t0x0029fdca, // n0x1420 c0x0000 (---------------)  + I california\n\t0x00221ac9, // n0x1421 c0x0000 (---------------)  + I cambridge\n\t0x00208ec3, // n0x1422 c0x0000 (---------------)  + I can\n\t0x00324f06, // n0x1423 c0x0000 (---------------)  + I canada\n\t0x002b63ca, // n0x1424 c0x0000 (---------------)  + I capebreton\n\t0x00365247, // n0x1425 c0x0000 (---------------)  + I carrier\n\t0x0020af4a, // n0x1426 c0x0000 (---------------)  + I cartoonart\n\t0x0021460e, // n0x1427 c0x0000 (---------------)  + I casadelamoneda\n\t0x0021fb86, // n0x1428 c0x0000 (---------------)  + I castle\n\t0x002a6c47, // n0x1429 c0x0000 (---------------)  + I castres\n\t0x00211b46, // n0x142a c0x0000 (---------------)  + I celtic\n\t0x00204486, // n0x142b c0x0000 (---------------)  + I center\n\t0x00374acb, // n0x142c c0x0000 (---------------)  + I chattanooga\n\t0x002648ca, // n0x142d c0x0000 (---------------)  + I cheltenham\n\t0x0035150d, // n0x142e c0x0000 (---------------)  + I chesapeakebay\n\t0x00213047, // n0x142f c0x0000 (---------------)  + I chicago\n\t0x00274888, // n0x1430 c0x0000 (---------------)  + I children\n\t0x00274889, // n0x1431 c0x0000 (---------------)  + I childrens\n\t0x0027488f, // n0x1432 c0x0000 (---------------)  + I childrensgarden\n\t0x0023984c, // n0x1433 c0x0000 (---------------)  + I chiropractic\n\t0x002b5a89, // n0x1434 c0x0000 (---------------)  + I chocolate\n\t0x00379b8e, // n0x1435 c0x0000 (---------------)  + I christiansburg\n\t0x00238cca, // n0x1436 c0x0000 (---------------)  + I cincinnati\n\t0x002ce4c6, // n0x1437 c0x0000 (---------------)  + I cinema\n\t0x00337c86, // n0x1438 c0x0000 (---------------)  + I circus\n\t0x00363b8c, // n0x1439 c0x0000 (---------------)  + I civilisation\n\t0x00367b8c, // n0x143a c0x0000 (---------------)  + I civilization\n\t0x0036f008, // n0x143b c0x0000 (---------------)  + I civilwar\n\t0x003894c7, // n0x143c c0x0000 (---------------)  + I clinton\n\t0x002acc45, // n0x143d c0x0000 (---------------)  + I clock\n\t0x00355244, // n0x143e c0x0000 (---------------)  + I coal\n\t0x00386b8e, // n0x143f c0x0000 (---------------)  + I coastaldefence\n\t0x00323204, // n0x1440 c0x0000 (---------------)  + I cody\n\t0x00231d87, // n0x1441 c0x0000 (---------------)  + I coldwar\n\t0x00265b8a, // n0x1442 c0x0000 (---------------)  + I collection\n\t0x00232454, // n0x1443 c0x0000 (---------------)  + I colonialwilliamsburg\n\t0x00232dcf, // n0x1444 c0x0000 (---------------)  + I coloradoplateau\n\t0x0021e0c8, // n0x1445 c0x0000 (---------------)  + I columbia\n\t0x00233248, // n0x1446 c0x0000 (---------------)  + I columbus\n\t0x0036018d, // n0x1447 c0x0000 (---------------)  + I communication\n\t0x0036018e, // n0x1448 c0x0000 (---------------)  + I communications\n\t0x00233509, // n0x1449 c0x0000 (---------------)  + I community\n\t0x00235488, // n0x144a c0x0000 (---------------)  + I computer\n\t0x0023548f, // n0x144b c0x0000 (---------------)  + I computerhistory\n\t0x0023a3cc, // n0x144c c0x0000 (---------------)  + I contemporary\n\t0x0023a3cf, // n0x144d c0x0000 (---------------)  + I contemporaryart\n\t0x0023b747, // n0x144e c0x0000 (---------------)  + I convent\n\t0x0023de0a, // n0x144f c0x0000 (---------------)  + I copenhagen\n\t0x0021c58b, // n0x1450 c0x0000 (---------------)  + I corporation\n\t0x0023f888, // n0x1451 c0x0000 (---------------)  + I corvette\n\t0x00241807, // n0x1452 c0x0000 (---------------)  + I costume\n\t0x0033658d, // n0x1453 c0x0000 (---------------)  + I countryestate\n\t0x0031ab06, // n0x1454 c0x0000 (---------------)  + I county\n\t0x0039ec86, // n0x1455 c0x0000 (---------------)  + I crafts\n\t0x00243c49, // n0x1456 c0x0000 (---------------)  + I cranbrook\n\t0x00336b48, // n0x1457 c0x0000 (---------------)  + I creation\n\t0x00247888, // n0x1458 c0x0000 (---------------)  + I cultural\n\t0x0024788e, // n0x1459 c0x0000 (---------------)  + I culturalcenter\n\t0x00209d87, // n0x145a c0x0000 (---------------)  + I culture\n\t0x00322345, // n0x145b c0x0000 (---------------)  + I cyber\n\t0x0024a985, // n0x145c c0x0000 (---------------)  + I cymru\n\t0x00210284, // n0x145d c0x0000 (---------------)  + I dali\n\t0x00279e86, // n0x145e c0x0000 (---------------)  + I dallas\n\t0x0022f8c8, // n0x145f c0x0000 (---------------)  + I database\n\t0x002edd03, // n0x1460 c0x0000 (---------------)  + I ddr\n\t0x0025fa0e, // n0x1461 c0x0000 (---------------)  + I decorativearts\n\t0x00336948, // n0x1462 c0x0000 (---------------)  + I delaware\n\t0x0027af0b, // n0x1463 c0x0000 (---------------)  + I delmenhorst\n\t0x003312c7, // n0x1464 c0x0000 (---------------)  + I denmark\n\t0x00274145, // n0x1465 c0x0000 (---------------)  + I depot\n\t0x0022dcc6, // n0x1466 c0x0000 (---------------)  + I design\n\t0x002aa507, // n0x1467 c0x0000 (---------------)  + I detroit\n\t0x002fac88, // n0x1468 c0x0000 (---------------)  + I dinosaur\n\t0x00330409, // n0x1469 c0x0000 (---------------)  + I discovery\n\t0x00237405, // n0x146a c0x0000 (---------------)  + I dolls\n\t0x002861c8, // n0x146b c0x0000 (---------------)  + I donostia\n\t0x0020cc06, // n0x146c c0x0000 (---------------)  + I durham\n\t0x0037574a, // n0x146d c0x0000 (---------------)  + I eastafrica\n\t0x00386a89, // n0x146e c0x0000 (---------------)  + I eastcoast\n\t0x0023a789, // n0x146f c0x0000 (---------------)  + I education\n\t0x0023a78b, // n0x1470 c0x0000 (---------------)  + I educational\n\t0x0028c908, // n0x1471 c0x0000 (---------------)  + I egyptian\n\t0x002ebf49, // n0x1472 c0x0000 (---------------)  + I eisenbahn\n\t0x00210746, // n0x1473 c0x0000 (---------------)  + I elburg\n\t0x002e4f4a, // n0x1474 c0x0000 (---------------)  + I elvendrell\n\t0x0022980a, // n0x1475 c0x0000 (---------------)  + I embroidery\n\t0x0023e00c, // n0x1476 c0x0000 (---------------)  + I encyclopedic\n\t0x00213707, // n0x1477 c0x0000 (---------------)  + I england\n\t0x002cd60a, // n0x1478 c0x0000 (---------------)  + I entomology\n\t0x00326d8b, // n0x1479 c0x0000 (---------------)  + I environment\n\t0x00326d99, // n0x147a c0x0000 (---------------)  + I environmentalconservation\n\t0x00329a48, // n0x147b c0x0000 (---------------)  + I epilepsy\n\t0x00247585, // n0x147c c0x0000 (---------------)  + I essex\n\t0x002c2486, // n0x147d c0x0000 (---------------)  + I estate\n\t0x0030cf09, // n0x147e c0x0000 (---------------)  + I ethnology\n\t0x00205346, // n0x147f c0x0000 (---------------)  + I exeter\n\t0x002115ca, // n0x1480 c0x0000 (---------------)  + I exhibition\n\t0x00208f86, // n0x1481 c0x0000 (---------------)  + I family\n\t0x00271d04, // n0x1482 c0x0000 (---------------)  + I farm\n\t0x002c260d, // n0x1483 c0x0000 (---------------)  + I farmequipment\n\t0x002ece87, // n0x1484 c0x0000 (---------------)  + I farmers\n\t0x00271d09, // n0x1485 c0x0000 (---------------)  + I farmstead\n\t0x00366b05, // n0x1486 c0x0000 (---------------)  + I field\n\t0x0037ac88, // n0x1487 c0x0000 (---------------)  + I figueres\n\t0x0024b549, // n0x1488 c0x0000 (---------------)  + I filatelia\n\t0x0024b784, // n0x1489 c0x0000 (---------------)  + I film\n\t0x0024be87, // n0x148a c0x0000 (---------------)  + I fineart\n\t0x0024be88, // n0x148b c0x0000 (---------------)  + I finearts\n\t0x0024c387, // n0x148c c0x0000 (---------------)  + I finland\n\t0x00267688, // n0x148d c0x0000 (---------------)  + I flanders\n\t0x00252947, // n0x148e c0x0000 (---------------)  + I florida\n\t0x00338705, // n0x148f c0x0000 (---------------)  + I force\n\t0x00259fcc, // n0x1490 c0x0000 (---------------)  + I fortmissoula\n\t0x0025ab89, // n0x1491 c0x0000 (---------------)  + I fortworth\n\t0x002b9f4a, // n0x1492 c0x0000 (---------------)  + I foundation\n\t0x00385d09, // n0x1493 c0x0000 (---------------)  + I francaise\n\t0x00357649, // n0x1494 c0x0000 (---------------)  + I frankfurt\n\t0x00256acc, // n0x1495 c0x0000 (---------------)  + I franziskaner\n\t0x002e7d0b, // n0x1496 c0x0000 (---------------)  + I freemasonry\n\t0x0025c488, // n0x1497 c0x0000 (---------------)  + I freiburg\n\t0x00260048, // n0x1498 c0x0000 (---------------)  + I fribourg\n\t0x002636c4, // n0x1499 c0x0000 (---------------)  + I frog\n\t0x00283c88, // n0x149a c0x0000 (---------------)  + I fundacio\n\t0x00285349, // n0x149b c0x0000 (---------------)  + I furniture\n\t0x00392147, // n0x149c c0x0000 (---------------)  + I gallery\n\t0x002190c6, // n0x149d c0x0000 (---------------)  + I garden\n\t0x00246347, // n0x149e c0x0000 (---------------)  + I gateway\n\t0x00330689, // n0x149f c0x0000 (---------------)  + I geelvinck\n\t0x0021334b, // n0x14a0 c0x0000 (---------------)  + I gemological\n\t0x00396387, // n0x14a1 c0x0000 (---------------)  + I geology\n\t0x00324c47, // n0x14a2 c0x0000 (---------------)  + I georgia\n\t0x00279907, // n0x14a3 c0x0000 (---------------)  + I giessen\n\t0x0039ef44, // n0x14a4 c0x0000 (---------------)  + I glas\n\t0x0039ef45, // n0x14a5 c0x0000 (---------------)  + I glass\n\t0x002a8705, // n0x14a6 c0x0000 (---------------)  + I gorge\n\t0x0033454b, // n0x14a7 c0x0000 (---------------)  + I grandrapids\n\t0x0038f9c4, // n0x14a8 c0x0000 (---------------)  + I graz\n\t0x00266e08, // n0x14a9 c0x0000 (---------------)  + I guernsey\n\t0x0029168a, // n0x14aa c0x0000 (---------------)  + I halloffame\n\t0x0020ccc7, // n0x14ab c0x0000 (---------------)  + I hamburg\n\t0x0031bbc7, // n0x14ac c0x0000 (---------------)  + I handson\n\t0x0028b492, // n0x14ad c0x0000 (---------------)  + I harvestcelebration\n\t0x0025cb86, // n0x14ae c0x0000 (---------------)  + I hawaii\n\t0x0036b386, // n0x14af c0x0000 (---------------)  + I health\n\t0x0030f8ce, // n0x14b0 c0x0000 (---------------)  + I heimatunduhren\n\t0x0025fd86, // n0x14b1 c0x0000 (---------------)  + I hellas\n\t0x0020ebc8, // n0x14b2 c0x0000 (---------------)  + I helsinki\n\t0x00290d0f, // n0x14b3 c0x0000 (---------------)  + I hembygdsforbund\n\t0x0039f388, // n0x14b4 c0x0000 (---------------)  + I heritage\n\t0x0036d908, // n0x14b5 c0x0000 (---------------)  + I histoire\n\t0x002fb8ca, // n0x14b6 c0x0000 (---------------)  + I historical\n\t0x002fb8d1, // n0x14b7 c0x0000 (---------------)  + I historicalsociety\n\t0x002a1f0e, // n0x14b8 c0x0000 (---------------)  + I historichouses\n\t0x002567ca, // n0x14b9 c0x0000 (---------------)  + I historisch\n\t0x002567cc, // n0x14ba c0x0000 (---------------)  + I historisches\n\t0x00235687, // n0x14bb c0x0000 (---------------)  + I history\n\t0x00235690, // n0x14bc c0x0000 (---------------)  + I historyofscience\n\t0x00202188, // n0x14bd c0x0000 (---------------)  + I horology\n\t0x002a2105, // n0x14be c0x0000 (---------------)  + I house\n\t0x002aad4a, // n0x14bf c0x0000 (---------------)  + I humanities\n\t0x00202ecc, // n0x14c0 c0x0000 (---------------)  + I illustration\n\t0x002b44cd, // n0x14c1 c0x0000 (---------------)  + I imageandsound\n\t0x002a3c46, // n0x14c2 c0x0000 (---------------)  + I indian\n\t0x002a3c47, // n0x14c3 c0x0000 (---------------)  + I indiana\n\t0x002a3c4c, // n0x14c4 c0x0000 (---------------)  + I indianapolis\n\t0x002f120c, // n0x14c5 c0x0000 (---------------)  + I indianmarket\n\t0x0024dd4c, // n0x14c6 c0x0000 (---------------)  + I intelligence\n\t0x0028a0cb, // n0x14c7 c0x0000 (---------------)  + I interactive\n\t0x002859c4, // n0x14c8 c0x0000 (---------------)  + I iraq\n\t0x0021d504, // n0x14c9 c0x0000 (---------------)  + I iron\n\t0x0034fb49, // n0x14ca c0x0000 (---------------)  + I isleofman\n\t0x002c8ec7, // n0x14cb c0x0000 (---------------)  + I jamison\n\t0x00266a49, // n0x14cc c0x0000 (---------------)  + I jefferson\n\t0x00283549, // n0x14cd c0x0000 (---------------)  + I jerusalem\n\t0x00360f47, // n0x14ce c0x0000 (---------------)  + I jewelry\n\t0x00391f06, // n0x14cf c0x0000 (---------------)  + I jewish\n\t0x00391f09, // n0x14d0 c0x0000 (---------------)  + I jewishart\n\t0x00399f83, // n0x14d1 c0x0000 (---------------)  + I jfk\n\t0x0033be4a, // n0x14d2 c0x0000 (---------------)  + I journalism\n\t0x00355487, // n0x14d3 c0x0000 (---------------)  + I judaica\n\t0x0027744b, // n0x14d4 c0x0000 (---------------)  + I judygarland\n\t0x0035138a, // n0x14d5 c0x0000 (---------------)  + I juedisches\n\t0x00242844, // n0x14d6 c0x0000 (---------------)  + I juif\n\t0x00353546, // n0x14d7 c0x0000 (---------------)  + I karate\n\t0x0027efc9, // n0x14d8 c0x0000 (---------------)  + I karikatur\n\t0x0028cd44, // n0x14d9 c0x0000 (---------------)  + I kids\n\t0x0020324a, // n0x14da c0x0000 (---------------)  + I koebenhavn\n\t0x0036bd45, // n0x14db c0x0000 (---------------)  + I koeln\n\t0x002b4d85, // n0x14dc c0x0000 (---------------)  + I kunst\n\t0x002b4d8d, // n0x14dd c0x0000 (---------------)  + I kunstsammlung\n\t0x002b50ce, // n0x14de c0x0000 (---------------)  + I kunstunddesign\n\t0x00315585, // n0x14df c0x0000 (---------------)  + I labor\n\t0x0038b2c6, // n0x14e0 c0x0000 (---------------)  + I labour\n\t0x00247107, // n0x14e1 c0x0000 (---------------)  + I lajolla\n\t0x002c990a, // n0x14e2 c0x0000 (---------------)  + I lancashire\n\t0x00323506, // n0x14e3 c0x0000 (---------------)  + I landes\n\t0x00359c44, // n0x14e4 c0x0000 (---------------)  + I lans\n\t0x00359f87, // n0x14e5 c0x0000 (---------------)  + I larsson\n\t0x002def0b, // n0x14e6 c0x0000 (---------------)  + I lewismiller\n\t0x0022e787, // n0x14e7 c0x0000 (---------------)  + I lincoln\n\t0x003a0f44, // n0x14e8 c0x0000 (---------------)  + I linz\n\t0x002414c6, // n0x14e9 c0x0000 (---------------)  + I living\n\t0x002414cd, // n0x14ea c0x0000 (---------------)  + I livinghistory\n\t0x003571cc, // n0x14eb c0x0000 (---------------)  + I localhistory\n\t0x00321906, // n0x14ec c0x0000 (---------------)  + I london\n\t0x0031f68a, // n0x14ed c0x0000 (---------------)  + I losangeles\n\t0x0022b6c6, // n0x14ee c0x0000 (---------------)  + I louvre\n\t0x002a7e88, // n0x14ef c0x0000 (---------------)  + I loyalist\n\t0x002e6147, // n0x14f0 c0x0000 (---------------)  + I lucerne\n\t0x0023ca4a, // n0x14f1 c0x0000 (---------------)  + I luxembourg\n\t0x0023dc86, // n0x14f2 c0x0000 (---------------)  + I luzern\n\t0x00212f43, // n0x14f3 c0x0000 (---------------)  + I mad\n\t0x00317146, // n0x14f4 c0x0000 (---------------)  + I madrid\n\t0x00200188, // n0x14f5 c0x0000 (---------------)  + I mallorca\n\t0x0029a80a, // n0x14f6 c0x0000 (---------------)  + I manchester\n\t0x00251d47, // n0x14f7 c0x0000 (---------------)  + I mansion\n\t0x00251d48, // n0x14f8 c0x0000 (---------------)  + I mansions\n\t0x0026a704, // n0x14f9 c0x0000 (---------------)  + I manx\n\t0x00278f07, // n0x14fa c0x0000 (---------------)  + I marburg\n\t0x00269708, // n0x14fb c0x0000 (---------------)  + I maritime\n\t0x002a3088, // n0x14fc c0x0000 (---------------)  + I maritimo\n\t0x0025cd88, // n0x14fd c0x0000 (---------------)  + I maryland\n\t0x002831ca, // n0x14fe c0x0000 (---------------)  + I marylhurst\n\t0x003025c5, // n0x14ff c0x0000 (---------------)  + I media\n\t0x0023ac87, // n0x1500 c0x0000 (---------------)  + I medical\n\t0x00256613, // n0x1501 c0x0000 (---------------)  + I medizinhistorisches\n\t0x00259146, // n0x1502 c0x0000 (---------------)  + I meeres\n\t0x0026cf88, // n0x1503 c0x0000 (---------------)  + I memorial\n\t0x002221c9, // n0x1504 c0x0000 (---------------)  + I mesaverde\n\t0x002165c8, // n0x1505 c0x0000 (---------------)  + I michigan\n\t0x0036e1cb, // n0x1506 c0x0000 (---------------)  + I midatlantic\n\t0x002b8348, // n0x1507 c0x0000 (---------------)  + I military\n\t0x00285244, // n0x1508 c0x0000 (---------------)  + I mill\n\t0x00321106, // n0x1509 c0x0000 (---------------)  + I miners\n\t0x003a5c46, // n0x150a c0x0000 (---------------)  + I mining\n\t0x003058c9, // n0x150b c0x0000 (---------------)  + I minnesota\n\t0x002bf847, // n0x150c c0x0000 (---------------)  + I missile\n\t0x0025a0c8, // n0x150d c0x0000 (---------------)  + I missoula\n\t0x003a1f86, // n0x150e c0x0000 (---------------)  + I modern\n\t0x0037a084, // n0x150f c0x0000 (---------------)  + I moma\n\t0x002c6d85, // n0x1510 c0x0000 (---------------)  + I money\n\t0x002c1888, // n0x1511 c0x0000 (---------------)  + I monmouth\n\t0x002c1fca, // n0x1512 c0x0000 (---------------)  + I monticello\n\t0x002c2288, // n0x1513 c0x0000 (---------------)  + I montreal\n\t0x002c74c6, // n0x1514 c0x0000 (---------------)  + I moscow\n\t0x0029af0a, // n0x1515 c0x0000 (---------------)  + I motorcycle\n\t0x002e6d88, // n0x1516 c0x0000 (---------------)  + I muenchen\n\t0x002ca188, // n0x1517 c0x0000 (---------------)  + I muenster\n\t0x002cb648, // n0x1518 c0x0000 (---------------)  + I mulhouse\n\t0x002cc046, // n0x1519 c0x0000 (---------------)  + I muncie\n\t0x002cfc06, // n0x151a c0x0000 (---------------)  + I museet\n\t0x002ea80c, // n0x151b c0x0000 (---------------)  + I museumcenter\n\t0x002d0110, // n0x151c c0x0000 (---------------)  + I museumvereniging\n\t0x00283a85, // n0x151d c0x0000 (---------------)  + I music\n\t0x00319548, // n0x151e c0x0000 (---------------)  + I national\n\t0x00319550, // n0x151f c0x0000 (---------------)  + I nationalfirearms\n\t0x0039f190, // n0x1520 c0x0000 (---------------)  + I nationalheritage\n\t0x0027284e, // n0x1521 c0x0000 (---------------)  + I nativeamerican\n\t0x002ea48e, // n0x1522 c0x0000 (---------------)  + I naturalhistory\n\t0x002ea494, // n0x1523 c0x0000 (---------------)  + I naturalhistorymuseum\n\t0x0031ad4f, // n0x1524 c0x0000 (---------------)  + I naturalsciences\n\t0x0031b106, // n0x1525 c0x0000 (---------------)  + I nature\n\t0x00325e11, // n0x1526 c0x0000 (---------------)  + I naturhistorisches\n\t0x00327393, // n0x1527 c0x0000 (---------------)  + I natuurwetenschappen\n\t0x00327808, // n0x1528 c0x0000 (---------------)  + I naumburg\n\t0x0030f105, // n0x1529 c0x0000 (---------------)  + I naval\n\t0x002d7f48, // n0x152a c0x0000 (---------------)  + I nebraska\n\t0x002de045, // n0x152b c0x0000 (---------------)  + I neues\n\t0x0022a34c, // n0x152c c0x0000 (---------------)  + I newhampshire\n\t0x002aeb89, // n0x152d c0x0000 (---------------)  + I newjersey\n\t0x00231bc9, // n0x152e c0x0000 (---------------)  + I newmexico\n\t0x002460c7, // n0x152f c0x0000 (---------------)  + I newport\n\t0x00221dc9, // n0x1530 c0x0000 (---------------)  + I newspaper\n\t0x002ed0c7, // n0x1531 c0x0000 (---------------)  + I newyork\n\t0x002a2646, // n0x1532 c0x0000 (---------------)  + I niepce\n\t0x0037bd47, // n0x1533 c0x0000 (---------------)  + I norfolk\n\t0x00239c45, // n0x1534 c0x0000 (---------------)  + I north\n\t0x002b5e83, // n0x1535 c0x0000 (---------------)  + I nrw\n\t0x002edec9, // n0x1536 c0x0000 (---------------)  + I nuernberg\n\t0x003518c9, // n0x1537 c0x0000 (---------------)  + I nuremberg\n\t0x0036ef83, // n0x1538 c0x0000 (---------------)  + I nyc\n\t0x00215844, // n0x1539 c0x0000 (---------------)  + I nyny\n\t0x0032154d, // n0x153a c0x0000 (---------------)  + I oceanographic\n\t0x00200b0f, // n0x153b c0x0000 (---------------)  + I oceanographique\n\t0x002fc505, // n0x153c c0x0000 (---------------)  + I omaha\n\t0x003175c6, // n0x153d c0x0000 (---------------)  + I online\n\t0x00200987, // n0x153e c0x0000 (---------------)  + I ontario\n\t0x00358c87, // n0x153f c0x0000 (---------------)  + I openair\n\t0x00287ec6, // n0x1540 c0x0000 (---------------)  + I oregon\n\t0x00287ecb, // n0x1541 c0x0000 (---------------)  + I oregontrail\n\t0x002a3605, // n0x1542 c0x0000 (---------------)  + I otago\n\t0x0039bec6, // n0x1543 c0x0000 (---------------)  + I oxford\n\t0x003909c7, // n0x1544 c0x0000 (---------------)  + I pacific\n\t0x0026fec9, // n0x1545 c0x0000 (---------------)  + I paderborn\n\t0x00322046, // n0x1546 c0x0000 (---------------)  + I palace\n\t0x0020ac45, // n0x1547 c0x0000 (---------------)  + I paleo\n\t0x0023a00b, // n0x1548 c0x0000 (---------------)  + I palmsprings\n\t0x0025b986, // n0x1549 c0x0000 (---------------)  + I panama\n\t0x00277905, // n0x154a c0x0000 (---------------)  + I paris\n\t0x002b5648, // n0x154b c0x0000 (---------------)  + I pasadena\n\t0x00375008, // n0x154c c0x0000 (---------------)  + I pharmacy\n\t0x002d30cc, // n0x154d c0x0000 (---------------)  + I philadelphia\n\t0x002d30d0, // n0x154e c0x0000 (---------------)  + I philadelphiaarea\n\t0x002d3789, // n0x154f c0x0000 (---------------)  + I philately\n\t0x002d3bc7, // n0x1550 c0x0000 (---------------)  + I phoenix\n\t0x002d404b, // n0x1551 c0x0000 (---------------)  + I photography\n\t0x002d6506, // n0x1552 c0x0000 (---------------)  + I pilots\n\t0x002d750a, // n0x1553 c0x0000 (---------------)  + I pittsburgh\n\t0x002d898b, // n0x1554 c0x0000 (---------------)  + I planetarium\n\t0x002d8d8a, // n0x1555 c0x0000 (---------------)  + I plantation\n\t0x002d9006, // n0x1556 c0x0000 (---------------)  + I plants\n\t0x002db005, // n0x1557 c0x0000 (---------------)  + I plaza\n\t0x002ec506, // n0x1558 c0x0000 (---------------)  + I portal\n\t0x00279488, // n0x1559 c0x0000 (---------------)  + I portland\n\t0x0024618a, // n0x155a c0x0000 (---------------)  + I portlligat\n\t0x0035fe1c, // n0x155b c0x0000 (---------------)  + I posts-and-telecommunications\n\t0x002e110c, // n0x155c c0x0000 (---------------)  + I preservation\n\t0x002e1408, // n0x155d c0x0000 (---------------)  + I presidio\n\t0x00247505, // n0x155e c0x0000 (---------------)  + I press\n\t0x002e3107, // n0x155f c0x0000 (---------------)  + I project\n\t0x0029f746, // n0x1560 c0x0000 (---------------)  + I public\n\t0x0038dec5, // n0x1561 c0x0000 (---------------)  + I pubol\n\t0x0021b906, // n0x1562 c0x0000 (---------------)  + I quebec\n\t0x00288088, // n0x1563 c0x0000 (---------------)  + I railroad\n\t0x002b3287, // n0x1564 c0x0000 (---------------)  + I railway\n\t0x0029fa08, // n0x1565 c0x0000 (---------------)  + I research\n\t0x002a6d4a, // n0x1566 c0x0000 (---------------)  + I resistance\n\t0x0030864c, // n0x1567 c0x0000 (---------------)  + I riodejaneiro\n\t0x003088c9, // n0x1568 c0x0000 (---------------)  + I rochester\n\t0x0038e207, // n0x1569 c0x0000 (---------------)  + I rockart\n\t0x00254584, // n0x156a c0x0000 (---------------)  + I roma\n\t0x00252f86, // n0x156b c0x0000 (---------------)  + I russia\n\t0x0036d48a, // n0x156c c0x0000 (---------------)  + I saintlouis\n\t0x00283645, // n0x156d c0x0000 (---------------)  + I salem\n\t0x0034504c, // n0x156e c0x0000 (---------------)  + I salvadordali\n\t0x00345cc8, // n0x156f c0x0000 (---------------)  + I salzburg\n\t0x0034a848, // n0x1570 c0x0000 (---------------)  + I sandiego\n\t0x002004cc, // n0x1571 c0x0000 (---------------)  + I sanfrancisco\n\t0x00210c8c, // n0x1572 c0x0000 (---------------)  + I santabarbara\n\t0x00211189, // n0x1573 c0x0000 (---------------)  + I santacruz\n\t0x002113c7, // n0x1574 c0x0000 (---------------)  + I santafe\n\t0x0033d48c, // n0x1575 c0x0000 (---------------)  + I saskatchewan\n\t0x003897c4, // n0x1576 c0x0000 (---------------)  + I satx\n\t0x00232b4a, // n0x1577 c0x0000 (---------------)  + I savannahga\n\t0x0028d04c, // n0x1578 c0x0000 (---------------)  + I schlesisches\n\t0x0027104b, // n0x1579 c0x0000 (---------------)  + I schoenbrunn\n\t0x0023758b, // n0x157a c0x0000 (---------------)  + I schokoladen\n\t0x0023d0c6, // n0x157b c0x0000 (---------------)  + I school\n\t0x00243147, // n0x157c c0x0000 (---------------)  + I schweiz\n\t0x002358c7, // n0x157d c0x0000 (---------------)  + I science\n\t0x002358cf, // n0x157e c0x0000 (---------------)  + I science-fiction\n\t0x002f1b51, // n0x157f c0x0000 (---------------)  + I scienceandhistory\n\t0x0039e252, // n0x1580 c0x0000 (---------------)  + I scienceandindustry\n\t0x0024410d, // n0x1581 c0x0000 (---------------)  + I sciencecenter\n\t0x0024410e, // n0x1582 c0x0000 (---------------)  + I sciencecenters\n\t0x0024444e, // n0x1583 c0x0000 (---------------)  + I sciencehistory\n\t0x0031af08, // n0x1584 c0x0000 (---------------)  + I sciences\n\t0x0031af12, // n0x1585 c0x0000 (---------------)  + I sciencesnaturelles\n\t0x00200708, // n0x1586 c0x0000 (---------------)  + I scotland\n\t0x002fa9c7, // n0x1587 c0x0000 (---------------)  + I seaport\n\t0x0024f98a, // n0x1588 c0x0000 (---------------)  + I settlement\n\t0x00219c08, // n0x1589 c0x0000 (---------------)  + I settlers\n\t0x0025fd45, // n0x158a c0x0000 (---------------)  + I shell\n\t0x0035cc4a, // n0x158b c0x0000 (---------------)  + I sherbrooke\n\t0x0021d987, // n0x158c c0x0000 (---------------)  + I sibenik\n\t0x00341f84, // n0x158d c0x0000 (---------------)  + I silk\n\t0x00209743, // n0x158e c0x0000 (---------------)  + I ski\n\t0x00296cc5, // n0x158f c0x0000 (---------------)  + I skole\n\t0x002fbb47, // n0x1590 c0x0000 (---------------)  + I society\n\t0x002f9607, // n0x1591 c0x0000 (---------------)  + I sologne\n\t0x002b46ce, // n0x1592 c0x0000 (---------------)  + I soundandvision\n\t0x0032bd4d, // n0x1593 c0x0000 (---------------)  + I southcarolina\n\t0x0032e849, // n0x1594 c0x0000 (---------------)  + I southwest\n\t0x0020bb45, // n0x1595 c0x0000 (---------------)  + I space\n\t0x003347c3, // n0x1596 c0x0000 (---------------)  + I spy\n\t0x0027a346, // n0x1597 c0x0000 (---------------)  + I square\n\t0x003643c5, // n0x1598 c0x0000 (---------------)  + I stadt\n\t0x0027b148, // n0x1599 c0x0000 (---------------)  + I stalbans\n\t0x00323f89, // n0x159a c0x0000 (---------------)  + I starnberg\n\t0x0020f205, // n0x159b c0x0000 (---------------)  + I state\n\t0x0033678f, // n0x159c c0x0000 (---------------)  + I stateofdelaware\n\t0x00254e87, // n0x159d c0x0000 (---------------)  + I station\n\t0x003674c5, // n0x159e c0x0000 (---------------)  + I steam\n\t0x00227c0a, // n0x159f c0x0000 (---------------)  + I steiermark\n\t0x00303b86, // n0x15a0 c0x0000 (---------------)  + I stjohn\n\t0x002a8009, // n0x15a1 c0x0000 (---------------)  + I stockholm\n\t0x002e71cc, // n0x15a2 c0x0000 (---------------)  + I stpetersburg\n\t0x002e8989, // n0x15a3 c0x0000 (---------------)  + I stuttgart\n\t0x00206706, // n0x15a4 c0x0000 (---------------)  + I suisse\n\t0x0029148c, // n0x15a5 c0x0000 (---------------)  + I surgeonshall\n\t0x002e91c6, // n0x15a6 c0x0000 (---------------)  + I surrey\n\t0x002f0688, // n0x15a7 c0x0000 (---------------)  + I svizzera\n\t0x002f0886, // n0x15a8 c0x0000 (---------------)  + I sweden\n\t0x00329bc6, // n0x15a9 c0x0000 (---------------)  + I sydney\n\t0x002294c4, // n0x15aa c0x0000 (---------------)  + I tank\n\t0x0025d103, // n0x15ab c0x0000 (---------------)  + I tcm\n\t0x002d608a, // n0x15ac c0x0000 (---------------)  + I technology\n\t0x0031d2d1, // n0x15ad c0x0000 (---------------)  + I telekommunikation\n\t0x002b5c4a, // n0x15ae c0x0000 (---------------)  + I television\n\t0x0034d1c5, // n0x15af c0x0000 (---------------)  + I texas\n\t0x003844c7, // n0x15b0 c0x0000 (---------------)  + I textile\n\t0x002573c7, // n0x15b1 c0x0000 (---------------)  + I theater\n\t0x00269804, // n0x15b2 c0x0000 (---------------)  + I time\n\t0x0026980b, // n0x15b3 c0x0000 (---------------)  + I timekeeping\n\t0x00208088, // n0x15b4 c0x0000 (---------------)  + I topology\n\t0x002b1946, // n0x15b5 c0x0000 (---------------)  + I torino\n\t0x00311cc5, // n0x15b6 c0x0000 (---------------)  + I touch\n\t0x002dc244, // n0x15b7 c0x0000 (---------------)  + I town\n\t0x00294809, // n0x15b8 c0x0000 (---------------)  + I transport\n\t0x00355f84, // n0x15b9 c0x0000 (---------------)  + I tree\n\t0x00359147, // n0x15ba c0x0000 (---------------)  + I trolley\n\t0x00329245, // n0x15bb c0x0000 (---------------)  + I trust\n\t0x00329247, // n0x15bc c0x0000 (---------------)  + I trustee\n\t0x0030fb05, // n0x15bd c0x0000 (---------------)  + I uhren\n\t0x00253643, // n0x15be c0x0000 (---------------)  + I ulm\n\t0x002fa888, // n0x15bf c0x0000 (---------------)  + I undersea\n\t0x00320a0a, // n0x15c0 c0x0000 (---------------)  + I university\n\t0x0022b983, // n0x15c1 c0x0000 (---------------)  + I usa\n\t0x0022b98a, // n0x15c2 c0x0000 (---------------)  + I usantiques\n\t0x0028db46, // n0x15c3 c0x0000 (---------------)  + I usarts\n\t0x0033650f, // n0x15c4 c0x0000 (---------------)  + I uscountryestate\n\t0x00337d89, // n0x15c5 c0x0000 (---------------)  + I usculture\n\t0x0025f990, // n0x15c6 c0x0000 (---------------)  + I usdecorativearts\n\t0x0026d6c8, // n0x15c7 c0x0000 (---------------)  + I usgarden\n\t0x002c7d49, // n0x15c8 c0x0000 (---------------)  + I ushistory\n\t0x0029ca87, // n0x15c9 c0x0000 (---------------)  + I ushuaia\n\t0x0024144f, // n0x15ca c0x0000 (---------------)  + I uslivinghistory\n\t0x002e84c4, // n0x15cb c0x0000 (---------------)  + I utah\n\t0x0033d844, // n0x15cc c0x0000 (---------------)  + I uvic\n\t0x00217106, // n0x15cd c0x0000 (---------------)  + I valley\n\t0x00236b46, // n0x15ce c0x0000 (---------------)  + I vantaa\n\t0x0031504a, // n0x15cf c0x0000 (---------------)  + I versailles\n\t0x00311a06, // n0x15d0 c0x0000 (---------------)  + I viking\n\t0x002f8f47, // n0x15d1 c0x0000 (---------------)  + I village\n\t0x002f7e88, // n0x15d2 c0x0000 (---------------)  + I virginia\n\t0x002f8087, // n0x15d3 c0x0000 (---------------)  + I virtual\n\t0x002f8247, // n0x15d4 c0x0000 (---------------)  + I virtuel\n\t0x0034710a, // n0x15d5 c0x0000 (---------------)  + I vlaanderen\n\t0x002fa6cb, // n0x15d6 c0x0000 (---------------)  + I volkenkunde\n\t0x00320685, // n0x15d7 c0x0000 (---------------)  + I wales\n\t0x0039de88, // n0x15d8 c0x0000 (---------------)  + I wallonie\n\t0x00203903, // n0x15d9 c0x0000 (---------------)  + I war\n\t0x0023efcc, // n0x15da c0x0000 (---------------)  + I washingtondc\n\t0x00376c4f, // n0x15db c0x0000 (---------------)  + I watch-and-clock\n\t0x002aca4d, // n0x15dc c0x0000 (---------------)  + I watchandclock\n\t0x0023d987, // n0x15dd c0x0000 (---------------)  + I western\n\t0x0032e989, // n0x15de c0x0000 (---------------)  + I westfalen\n\t0x002b5f07, // n0x15df c0x0000 (---------------)  + I whaling\n\t0x00253bc8, // n0x15e0 c0x0000 (---------------)  + I wildlife\n\t0x0023264c, // n0x15e1 c0x0000 (---------------)  + I williamsburg\n\t0x00285148, // n0x15e2 c0x0000 (---------------)  + I windmill\n\t0x00351f08, // n0x15e3 c0x0000 (---------------)  + I workshop\n\t0x0030cb8e, // n0x15e4 c0x0000 (---------------)  + I xn--9dbhblg6di\n\t0x0031d714, // n0x15e5 c0x0000 (---------------)  + I xn--comunicaes-v6a2o\n\t0x0031dc24, // n0x15e6 c0x0000 (---------------)  + I xn--correios-e-telecomunicaes-ghc29a\n\t0x0033b8ca, // n0x15e7 c0x0000 (---------------)  + I xn--h1aegh\n\t0x0035a14b, // n0x15e8 c0x0000 (---------------)  + I xn--lns-qla\n\t0x002ed184, // n0x15e9 c0x0000 (---------------)  + I york\n\t0x002ed189, // n0x15ea c0x0000 (---------------)  + I yorkshire\n\t0x002aab48, // n0x15eb c0x0000 (---------------)  + I yosemite\n\t0x0024b0c5, // n0x15ec c0x0000 (---------------)  + I youth\n\t0x002ed80a, // n0x15ed c0x0000 (---------------)  + I zoological\n\t0x0027a507, // n0x15ee c0x0000 (---------------)  + I zoology\n\t0x002389c4, // n0x15ef c0x0000 (---------------)  + I aero\n\t0x00330b83, // n0x15f0 c0x0000 (---------------)  + I biz\n\t0x00233503, // n0x15f1 c0x0000 (---------------)  + I com\n\t0x0023d684, // n0x15f2 c0x0000 (---------------)  + I coop\n\t0x0023a783, // n0x15f3 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x15f4 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x15f5 c0x0000 (---------------)  + I info\n\t0x00201603, // n0x15f6 c0x0000 (---------------)  + I int\n\t0x00209003, // n0x15f7 c0x0000 (---------------)  + I mil\n\t0x002d0106, // n0x15f8 c0x0000 (---------------)  + I museum\n\t0x00205284, // n0x15f9 c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x15fa c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x15fb c0x0000 (---------------)  + I org\n\t0x00220e43, // n0x15fc c0x0000 (---------------)  + I pro\n\t0x00201542, // n0x15fd c0x0000 (---------------)  + I ac\n\t0x00330b83, // n0x15fe c0x0000 (---------------)  + I biz\n\t0x00200742, // n0x15ff c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1600 c0x0000 (---------------)  + I com\n\t0x0023d684, // n0x1601 c0x0000 (---------------)  + I coop\n\t0x0023a783, // n0x1602 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1603 c0x0000 (---------------)  + I gov\n\t0x00201603, // n0x1604 c0x0000 (---------------)  + I int\n\t0x002d0106, // n0x1605 c0x0000 (---------------)  + I museum\n\t0x0021fe03, // n0x1606 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1607 c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x1608 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x1609 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x160a c0x0000 (---------------)  + I edu\n\t0x00213183, // n0x160b c0x0000 (---------------)  + I gob\n\t0x0021fe03, // n0x160c c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x160d c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x160e c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x160f c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1610 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1611 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x1612 c0x0000 (---------------)  + I mil\n\t0x00205284, // n0x1613 c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x1614 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1615 c0x0000 (---------------)  + I org\n\t0x0062f7c8, // n0x1616 c0x0001 (---------------)  ! I teledata\n\t0x00200302, // n0x1617 c0x0000 (---------------)  + I ca\n\t0x0022e182, // n0x1618 c0x0000 (---------------)  + I cc\n\t0x00200742, // n0x1619 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x161a c0x0000 (---------------)  + I com\n\t0x0022bf42, // n0x161b c0x0000 (---------------)  + I dr\n\t0x002013c2, // n0x161c c0x0000 (---------------)  + I in\n\t0x003a1244, // n0x161d c0x0000 (---------------)  + I info\n\t0x00207104, // n0x161e c0x0000 (---------------)  + I mobi\n\t0x0021bb02, // n0x161f c0x0000 (---------------)  + I mx\n\t0x00205284, // n0x1620 c0x0000 (---------------)  + I name\n\t0x00200282, // n0x1621 c0x0000 (---------------)  + I or\n\t0x0022d1c3, // n0x1622 c0x0000 (---------------)  + I org\n\t0x00220e43, // n0x1623 c0x0000 (---------------)  + I pro\n\t0x0023d0c6, // n0x1624 c0x0000 (---------------)  + I school\n\t0x00224e42, // n0x1625 c0x0000 (---------------)  + I tv\n\t0x00202382, // n0x1626 c0x0000 (---------------)  + I us\n\t0x0020b942, // n0x1627 c0x0000 (---------------)  + I ws\n\t0x38e22103, // n0x1628 c0x00e3 (n0x162a-n0x162b)  o I her\n\t0x39218ac3, // n0x1629 c0x00e4 (n0x162b-n0x162c)  o I his\n\t0x00057c46, // n0x162a c0x0000 (---------------)  +   forgot\n\t0x00057c46, // n0x162b c0x0000 (---------------)  +   forgot\n\t0x002d4884, // n0x162c c0x0000 (---------------)  + I asso\n\t0x00116c0c, // n0x162d c0x0000 (---------------)  +   at-band-camp\n\t0x0001be0c, // n0x162e c0x0000 (---------------)  +   azure-mobile\n\t0x00080ecd, // n0x162f c0x0000 (---------------)  +   azurewebsites\n\t0x000fb147, // n0x1630 c0x0000 (---------------)  +   blogdns\n\t0x00020208, // n0x1631 c0x0000 (---------------)  +   broke-it\n\t0x0019898a, // n0x1632 c0x0000 (---------------)  +   buyshouses\n\t0x39e3e2c5, // n0x1633 c0x00e7 (n0x1663-n0x1664)  o I cdn77\n\t0x0003e2c9, // n0x1634 c0x0000 (---------------)  +   cdn77-ssl\n\t0x00009188, // n0x1635 c0x0000 (---------------)  +   cloudapp\n\t0x0019d4ca, // n0x1636 c0x0000 (---------------)  +   cloudfront\n\t0x0003118e, // n0x1637 c0x0000 (---------------)  +   cloudfunctions\n\t0x0014c048, // n0x1638 c0x0000 (---------------)  +   dnsalias\n\t0x0007c9c7, // n0x1639 c0x0000 (---------------)  +   dnsdojo\n\t0x00160607, // n0x163a c0x0000 (---------------)  +   does-it\n\t0x0016a009, // n0x163b c0x0000 (---------------)  +   dontexist\n\t0x0008cdc7, // n0x163c c0x0000 (---------------)  +   dsmynas\n\t0x00197b48, // n0x163d c0x0000 (---------------)  +   dynalias\n\t0x000e9d09, // n0x163e c0x0000 (---------------)  +   dynathome\n\t0x001a46c5, // n0x163f c0x0000 (---------------)  +   dynv6\n\t0x000a950d, // n0x1640 c0x0000 (---------------)  +   endofinternet\n\t0x00008f88, // n0x1641 c0x0000 (---------------)  +   familyds\n\t0x3a24c206, // n0x1642 c0x00e8 (n0x1664-n0x1666)  o I fastly\n\t0x00064447, // n0x1643 c0x0000 (---------------)  +   from-az\n\t0x00065a47, // n0x1644 c0x0000 (---------------)  +   from-co\n\t0x0006a1c7, // n0x1645 c0x0000 (---------------)  +   from-la\n\t0x0006f3c7, // n0x1646 c0x0000 (---------------)  +   from-ny\n\t0x0000d202, // n0x1647 c0x0000 (---------------)  +   gb\n\t0x00157907, // n0x1648 c0x0000 (---------------)  +   gets-it\n\t0x00064a8c, // n0x1649 c0x0000 (---------------)  +   ham-radio-op\n\t0x00146347, // n0x164a c0x0000 (---------------)  +   homeftp\n\t0x000a51c6, // n0x164b c0x0000 (---------------)  +   homeip\n\t0x000a59c9, // n0x164c c0x0000 (---------------)  +   homelinux\n\t0x000a6fc8, // n0x164d c0x0000 (---------------)  +   homeunix\n\t0x000195c2, // n0x164e c0x0000 (---------------)  +   hu\n\t0x000013c2, // n0x164f c0x0000 (---------------)  +   in\n\t0x00007b0b, // n0x1650 c0x0000 (---------------)  +   in-the-band\n\t0x00012789, // n0x1651 c0x0000 (---------------)  +   is-a-chef\n\t0x0004e989, // n0x1652 c0x0000 (---------------)  +   is-a-geek\n\t0x0008e588, // n0x1653 c0x0000 (---------------)  +   isa-geek\n\t0x000ae3c2, // n0x1654 c0x0000 (---------------)  +   jp\n\t0x00150c09, // n0x1655 c0x0000 (---------------)  +   kicks-ass\n\t0x0002168d, // n0x1656 c0x0000 (---------------)  +   office-on-the\n\t0x000dcd47, // n0x1657 c0x0000 (---------------)  +   podzone\n\t0x000ecb08, // n0x1658 c0x0000 (---------------)  +   rackmaze\n\t0x001376cd, // n0x1659 c0x0000 (---------------)  +   scrapper-site\n\t0x000046c2, // n0x165a c0x0000 (---------------)  +   se\n\t0x0006ba86, // n0x165b c0x0000 (---------------)  +   selfip\n\t0x00090208, // n0x165c c0x0000 (---------------)  +   sells-it\n\t0x000cb7c8, // n0x165d c0x0000 (---------------)  +   servebbs\n\t0x000895c8, // n0x165e c0x0000 (---------------)  +   serveftp\n\t0x00054088, // n0x165f c0x0000 (---------------)  +   thruhere\n\t0x00000f82, // n0x1660 c0x0000 (---------------)  +   uk\n\t0x000eadc6, // n0x1661 c0x0000 (---------------)  +   webhop\n\t0x00005f82, // n0x1662 c0x0000 (---------------)  +   za\n\t0x000002c1, // n0x1663 c0x0000 (---------------)  +   r\n\t0x3a6e2044, // n0x1664 c0x00e9 (n0x1666-n0x1668)  o I prod\n\t0x3aa3e443, // n0x1665 c0x00ea (n0x1668-n0x166b)  o I ssl\n\t0x00000101, // n0x1666 c0x0000 (---------------)  +   a\n\t0x0000d846, // n0x1667 c0x0000 (---------------)  +   global\n\t0x00000101, // n0x1668 c0x0000 (---------------)  +   a\n\t0x00000001, // n0x1669 c0x0000 (---------------)  +   b\n\t0x0000d846, // n0x166a c0x0000 (---------------)  +   global\n\t0x0024bf84, // n0x166b c0x0000 (---------------)  + I arts\n\t0x00233503, // n0x166c c0x0000 (---------------)  + I com\n\t0x0024d9c4, // n0x166d c0x0000 (---------------)  + I firm\n\t0x003a1244, // n0x166e c0x0000 (---------------)  + I info\n\t0x0021fe03, // n0x166f c0x0000 (---------------)  + I net\n\t0x00222085, // n0x1670 c0x0000 (---------------)  + I other\n\t0x00220f03, // n0x1671 c0x0000 (---------------)  + I per\n\t0x0022a5c3, // n0x1672 c0x0000 (---------------)  + I rec\n\t0x00391185, // n0x1673 c0x0000 (---------------)  + I store\n\t0x00221a03, // n0x1674 c0x0000 (---------------)  + I web\n\t0x3b633503, // n0x1675 c0x00ed (n0x167f-n0x1680)  + I com\n\t0x0023a783, // n0x1676 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1677 c0x0000 (---------------)  + I gov\n\t0x00200041, // n0x1678 c0x0000 (---------------)  + I i\n\t0x00209003, // n0x1679 c0x0000 (---------------)  + I mil\n\t0x00207104, // n0x167a c0x0000 (---------------)  + I mobi\n\t0x00205284, // n0x167b c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x167c c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x167d c0x0000 (---------------)  + I org\n\t0x00217443, // n0x167e c0x0000 (---------------)  + I sch\n\t0x000ffa08, // n0x167f c0x0000 (---------------)  +   blogspot\n\t0x00201542, // n0x1680 c0x0000 (---------------)  + I ac\n\t0x00330b83, // n0x1681 c0x0000 (---------------)  + I biz\n\t0x00200742, // n0x1682 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1683 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1684 c0x0000 (---------------)  + I edu\n\t0x00213183, // n0x1685 c0x0000 (---------------)  + I gob\n\t0x002013c2, // n0x1686 c0x0000 (---------------)  + I in\n\t0x003a1244, // n0x1687 c0x0000 (---------------)  + I info\n\t0x00201603, // n0x1688 c0x0000 (---------------)  + I int\n\t0x00209003, // n0x1689 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x168a c0x0000 (---------------)  + I net\n\t0x00201483, // n0x168b c0x0000 (---------------)  + I nom\n\t0x0022d1c3, // n0x168c c0x0000 (---------------)  + I org\n\t0x00221a03, // n0x168d c0x0000 (---------------)  + I web\n\t0x000ffa08, // n0x168e c0x0000 (---------------)  +   blogspot\n\t0x00365782, // n0x168f c0x0000 (---------------)  + I bv\n\t0x00000742, // n0x1690 c0x0000 (---------------)  +   co\n\t0x3c622f02, // n0x1691 c0x00f1 (n0x1967-n0x1968)  + I aa\n\t0x00355648, // n0x1692 c0x0000 (---------------)  + I aarborte\n\t0x00223386, // n0x1693 c0x0000 (---------------)  + I aejrie\n\t0x002bb486, // n0x1694 c0x0000 (---------------)  + I afjord\n\t0x00222d07, // n0x1695 c0x0000 (---------------)  + I agdenes\n\t0x3ca04f02, // n0x1696 c0x00f2 (n0x1968-n0x1969)  + I ah\n\t0x3cf7c888, // n0x1697 c0x00f3 (n0x1969-n0x196a)  o I akershus\n\t0x00354a4a, // n0x1698 c0x0000 (---------------)  + I aknoluokta\n\t0x00263ec8, // n0x1699 c0x0000 (---------------)  + I akrehamn\n\t0x002001c2, // n0x169a c0x0000 (---------------)  + I al\n\t0x003552c9, // n0x169b c0x0000 (---------------)  + I alaheadju\n\t0x003206c7, // n0x169c c0x0000 (---------------)  + I alesund\n\t0x00219046, // n0x169d c0x0000 (---------------)  + I algard\n\t0x00204e09, // n0x169e c0x0000 (---------------)  + I alstahaug\n\t0x0023adc4, // n0x169f c0x0000 (---------------)  + I alta\n\t0x002bbf06, // n0x16a0 c0x0000 (---------------)  + I alvdal\n\t0x002bb884, // n0x16a1 c0x0000 (---------------)  + I amli\n\t0x00278604, // n0x16a2 c0x0000 (---------------)  + I amot\n\t0x00259c09, // n0x16a3 c0x0000 (---------------)  + I andasuolo\n\t0x0022c086, // n0x16a4 c0x0000 (---------------)  + I andebu\n\t0x00259645, // n0x16a5 c0x0000 (---------------)  + I andoy\n\t0x00267dc5, // n0x16a6 c0x0000 (---------------)  + I ardal\n\t0x00234b07, // n0x16a7 c0x0000 (---------------)  + I aremark\n\t0x002b87c7, // n0x16a8 c0x0000 (---------------)  + I arendal\n\t0x0032fec4, // n0x16a9 c0x0000 (---------------)  + I arna\n\t0x00222f46, // n0x16aa c0x0000 (---------------)  + I aseral\n\t0x002e2b85, // n0x16ab c0x0000 (---------------)  + I asker\n\t0x00230345, // n0x16ac c0x0000 (---------------)  + I askim\n\t0x002f58c5, // n0x16ad c0x0000 (---------------)  + I askoy\n\t0x00389107, // n0x16ae c0x0000 (---------------)  + I askvoll\n\t0x00331105, // n0x16af c0x0000 (---------------)  + I asnes\n\t0x00309f89, // n0x16b0 c0x0000 (---------------)  + I audnedaln\n\t0x00255485, // n0x16b1 c0x0000 (---------------)  + I aukra\n\t0x002fadc4, // n0x16b2 c0x0000 (---------------)  + I aure\n\t0x00323447, // n0x16b3 c0x0000 (---------------)  + I aurland\n\t0x0025de0e, // n0x16b4 c0x0000 (---------------)  + I aurskog-holand\n\t0x00272489, // n0x16b5 c0x0000 (---------------)  + I austevoll\n\t0x0030f789, // n0x16b6 c0x0000 (---------------)  + I austrheim\n\t0x00326bc6, // n0x16b7 c0x0000 (---------------)  + I averoy\n\t0x002f2388, // n0x16b8 c0x0000 (---------------)  + I badaddja\n\t0x002ade0b, // n0x16b9 c0x0000 (---------------)  + I bahcavuotna\n\t0x002d13cc, // n0x16ba c0x0000 (---------------)  + I bahccavuotna\n\t0x0026a446, // n0x16bb c0x0000 (---------------)  + I baidar\n\t0x00372147, // n0x16bc c0x0000 (---------------)  + I bajddar\n\t0x0025ef05, // n0x16bd c0x0000 (---------------)  + I balat\n\t0x00228a8a, // n0x16be c0x0000 (---------------)  + I balestrand\n\t0x00306f89, // n0x16bf c0x0000 (---------------)  + I ballangen\n\t0x00254b89, // n0x16c0 c0x0000 (---------------)  + I balsfjord\n\t0x00271906, // n0x16c1 c0x0000 (---------------)  + I bamble\n\t0x002ef785, // n0x16c2 c0x0000 (---------------)  + I bardu\n\t0x0027f705, // n0x16c3 c0x0000 (---------------)  + I barum\n\t0x00354549, // n0x16c4 c0x0000 (---------------)  + I batsfjord\n\t0x002f5a4b, // n0x16c5 c0x0000 (---------------)  + I bearalvahki\n\t0x0027c686, // n0x16c6 c0x0000 (---------------)  + I beardu\n\t0x0032e046, // n0x16c7 c0x0000 (---------------)  + I beiarn\n\t0x0020d144, // n0x16c8 c0x0000 (---------------)  + I berg\n\t0x0028b146, // n0x16c9 c0x0000 (---------------)  + I bergen\n\t0x003223c8, // n0x16ca c0x0000 (---------------)  + I berlevag\n\t0x00200006, // n0x16cb c0x0000 (---------------)  + I bievat\n\t0x00398d86, // n0x16cc c0x0000 (---------------)  + I bindal\n\t0x002054c8, // n0x16cd c0x0000 (---------------)  + I birkenes\n\t0x00206507, // n0x16ce c0x0000 (---------------)  + I bjarkoy\n\t0x00206ec9, // n0x16cf c0x0000 (---------------)  + I bjerkreim\n\t0x0020c285, // n0x16d0 c0x0000 (---------------)  + I bjugn\n\t0x000ffa08, // n0x16d1 c0x0000 (---------------)  +   blogspot\n\t0x00213204, // n0x16d2 c0x0000 (---------------)  + I bodo\n\t0x003a4004, // n0x16d3 c0x0000 (---------------)  + I bokn\n\t0x00210ac5, // n0x16d4 c0x0000 (---------------)  + I bomlo\n\t0x0038c589, // n0x16d5 c0x0000 (---------------)  + I bremanger\n\t0x00221247, // n0x16d6 c0x0000 (---------------)  + I bronnoy\n\t0x0022124b, // n0x16d7 c0x0000 (---------------)  + I bronnoysund\n\t0x0022260a, // n0x16d8 c0x0000 (---------------)  + I brumunddal\n\t0x00228785, // n0x16d9 c0x0000 (---------------)  + I bryne\n\t0x3d208642, // n0x16da c0x00f4 (n0x196a-n0x196b)  + I bu\n\t0x00351247, // n0x16db c0x0000 (---------------)  + I budejju\n\t0x3d62a108, // n0x16dc c0x00f5 (n0x196b-n0x196c)  o I buskerud\n\t0x002b8007, // n0x16dd c0x0000 (---------------)  + I bygland\n\t0x0022c3c5, // n0x16de c0x0000 (---------------)  + I bykle\n\t0x00356fca, // n0x16df c0x0000 (---------------)  + I cahcesuolo\n\t0x00000742, // n0x16e0 c0x0000 (---------------)  +   co\n\t0x002b70cb, // n0x16e1 c0x0000 (---------------)  + I davvenjarga\n\t0x0021490a, // n0x16e2 c0x0000 (---------------)  + I davvesiida\n\t0x0039c006, // n0x16e3 c0x0000 (---------------)  + I deatnu\n\t0x00274143, // n0x16e4 c0x0000 (---------------)  + I dep\n\t0x002381cd, // n0x16e5 c0x0000 (---------------)  + I dielddanuorri\n\t0x00271f0c, // n0x16e6 c0x0000 (---------------)  + I divtasvuodna\n\t0x003079cd, // n0x16e7 c0x0000 (---------------)  + I divttasvuotna\n\t0x00365c05, // n0x16e8 c0x0000 (---------------)  + I donna\n\t0x00243885, // n0x16e9 c0x0000 (---------------)  + I dovre\n\t0x002edd47, // n0x16ea c0x0000 (---------------)  + I drammen\n\t0x003458c9, // n0x16eb c0x0000 (---------------)  + I drangedal\n\t0x00354946, // n0x16ec c0x0000 (---------------)  + I drobak\n\t0x00311885, // n0x16ed c0x0000 (---------------)  + I dyroy\n\t0x0022e2c8, // n0x16ee c0x0000 (---------------)  + I egersund\n\t0x0028b043, // n0x16ef c0x0000 (---------------)  + I eid\n\t0x003116c8, // n0x16f0 c0x0000 (---------------)  + I eidfjord\n\t0x0028b048, // n0x16f1 c0x0000 (---------------)  + I eidsberg\n\t0x002bce07, // n0x16f2 c0x0000 (---------------)  + I eidskog\n\t0x002d8248, // n0x16f3 c0x0000 (---------------)  + I eidsvoll\n\t0x003a6609, // n0x16f4 c0x0000 (---------------)  + I eigersund\n\t0x0023c547, // n0x16f5 c0x0000 (---------------)  + I elverum\n\t0x00209807, // n0x16f6 c0x0000 (---------------)  + I enebakk\n\t0x00279a48, // n0x16f7 c0x0000 (---------------)  + I engerdal\n\t0x002fecc4, // n0x16f8 c0x0000 (---------------)  + I etne\n\t0x002fecc7, // n0x16f9 c0x0000 (---------------)  + I etnedal\n\t0x00251f48, // n0x16fa c0x0000 (---------------)  + I evenassi\n\t0x00202b46, // n0x16fb c0x0000 (---------------)  + I evenes\n\t0x003a03cf, // n0x16fc c0x0000 (---------------)  + I evje-og-hornnes\n\t0x00212987, // n0x16fd c0x0000 (---------------)  + I farsund\n\t0x0024cc06, // n0x16fe c0x0000 (---------------)  + I fauske\n\t0x002d77c5, // n0x16ff c0x0000 (---------------)  + I fedje\n\t0x002159c3, // n0x1700 c0x0000 (---------------)  + I fet\n\t0x0034b7c7, // n0x1701 c0x0000 (---------------)  + I fetsund\n\t0x0023f343, // n0x1702 c0x0000 (---------------)  + I fhs\n\t0x0024c546, // n0x1703 c0x0000 (---------------)  + I finnoy\n\t0x0024f086, // n0x1704 c0x0000 (---------------)  + I fitjar\n\t0x00250506, // n0x1705 c0x0000 (---------------)  + I fjaler\n\t0x0028f845, // n0x1706 c0x0000 (---------------)  + I fjell\n\t0x00267683, // n0x1707 c0x0000 (---------------)  + I fla\n\t0x00380648, // n0x1708 c0x0000 (---------------)  + I flakstad\n\t0x0036ce89, // n0x1709 c0x0000 (---------------)  + I flatanger\n\t0x00364c8b, // n0x170a c0x0000 (---------------)  + I flekkefjord\n\t0x00377308, // n0x170b c0x0000 (---------------)  + I flesberg\n\t0x00252605, // n0x170c c0x0000 (---------------)  + I flora\n\t0x00253105, // n0x170d c0x0000 (---------------)  + I floro\n\t0x3da42902, // n0x170e c0x00f6 (n0x196c-n0x196d)  + I fm\n\t0x0037be09, // n0x170f c0x0000 (---------------)  + I folkebibl\n\t0x002558c7, // n0x1710 c0x0000 (---------------)  + I folldal\n\t0x0039bf45, // n0x1711 c0x0000 (---------------)  + I forde\n\t0x00259b07, // n0x1712 c0x0000 (---------------)  + I forsand\n\t0x0025b746, // n0x1713 c0x0000 (---------------)  + I fosnes\n\t0x0035dfc5, // n0x1714 c0x0000 (---------------)  + I frana\n\t0x0036420b, // n0x1715 c0x0000 (---------------)  + I fredrikstad\n\t0x0025c484, // n0x1716 c0x0000 (---------------)  + I frei\n\t0x00263a85, // n0x1717 c0x0000 (---------------)  + I frogn\n\t0x00263bc7, // n0x1718 c0x0000 (---------------)  + I froland\n\t0x00276a06, // n0x1719 c0x0000 (---------------)  + I frosta\n\t0x00276e45, // n0x171a c0x0000 (---------------)  + I froya\n\t0x00283e87, // n0x171b c0x0000 (---------------)  + I fuoisku\n\t0x00284ec7, // n0x171c c0x0000 (---------------)  + I fuossko\n\t0x0028db04, // n0x171d c0x0000 (---------------)  + I fusa\n\t0x00288cca, // n0x171e c0x0000 (---------------)  + I fylkesbibl\n\t0x00289188, // n0x171f c0x0000 (---------------)  + I fyresdal\n\t0x002cdcc9, // n0x1720 c0x0000 (---------------)  + I gaivuotna\n\t0x0021dd45, // n0x1721 c0x0000 (---------------)  + I galsa\n\t0x002b7306, // n0x1722 c0x0000 (---------------)  + I gamvik\n\t0x0032258a, // n0x1723 c0x0000 (---------------)  + I gangaviika\n\t0x00267cc6, // n0x1724 c0x0000 (---------------)  + I gaular\n\t0x002b6187, // n0x1725 c0x0000 (---------------)  + I gausdal\n\t0x002cd98d, // n0x1726 c0x0000 (---------------)  + I giehtavuoatna\n\t0x00226cc9, // n0x1727 c0x0000 (---------------)  + I gildeskal\n\t0x00328b05, // n0x1728 c0x0000 (---------------)  + I giske\n\t0x00310047, // n0x1729 c0x0000 (---------------)  + I gjemnes\n\t0x003279c8, // n0x172a c0x0000 (---------------)  + I gjerdrum\n\t0x0032f588, // n0x172b c0x0000 (---------------)  + I gjerstad\n\t0x00249607, // n0x172c c0x0000 (---------------)  + I gjesdal\n\t0x00249e46, // n0x172d c0x0000 (---------------)  + I gjovik\n\t0x00212b87, // n0x172e c0x0000 (---------------)  + I gloppen\n\t0x0024dbc3, // n0x172f c0x0000 (---------------)  + I gol\n\t0x00334544, // n0x1730 c0x0000 (---------------)  + I gran\n\t0x0035bc85, // n0x1731 c0x0000 (---------------)  + I grane\n\t0x00384e47, // n0x1732 c0x0000 (---------------)  + I granvin\n\t0x00388b09, // n0x1733 c0x0000 (---------------)  + I gratangen\n\t0x0022d248, // n0x1734 c0x0000 (---------------)  + I grimstad\n\t0x002b6085, // n0x1735 c0x0000 (---------------)  + I grong\n\t0x0039a744, // n0x1736 c0x0000 (---------------)  + I grue\n\t0x0035d2c5, // n0x1737 c0x0000 (---------------)  + I gulen\n\t0x0025334d, // n0x1738 c0x0000 (---------------)  + I guovdageaidnu\n\t0x00202442, // n0x1739 c0x0000 (---------------)  + I ha\n\t0x002c9b86, // n0x173a c0x0000 (---------------)  + I habmer\n\t0x0026b9c6, // n0x173b c0x0000 (---------------)  + I hadsel\n\t0x002a5e4a, // n0x173c c0x0000 (---------------)  + I hagebostad\n\t0x0035f386, // n0x173d c0x0000 (---------------)  + I halden\n\t0x0036d3c5, // n0x173e c0x0000 (---------------)  + I halsa\n\t0x0025e745, // n0x173f c0x0000 (---------------)  + I hamar\n\t0x0025e747, // n0x1740 c0x0000 (---------------)  + I hamaroy\n\t0x0037558c, // n0x1741 c0x0000 (---------------)  + I hammarfeasta\n\t0x0033c28a, // n0x1742 c0x0000 (---------------)  + I hammerfest\n\t0x0028aa06, // n0x1743 c0x0000 (---------------)  + I hapmir\n\t0x002cfb05, // n0x1744 c0x0000 (---------------)  + I haram\n\t0x0028af86, // n0x1745 c0x0000 (---------------)  + I hareid\n\t0x0028b2c7, // n0x1746 c0x0000 (---------------)  + I harstad\n\t0x0028c606, // n0x1747 c0x0000 (---------------)  + I hasvik\n\t0x0028f74c, // n0x1748 c0x0000 (---------------)  + I hattfjelldal\n\t0x00204f49, // n0x1749 c0x0000 (---------------)  + I haugesund\n\t0x3de36587, // n0x174a c0x00f7 (n0x196d-n0x1970)  o I hedmark\n\t0x002910c5, // n0x174b c0x0000 (---------------)  + I hemne\n\t0x002910c6, // n0x174c c0x0000 (---------------)  + I hemnes\n\t0x00291d48, // n0x174d c0x0000 (---------------)  + I hemsedal\n\t0x00232305, // n0x174e c0x0000 (---------------)  + I herad\n\t0x002a4585, // n0x174f c0x0000 (---------------)  + I hitra\n\t0x002a47c8, // n0x1750 c0x0000 (---------------)  + I hjartdal\n\t0x002a49ca, // n0x1751 c0x0000 (---------------)  + I hjelmeland\n\t0x3e248fc2, // n0x1752 c0x00f8 (n0x1970-n0x1971)  + I hl\n\t0x3e60e942, // n0x1753 c0x00f9 (n0x1971-n0x1972)  + I hm\n\t0x00378245, // n0x1754 c0x0000 (---------------)  + I hobol\n\t0x002d7743, // n0x1755 c0x0000 (---------------)  + I hof\n\t0x003a4508, // n0x1756 c0x0000 (---------------)  + I hokksund\n\t0x0023ce83, // n0x1757 c0x0000 (---------------)  + I hol\n\t0x002a4c44, // n0x1758 c0x0000 (---------------)  + I hole\n\t0x002a814b, // n0x1759 c0x0000 (---------------)  + I holmestrand\n\t0x002ae1c8, // n0x175a c0x0000 (---------------)  + I holtalen\n\t0x002a7ac8, // n0x175b c0x0000 (---------------)  + I honefoss\n\t0x3eb1a749, // n0x175c c0x00fa (n0x1972-n0x1973)  o I hordaland\n\t0x002a8f89, // n0x175d c0x0000 (---------------)  + I hornindal\n\t0x002a9406, // n0x175e c0x0000 (---------------)  + I horten\n\t0x002aa188, // n0x175f c0x0000 (---------------)  + I hoyanger\n\t0x002aa389, // n0x1760 c0x0000 (---------------)  + I hoylandet\n\t0x002ab246, // n0x1761 c0x0000 (---------------)  + I hurdal\n\t0x002ab3c5, // n0x1762 c0x0000 (---------------)  + I hurum\n\t0x00363586, // n0x1763 c0x0000 (---------------)  + I hvaler\n\t0x002ab849, // n0x1764 c0x0000 (---------------)  + I hyllestad\n\t0x00229187, // n0x1765 c0x0000 (---------------)  + I ibestad\n\t0x0026dd46, // n0x1766 c0x0000 (---------------)  + I idrett\n\t0x002e7747, // n0x1767 c0x0000 (---------------)  + I inderoy\n\t0x003547c7, // n0x1768 c0x0000 (---------------)  + I iveland\n\t0x0023fcc4, // n0x1769 c0x0000 (---------------)  + I ivgu\n\t0x3ee1cfc9, // n0x176a c0x00fb (n0x1973-n0x1974)  + I jan-mayen\n\t0x002c57c8, // n0x176b c0x0000 (---------------)  + I jessheim\n\t0x00358388, // n0x176c c0x0000 (---------------)  + I jevnaker\n\t0x00343c87, // n0x176d c0x0000 (---------------)  + I jolster\n\t0x002c1046, // n0x176e c0x0000 (---------------)  + I jondal\n\t0x002fc709, // n0x176f c0x0000 (---------------)  + I jorpeland\n\t0x002bc3c7, // n0x1770 c0x0000 (---------------)  + I kafjord\n\t0x0024fd0a, // n0x1771 c0x0000 (---------------)  + I karasjohka\n\t0x0037dbc8, // n0x1772 c0x0000 (---------------)  + I karasjok\n\t0x00330887, // n0x1773 c0x0000 (---------------)  + I karlsoy\n\t0x00229586, // n0x1774 c0x0000 (---------------)  + I karmoy\n\t0x002650ca, // n0x1775 c0x0000 (---------------)  + I kautokeino\n\t0x0027e3c8, // n0x1776 c0x0000 (---------------)  + I kirkenes\n\t0x0026b445, // n0x1777 c0x0000 (---------------)  + I klabu\n\t0x00374f05, // n0x1778 c0x0000 (---------------)  + I klepp\n\t0x00387dc7, // n0x1779 c0x0000 (---------------)  + I kommune\n\t0x002bfb09, // n0x177a c0x0000 (---------------)  + I kongsberg\n\t0x002c478b, // n0x177b c0x0000 (---------------)  + I kongsvinger\n\t0x002d6808, // n0x177c c0x0000 (---------------)  + I kopervik\n\t0x00255509, // n0x177d c0x0000 (---------------)  + I kraanghke\n\t0x00250787, // n0x177e c0x0000 (---------------)  + I kragero\n\t0x002af50c, // n0x177f c0x0000 (---------------)  + I kristiansand\n\t0x002b01cc, // n0x1780 c0x0000 (---------------)  + I kristiansund\n\t0x002b04ca, // n0x1781 c0x0000 (---------------)  + I krodsherad\n\t0x002b074c, // n0x1782 c0x0000 (---------------)  + I krokstadelva\n\t0x002bb408, // n0x1783 c0x0000 (---------------)  + I kvafjord\n\t0x002bb608, // n0x1784 c0x0000 (---------------)  + I kvalsund\n\t0x002bb804, // n0x1785 c0x0000 (---------------)  + I kvam\n\t0x002bc589, // n0x1786 c0x0000 (---------------)  + I kvanangen\n\t0x002bc7c9, // n0x1787 c0x0000 (---------------)  + I kvinesdal\n\t0x002bca0a, // n0x1788 c0x0000 (---------------)  + I kvinnherad\n\t0x002bcc89, // n0x1789 c0x0000 (---------------)  + I kviteseid\n\t0x002bcfc7, // n0x178a c0x0000 (---------------)  + I kvitsoy\n\t0x003a4dcc, // n0x178b c0x0000 (---------------)  + I laakesvuemie\n\t0x00338186, // n0x178c c0x0000 (---------------)  + I lahppi\n\t0x00258008, // n0x178d c0x0000 (---------------)  + I langevag\n\t0x00267d86, // n0x178e c0x0000 (---------------)  + I lardal\n\t0x0037f706, // n0x178f c0x0000 (---------------)  + I larvik\n\t0x00328a07, // n0x1790 c0x0000 (---------------)  + I lavagis\n\t0x00272688, // n0x1791 c0x0000 (---------------)  + I lavangen\n\t0x00331a4b, // n0x1792 c0x0000 (---------------)  + I leangaviika\n\t0x002b7ec7, // n0x1793 c0x0000 (---------------)  + I lebesby\n\t0x002598c9, // n0x1794 c0x0000 (---------------)  + I leikanger\n\t0x0035e489, // n0x1795 c0x0000 (---------------)  + I leirfjord\n\t0x00296d87, // n0x1796 c0x0000 (---------------)  + I leirvik\n\t0x002bbac4, // n0x1797 c0x0000 (---------------)  + I leka\n\t0x002bf987, // n0x1798 c0x0000 (---------------)  + I leksvik\n\t0x003562c6, // n0x1799 c0x0000 (---------------)  + I lenvik\n\t0x00217606, // n0x179a c0x0000 (---------------)  + I lerdal\n\t0x0031f845, // n0x179b c0x0000 (---------------)  + I lesja\n\t0x00219f88, // n0x179c c0x0000 (---------------)  + I levanger\n\t0x002ddf44, // n0x179d c0x0000 (---------------)  + I lier\n\t0x002ddf46, // n0x179e c0x0000 (---------------)  + I lierne\n\t0x0033c14b, // n0x179f c0x0000 (---------------)  + I lillehammer\n\t0x00330089, // n0x17a0 c0x0000 (---------------)  + I lillesand\n\t0x00322dc6, // n0x17a1 c0x0000 (---------------)  + I lindas\n\t0x00345ac9, // n0x17a2 c0x0000 (---------------)  + I lindesnes\n\t0x00389286, // n0x17a3 c0x0000 (---------------)  + I loabat\n\t0x00259dc8, // n0x17a4 c0x0000 (---------------)  + I lodingen\n\t0x00214303, // n0x17a5 c0x0000 (---------------)  + I lom\n\t0x00390905, // n0x17a6 c0x0000 (---------------)  + I loppa\n\t0x00216209, // n0x17a7 c0x0000 (---------------)  + I lorenskog\n\t0x00217745, // n0x17a8 c0x0000 (---------------)  + I loten\n\t0x002fb344, // n0x17a9 c0x0000 (---------------)  + I lund\n\t0x00275306, // n0x17aa c0x0000 (---------------)  + I lunner\n\t0x00378ec5, // n0x17ab c0x0000 (---------------)  + I luroy\n\t0x002dcb06, // n0x17ac c0x0000 (---------------)  + I luster\n\t0x002fccc7, // n0x17ad c0x0000 (---------------)  + I lyngdal\n\t0x00213606, // n0x17ae c0x0000 (---------------)  + I lyngen\n\t0x00298bcb, // n0x17af c0x0000 (---------------)  + I malatvuopmi\n\t0x002e4e47, // n0x17b0 c0x0000 (---------------)  + I malselv\n\t0x00205c86, // n0x17b1 c0x0000 (---------------)  + I malvik\n\t0x0034fcc6, // n0x17b2 c0x0000 (---------------)  + I mandal\n\t0x00234bc6, // n0x17b3 c0x0000 (---------------)  + I marker\n\t0x0032fe89, // n0x17b4 c0x0000 (---------------)  + I marnardal\n\t0x0021ed8a, // n0x17b5 c0x0000 (---------------)  + I masfjorden\n\t0x0032a985, // n0x17b6 c0x0000 (---------------)  + I masoy\n\t0x0022080d, // n0x17b7 c0x0000 (---------------)  + I matta-varjjat\n\t0x002a4ac6, // n0x17b8 c0x0000 (---------------)  + I meland\n\t0x002160c6, // n0x17b9 c0x0000 (---------------)  + I meldal\n\t0x00291886, // n0x17ba c0x0000 (---------------)  + I melhus\n\t0x002a7e05, // n0x17bb c0x0000 (---------------)  + I meloy\n\t0x0037c7c7, // n0x17bc c0x0000 (---------------)  + I meraker\n\t0x0029d687, // n0x17bd c0x0000 (---------------)  + I midsund\n\t0x002e5e0e, // n0x17be c0x0000 (---------------)  + I midtre-gauldal\n\t0x00209003, // n0x17bf c0x0000 (---------------)  + I mil\n\t0x002c1009, // n0x17c0 c0x0000 (---------------)  + I mjondalen\n\t0x00239209, // n0x17c1 c0x0000 (---------------)  + I mo-i-rana\n\t0x00228e87, // n0x17c2 c0x0000 (---------------)  + I moareke\n\t0x0026c087, // n0x17c3 c0x0000 (---------------)  + I modalen\n\t0x002a67c5, // n0x17c4 c0x0000 (---------------)  + I modum\n\t0x00325445, // n0x17c5 c0x0000 (---------------)  + I molde\n\t0x3f25d3cf, // n0x17c6 c0x00fc (n0x1974-n0x1976)  o I more-og-romsdal\n\t0x002c7f87, // n0x17c7 c0x0000 (---------------)  + I mosjoen\n\t0x002c8148, // n0x17c8 c0x0000 (---------------)  + I moskenes\n\t0x002c8884, // n0x17c9 c0x0000 (---------------)  + I moss\n\t0x002c8c46, // n0x17ca c0x0000 (---------------)  + I mosvik\n\t0x3f64aa02, // n0x17cb c0x00fd (n0x1976-n0x1977)  + I mr\n\t0x002cc2c6, // n0x17cc c0x0000 (---------------)  + I muosat\n\t0x002d0106, // n0x17cd c0x0000 (---------------)  + I museum\n\t0x00331d8e, // n0x17ce c0x0000 (---------------)  + I naamesjevuemie\n\t0x0031150a, // n0x17cf c0x0000 (---------------)  + I namdalseid\n\t0x002b57c6, // n0x17d0 c0x0000 (---------------)  + I namsos\n\t0x002261ca, // n0x17d1 c0x0000 (---------------)  + I namsskogan\n\t0x002c3349, // n0x17d2 c0x0000 (---------------)  + I nannestad\n\t0x00315d45, // n0x17d3 c0x0000 (---------------)  + I naroy\n\t0x0038ac08, // n0x17d4 c0x0000 (---------------)  + I narviika\n\t0x003a29c6, // n0x17d5 c0x0000 (---------------)  + I narvik\n\t0x00255008, // n0x17d6 c0x0000 (---------------)  + I naustdal\n\t0x0031a1c8, // n0x17d7 c0x0000 (---------------)  + I navuotna\n\t0x0030930b, // n0x17d8 c0x0000 (---------------)  + I nedre-eiker\n\t0x00222e05, // n0x17d9 c0x0000 (---------------)  + I nesna\n\t0x00331188, // n0x17da c0x0000 (---------------)  + I nesodden\n\t0x0020560c, // n0x17db c0x0000 (---------------)  + I nesoddtangen\n\t0x0022c287, // n0x17dc c0x0000 (---------------)  + I nesseby\n\t0x0024f8c6, // n0x17dd c0x0000 (---------------)  + I nesset\n\t0x00230048, // n0x17de c0x0000 (---------------)  + I nissedal\n\t0x00279d48, // n0x17df c0x0000 (---------------)  + I nittedal\n\t0x3fa47802, // n0x17e0 c0x00fe (n0x1977-n0x1978)  + I nl\n\t0x002bbccb, // n0x17e1 c0x0000 (---------------)  + I nord-aurdal\n\t0x00397f89, // n0x17e2 c0x0000 (---------------)  + I nord-fron\n\t0x0034c449, // n0x17e3 c0x0000 (---------------)  + I nord-odal\n\t0x00328887, // n0x17e4 c0x0000 (---------------)  + I norddal\n\t0x00249408, // n0x17e5 c0x0000 (---------------)  + I nordkapp\n\t0x3ff45708, // n0x17e6 c0x00ff (n0x1978-n0x197c)  o I nordland\n\t0x0025f08b, // n0x17e7 c0x0000 (---------------)  + I nordre-land\n\t0x0028e409, // n0x17e8 c0x0000 (---------------)  + I nordreisa\n\t0x0021000d, // n0x17e9 c0x0000 (---------------)  + I nore-og-uvdal\n\t0x002547c8, // n0x17ea c0x0000 (---------------)  + I notodden\n\t0x0032c588, // n0x17eb c0x0000 (---------------)  + I notteroy\n\t0x402009c2, // n0x17ec c0x0100 (n0x197c-n0x197d)  + I nt\n\t0x00202d84, // n0x17ed c0x0000 (---------------)  + I odda\n\t0x4060b282, // n0x17ee c0x0101 (n0x197d-n0x197e)  + I of\n\t0x0037dd46, // n0x17ef c0x0000 (---------------)  + I oksnes\n\t0x40a02242, // n0x17f0 c0x0102 (n0x197e-n0x197f)  + I ol\n\t0x0037a0ca, // n0x17f1 c0x0000 (---------------)  + I omasvuotna\n\t0x00352086, // n0x17f2 c0x0000 (---------------)  + I oppdal\n\t0x00225388, // n0x17f3 c0x0000 (---------------)  + I oppegard\n\t0x00255c88, // n0x17f4 c0x0000 (---------------)  + I orkanger\n\t0x002f2686, // n0x17f5 c0x0000 (---------------)  + I orkdal\n\t0x00338a46, // n0x17f6 c0x0000 (---------------)  + I orland\n\t0x002e5306, // n0x17f7 c0x0000 (---------------)  + I orskog\n\t0x0027b0c5, // n0x17f8 c0x0000 (---------------)  + I orsta\n\t0x00240e44, // n0x17f9 c0x0000 (---------------)  + I osen\n\t0x40ec40c4, // n0x17fa c0x0103 (n0x197f-n0x1980)  + I oslo\n\t0x00334ec6, // n0x17fb c0x0000 (---------------)  + I osoyro\n\t0x002510c7, // n0x17fc c0x0000 (---------------)  + I osteroy\n\t0x4139f9c7, // n0x17fd c0x0104 (n0x1980-n0x1981)  o I ostfold\n\t0x002d968b, // n0x17fe c0x0000 (---------------)  + I ostre-toten\n\t0x0025e1c9, // n0x17ff c0x0000 (---------------)  + I overhalla\n\t0x002438ca, // n0x1800 c0x0000 (---------------)  + I ovre-eiker\n\t0x003173c4, // n0x1801 c0x0000 (---------------)  + I oyer\n\t0x0025e888, // n0x1802 c0x0000 (---------------)  + I oygarden\n\t0x0026db0d, // n0x1803 c0x0000 (---------------)  + I oystre-slidre\n\t0x002e0209, // n0x1804 c0x0000 (---------------)  + I porsanger\n\t0x002e0448, // n0x1805 c0x0000 (---------------)  + I porsangu\n\t0x002e06c9, // n0x1806 c0x0000 (---------------)  + I porsgrunn\n\t0x002e1c44, // n0x1807 c0x0000 (---------------)  + I priv\n\t0x00204d04, // n0x1808 c0x0000 (---------------)  + I rade\n\t0x0027ec05, // n0x1809 c0x0000 (---------------)  + I radoy\n\t0x0027720b, // n0x180a c0x0000 (---------------)  + I rahkkeravju\n\t0x002ae146, // n0x180b c0x0000 (---------------)  + I raholt\n\t0x00334d05, // n0x180c c0x0000 (---------------)  + I raisa\n\t0x0037c0c9, // n0x180d c0x0000 (---------------)  + I rakkestad\n\t0x00223008, // n0x180e c0x0000 (---------------)  + I ralingen\n\t0x00239344, // n0x180f c0x0000 (---------------)  + I rana\n\t0x00228c09, // n0x1810 c0x0000 (---------------)  + I randaberg\n\t0x00248c45, // n0x1811 c0x0000 (---------------)  + I rauma\n\t0x002b8808, // n0x1812 c0x0000 (---------------)  + I rendalen\n\t0x00209ec7, // n0x1813 c0x0000 (---------------)  + I rennebu\n\t0x0030fb88, // n0x1814 c0x0000 (---------------)  + I rennesoy\n\t0x0027f1c6, // n0x1815 c0x0000 (---------------)  + I rindal\n\t0x00351107, // n0x1816 c0x0000 (---------------)  + I ringebu\n\t0x0020e509, // n0x1817 c0x0000 (---------------)  + I ringerike\n\t0x0023a189, // n0x1818 c0x0000 (---------------)  + I ringsaker\n\t0x00277985, // n0x1819 c0x0000 (---------------)  + I risor\n\t0x00238845, // n0x181a c0x0000 (---------------)  + I rissa\n\t0x4162b682, // n0x181b c0x0105 (n0x1981-n0x1982)  + I rl\n\t0x002fab84, // n0x181c c0x0000 (---------------)  + I roan\n\t0x0029d105, // n0x181d c0x0000 (---------------)  + I rodoy\n\t0x002cd3c6, // n0x181e c0x0000 (---------------)  + I rollag\n\t0x00318545, // n0x181f c0x0000 (---------------)  + I romsa\n\t0x002531c7, // n0x1820 c0x0000 (---------------)  + I romskog\n\t0x00296bc5, // n0x1821 c0x0000 (---------------)  + I roros\n\t0x00276a44, // n0x1822 c0x0000 (---------------)  + I rost\n\t0x00326c86, // n0x1823 c0x0000 (---------------)  + I royken\n\t0x00311907, // n0x1824 c0x0000 (---------------)  + I royrvik\n\t0x0024aa46, // n0x1825 c0x0000 (---------------)  + I ruovat\n\t0x003305c5, // n0x1826 c0x0000 (---------------)  + I rygge\n\t0x00321248, // n0x1827 c0x0000 (---------------)  + I salangen\n\t0x00223585, // n0x1828 c0x0000 (---------------)  + I salat\n\t0x00322c47, // n0x1829 c0x0000 (---------------)  + I saltdal\n\t0x0038ec09, // n0x182a c0x0000 (---------------)  + I samnanger\n\t0x003301ca, // n0x182b c0x0000 (---------------)  + I sandefjord\n\t0x0022e9c7, // n0x182c c0x0000 (---------------)  + I sandnes\n\t0x0022e9cc, // n0x182d c0x0000 (---------------)  + I sandnessjoen\n\t0x00259606, // n0x182e c0x0000 (---------------)  + I sandoy\n\t0x0022d049, // n0x182f c0x0000 (---------------)  + I sarpsborg\n\t0x002314c5, // n0x1830 c0x0000 (---------------)  + I sauda\n\t0x00232248, // n0x1831 c0x0000 (---------------)  + I sauherad\n\t0x00210703, // n0x1832 c0x0000 (---------------)  + I sel\n\t0x00210705, // n0x1833 c0x0000 (---------------)  + I selbu\n\t0x00329905, // n0x1834 c0x0000 (---------------)  + I selje\n\t0x0024d147, // n0x1835 c0x0000 (---------------)  + I seljord\n\t0x41a11cc2, // n0x1836 c0x0106 (n0x1982-n0x1983)  + I sf\n\t0x002434c7, // n0x1837 c0x0000 (---------------)  + I siellak\n\t0x002cb986, // n0x1838 c0x0000 (---------------)  + I sigdal\n\t0x0021cf06, // n0x1839 c0x0000 (---------------)  + I siljan\n\t0x0034d886, // n0x183a c0x0000 (---------------)  + I sirdal\n\t0x00279c86, // n0x183b c0x0000 (---------------)  + I skanit\n\t0x00307808, // n0x183c c0x0000 (---------------)  + I skanland\n\t0x002d8085, // n0x183d c0x0000 (---------------)  + I skaun\n\t0x0024ccc7, // n0x183e c0x0000 (---------------)  + I skedsmo\n\t0x0024cccd, // n0x183f c0x0000 (---------------)  + I skedsmokorset\n\t0x00209743, // n0x1840 c0x0000 (---------------)  + I ski\n\t0x00209745, // n0x1841 c0x0000 (---------------)  + I skien\n\t0x002279c7, // n0x1842 c0x0000 (---------------)  + I skierva\n\t0x002d1b48, // n0x1843 c0x0000 (---------------)  + I skiptvet\n\t0x00227585, // n0x1844 c0x0000 (---------------)  + I skjak\n\t0x00230ec8, // n0x1845 c0x0000 (---------------)  + I skjervoy\n\t0x00266946, // n0x1846 c0x0000 (---------------)  + I skodje\n\t0x0023e487, // n0x1847 c0x0000 (---------------)  + I slattum\n\t0x002c0645, // n0x1848 c0x0000 (---------------)  + I smola\n\t0x00222e86, // n0x1849 c0x0000 (---------------)  + I snaase\n\t0x003604c5, // n0x184a c0x0000 (---------------)  + I snasa\n\t0x002bae0a, // n0x184b c0x0000 (---------------)  + I snillfjord\n\t0x002d9146, // n0x184c c0x0000 (---------------)  + I snoasa\n\t0x0023c8c7, // n0x184d c0x0000 (---------------)  + I sogndal\n\t0x002af145, // n0x184e c0x0000 (---------------)  + I sogne\n\t0x002e2f47, // n0x184f c0x0000 (---------------)  + I sokndal\n\t0x00359f04, // n0x1850 c0x0000 (---------------)  + I sola\n\t0x002fb2c6, // n0x1851 c0x0000 (---------------)  + I solund\n\t0x0037de85, // n0x1852 c0x0000 (---------------)  + I somna\n\t0x0022be8b, // n0x1853 c0x0000 (---------------)  + I sondre-land\n\t0x00356149, // n0x1854 c0x0000 (---------------)  + I songdalen\n\t0x00378c8a, // n0x1855 c0x0000 (---------------)  + I sor-aurdal\n\t0x00277a08, // n0x1856 c0x0000 (---------------)  + I sor-fron\n\t0x002f43c8, // n0x1857 c0x0000 (---------------)  + I sor-odal\n\t0x002f69cc, // n0x1858 c0x0000 (---------------)  + I sor-varanger\n\t0x002fbfc7, // n0x1859 c0x0000 (---------------)  + I sorfold\n\t0x002fd8c8, // n0x185a c0x0000 (---------------)  + I sorreisa\n\t0x00301f88, // n0x185b c0x0000 (---------------)  + I sortland\n\t0x003057c5, // n0x185c c0x0000 (---------------)  + I sorum\n\t0x002bd24a, // n0x185d c0x0000 (---------------)  + I spjelkavik\n\t0x003347c9, // n0x185e c0x0000 (---------------)  + I spydeberg\n\t0x41e02742, // n0x185f c0x0107 (n0x1983-n0x1984)  + I st\n\t0x00202746, // n0x1860 c0x0000 (---------------)  + I stange\n\t0x0020f204, // n0x1861 c0x0000 (---------------)  + I stat\n\t0x002ded49, // n0x1862 c0x0000 (---------------)  + I stathelle\n\t0x002f35c9, // n0x1863 c0x0000 (---------------)  + I stavanger\n\t0x00225047, // n0x1864 c0x0000 (---------------)  + I stavern\n\t0x00251a47, // n0x1865 c0x0000 (---------------)  + I steigen\n\t0x002833c9, // n0x1866 c0x0000 (---------------)  + I steinkjer\n\t0x0038e808, // n0x1867 c0x0000 (---------------)  + I stjordal\n\t0x0038e80f, // n0x1868 c0x0000 (---------------)  + I stjordalshalsen\n\t0x00275e46, // n0x1869 c0x0000 (---------------)  + I stokke\n\t0x0024688b, // n0x186a c0x0000 (---------------)  + I stor-elvdal\n\t0x0037d0c5, // n0x186b c0x0000 (---------------)  + I stord\n\t0x0037d0c7, // n0x186c c0x0000 (---------------)  + I stordal\n\t0x002e6f89, // n0x186d c0x0000 (---------------)  + I storfjord\n\t0x00228b86, // n0x186e c0x0000 (---------------)  + I strand\n\t0x00228b87, // n0x186f c0x0000 (---------------)  + I stranda\n\t0x0039e5c5, // n0x1870 c0x0000 (---------------)  + I stryn\n\t0x00237304, // n0x1871 c0x0000 (---------------)  + I sula\n\t0x002402c6, // n0x1872 c0x0000 (---------------)  + I suldal\n\t0x00205084, // n0x1873 c0x0000 (---------------)  + I sund\n\t0x0030a587, // n0x1874 c0x0000 (---------------)  + I sunndal\n\t0x002e8fc8, // n0x1875 c0x0000 (---------------)  + I surnadal\n\t0x422ef688, // n0x1876 c0x0108 (n0x1984-n0x1985)  + I svalbard\n\t0x002efc85, // n0x1877 c0x0000 (---------------)  + I sveio\n\t0x002efdc7, // n0x1878 c0x0000 (---------------)  + I svelvik\n\t0x00375cc9, // n0x1879 c0x0000 (---------------)  + I sykkylven\n\t0x00206cc4, // n0x187a c0x0000 (---------------)  + I tana\n\t0x00206cc8, // n0x187b c0x0000 (---------------)  + I tananger\n\t0x42664f08, // n0x187c c0x0109 (n0x1985-n0x1987)  o I telemark\n\t0x00269804, // n0x187d c0x0000 (---------------)  + I time\n\t0x00237e88, // n0x187e c0x0000 (---------------)  + I tingvoll\n\t0x002ea3c4, // n0x187f c0x0000 (---------------)  + I tinn\n\t0x00226789, // n0x1880 c0x0000 (---------------)  + I tjeldsund\n\t0x0026cec5, // n0x1881 c0x0000 (---------------)  + I tjome\n\t0x42a00142, // n0x1882 c0x010a (n0x1987-n0x1988)  + I tm\n\t0x00275e85, // n0x1883 c0x0000 (---------------)  + I tokke\n\t0x0021dc85, // n0x1884 c0x0000 (---------------)  + I tolga\n\t0x003661c8, // n0x1885 c0x0000 (---------------)  + I tonsberg\n\t0x0023b587, // n0x1886 c0x0000 (---------------)  + I torsken\n\t0x42e03002, // n0x1887 c0x010b (n0x1988-n0x1989)  + I tr\n\t0x002c9d45, // n0x1888 c0x0000 (---------------)  + I trana\n\t0x00274dc6, // n0x1889 c0x0000 (---------------)  + I tranby\n\t0x00292546, // n0x188a c0x0000 (---------------)  + I tranoy\n\t0x002fab48, // n0x188b c0x0000 (---------------)  + I troandin\n\t0x002ffbc8, // n0x188c c0x0000 (---------------)  + I trogstad\n\t0x00318506, // n0x188d c0x0000 (---------------)  + I tromsa\n\t0x00323bc6, // n0x188e c0x0000 (---------------)  + I tromso\n\t0x00352589, // n0x188f c0x0000 (---------------)  + I trondheim\n\t0x00341ec6, // n0x1890 c0x0000 (---------------)  + I trysil\n\t0x00356ccb, // n0x1891 c0x0000 (---------------)  + I tvedestrand\n\t0x0024f6c5, // n0x1892 c0x0000 (---------------)  + I tydal\n\t0x00219b46, // n0x1893 c0x0000 (---------------)  + I tynset\n\t0x00215a48, // n0x1894 c0x0000 (---------------)  + I tysfjord\n\t0x002336c6, // n0x1895 c0x0000 (---------------)  + I tysnes\n\t0x00235ec6, // n0x1896 c0x0000 (---------------)  + I tysvar\n\t0x0021518a, // n0x1897 c0x0000 (---------------)  + I ullensaker\n\t0x0034440a, // n0x1898 c0x0000 (---------------)  + I ullensvang\n\t0x0028acc5, // n0x1899 c0x0000 (---------------)  + I ulvik\n\t0x002c7a87, // n0x189a c0x0000 (---------------)  + I unjarga\n\t0x00341946, // n0x189b c0x0000 (---------------)  + I utsira\n\t0x432000c2, // n0x189c c0x010c (n0x1989-n0x198a)  + I va\n\t0x00227b07, // n0x189d c0x0000 (---------------)  + I vaapste\n\t0x00274745, // n0x189e c0x0000 (---------------)  + I vadso\n\t0x00322504, // n0x189f c0x0000 (---------------)  + I vaga\n\t0x00322505, // n0x18a0 c0x0000 (---------------)  + I vagan\n\t0x003172c6, // n0x18a1 c0x0000 (---------------)  + I vagsoy\n\t0x0032cec7, // n0x18a2 c0x0000 (---------------)  + I vaksdal\n\t0x00217105, // n0x18a3 c0x0000 (---------------)  + I valle\n\t0x0021a004, // n0x18a4 c0x0000 (---------------)  + I vang\n\t0x0026f108, // n0x18a5 c0x0000 (---------------)  + I vanylven\n\t0x00235f85, // n0x18a6 c0x0000 (---------------)  + I vardo\n\t0x002923c7, // n0x18a7 c0x0000 (---------------)  + I varggat\n\t0x002f0545, // n0x18a8 c0x0000 (---------------)  + I varoy\n\t0x002140c5, // n0x18a9 c0x0000 (---------------)  + I vefsn\n\t0x00230284, // n0x18aa c0x0000 (---------------)  + I vega\n\t0x0028a309, // n0x18ab c0x0000 (---------------)  + I vegarshei\n\t0x002e29c8, // n0x18ac c0x0000 (---------------)  + I vennesla\n\t0x00374106, // n0x18ad c0x0000 (---------------)  + I verdal\n\t0x0033f346, // n0x18ae c0x0000 (---------------)  + I verran\n\t0x00269506, // n0x18af c0x0000 (---------------)  + I vestby\n\t0x4379aa48, // n0x18b0 c0x010d (n0x198a-n0x198b)  o I vestfold\n\t0x002f3807, // n0x18b1 c0x0000 (---------------)  + I vestnes\n\t0x002f3e8d, // n0x18b2 c0x0000 (---------------)  + I vestre-slidre\n\t0x002f45cc, // n0x18b3 c0x0000 (---------------)  + I vestre-toten\n\t0x002f4bc9, // n0x18b4 c0x0000 (---------------)  + I vestvagoy\n\t0x002f4e09, // n0x18b5 c0x0000 (---------------)  + I vevelstad\n\t0x43b4f482, // n0x18b6 c0x010e (n0x198b-n0x198c)  + I vf\n\t0x00399d43, // n0x18b7 c0x0000 (---------------)  + I vgs\n\t0x00205d43, // n0x18b8 c0x0000 (---------------)  + I vik\n\t0x00356385, // n0x18b9 c0x0000 (---------------)  + I vikna\n\t0x00384f4a, // n0x18ba c0x0000 (---------------)  + I vindafjord\n\t0x003183c6, // n0x18bb c0x0000 (---------------)  + I voagat\n\t0x002f9845, // n0x18bc c0x0000 (---------------)  + I volda\n\t0x002fd204, // n0x18bd c0x0000 (---------------)  + I voss\n\t0x002fd20b, // n0x18be c0x0000 (---------------)  + I vossevangen\n\t0x0030d90c, // n0x18bf c0x0000 (---------------)  + I xn--andy-ira\n\t0x0030e14c, // n0x18c0 c0x0000 (---------------)  + I xn--asky-ira\n\t0x0030e455, // n0x18c1 c0x0000 (---------------)  + I xn--aurskog-hland-jnb\n\t0x003104cd, // n0x18c2 c0x0000 (---------------)  + I xn--avery-yua\n\t0x003128cf, // n0x18c3 c0x0000 (---------------)  + I xn--bdddj-mrabd\n\t0x00312c92, // n0x18c4 c0x0000 (---------------)  + I xn--bearalvhki-y4a\n\t0x0031310f, // n0x18c5 c0x0000 (---------------)  + I xn--berlevg-jxa\n\t0x003134d2, // n0x18c6 c0x0000 (---------------)  + I xn--bhcavuotna-s4a\n\t0x00313953, // n0x18c7 c0x0000 (---------------)  + I xn--bhccavuotna-k7a\n\t0x00313e0d, // n0x18c8 c0x0000 (---------------)  + I xn--bidr-5nac\n\t0x003143cd, // n0x18c9 c0x0000 (---------------)  + I xn--bievt-0qa\n\t0x0031474e, // n0x18ca c0x0000 (---------------)  + I xn--bjarky-fya\n\t0x00314c0e, // n0x18cb c0x0000 (---------------)  + I xn--bjddar-pta\n\t0x0031534c, // n0x18cc c0x0000 (---------------)  + I xn--blt-elab\n\t0x003156cc, // n0x18cd c0x0000 (---------------)  + I xn--bmlo-gra\n\t0x00315b0b, // n0x18ce c0x0000 (---------------)  + I xn--bod-2na\n\t0x00315e8e, // n0x18cf c0x0000 (---------------)  + I xn--brnny-wuac\n\t0x003178d2, // n0x18d0 c0x0000 (---------------)  + I xn--brnnysund-m8ac\n\t0x0031818c, // n0x18d1 c0x0000 (---------------)  + I xn--brum-voa\n\t0x003188d0, // n0x18d2 c0x0000 (---------------)  + I xn--btsfjord-9za\n\t0x00329d52, // n0x18d3 c0x0000 (---------------)  + I xn--davvenjrga-y4a\n\t0x0032aacc, // n0x18d4 c0x0000 (---------------)  + I xn--dnna-gra\n\t0x0032b18d, // n0x18d5 c0x0000 (---------------)  + I xn--drbak-wua\n\t0x0032b4cc, // n0x18d6 c0x0000 (---------------)  + I xn--dyry-ira\n\t0x0032d351, // n0x18d7 c0x0000 (---------------)  + I xn--eveni-0qa01ga\n\t0x0032e1cd, // n0x18d8 c0x0000 (---------------)  + I xn--finny-yua\n\t0x0033318d, // n0x18d9 c0x0000 (---------------)  + I xn--fjord-lra\n\t0x0033378a, // n0x18da c0x0000 (---------------)  + I xn--fl-zia\n\t0x00333a0c, // n0x18db c0x0000 (---------------)  + I xn--flor-jra\n\t0x0033430c, // n0x18dc c0x0000 (---------------)  + I xn--frde-gra\n\t0x00334a0c, // n0x18dd c0x0000 (---------------)  + I xn--frna-woa\n\t0x0033528c, // n0x18de c0x0000 (---------------)  + I xn--frya-hra\n\t0x00338bd3, // n0x18df c0x0000 (---------------)  + I xn--ggaviika-8ya47h\n\t0x003391d0, // n0x18e0 c0x0000 (---------------)  + I xn--gildeskl-g0a\n\t0x003395d0, // n0x18e1 c0x0000 (---------------)  + I xn--givuotna-8ya\n\t0x0033a24d, // n0x18e2 c0x0000 (---------------)  + I xn--gjvik-wua\n\t0x0033a84c, // n0x18e3 c0x0000 (---------------)  + I xn--gls-elac\n\t0x0033b449, // n0x18e4 c0x0000 (---------------)  + I xn--h-2fa\n\t0x0033da4d, // n0x18e5 c0x0000 (---------------)  + I xn--hbmer-xqa\n\t0x0033dd93, // n0x18e6 c0x0000 (---------------)  + I xn--hcesuolo-7ya35b\n\t0x0033e991, // n0x18e7 c0x0000 (---------------)  + I xn--hgebostad-g3a\n\t0x0033edd3, // n0x18e8 c0x0000 (---------------)  + I xn--hmmrfeasta-s4ac\n\t0x0033f58f, // n0x18e9 c0x0000 (---------------)  + I xn--hnefoss-q1a\n\t0x0033f94c, // n0x18ea c0x0000 (---------------)  + I xn--hobl-ira\n\t0x0033fc4f, // n0x18eb c0x0000 (---------------)  + I xn--holtlen-hxa\n\t0x0034000d, // n0x18ec c0x0000 (---------------)  + I xn--hpmir-xqa\n\t0x0034060f, // n0x18ed c0x0000 (---------------)  + I xn--hyanger-q1a\n\t0x003409d0, // n0x18ee c0x0000 (---------------)  + I xn--hylandet-54a\n\t0x0034144e, // n0x18ef c0x0000 (---------------)  + I xn--indery-fya\n\t0x00346c4e, // n0x18f0 c0x0000 (---------------)  + I xn--jlster-bya\n\t0x00347390, // n0x18f1 c0x0000 (---------------)  + I xn--jrpeland-54a\n\t0x0034860d, // n0x18f2 c0x0000 (---------------)  + I xn--karmy-yua\n\t0x00348f8e, // n0x18f3 c0x0000 (---------------)  + I xn--kfjord-iua\n\t0x0034930c, // n0x18f4 c0x0000 (---------------)  + I xn--klbu-woa\n\t0x0034a2d3, // n0x18f5 c0x0000 (---------------)  + I xn--koluokta-7ya57h\n\t0x0034c68e, // n0x18f6 c0x0000 (---------------)  + I xn--krager-gya\n\t0x0034da10, // n0x18f7 c0x0000 (---------------)  + I xn--kranghke-b0a\n\t0x0034de11, // n0x18f8 c0x0000 (---------------)  + I xn--krdsherad-m8a\n\t0x0034e24f, // n0x18f9 c0x0000 (---------------)  + I xn--krehamn-dxa\n\t0x0034e613, // n0x18fa c0x0000 (---------------)  + I xn--krjohka-hwab49j\n\t0x0034f00d, // n0x18fb c0x0000 (---------------)  + I xn--ksnes-uua\n\t0x0034f34f, // n0x18fc c0x0000 (---------------)  + I xn--kvfjord-nxa\n\t0x0034f70e, // n0x18fd c0x0000 (---------------)  + I xn--kvitsy-fya\n\t0x0034fe50, // n0x18fe c0x0000 (---------------)  + I xn--kvnangen-k0a\n\t0x00350249, // n0x18ff c0x0000 (---------------)  + I xn--l-1fa\n\t0x00353090, // n0x1900 c0x0000 (---------------)  + I xn--laheadju-7ya\n\t0x003536cf, // n0x1901 c0x0000 (---------------)  + I xn--langevg-jxa\n\t0x00353d4f, // n0x1902 c0x0000 (---------------)  + I xn--ldingen-q1a\n\t0x00354112, // n0x1903 c0x0000 (---------------)  + I xn--leagaviika-52b\n\t0x00357c8e, // n0x1904 c0x0000 (---------------)  + I xn--lesund-hua\n\t0x0035858d, // n0x1905 c0x0000 (---------------)  + I xn--lgrd-poac\n\t0x0035930d, // n0x1906 c0x0000 (---------------)  + I xn--lhppi-xqa\n\t0x0035964d, // n0x1907 c0x0000 (---------------)  + I xn--linds-pra\n\t0x0035aa0d, // n0x1908 c0x0000 (---------------)  + I xn--loabt-0qa\n\t0x0035ad4d, // n0x1909 c0x0000 (---------------)  + I xn--lrdal-sra\n\t0x0035b090, // n0x190a c0x0000 (---------------)  + I xn--lrenskog-54a\n\t0x0035b48b, // n0x190b c0x0000 (---------------)  + I xn--lt-liac\n\t0x0035ba4c, // n0x190c c0x0000 (---------------)  + I xn--lten-gra\n\t0x0035bdcc, // n0x190d c0x0000 (---------------)  + I xn--lury-ira\n\t0x0035c0cc, // n0x190e c0x0000 (---------------)  + I xn--mely-ira\n\t0x0035c3ce, // n0x190f c0x0000 (---------------)  + I xn--merker-kua\n\t0x00366c50, // n0x1910 c0x0000 (---------------)  + I xn--mjndalen-64a\n\t0x00368512, // n0x1911 c0x0000 (---------------)  + I xn--mlatvuopmi-s4a\n\t0x0036898b, // n0x1912 c0x0000 (---------------)  + I xn--mli-tla\n\t0x0036940e, // n0x1913 c0x0000 (---------------)  + I xn--mlselv-iua\n\t0x0036978e, // n0x1914 c0x0000 (---------------)  + I xn--moreke-jua\n\t0x0036a48e, // n0x1915 c0x0000 (---------------)  + I xn--mosjen-eya\n\t0x0036c0cb, // n0x1916 c0x0000 (---------------)  + I xn--mot-tla\n\t0x43f6c696, // n0x1917 c0x010f (n0x198c-n0x198e)  o I xn--mre-og-romsdal-qqb\n\t0x0036d0cd, // n0x1918 c0x0000 (---------------)  + I xn--msy-ula0h\n\t0x0036e814, // n0x1919 c0x0000 (---------------)  + I xn--mtta-vrjjat-k7af\n\t0x0036f70d, // n0x191a c0x0000 (---------------)  + I xn--muost-0qa\n\t0x00371c95, // n0x191b c0x0000 (---------------)  + I xn--nmesjevuemie-tcba\n\t0x0037308d, // n0x191c c0x0000 (---------------)  + I xn--nry-yla5g\n\t0x00373a0f, // n0x191d c0x0000 (---------------)  + I xn--nttery-byae\n\t0x0037428f, // n0x191e c0x0000 (---------------)  + I xn--nvuotna-hwa\n\t0x0037750f, // n0x191f c0x0000 (---------------)  + I xn--oppegrd-ixa\n\t0x003778ce, // n0x1920 c0x0000 (---------------)  + I xn--ostery-fya\n\t0x0037900d, // n0x1921 c0x0000 (---------------)  + I xn--osyro-wua\n\t0x0037a891, // n0x1922 c0x0000 (---------------)  + I xn--porsgu-sta26f\n\t0x0037eecc, // n0x1923 c0x0000 (---------------)  + I xn--rady-ira\n\t0x0037f1cc, // n0x1924 c0x0000 (---------------)  + I xn--rdal-poa\n\t0x0037f4cb, // n0x1925 c0x0000 (---------------)  + I xn--rde-ula\n\t0x0037fa8c, // n0x1926 c0x0000 (---------------)  + I xn--rdy-0nab\n\t0x0037fe4f, // n0x1927 c0x0000 (---------------)  + I xn--rennesy-v1a\n\t0x00380212, // n0x1928 c0x0000 (---------------)  + I xn--rhkkervju-01af\n\t0x00380bcd, // n0x1929 c0x0000 (---------------)  + I xn--rholt-mra\n\t0x00381b8c, // n0x192a c0x0000 (---------------)  + I xn--risa-5na\n\t0x0038200c, // n0x192b c0x0000 (---------------)  + I xn--risr-ira\n\t0x0038230d, // n0x192c c0x0000 (---------------)  + I xn--rland-uua\n\t0x0038264f, // n0x192d c0x0000 (---------------)  + I xn--rlingen-mxa\n\t0x00382a0e, // n0x192e c0x0000 (---------------)  + I xn--rmskog-bya\n\t0x00384c0c, // n0x192f c0x0000 (---------------)  + I xn--rros-gra\n\t0x003851cd, // n0x1930 c0x0000 (---------------)  + I xn--rskog-uua\n\t0x0038550b, // n0x1931 c0x0000 (---------------)  + I xn--rst-0na\n\t0x00385acc, // n0x1932 c0x0000 (---------------)  + I xn--rsta-fra\n\t0x0038604d, // n0x1933 c0x0000 (---------------)  + I xn--ryken-vua\n\t0x0038638e, // n0x1934 c0x0000 (---------------)  + I xn--ryrvik-bya\n\t0x00386809, // n0x1935 c0x0000 (---------------)  + I xn--s-1fa\n\t0x00387513, // n0x1936 c0x0000 (---------------)  + I xn--sandnessjen-ogb\n\t0x00387f8d, // n0x1937 c0x0000 (---------------)  + I xn--sandy-yua\n\t0x003882cd, // n0x1938 c0x0000 (---------------)  + I xn--seral-lra\n\t0x003888cc, // n0x1939 c0x0000 (---------------)  + I xn--sgne-gra\n\t0x00388d4e, // n0x193a c0x0000 (---------------)  + I xn--skierv-uta\n\t0x00389bcf, // n0x193b c0x0000 (---------------)  + I xn--skjervy-v1a\n\t0x00389f8c, // n0x193c c0x0000 (---------------)  + I xn--skjk-soa\n\t0x0038a28d, // n0x193d c0x0000 (---------------)  + I xn--sknit-yqa\n\t0x0038a5cf, // n0x193e c0x0000 (---------------)  + I xn--sknland-fxa\n\t0x0038a98c, // n0x193f c0x0000 (---------------)  + I xn--slat-5na\n\t0x0038b08c, // n0x1940 c0x0000 (---------------)  + I xn--slt-elab\n\t0x0038b44c, // n0x1941 c0x0000 (---------------)  + I xn--smla-hra\n\t0x0038b74c, // n0x1942 c0x0000 (---------------)  + I xn--smna-gra\n\t0x0038be0d, // n0x1943 c0x0000 (---------------)  + I xn--snase-nra\n\t0x0038c152, // n0x1944 c0x0000 (---------------)  + I xn--sndre-land-0cb\n\t0x0038c7cc, // n0x1945 c0x0000 (---------------)  + I xn--snes-poa\n\t0x0038cacc, // n0x1946 c0x0000 (---------------)  + I xn--snsa-roa\n\t0x0038cdd1, // n0x1947 c0x0000 (---------------)  + I xn--sr-aurdal-l8a\n\t0x0038d20f, // n0x1948 c0x0000 (---------------)  + I xn--sr-fron-q1a\n\t0x0038d5cf, // n0x1949 c0x0000 (---------------)  + I xn--sr-odal-q1a\n\t0x0038d993, // n0x194a c0x0000 (---------------)  + I xn--sr-varanger-ggb\n\t0x0038ee4e, // n0x194b c0x0000 (---------------)  + I xn--srfold-bya\n\t0x0038f3cf, // n0x194c c0x0000 (---------------)  + I xn--srreisa-q1a\n\t0x0038f78c, // n0x194d c0x0000 (---------------)  + I xn--srum-gra\n\t0x4438face, // n0x194e c0x0110 (n0x198e-n0x198f)  o I xn--stfold-9xa\n\t0x0038fe4f, // n0x194f c0x0000 (---------------)  + I xn--stjrdal-s1a\n\t0x00390216, // n0x1950 c0x0000 (---------------)  + I xn--stjrdalshalsen-sqb\n\t0x00390d12, // n0x1951 c0x0000 (---------------)  + I xn--stre-toten-zcb\n\t0x0039230c, // n0x1952 c0x0000 (---------------)  + I xn--tjme-hra\n\t0x00392acf, // n0x1953 c0x0000 (---------------)  + I xn--tnsberg-q1a\n\t0x0039314d, // n0x1954 c0x0000 (---------------)  + I xn--trany-yua\n\t0x0039348f, // n0x1955 c0x0000 (---------------)  + I xn--trgstad-r1a\n\t0x0039384c, // n0x1956 c0x0000 (---------------)  + I xn--trna-woa\n\t0x00393b4d, // n0x1957 c0x0000 (---------------)  + I xn--troms-zua\n\t0x00393e8d, // n0x1958 c0x0000 (---------------)  + I xn--tysvr-vra\n\t0x0039570e, // n0x1959 c0x0000 (---------------)  + I xn--unjrga-rta\n\t0x00396a8c, // n0x195a c0x0000 (---------------)  + I xn--vads-jra\n\t0x00396d8c, // n0x195b c0x0000 (---------------)  + I xn--vard-jra\n\t0x00397090, // n0x195c c0x0000 (---------------)  + I xn--vegrshei-c0a\n\t0x003991d1, // n0x195d c0x0000 (---------------)  + I xn--vestvgy-ixa6o\n\t0x0039960b, // n0x195e c0x0000 (---------------)  + I xn--vg-yiab\n\t0x0039994c, // n0x195f c0x0000 (---------------)  + I xn--vgan-qoa\n\t0x00399c4e, // n0x1960 c0x0000 (---------------)  + I xn--vgsy-qoa0j\n\t0x0039af51, // n0x1961 c0x0000 (---------------)  + I xn--vre-eiker-k8a\n\t0x0039b38e, // n0x1962 c0x0000 (---------------)  + I xn--vrggt-xqad\n\t0x0039b70d, // n0x1963 c0x0000 (---------------)  + I xn--vry-yla5g\n\t0x003a278b, // n0x1964 c0x0000 (---------------)  + I xn--yer-zna\n\t0x003a308f, // n0x1965 c0x0000 (---------------)  + I xn--ygarden-p1a\n\t0x003a4814, // n0x1966 c0x0000 (---------------)  + I xn--ystre-slidre-ujb\n\t0x0023a242, // n0x1967 c0x0000 (---------------)  + I gs\n\t0x0023a242, // n0x1968 c0x0000 (---------------)  + I gs\n\t0x00202c03, // n0x1969 c0x0000 (---------------)  + I nes\n\t0x0023a242, // n0x196a c0x0000 (---------------)  + I gs\n\t0x00202c03, // n0x196b c0x0000 (---------------)  + I nes\n\t0x0023a242, // n0x196c c0x0000 (---------------)  + I gs\n\t0x0020a802, // n0x196d c0x0000 (---------------)  + I os\n\t0x003635c5, // n0x196e c0x0000 (---------------)  + I valer\n\t0x0039ac4c, // n0x196f c0x0000 (---------------)  + I xn--vler-qoa\n\t0x0023a242, // n0x1970 c0x0000 (---------------)  + I gs\n\t0x0023a242, // n0x1971 c0x0000 (---------------)  + I gs\n\t0x0020a802, // n0x1972 c0x0000 (---------------)  + I os\n\t0x0023a242, // n0x1973 c0x0000 (---------------)  + I gs\n\t0x002921c5, // n0x1974 c0x0000 (---------------)  + I heroy\n\t0x003301c5, // n0x1975 c0x0000 (---------------)  + I sande\n\t0x0023a242, // n0x1976 c0x0000 (---------------)  + I gs\n\t0x0023a242, // n0x1977 c0x0000 (---------------)  + I gs\n\t0x0020e402, // n0x1978 c0x0000 (---------------)  + I bo\n\t0x002921c5, // n0x1979 c0x0000 (---------------)  + I heroy\n\t0x00310a09, // n0x197a c0x0000 (---------------)  + I xn--b-5ga\n\t0x0033e68c, // n0x197b c0x0000 (---------------)  + I xn--hery-ira\n\t0x0023a242, // n0x197c c0x0000 (---------------)  + I gs\n\t0x0023a242, // n0x197d c0x0000 (---------------)  + I gs\n\t0x0023a242, // n0x197e c0x0000 (---------------)  + I gs\n\t0x0023a242, // n0x197f c0x0000 (---------------)  + I gs\n\t0x003635c5, // n0x1980 c0x0000 (---------------)  + I valer\n\t0x0023a242, // n0x1981 c0x0000 (---------------)  + I gs\n\t0x0023a242, // n0x1982 c0x0000 (---------------)  + I gs\n\t0x0023a242, // n0x1983 c0x0000 (---------------)  + I gs\n\t0x0023a242, // n0x1984 c0x0000 (---------------)  + I gs\n\t0x0020e402, // n0x1985 c0x0000 (---------------)  + I bo\n\t0x00310a09, // n0x1986 c0x0000 (---------------)  + I xn--b-5ga\n\t0x0023a242, // n0x1987 c0x0000 (---------------)  + I gs\n\t0x0023a242, // n0x1988 c0x0000 (---------------)  + I gs\n\t0x0023a242, // n0x1989 c0x0000 (---------------)  + I gs\n\t0x003301c5, // n0x198a c0x0000 (---------------)  + I sande\n\t0x0023a242, // n0x198b c0x0000 (---------------)  + I gs\n\t0x003301c5, // n0x198c c0x0000 (---------------)  + I sande\n\t0x0033e68c, // n0x198d c0x0000 (---------------)  + I xn--hery-ira\n\t0x0039ac4c, // n0x198e c0x0000 (---------------)  + I xn--vler-qoa\n\t0x00330b83, // n0x198f c0x0000 (---------------)  + I biz\n\t0x00233503, // n0x1990 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1991 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1992 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x1993 c0x0000 (---------------)  + I info\n\t0x0021fe03, // n0x1994 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1995 c0x0000 (---------------)  + I org\n\t0x000ecf48, // n0x1996 c0x0000 (---------------)  +   merseine\n\t0x000a9304, // n0x1997 c0x0000 (---------------)  +   mine\n\t0x000feb48, // n0x1998 c0x0000 (---------------)  +   shacknet\n\t0x00201542, // n0x1999 c0x0000 (---------------)  + I ac\n\t0x45200742, // n0x199a c0x0114 (n0x19a9-n0x19aa)  + I co\n\t0x00245b43, // n0x199b c0x0000 (---------------)  + I cri\n\t0x0024eac4, // n0x199c c0x0000 (---------------)  + I geek\n\t0x00205843, // n0x199d c0x0000 (---------------)  + I gen\n\t0x00341e04, // n0x199e c0x0000 (---------------)  + I govt\n\t0x0036b386, // n0x199f c0x0000 (---------------)  + I health\n\t0x0020cec3, // n0x19a0 c0x0000 (---------------)  + I iwi\n\t0x002eed84, // n0x19a1 c0x0000 (---------------)  + I kiwi\n\t0x002703c5, // n0x19a2 c0x0000 (---------------)  + I maori\n\t0x00209003, // n0x19a3 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x19a4 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x19a5 c0x0000 (---------------)  + I org\n\t0x0028440a, // n0x19a6 c0x0000 (---------------)  + I parliament\n\t0x0023d0c6, // n0x19a7 c0x0000 (---------------)  + I school\n\t0x00369b0c, // n0x19a8 c0x0000 (---------------)  + I xn--mori-qsa\n\t0x000ffa08, // n0x19a9 c0x0000 (---------------)  +   blogspot\n\t0x00200742, // n0x19aa c0x0000 (---------------)  + I co\n\t0x00233503, // n0x19ab c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x19ac c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x19ad c0x0000 (---------------)  + I gov\n\t0x00213ac3, // n0x19ae c0x0000 (---------------)  + I med\n\t0x002d0106, // n0x19af c0x0000 (---------------)  + I museum\n\t0x0021fe03, // n0x19b0 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x19b1 c0x0000 (---------------)  + I org\n\t0x00220e43, // n0x19b2 c0x0000 (---------------)  + I pro\n\t0x000035c2, // n0x19b3 c0x0000 (---------------)  +   ae\n\t0x000fb147, // n0x19b4 c0x0000 (---------------)  +   blogdns\n\t0x000d3588, // n0x19b5 c0x0000 (---------------)  +   blogsite\n\t0x0000e74e, // n0x19b6 c0x0000 (---------------)  +   bmoattachments\n\t0x000878d2, // n0x19b7 c0x0000 (---------------)  +   boldlygoingnowhere\n\t0x45e3e2c5, // n0x19b8 c0x0117 (n0x19f0-n0x19f2)  o I cdn77\n\t0x4631c4cc, // n0x19b9 c0x0118 (n0x19f2-n0x19f3)  o I cdn77-secure\n\t0x0014c048, // n0x19ba c0x0000 (---------------)  +   dnsalias\n\t0x0007c9c7, // n0x19bb c0x0000 (---------------)  +   dnsdojo\n\t0x00014e0b, // n0x19bc c0x0000 (---------------)  +   doesntexist\n\t0x0016a009, // n0x19bd c0x0000 (---------------)  +   dontexist\n\t0x0014bf47, // n0x19be c0x0000 (---------------)  +   doomdns\n\t0x0008cdc7, // n0x19bf c0x0000 (---------------)  +   dsmynas\n\t0x0007c8c7, // n0x19c0 c0x0000 (---------------)  +   duckdns\n\t0x00011046, // n0x19c1 c0x0000 (---------------)  +   dvrdns\n\t0x00197b48, // n0x19c2 c0x0000 (---------------)  +   dynalias\n\t0x46813886, // n0x19c3 c0x011a (n0x19f4-n0x19f6)  +   dyndns\n\t0x000a950d, // n0x19c4 c0x0000 (---------------)  +   endofinternet\n\t0x0005ea10, // n0x19c5 c0x0000 (---------------)  +   endoftheinternet\n\t0x46c04b82, // n0x19c6 c0x011b (n0x19f6-n0x1a2d)  +   eu\n\t0x00008f88, // n0x19c7 c0x0000 (---------------)  +   familyds\n\t0x0006ac47, // n0x19c8 c0x0000 (---------------)  +   from-me\n\t0x00097cc9, // n0x19c9 c0x0000 (---------------)  +   game-host\n\t0x00057d06, // n0x19ca c0x0000 (---------------)  +   gotdns\n\t0x0000a882, // n0x19cb c0x0000 (---------------)  +   hk\n\t0x0014cfca, // n0x19cc c0x0000 (---------------)  +   hobby-site\n\t0x00013a47, // n0x19cd c0x0000 (---------------)  +   homedns\n\t0x00146347, // n0x19ce c0x0000 (---------------)  +   homeftp\n\t0x000a59c9, // n0x19cf c0x0000 (---------------)  +   homelinux\n\t0x000a6fc8, // n0x19d0 c0x0000 (---------------)  +   homeunix\n\t0x000e0c0e, // n0x19d1 c0x0000 (---------------)  +   is-a-bruinsfan\n\t0x0000c54e, // n0x19d2 c0x0000 (---------------)  +   is-a-candidate\n\t0x00011a0f, // n0x19d3 c0x0000 (---------------)  +   is-a-celticsfan\n\t0x00012789, // n0x19d4 c0x0000 (---------------)  +   is-a-chef\n\t0x0004e989, // n0x19d5 c0x0000 (---------------)  +   is-a-geek\n\t0x000704cb, // n0x19d6 c0x0000 (---------------)  +   is-a-knight\n\t0x0007fa4f, // n0x19d7 c0x0000 (---------------)  +   is-a-linux-user\n\t0x0008a50c, // n0x19d8 c0x0000 (---------------)  +   is-a-patsfan\n\t0x000ab58b, // n0x19d9 c0x0000 (---------------)  +   is-a-soxfan\n\t0x000b9e88, // n0x19da c0x0000 (---------------)  +   is-found\n\t0x000d9587, // n0x19db c0x0000 (---------------)  +   is-lost\n\t0x000fe008, // n0x19dc c0x0000 (---------------)  +   is-saved\n\t0x000f218b, // n0x19dd c0x0000 (---------------)  +   is-very-bad\n\t0x000f8d0c, // n0x19de c0x0000 (---------------)  +   is-very-evil\n\t0x0011b8cc, // n0x19df c0x0000 (---------------)  +   is-very-good\n\t0x0013aecc, // n0x19e0 c0x0000 (---------------)  +   is-very-nice\n\t0x00142a4d, // n0x19e1 c0x0000 (---------------)  +   is-very-sweet\n\t0x0008e588, // n0x19e2 c0x0000 (---------------)  +   isa-geek\n\t0x00150c09, // n0x19e3 c0x0000 (---------------)  +   kicks-ass\n\t0x001a24cb, // n0x19e4 c0x0000 (---------------)  +   misconfused\n\t0x000dcd47, // n0x19e5 c0x0000 (---------------)  +   podzone\n\t0x000d340a, // n0x19e6 c0x0000 (---------------)  +   readmyblog\n\t0x0006ba86, // n0x19e7 c0x0000 (---------------)  +   selfip\n\t0x00099a8d, // n0x19e8 c0x0000 (---------------)  +   sellsyourhome\n\t0x000cb7c8, // n0x19e9 c0x0000 (---------------)  +   servebbs\n\t0x000895c8, // n0x19ea c0x0000 (---------------)  +   serveftp\n\t0x00173dc9, // n0x19eb c0x0000 (---------------)  +   servegame\n\t0x000e868c, // n0x19ec c0x0000 (---------------)  +   stuff-4-sale\n\t0x00002382, // n0x19ed c0x0000 (---------------)  +   us\n\t0x000eadc6, // n0x19ee c0x0000 (---------------)  +   webhop\n\t0x00005f82, // n0x19ef c0x0000 (---------------)  +   za\n\t0x00000301, // n0x19f0 c0x0000 (---------------)  +   c\n\t0x0003cdc3, // n0x19f1 c0x0000 (---------------)  +   rsc\n\t0x46783486, // n0x19f2 c0x0119 (n0x19f3-n0x19f4)  o I origin\n\t0x0003e443, // n0x19f3 c0x0000 (---------------)  +   ssl\n\t0x00002d42, // n0x19f4 c0x0000 (---------------)  +   go\n\t0x00013a44, // n0x19f5 c0x0000 (---------------)  +   home\n\t0x000001c2, // n0x19f6 c0x0000 (---------------)  +   al\n\t0x000d4884, // n0x19f7 c0x0000 (---------------)  +   asso\n\t0x00000102, // n0x19f8 c0x0000 (---------------)  +   at\n\t0x00004f82, // n0x19f9 c0x0000 (---------------)  +   au\n\t0x00003302, // n0x19fa c0x0000 (---------------)  +   be\n\t0x000ee482, // n0x19fb c0x0000 (---------------)  +   bg\n\t0x00000302, // n0x19fc c0x0000 (---------------)  +   ca\n\t0x0003e2c2, // n0x19fd c0x0000 (---------------)  +   cd\n\t0x00001582, // n0x19fe c0x0000 (---------------)  +   ch\n\t0x0001ba42, // n0x19ff c0x0000 (---------------)  +   cn\n\t0x0003e082, // n0x1a00 c0x0000 (---------------)  +   cy\n\t0x00029ec2, // n0x1a01 c0x0000 (---------------)  +   cz\n\t0x00004d82, // n0x1a02 c0x0000 (---------------)  +   de\n\t0x000494c2, // n0x1a03 c0x0000 (---------------)  +   dk\n\t0x0003a783, // n0x1a04 c0x0000 (---------------)  +   edu\n\t0x0000b342, // n0x1a05 c0x0000 (---------------)  +   ee\n\t0x00000482, // n0x1a06 c0x0000 (---------------)  +   es\n\t0x00007502, // n0x1a07 c0x0000 (---------------)  +   fi\n\t0x00000582, // n0x1a08 c0x0000 (---------------)  +   fr\n\t0x00000c82, // n0x1a09 c0x0000 (---------------)  +   gr\n\t0x0000e4c2, // n0x1a0a c0x0000 (---------------)  +   hr\n\t0x000195c2, // n0x1a0b c0x0000 (---------------)  +   hu\n\t0x00000042, // n0x1a0c c0x0000 (---------------)  +   ie\n\t0x00002902, // n0x1a0d c0x0000 (---------------)  +   il\n\t0x000013c2, // n0x1a0e c0x0000 (---------------)  +   in\n\t0x00001603, // n0x1a0f c0x0000 (---------------)  +   int\n\t0x000006c2, // n0x1a10 c0x0000 (---------------)  +   is\n\t0x00001e42, // n0x1a11 c0x0000 (---------------)  +   it\n\t0x000ae3c2, // n0x1a12 c0x0000 (---------------)  +   jp\n\t0x00006fc2, // n0x1a13 c0x0000 (---------------)  +   kr\n\t0x00009e02, // n0x1a14 c0x0000 (---------------)  +   lt\n\t0x00002f42, // n0x1a15 c0x0000 (---------------)  +   lu\n\t0x00005d02, // n0x1a16 c0x0000 (---------------)  +   lv\n\t0x0002ac02, // n0x1a17 c0x0000 (---------------)  +   mc\n\t0x00003e82, // n0x1a18 c0x0000 (---------------)  +   me\n\t0x00167142, // n0x1a19 c0x0000 (---------------)  +   mk\n\t0x00004c02, // n0x1a1a c0x0000 (---------------)  +   mt\n\t0x00026f02, // n0x1a1b c0x0000 (---------------)  +   my\n\t0x0001fe03, // n0x1a1c c0x0000 (---------------)  +   net\n\t0x00002802, // n0x1a1d c0x0000 (---------------)  +   ng\n\t0x00047802, // n0x1a1e c0x0000 (---------------)  +   nl\n\t0x00000c02, // n0x1a1f c0x0000 (---------------)  +   no\n\t0x000094c2, // n0x1a20 c0x0000 (---------------)  +   nz\n\t0x00077905, // n0x1a21 c0x0000 (---------------)  +   paris\n\t0x000063c2, // n0x1a22 c0x0000 (---------------)  +   pl\n\t0x0008c9c2, // n0x1a23 c0x0000 (---------------)  +   pt\n\t0x00043b83, // n0x1a24 c0x0000 (---------------)  +   q-a\n\t0x00002202, // n0x1a25 c0x0000 (---------------)  +   ro\n\t0x00011302, // n0x1a26 c0x0000 (---------------)  +   ru\n\t0x000046c2, // n0x1a27 c0x0000 (---------------)  +   se\n\t0x0000a402, // n0x1a28 c0x0000 (---------------)  +   si\n\t0x00007842, // n0x1a29 c0x0000 (---------------)  +   sk\n\t0x00003002, // n0x1a2a c0x0000 (---------------)  +   tr\n\t0x00000f82, // n0x1a2b c0x0000 (---------------)  +   uk\n\t0x00002382, // n0x1a2c c0x0000 (---------------)  +   us\n\t0x00210f43, // n0x1a2d c0x0000 (---------------)  + I abo\n\t0x00201542, // n0x1a2e c0x0000 (---------------)  + I ac\n\t0x00233503, // n0x1a2f c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1a30 c0x0000 (---------------)  + I edu\n\t0x00213183, // n0x1a31 c0x0000 (---------------)  + I gob\n\t0x0020e2c3, // n0x1a32 c0x0000 (---------------)  + I ing\n\t0x00213ac3, // n0x1a33 c0x0000 (---------------)  + I med\n\t0x0021fe03, // n0x1a34 c0x0000 (---------------)  + I net\n\t0x00201483, // n0x1a35 c0x0000 (---------------)  + I nom\n\t0x0022d1c3, // n0x1a36 c0x0000 (---------------)  + I org\n\t0x00292103, // n0x1a37 c0x0000 (---------------)  + I sld\n\t0x000ffa08, // n0x1a38 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x1a39 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1a3a c0x0000 (---------------)  + I edu\n\t0x00213183, // n0x1a3b c0x0000 (---------------)  + I gob\n\t0x00209003, // n0x1a3c c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1a3d c0x0000 (---------------)  + I net\n\t0x00201483, // n0x1a3e c0x0000 (---------------)  + I nom\n\t0x0022d1c3, // n0x1a3f c0x0000 (---------------)  + I org\n\t0x00233503, // n0x1a40 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1a41 c0x0000 (---------------)  + I edu\n\t0x0022d1c3, // n0x1a42 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x1a43 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1a44 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1a45 c0x0000 (---------------)  + I gov\n\t0x00200041, // n0x1a46 c0x0000 (---------------)  + I i\n\t0x00209003, // n0x1a47 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1a48 c0x0000 (---------------)  + I net\n\t0x00202d03, // n0x1a49 c0x0000 (---------------)  + I ngo\n\t0x0022d1c3, // n0x1a4a c0x0000 (---------------)  + I org\n\t0x00330b83, // n0x1a4b c0x0000 (---------------)  + I biz\n\t0x00233503, // n0x1a4c c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1a4d c0x0000 (---------------)  + I edu\n\t0x00208f83, // n0x1a4e c0x0000 (---------------)  + I fam\n\t0x00213183, // n0x1a4f c0x0000 (---------------)  + I gob\n\t0x00337283, // n0x1a50 c0x0000 (---------------)  + I gok\n\t0x00282e03, // n0x1a51 c0x0000 (---------------)  + I gon\n\t0x002a36c3, // n0x1a52 c0x0000 (---------------)  + I gop\n\t0x00276203, // n0x1a53 c0x0000 (---------------)  + I gos\n\t0x0026cc83, // n0x1a54 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x1a55 c0x0000 (---------------)  + I info\n\t0x0021fe03, // n0x1a56 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1a57 c0x0000 (---------------)  + I org\n\t0x00221a03, // n0x1a58 c0x0000 (---------------)  + I web\n\t0x002ebac4, // n0x1a59 c0x0000 (---------------)  + I agro\n\t0x00253543, // n0x1a5a c0x0000 (---------------)  + I aid\n\t0x000011c3, // n0x1a5b c0x0000 (---------------)  +   art\n\t0x00200103, // n0x1a5c c0x0000 (---------------)  + I atm\n\t0x0024a188, // n0x1a5d c0x0000 (---------------)  + I augustow\n\t0x00265104, // n0x1a5e c0x0000 (---------------)  + I auto\n\t0x0022404a, // n0x1a5f c0x0000 (---------------)  + I babia-gora\n\t0x00207a06, // n0x1a60 c0x0000 (---------------)  + I bedzin\n\t0x00397a07, // n0x1a61 c0x0000 (---------------)  + I beskidy\n\t0x0021e20a, // n0x1a62 c0x0000 (---------------)  + I bialowieza\n\t0x00275d09, // n0x1a63 c0x0000 (---------------)  + I bialystok\n\t0x0039dd47, // n0x1a64 c0x0000 (---------------)  + I bielawa\n\t0x003a604a, // n0x1a65 c0x0000 (---------------)  + I bieszczady\n\t0x00330b83, // n0x1a66 c0x0000 (---------------)  + I biz\n\t0x003782cb, // n0x1a67 c0x0000 (---------------)  + I boleslawiec\n\t0x002ce249, // n0x1a68 c0x0000 (---------------)  + I bydgoszcz\n\t0x00269605, // n0x1a69 c0x0000 (---------------)  + I bytom\n\t0x002cc107, // n0x1a6a c0x0000 (---------------)  + I cieszyn\n\t0x00000742, // n0x1a6b c0x0000 (---------------)  +   co\n\t0x00233503, // n0x1a6c c0x0000 (---------------)  + I com\n\t0x00229ec7, // n0x1a6d c0x0000 (---------------)  + I czeladz\n\t0x003522c5, // n0x1a6e c0x0000 (---------------)  + I czest\n\t0x002bb989, // n0x1a6f c0x0000 (---------------)  + I dlugoleka\n\t0x0023a783, // n0x1a70 c0x0000 (---------------)  + I edu\n\t0x00222c06, // n0x1a71 c0x0000 (---------------)  + I elblag\n\t0x002baac3, // n0x1a72 c0x0000 (---------------)  + I elk\n\t0x000cba03, // n0x1a73 c0x0000 (---------------)  +   gda\n\t0x000fc286, // n0x1a74 c0x0000 (---------------)  +   gdansk\n\t0x000ee0c6, // n0x1a75 c0x0000 (---------------)  +   gdynia\n\t0x0000ce47, // n0x1a76 c0x0000 (---------------)  +   gliwice\n\t0x00210886, // n0x1a77 c0x0000 (---------------)  + I glogow\n\t0x00216405, // n0x1a78 c0x0000 (---------------)  + I gmina\n\t0x00328747, // n0x1a79 c0x0000 (---------------)  + I gniezno\n\t0x003350c7, // n0x1a7a c0x0000 (---------------)  + I gorlice\n\t0x48a6cc83, // n0x1a7b c0x0122 (n0x1afe-n0x1b2d)  + I gov\n\t0x0032ad07, // n0x1a7c c0x0000 (---------------)  + I grajewo\n\t0x0035e383, // n0x1a7d c0x0000 (---------------)  + I gsm\n\t0x003205c5, // n0x1a7e c0x0000 (---------------)  + I ilawa\n\t0x003a1244, // n0x1a7f c0x0000 (---------------)  + I info\n\t0x0036f508, // n0x1a80 c0x0000 (---------------)  + I jaworzno\n\t0x002ad88c, // n0x1a81 c0x0000 (---------------)  + I jelenia-gora\n\t0x002ac505, // n0x1a82 c0x0000 (---------------)  + I jgora\n\t0x00345486, // n0x1a83 c0x0000 (---------------)  + I kalisz\n\t0x00229d87, // n0x1a84 c0x0000 (---------------)  + I karpacz\n\t0x0038e2c7, // n0x1a85 c0x0000 (---------------)  + I kartuzy\n\t0x0020f847, // n0x1a86 c0x0000 (---------------)  + I kaszuby\n\t0x00217ac8, // n0x1a87 c0x0000 (---------------)  + I katowice\n\t0x002acd4f, // n0x1a88 c0x0000 (---------------)  + I kazimierz-dolny\n\t0x00249345, // n0x1a89 c0x0000 (---------------)  + I kepno\n\t0x00245c47, // n0x1a8a c0x0000 (---------------)  + I ketrzyn\n\t0x0039c507, // n0x1a8b c0x0000 (---------------)  + I klodzko\n\t0x002a4d8a, // n0x1a8c c0x0000 (---------------)  + I kobierzyce\n\t0x0028c749, // n0x1a8d c0x0000 (---------------)  + I kolobrzeg\n\t0x002c8d85, // n0x1a8e c0x0000 (---------------)  + I konin\n\t0x002c970a, // n0x1a8f c0x0000 (---------------)  + I konskowola\n\t0x000eac86, // n0x1a90 c0x0000 (---------------)  +   krakow\n\t0x002bab45, // n0x1a91 c0x0000 (---------------)  + I kutno\n\t0x00368bc4, // n0x1a92 c0x0000 (---------------)  + I lapy\n\t0x00271a06, // n0x1a93 c0x0000 (---------------)  + I lebork\n\t0x0037c607, // n0x1a94 c0x0000 (---------------)  + I legnica\n\t0x00251647, // n0x1a95 c0x0000 (---------------)  + I lezajsk\n\t0x002551c8, // n0x1a96 c0x0000 (---------------)  + I limanowa\n\t0x00214305, // n0x1a97 c0x0000 (---------------)  + I lomza\n\t0x003521c6, // n0x1a98 c0x0000 (---------------)  + I lowicz\n\t0x00398d05, // n0x1a99 c0x0000 (---------------)  + I lubin\n\t0x003a42c5, // n0x1a9a c0x0000 (---------------)  + I lukow\n\t0x0021b5c4, // n0x1a9b c0x0000 (---------------)  + I mail\n\t0x002f2587, // n0x1a9c c0x0000 (---------------)  + I malbork\n\t0x0030764a, // n0x1a9d c0x0000 (---------------)  + I malopolska\n\t0x0020b848, // n0x1a9e c0x0000 (---------------)  + I mazowsze\n\t0x002ee9c6, // n0x1a9f c0x0000 (---------------)  + I mazury\n\t0x00013ac3, // n0x1aa0 c0x0000 (---------------)  +   med\n\t0x003025c5, // n0x1aa1 c0x0000 (---------------)  + I media\n\t0x00232006, // n0x1aa2 c0x0000 (---------------)  + I miasta\n\t0x003a5006, // n0x1aa3 c0x0000 (---------------)  + I mielec\n\t0x00332046, // n0x1aa4 c0x0000 (---------------)  + I mielno\n\t0x00209003, // n0x1aa5 c0x0000 (---------------)  + I mil\n\t0x00380e47, // n0x1aa6 c0x0000 (---------------)  + I mragowo\n\t0x0039c485, // n0x1aa7 c0x0000 (---------------)  + I naklo\n\t0x0021fe03, // n0x1aa8 c0x0000 (---------------)  + I net\n\t0x0039dfcd, // n0x1aa9 c0x0000 (---------------)  + I nieruchomosci\n\t0x00201483, // n0x1aaa c0x0000 (---------------)  + I nom\n\t0x002552c8, // n0x1aab c0x0000 (---------------)  + I nowaruda\n\t0x002158c4, // n0x1aac c0x0000 (---------------)  + I nysa\n\t0x00276d05, // n0x1aad c0x0000 (---------------)  + I olawa\n\t0x002a4c86, // n0x1aae c0x0000 (---------------)  + I olecko\n\t0x0023d406, // n0x1aaf c0x0000 (---------------)  + I olkusz\n\t0x00219a47, // n0x1ab0 c0x0000 (---------------)  + I olsztyn\n\t0x0023d707, // n0x1ab1 c0x0000 (---------------)  + I opoczno\n\t0x00251585, // n0x1ab2 c0x0000 (---------------)  + I opole\n\t0x0022d1c3, // n0x1ab3 c0x0000 (---------------)  + I org\n\t0x00384947, // n0x1ab4 c0x0000 (---------------)  + I ostroda\n\t0x002c7689, // n0x1ab5 c0x0000 (---------------)  + I ostroleka\n\t0x0020ad49, // n0x1ab6 c0x0000 (---------------)  + I ostrowiec\n\t0x0020d58a, // n0x1ab7 c0x0000 (---------------)  + I ostrowwlkp\n\t0x00248182, // n0x1ab8 c0x0000 (---------------)  + I pc\n\t0x00320584, // n0x1ab9 c0x0000 (---------------)  + I pila\n\t0x002d7404, // n0x1aba c0x0000 (---------------)  + I pisz\n\t0x00219e47, // n0x1abb c0x0000 (---------------)  + I podhale\n\t0x00243388, // n0x1abc c0x0000 (---------------)  + I podlasie\n\t0x002de7c9, // n0x1abd c0x0000 (---------------)  + I polkowice\n\t0x00209609, // n0x1abe c0x0000 (---------------)  + I pomorskie\n\t0x002df1c7, // n0x1abf c0x0000 (---------------)  + I pomorze\n\t0x00248e46, // n0x1ac0 c0x0000 (---------------)  + I powiat\n\t0x000e0986, // n0x1ac1 c0x0000 (---------------)  +   poznan\n\t0x002e1c44, // n0x1ac2 c0x0000 (---------------)  + I priv\n\t0x002e1dca, // n0x1ac3 c0x0000 (---------------)  + I prochowice\n\t0x002e4548, // n0x1ac4 c0x0000 (---------------)  + I pruszkow\n\t0x002e51c9, // n0x1ac5 c0x0000 (---------------)  + I przeworsk\n\t0x00296686, // n0x1ac6 c0x0000 (---------------)  + I pulawy\n\t0x00339e45, // n0x1ac7 c0x0000 (---------------)  + I radom\n\t0x0020b708, // n0x1ac8 c0x0000 (---------------)  + I rawa-maz\n\t0x002c238a, // n0x1ac9 c0x0000 (---------------)  + I realestate\n\t0x00285b43, // n0x1aca c0x0000 (---------------)  + I rel\n\t0x0033cf06, // n0x1acb c0x0000 (---------------)  + I rybnik\n\t0x002df2c7, // n0x1acc c0x0000 (---------------)  + I rzeszow\n\t0x0020f745, // n0x1acd c0x0000 (---------------)  + I sanok\n\t0x002224c5, // n0x1ace c0x0000 (---------------)  + I sejny\n\t0x00247603, // n0x1acf c0x0000 (---------------)  + I sex\n\t0x00352004, // n0x1ad0 c0x0000 (---------------)  + I shop\n\t0x00374ec5, // n0x1ad1 c0x0000 (---------------)  + I sklep\n\t0x00284fc7, // n0x1ad2 c0x0000 (---------------)  + I skoczow\n\t0x002e2b05, // n0x1ad3 c0x0000 (---------------)  + I slask\n\t0x002d51c6, // n0x1ad4 c0x0000 (---------------)  + I slupsk\n\t0x000f3985, // n0x1ad5 c0x0000 (---------------)  +   sopot\n\t0x0021f483, // n0x1ad6 c0x0000 (---------------)  + I sos\n\t0x002b5889, // n0x1ad7 c0x0000 (---------------)  + I sosnowiec\n\t0x00276acc, // n0x1ad8 c0x0000 (---------------)  + I stalowa-wola\n\t0x002a11cc, // n0x1ad9 c0x0000 (---------------)  + I starachowice\n\t0x002c92c8, // n0x1ada c0x0000 (---------------)  + I stargard\n\t0x0027b447, // n0x1adb c0x0000 (---------------)  + I suwalki\n\t0x002f0a08, // n0x1adc c0x0000 (---------------)  + I swidnica\n\t0x002f100a, // n0x1add c0x0000 (---------------)  + I swiebodzin\n\t0x002f198b, // n0x1ade c0x0000 (---------------)  + I swinoujscie\n\t0x002ce388, // n0x1adf c0x0000 (---------------)  + I szczecin\n\t0x00345588, // n0x1ae0 c0x0000 (---------------)  + I szczytno\n\t0x00293346, // n0x1ae1 c0x0000 (---------------)  + I szkola\n\t0x00357a85, // n0x1ae2 c0x0000 (---------------)  + I targi\n\t0x00249c0a, // n0x1ae3 c0x0000 (---------------)  + I tarnobrzeg\n\t0x00220b05, // n0x1ae4 c0x0000 (---------------)  + I tgory\n\t0x00200142, // n0x1ae5 c0x0000 (---------------)  + I tm\n\t0x002c0507, // n0x1ae6 c0x0000 (---------------)  + I tourism\n\t0x0029bec6, // n0x1ae7 c0x0000 (---------------)  + I travel\n\t0x00352bc5, // n0x1ae8 c0x0000 (---------------)  + I turek\n\t0x0037da09, // n0x1ae9 c0x0000 (---------------)  + I turystyka\n\t0x0031fd85, // n0x1aea c0x0000 (---------------)  + I tychy\n\t0x00291985, // n0x1aeb c0x0000 (---------------)  + I ustka\n\t0x00320189, // n0x1aec c0x0000 (---------------)  + I walbrzych\n\t0x00231e86, // n0x1aed c0x0000 (---------------)  + I warmia\n\t0x0023ee48, // n0x1aee c0x0000 (---------------)  + I warszawa\n\t0x0025a843, // n0x1aef c0x0000 (---------------)  + I waw\n\t0x0020fcc6, // n0x1af0 c0x0000 (---------------)  + I wegrow\n\t0x00275246, // n0x1af1 c0x0000 (---------------)  + I wielun\n\t0x002fff45, // n0x1af2 c0x0000 (---------------)  + I wlocl\n\t0x002fff49, // n0x1af3 c0x0000 (---------------)  + I wloclawek\n\t0x002b0d09, // n0x1af4 c0x0000 (---------------)  + I wodzislaw\n\t0x0024e547, // n0x1af5 c0x0000 (---------------)  + I wolomin\n\t0x000ffdc4, // n0x1af6 c0x0000 (---------------)  +   wroc\n\t0x002ffdc7, // n0x1af7 c0x0000 (---------------)  + I wroclaw\n\t0x00209509, // n0x1af8 c0x0000 (---------------)  + I zachpomor\n\t0x0021e405, // n0x1af9 c0x0000 (---------------)  + I zagan\n\t0x00138408, // n0x1afa c0x0000 (---------------)  +   zakopane\n\t0x0032f305, // n0x1afb c0x0000 (---------------)  + I zarow\n\t0x0021fec5, // n0x1afc c0x0000 (---------------)  + I zgora\n\t0x0022df89, // n0x1afd c0x0000 (---------------)  + I zgorzelec\n\t0x00200d02, // n0x1afe c0x0000 (---------------)  + I ap\n\t0x00351ac4, // n0x1aff c0x0000 (---------------)  + I griw\n\t0x00206902, // n0x1b00 c0x0000 (---------------)  + I ic\n\t0x002006c2, // n0x1b01 c0x0000 (---------------)  + I is\n\t0x002717c5, // n0x1b02 c0x0000 (---------------)  + I kmpsp\n\t0x002cc908, // n0x1b03 c0x0000 (---------------)  + I konsulat\n\t0x00371a05, // n0x1b04 c0x0000 (---------------)  + I kppsp\n\t0x002bd183, // n0x1b05 c0x0000 (---------------)  + I kwp\n\t0x002bd185, // n0x1b06 c0x0000 (---------------)  + I kwpsp\n\t0x002cc4c3, // n0x1b07 c0x0000 (---------------)  + I mup\n\t0x0020fc82, // n0x1b08 c0x0000 (---------------)  + I mw\n\t0x00268444, // n0x1b09 c0x0000 (---------------)  + I oirm\n\t0x002e6d03, // n0x1b0a c0x0000 (---------------)  + I oum\n\t0x0020ac42, // n0x1b0b c0x0000 (---------------)  + I pa\n\t0x002dd7c4, // n0x1b0c c0x0000 (---------------)  + I pinb\n\t0x002d8443, // n0x1b0d c0x0000 (---------------)  + I piw\n\t0x00200942, // n0x1b0e c0x0000 (---------------)  + I po\n\t0x00209343, // n0x1b0f c0x0000 (---------------)  + I psp\n\t0x0028be44, // n0x1b10 c0x0000 (---------------)  + I psse\n\t0x002b4bc3, // n0x1b11 c0x0000 (---------------)  + I pup\n\t0x00242684, // n0x1b12 c0x0000 (---------------)  + I rzgw\n\t0x002004c2, // n0x1b13 c0x0000 (---------------)  + I sa\n\t0x00271443, // n0x1b14 c0x0000 (---------------)  + I sdn\n\t0x00216343, // n0x1b15 c0x0000 (---------------)  + I sko\n\t0x00205682, // n0x1b16 c0x0000 (---------------)  + I so\n\t0x0033b802, // n0x1b17 c0x0000 (---------------)  + I sr\n\t0x002b0b49, // n0x1b18 c0x0000 (---------------)  + I starostwo\n\t0x00201cc2, // n0x1b19 c0x0000 (---------------)  + I ug\n\t0x00288444, // n0x1b1a c0x0000 (---------------)  + I ugim\n\t0x00204bc2, // n0x1b1b c0x0000 (---------------)  + I um\n\t0x0020b584, // n0x1b1c c0x0000 (---------------)  + I umig\n\t0x00248e04, // n0x1b1d c0x0000 (---------------)  + I upow\n\t0x002e3944, // n0x1b1e c0x0000 (---------------)  + I uppo\n\t0x00202382, // n0x1b1f c0x0000 (---------------)  + I us\n\t0x00243e82, // n0x1b20 c0x0000 (---------------)  + I uw\n\t0x00211343, // n0x1b21 c0x0000 (---------------)  + I uzs\n\t0x002f1603, // n0x1b22 c0x0000 (---------------)  + I wif\n\t0x00245244, // n0x1b23 c0x0000 (---------------)  + I wiih\n\t0x0025d1c4, // n0x1b24 c0x0000 (---------------)  + I winb\n\t0x002c7604, // n0x1b25 c0x0000 (---------------)  + I wios\n\t0x002c9604, // n0x1b26 c0x0000 (---------------)  + I witd\n\t0x002ff443, // n0x1b27 c0x0000 (---------------)  + I wiw\n\t0x002f65c3, // n0x1b28 c0x0000 (---------------)  + I wsa\n\t0x002eac04, // n0x1b29 c0x0000 (---------------)  + I wskr\n\t0x003009c4, // n0x1b2a c0x0000 (---------------)  + I wuoz\n\t0x00300cc6, // n0x1b2b c0x0000 (---------------)  + I wzmiuw\n\t0x00264682, // n0x1b2c c0x0000 (---------------)  + I zp\n\t0x00200742, // n0x1b2d c0x0000 (---------------)  + I co\n\t0x0023a783, // n0x1b2e c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1b2f c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x1b30 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1b31 c0x0000 (---------------)  + I org\n\t0x00201542, // n0x1b32 c0x0000 (---------------)  + I ac\n\t0x00330b83, // n0x1b33 c0x0000 (---------------)  + I biz\n\t0x00233503, // n0x1b34 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1b35 c0x0000 (---------------)  + I edu\n\t0x00202703, // n0x1b36 c0x0000 (---------------)  + I est\n\t0x0026cc83, // n0x1b37 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x1b38 c0x0000 (---------------)  + I info\n\t0x002b0e04, // n0x1b39 c0x0000 (---------------)  + I isla\n\t0x00205284, // n0x1b3a c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x1b3b c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1b3c c0x0000 (---------------)  + I org\n\t0x00220e43, // n0x1b3d c0x0000 (---------------)  + I pro\n\t0x002e2484, // n0x1b3e c0x0000 (---------------)  + I prof\n\t0x00355603, // n0x1b3f c0x0000 (---------------)  + I aaa\n\t0x002b3e43, // n0x1b40 c0x0000 (---------------)  + I aca\n\t0x0033f204, // n0x1b41 c0x0000 (---------------)  + I acct\n\t0x0032f106, // n0x1b42 c0x0000 (---------------)  + I avocat\n\t0x00202003, // n0x1b43 c0x0000 (---------------)  + I bar\n\t0x00216d43, // n0x1b44 c0x0000 (---------------)  + I cpa\n\t0x00213703, // n0x1b45 c0x0000 (---------------)  + I eng\n\t0x002af443, // n0x1b46 c0x0000 (---------------)  + I jur\n\t0x00274483, // n0x1b47 c0x0000 (---------------)  + I law\n\t0x00213ac3, // n0x1b48 c0x0000 (---------------)  + I med\n\t0x0022a5c5, // n0x1b49 c0x0000 (---------------)  + I recht\n\t0x00233503, // n0x1b4a c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1b4b c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1b4c c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x1b4d c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1b4e c0x0000 (---------------)  + I org\n\t0x002db8c3, // n0x1b4f c0x0000 (---------------)  + I plo\n\t0x00235d43, // n0x1b50 c0x0000 (---------------)  + I sec\n\t0x000ffa08, // n0x1b51 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x1b52 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1b53 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1b54 c0x0000 (---------------)  + I gov\n\t0x00201603, // n0x1b55 c0x0000 (---------------)  + I int\n\t0x0021fe03, // n0x1b56 c0x0000 (---------------)  + I net\n\t0x00242044, // n0x1b57 c0x0000 (---------------)  + I nome\n\t0x0022d1c3, // n0x1b58 c0x0000 (---------------)  + I org\n\t0x0029f744, // n0x1b59 c0x0000 (---------------)  + I publ\n\t0x002b7cc5, // n0x1b5a c0x0000 (---------------)  + I belau\n\t0x00200742, // n0x1b5b c0x0000 (---------------)  + I co\n\t0x00202602, // n0x1b5c c0x0000 (---------------)  + I ed\n\t0x00202d42, // n0x1b5d c0x0000 (---------------)  + I go\n\t0x00202c02, // n0x1b5e c0x0000 (---------------)  + I ne\n\t0x00200282, // n0x1b5f c0x0000 (---------------)  + I or\n\t0x00233503, // n0x1b60 c0x0000 (---------------)  + I com\n\t0x0023d684, // n0x1b61 c0x0000 (---------------)  + I coop\n\t0x0023a783, // n0x1b62 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1b63 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x1b64 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1b65 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1b66 c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x1b67 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x1b68 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1b69 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1b6a c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x1b6b c0x0000 (---------------)  + I mil\n\t0x00205284, // n0x1b6c c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x1b6d c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1b6e c0x0000 (---------------)  + I org\n\t0x00217443, // n0x1b6f c0x0000 (---------------)  + I sch\n\t0x002d4884, // n0x1b70 c0x0000 (---------------)  + I asso\n\t0x000ffa08, // n0x1b71 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x1b72 c0x0000 (---------------)  + I com\n\t0x00201483, // n0x1b73 c0x0000 (---------------)  + I nom\n\t0x0024bf84, // n0x1b74 c0x0000 (---------------)  + I arts\n\t0x000ffa08, // n0x1b75 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x1b76 c0x0000 (---------------)  + I com\n\t0x0024d9c4, // n0x1b77 c0x0000 (---------------)  + I firm\n\t0x003a1244, // n0x1b78 c0x0000 (---------------)  + I info\n\t0x00201483, // n0x1b79 c0x0000 (---------------)  + I nom\n\t0x002009c2, // n0x1b7a c0x0000 (---------------)  + I nt\n\t0x0022d1c3, // n0x1b7b c0x0000 (---------------)  + I org\n\t0x0022a5c3, // n0x1b7c c0x0000 (---------------)  + I rec\n\t0x00391185, // n0x1b7d c0x0000 (---------------)  + I store\n\t0x00200142, // n0x1b7e c0x0000 (---------------)  + I tm\n\t0x00300b03, // n0x1b7f c0x0000 (---------------)  + I www\n\t0x00201542, // n0x1b80 c0x0000 (---------------)  + I ac\n\t0x000ffa08, // n0x1b81 c0x0000 (---------------)  +   blogspot\n\t0x00200742, // n0x1b82 c0x0000 (---------------)  + I co\n\t0x0023a783, // n0x1b83 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1b84 c0x0000 (---------------)  + I gov\n\t0x002013c2, // n0x1b85 c0x0000 (---------------)  + I in\n\t0x0022d1c3, // n0x1b86 c0x0000 (---------------)  + I org\n\t0x00201542, // n0x1b87 c0x0000 (---------------)  + I ac\n\t0x003a6207, // n0x1b88 c0x0000 (---------------)  + I adygeya\n\t0x00289d85, // n0x1b89 c0x0000 (---------------)  + I altai\n\t0x002937c4, // n0x1b8a c0x0000 (---------------)  + I amur\n\t0x002e75c6, // n0x1b8b c0x0000 (---------------)  + I amursk\n\t0x0023668b, // n0x1b8c c0x0000 (---------------)  + I arkhangelsk\n\t0x0025a5c9, // n0x1b8d c0x0000 (---------------)  + I astrakhan\n\t0x003453c6, // n0x1b8e c0x0000 (---------------)  + I baikal\n\t0x003269c9, // n0x1b8f c0x0000 (---------------)  + I bashkiria\n\t0x002d2e48, // n0x1b90 c0x0000 (---------------)  + I belgorod\n\t0x002042c3, // n0x1b91 c0x0000 (---------------)  + I bir\n\t0x000ffa08, // n0x1b92 c0x0000 (---------------)  +   blogspot\n\t0x00227447, // n0x1b93 c0x0000 (---------------)  + I bryansk\n\t0x0034d388, // n0x1b94 c0x0000 (---------------)  + I buryatia\n\t0x002ee443, // n0x1b95 c0x0000 (---------------)  + I cbg\n\t0x002648c4, // n0x1b96 c0x0000 (---------------)  + I chel\n\t0x0026670b, // n0x1b97 c0x0000 (---------------)  + I chelyabinsk\n\t0x002ac6c5, // n0x1b98 c0x0000 (---------------)  + I chita\n\t0x002bc248, // n0x1b99 c0x0000 (---------------)  + I chukotka\n\t0x00335889, // n0x1b9a c0x0000 (---------------)  + I chuvashia\n\t0x0025d143, // n0x1b9b c0x0000 (---------------)  + I cmw\n\t0x00233503, // n0x1b9c c0x0000 (---------------)  + I com\n\t0x00202648, // n0x1b9d c0x0000 (---------------)  + I dagestan\n\t0x002ef847, // n0x1b9e c0x0000 (---------------)  + I dudinka\n\t0x002eccc6, // n0x1b9f c0x0000 (---------------)  + I e-burg\n\t0x0023a783, // n0x1ba0 c0x0000 (---------------)  + I edu\n\t0x003869c7, // n0x1ba1 c0x0000 (---------------)  + I fareast\n\t0x0026cc83, // n0x1ba2 c0x0000 (---------------)  + I gov\n\t0x00312746, // n0x1ba3 c0x0000 (---------------)  + I grozny\n\t0x00201603, // n0x1ba4 c0x0000 (---------------)  + I int\n\t0x00230d87, // n0x1ba5 c0x0000 (---------------)  + I irkutsk\n\t0x0027d407, // n0x1ba6 c0x0000 (---------------)  + I ivanovo\n\t0x003879c7, // n0x1ba7 c0x0000 (---------------)  + I izhevsk\n\t0x002f2505, // n0x1ba8 c0x0000 (---------------)  + I jamal\n\t0x00206543, // n0x1ba9 c0x0000 (---------------)  + I jar\n\t0x0020a7cb, // n0x1baa c0x0000 (---------------)  + I joshkar-ola\n\t0x00309908, // n0x1bab c0x0000 (---------------)  + I k-uralsk\n\t0x00226e48, // n0x1bac c0x0000 (---------------)  + I kalmykia\n\t0x002509c6, // n0x1bad c0x0000 (---------------)  + I kaluga\n\t0x0022ab89, // n0x1bae c0x0000 (---------------)  + I kamchatka\n\t0x00327ec7, // n0x1baf c0x0000 (---------------)  + I karelia\n\t0x002f9b85, // n0x1bb0 c0x0000 (---------------)  + I kazan\n\t0x00379b44, // n0x1bb1 c0x0000 (---------------)  + I kchr\n\t0x00275f48, // n0x1bb2 c0x0000 (---------------)  + I kemerovo\n\t0x0023f40a, // n0x1bb3 c0x0000 (---------------)  + I khabarovsk\n\t0x0023f649, // n0x1bb4 c0x0000 (---------------)  + I khakassia\n\t0x002517c3, // n0x1bb5 c0x0000 (---------------)  + I khv\n\t0x0027ea45, // n0x1bb6 c0x0000 (---------------)  + I kirov\n\t0x0033bcc3, // n0x1bb7 c0x0000 (---------------)  + I kms\n\t0x002ab0c6, // n0x1bb8 c0x0000 (---------------)  + I koenig\n\t0x0039a004, // n0x1bb9 c0x0000 (---------------)  + I komi\n\t0x002fc3c8, // n0x1bba c0x0000 (---------------)  + I kostroma\n\t0x00387b4b, // n0x1bbb c0x0000 (---------------)  + I krasnoyarsk\n\t0x0033bb85, // n0x1bbc c0x0000 (---------------)  + I kuban\n\t0x002b7a46, // n0x1bbd c0x0000 (---------------)  + I kurgan\n\t0x002b9785, // n0x1bbe c0x0000 (---------------)  + I kursk\n\t0x002b9cc8, // n0x1bbf c0x0000 (---------------)  + I kustanai\n\t0x002bac87, // n0x1bc0 c0x0000 (---------------)  + I kuzbass\n\t0x00207707, // n0x1bc1 c0x0000 (---------------)  + I lipetsk\n\t0x00223c47, // n0x1bc2 c0x0000 (---------------)  + I magadan\n\t0x0021e6c4, // n0x1bc3 c0x0000 (---------------)  + I mari\n\t0x0021e6c7, // n0x1bc4 c0x0000 (---------------)  + I mari-el\n\t0x0027bc46, // n0x1bc5 c0x0000 (---------------)  + I marine\n\t0x00209003, // n0x1bc6 c0x0000 (---------------)  + I mil\n\t0x002c55c8, // n0x1bc7 c0x0000 (---------------)  + I mordovia\n\t0x00253243, // n0x1bc8 c0x0000 (---------------)  + I msk\n\t0x002ccc88, // n0x1bc9 c0x0000 (---------------)  + I murmansk\n\t0x002d2485, // n0x1bca c0x0000 (---------------)  + I mytis\n\t0x0031a348, // n0x1bcb c0x0000 (---------------)  + I nakhodka\n\t0x0023a987, // n0x1bcc c0x0000 (---------------)  + I nalchik\n\t0x0021fe03, // n0x1bcd c0x0000 (---------------)  + I net\n\t0x00392a03, // n0x1bce c0x0000 (---------------)  + I nkz\n\t0x00289404, // n0x1bcf c0x0000 (---------------)  + I nnov\n\t0x00374d87, // n0x1bd0 c0x0000 (---------------)  + I norilsk\n\t0x002058c3, // n0x1bd1 c0x0000 (---------------)  + I nov\n\t0x0027d4cb, // n0x1bd2 c0x0000 (---------------)  + I novosibirsk\n\t0x00216303, // n0x1bd3 c0x0000 (---------------)  + I nsk\n\t0x00253204, // n0x1bd4 c0x0000 (---------------)  + I omsk\n\t0x00391208, // n0x1bd5 c0x0000 (---------------)  + I orenburg\n\t0x0022d1c3, // n0x1bd6 c0x0000 (---------------)  + I org\n\t0x002d6e85, // n0x1bd7 c0x0000 (---------------)  + I oryol\n\t0x00296c85, // n0x1bd8 c0x0000 (---------------)  + I oskol\n\t0x0039c386, // n0x1bd9 c0x0000 (---------------)  + I palana\n\t0x00212c85, // n0x1bda c0x0000 (---------------)  + I penza\n\t0x002d2844, // n0x1bdb c0x0000 (---------------)  + I perm\n\t0x00209302, // n0x1bdc c0x0000 (---------------)  + I pp\n\t0x002e5483, // n0x1bdd c0x0000 (---------------)  + I ptz\n\t0x00368c4a, // n0x1bde c0x0000 (---------------)  + I pyatigorsk\n\t0x003907c3, // n0x1bdf c0x0000 (---------------)  + I rnd\n\t0x002d1989, // n0x1be0 c0x0000 (---------------)  + I rubtsovsk\n\t0x00357446, // n0x1be1 c0x0000 (---------------)  + I ryazan\n\t0x0021ac48, // n0x1be2 c0x0000 (---------------)  + I sakhalin\n\t0x0028b986, // n0x1be3 c0x0000 (---------------)  + I samara\n\t0x002257c7, // n0x1be4 c0x0000 (---------------)  + I saratov\n\t0x002cc748, // n0x1be5 c0x0000 (---------------)  + I simbirsk\n\t0x002d6648, // n0x1be6 c0x0000 (---------------)  + I smolensk\n\t0x002e0f83, // n0x1be7 c0x0000 (---------------)  + I snz\n\t0x00271883, // n0x1be8 c0x0000 (---------------)  + I spb\n\t0x00225b89, // n0x1be9 c0x0000 (---------------)  + I stavropol\n\t0x002f4c43, // n0x1bea c0x0000 (---------------)  + I stv\n\t0x00341846, // n0x1beb c0x0000 (---------------)  + I surgut\n\t0x00289a06, // n0x1bec c0x0000 (---------------)  + I syzran\n\t0x00314f06, // n0x1bed c0x0000 (---------------)  + I tambov\n\t0x0036cc49, // n0x1bee c0x0000 (---------------)  + I tatarstan\n\t0x002ff844, // n0x1bef c0x0000 (---------------)  + I test\n\t0x0020bf43, // n0x1bf0 c0x0000 (---------------)  + I tom\n\t0x00309805, // n0x1bf1 c0x0000 (---------------)  + I tomsk\n\t0x0030b209, // n0x1bf2 c0x0000 (---------------)  + I tsaritsyn\n\t0x00207803, // n0x1bf3 c0x0000 (---------------)  + I tsk\n\t0x00359bc4, // n0x1bf4 c0x0000 (---------------)  + I tula\n\t0x002f3304, // n0x1bf5 c0x0000 (---------------)  + I tuva\n\t0x00360784, // n0x1bf6 c0x0000 (---------------)  + I tver\n\t0x0031ac06, // n0x1bf7 c0x0000 (---------------)  + I tyumen\n\t0x0020fa43, // n0x1bf8 c0x0000 (---------------)  + I udm\n\t0x0020fa48, // n0x1bf9 c0x0000 (---------------)  + I udmurtia\n\t0x0025a208, // n0x1bfa c0x0000 (---------------)  + I ulan-ude\n\t0x0035ca86, // n0x1bfb c0x0000 (---------------)  + I vdonsk\n\t0x002f998b, // n0x1bfc c0x0000 (---------------)  + I vladikavkaz\n\t0x002f9cc8, // n0x1bfd c0x0000 (---------------)  + I vladimir\n\t0x002f9ecb, // n0x1bfe c0x0000 (---------------)  + I vladivostok\n\t0x002fca09, // n0x1bff c0x0000 (---------------)  + I volgograd\n\t0x002fc187, // n0x1c00 c0x0000 (---------------)  + I vologda\n\t0x002fce88, // n0x1c01 c0x0000 (---------------)  + I voronezh\n\t0x002fee83, // n0x1c02 c0x0000 (---------------)  + I vrn\n\t0x0039fc06, // n0x1c03 c0x0000 (---------------)  + I vyatka\n\t0x0020f507, // n0x1c04 c0x0000 (---------------)  + I yakutia\n\t0x00298b45, // n0x1c05 c0x0000 (---------------)  + I yamal\n\t0x00346f49, // n0x1c06 c0x0000 (---------------)  + I yaroslavl\n\t0x0030fd4d, // n0x1c07 c0x0000 (---------------)  + I yekaterinburg\n\t0x0021aa91, // n0x1c08 c0x0000 (---------------)  + I yuzhno-sakhalinsk\n\t0x0023d545, // n0x1c09 c0x0000 (---------------)  + I zgrad\n\t0x00201542, // n0x1c0a c0x0000 (---------------)  + I ac\n\t0x00200742, // n0x1c0b c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1c0c c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1c0d c0x0000 (---------------)  + I edu\n\t0x0033d7c4, // n0x1c0e c0x0000 (---------------)  + I gouv\n\t0x0026cc83, // n0x1c0f c0x0000 (---------------)  + I gov\n\t0x00201603, // n0x1c10 c0x0000 (---------------)  + I int\n\t0x00209003, // n0x1c11 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1c12 c0x0000 (---------------)  + I net\n\t0x00233503, // n0x1c13 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1c14 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1c15 c0x0000 (---------------)  + I gov\n\t0x00213ac3, // n0x1c16 c0x0000 (---------------)  + I med\n\t0x0021fe03, // n0x1c17 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1c18 c0x0000 (---------------)  + I org\n\t0x00297403, // n0x1c19 c0x0000 (---------------)  + I pub\n\t0x00217443, // n0x1c1a c0x0000 (---------------)  + I sch\n\t0x00233503, // n0x1c1b c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1c1c c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1c1d c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x1c1e c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1c1f c0x0000 (---------------)  + I org\n\t0x00233503, // n0x1c20 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1c21 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1c22 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x1c23 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1c24 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x1c25 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1c26 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1c27 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x1c28 c0x0000 (---------------)  + I info\n\t0x00213ac3, // n0x1c29 c0x0000 (---------------)  + I med\n\t0x0021fe03, // n0x1c2a c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1c2b c0x0000 (---------------)  + I org\n\t0x00224e42, // n0x1c2c c0x0000 (---------------)  + I tv\n\t0x00200101, // n0x1c2d c0x0000 (---------------)  + I a\n\t0x00201542, // n0x1c2e c0x0000 (---------------)  + I ac\n\t0x00200001, // n0x1c2f c0x0000 (---------------)  + I b\n\t0x003129c2, // n0x1c30 c0x0000 (---------------)  + I bd\n\t0x000ffa08, // n0x1c31 c0x0000 (---------------)  +   blogspot\n\t0x0021ca45, // n0x1c32 c0x0000 (---------------)  + I brand\n\t0x00200301, // n0x1c33 c0x0000 (---------------)  + I c\n\t0x00033503, // n0x1c34 c0x0000 (---------------)  +   com\n\t0x00200381, // n0x1c35 c0x0000 (---------------)  + I d\n\t0x00200081, // n0x1c36 c0x0000 (---------------)  + I e\n\t0x00200581, // n0x1c37 c0x0000 (---------------)  + I f\n\t0x0023f342, // n0x1c38 c0x0000 (---------------)  + I fh\n\t0x0023f344, // n0x1c39 c0x0000 (---------------)  + I fhsk\n\t0x00363543, // n0x1c3a c0x0000 (---------------)  + I fhv\n\t0x00200c81, // n0x1c3b c0x0000 (---------------)  + I g\n\t0x00200d81, // n0x1c3c c0x0000 (---------------)  + I h\n\t0x00200041, // n0x1c3d c0x0000 (---------------)  + I i\n\t0x00200fc1, // n0x1c3e c0x0000 (---------------)  + I k\n\t0x002e9647, // n0x1c3f c0x0000 (---------------)  + I komforb\n\t0x002d69cf, // n0x1c40 c0x0000 (---------------)  + I kommunalforbund\n\t0x002da946, // n0x1c41 c0x0000 (---------------)  + I komvux\n\t0x00200201, // n0x1c42 c0x0000 (---------------)  + I l\n\t0x0026a306, // n0x1c43 c0x0000 (---------------)  + I lanbib\n\t0x00200181, // n0x1c44 c0x0000 (---------------)  + I m\n\t0x00200541, // n0x1c45 c0x0000 (---------------)  + I n\n\t0x00325ace, // n0x1c46 c0x0000 (---------------)  + I naturbruksgymn\n\t0x00200281, // n0x1c47 c0x0000 (---------------)  + I o\n\t0x0022d1c3, // n0x1c48 c0x0000 (---------------)  + I org\n\t0x00200941, // n0x1c49 c0x0000 (---------------)  + I p\n\t0x002a3745, // n0x1c4a c0x0000 (---------------)  + I parti\n\t0x00209302, // n0x1c4b c0x0000 (---------------)  + I pp\n\t0x00247505, // n0x1c4c c0x0000 (---------------)  + I press\n\t0x002002c1, // n0x1c4d c0x0000 (---------------)  + I r\n\t0x002004c1, // n0x1c4e c0x0000 (---------------)  + I s\n\t0x00200141, // n0x1c4f c0x0000 (---------------)  + I t\n\t0x00200142, // n0x1c50 c0x0000 (---------------)  + I tm\n\t0x00200441, // n0x1c51 c0x0000 (---------------)  + I u\n\t0x002010c1, // n0x1c52 c0x0000 (---------------)  + I w\n\t0x00205381, // n0x1c53 c0x0000 (---------------)  + I x\n\t0x00201841, // n0x1c54 c0x0000 (---------------)  + I y\n\t0x00205f81, // n0x1c55 c0x0000 (---------------)  + I z\n\t0x000ffa08, // n0x1c56 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x1c57 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1c58 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1c59 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x1c5a c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1c5b c0x0000 (---------------)  + I org\n\t0x00220f03, // n0x1c5c c0x0000 (---------------)  + I per\n\t0x00233503, // n0x1c5d c0x0000 (---------------)  + I com\n\t0x0026cc83, // n0x1c5e c0x0000 (---------------)  + I gov\n\t0x0008c288, // n0x1c5f c0x0000 (---------------)  +   hashbang\n\t0x00209003, // n0x1c60 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1c61 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1c62 c0x0000 (---------------)  + I org\n\t0x014da508, // n0x1c63 c0x0005 (---------------)* o   platform\n\t0x000ffa08, // n0x1c64 c0x0000 (---------------)  +   blogspot\n\t0x000ffa08, // n0x1c65 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x1c66 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1c67 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1c68 c0x0000 (---------------)  + I gov\n\t0x0021fe03, // n0x1c69 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1c6a c0x0000 (---------------)  + I org\n\t0x002011c3, // n0x1c6b c0x0000 (---------------)  + I art\n\t0x000ffa08, // n0x1c6c c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x1c6d c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1c6e c0x0000 (---------------)  + I edu\n\t0x0033d7c4, // n0x1c6f c0x0000 (---------------)  + I gouv\n\t0x0022d1c3, // n0x1c70 c0x0000 (---------------)  + I org\n\t0x00295005, // n0x1c71 c0x0000 (---------------)  + I perso\n\t0x00320a04, // n0x1c72 c0x0000 (---------------)  + I univ\n\t0x00233503, // n0x1c73 c0x0000 (---------------)  + I com\n\t0x0021fe03, // n0x1c74 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1c75 c0x0000 (---------------)  + I org\n\t0x00200742, // n0x1c76 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1c77 c0x0000 (---------------)  + I com\n\t0x00237249, // n0x1c78 c0x0000 (---------------)  + I consulado\n\t0x0023a783, // n0x1c79 c0x0000 (---------------)  + I edu\n\t0x00242d89, // n0x1c7a c0x0000 (---------------)  + I embaixada\n\t0x0026cc83, // n0x1c7b c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x1c7c c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1c7d c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1c7e c0x0000 (---------------)  + I org\n\t0x002e1a48, // n0x1c7f c0x0000 (---------------)  + I principe\n\t0x00215f87, // n0x1c80 c0x0000 (---------------)  + I saotome\n\t0x00391185, // n0x1c81 c0x0000 (---------------)  + I store\n\t0x003a6207, // n0x1c82 c0x0000 (---------------)  + I adygeya\n\t0x0023668b, // n0x1c83 c0x0000 (---------------)  + I arkhangelsk\n\t0x0020d908, // n0x1c84 c0x0000 (---------------)  + I balashov\n\t0x003269c9, // n0x1c85 c0x0000 (---------------)  + I bashkiria\n\t0x00227447, // n0x1c86 c0x0000 (---------------)  + I bryansk\n\t0x00202648, // n0x1c87 c0x0000 (---------------)  + I dagestan\n\t0x00312746, // n0x1c88 c0x0000 (---------------)  + I grozny\n\t0x0027d407, // n0x1c89 c0x0000 (---------------)  + I ivanovo\n\t0x00226e48, // n0x1c8a c0x0000 (---------------)  + I kalmykia\n\t0x002509c6, // n0x1c8b c0x0000 (---------------)  + I kaluga\n\t0x00327ec7, // n0x1c8c c0x0000 (---------------)  + I karelia\n\t0x0023f649, // n0x1c8d c0x0000 (---------------)  + I khakassia\n\t0x0037f849, // n0x1c8e c0x0000 (---------------)  + I krasnodar\n\t0x002b7a46, // n0x1c8f c0x0000 (---------------)  + I kurgan\n\t0x002b8945, // n0x1c90 c0x0000 (---------------)  + I lenug\n\t0x002c55c8, // n0x1c91 c0x0000 (---------------)  + I mordovia\n\t0x00253243, // n0x1c92 c0x0000 (---------------)  + I msk\n\t0x002ccc88, // n0x1c93 c0x0000 (---------------)  + I murmansk\n\t0x0023a987, // n0x1c94 c0x0000 (---------------)  + I nalchik\n\t0x002058c3, // n0x1c95 c0x0000 (---------------)  + I nov\n\t0x00229c07, // n0x1c96 c0x0000 (---------------)  + I obninsk\n\t0x00212c85, // n0x1c97 c0x0000 (---------------)  + I penza\n\t0x002dd148, // n0x1c98 c0x0000 (---------------)  + I pokrovsk\n\t0x00274805, // n0x1c99 c0x0000 (---------------)  + I sochi\n\t0x00271883, // n0x1c9a c0x0000 (---------------)  + I spb\n\t0x0033d1c9, // n0x1c9b c0x0000 (---------------)  + I togliatti\n\t0x002aa587, // n0x1c9c c0x0000 (---------------)  + I troitsk\n\t0x00359bc4, // n0x1c9d c0x0000 (---------------)  + I tula\n\t0x002f3304, // n0x1c9e c0x0000 (---------------)  + I tuva\n\t0x002f998b, // n0x1c9f c0x0000 (---------------)  + I vladikavkaz\n\t0x002f9cc8, // n0x1ca0 c0x0000 (---------------)  + I vladimir\n\t0x002fc187, // n0x1ca1 c0x0000 (---------------)  + I vologda\n\t0x00233503, // n0x1ca2 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1ca3 c0x0000 (---------------)  + I edu\n\t0x00213183, // n0x1ca4 c0x0000 (---------------)  + I gob\n\t0x0022d1c3, // n0x1ca5 c0x0000 (---------------)  + I org\n\t0x00244803, // n0x1ca6 c0x0000 (---------------)  + I red\n\t0x0026cc83, // n0x1ca7 c0x0000 (---------------)  + I gov\n\t0x00233503, // n0x1ca8 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1ca9 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1caa c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x1cab c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1cac c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1cad c0x0000 (---------------)  + I org\n\t0x00201542, // n0x1cae c0x0000 (---------------)  + I ac\n\t0x00200742, // n0x1caf c0x0000 (---------------)  + I co\n\t0x0022d1c3, // n0x1cb0 c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x1cb1 c0x0000 (---------------)  +   blogspot\n\t0x00201542, // n0x1cb2 c0x0000 (---------------)  + I ac\n\t0x00200742, // n0x1cb3 c0x0000 (---------------)  + I co\n\t0x00202d42, // n0x1cb4 c0x0000 (---------------)  + I go\n\t0x002013c2, // n0x1cb5 c0x0000 (---------------)  + I in\n\t0x00209002, // n0x1cb6 c0x0000 (---------------)  + I mi\n\t0x0021fe03, // n0x1cb7 c0x0000 (---------------)  + I net\n\t0x00200282, // n0x1cb8 c0x0000 (---------------)  + I or\n\t0x00201542, // n0x1cb9 c0x0000 (---------------)  + I ac\n\t0x00330b83, // n0x1cba c0x0000 (---------------)  + I biz\n\t0x00200742, // n0x1cbb c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1cbc c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1cbd c0x0000 (---------------)  + I edu\n\t0x00202d42, // n0x1cbe c0x0000 (---------------)  + I go\n\t0x0026cc83, // n0x1cbf c0x0000 (---------------)  + I gov\n\t0x00201603, // n0x1cc0 c0x0000 (---------------)  + I int\n\t0x00209003, // n0x1cc1 c0x0000 (---------------)  + I mil\n\t0x00205284, // n0x1cc2 c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x1cc3 c0x0000 (---------------)  + I net\n\t0x00218f83, // n0x1cc4 c0x0000 (---------------)  + I nic\n\t0x0022d1c3, // n0x1cc5 c0x0000 (---------------)  + I org\n\t0x002ff844, // n0x1cc6 c0x0000 (---------------)  + I test\n\t0x00221a03, // n0x1cc7 c0x0000 (---------------)  + I web\n\t0x0026cc83, // n0x1cc8 c0x0000 (---------------)  + I gov\n\t0x00200742, // n0x1cc9 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1cca c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1ccb c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1ccc c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x1ccd c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1cce c0x0000 (---------------)  + I net\n\t0x00201483, // n0x1ccf c0x0000 (---------------)  + I nom\n\t0x0022d1c3, // n0x1cd0 c0x0000 (---------------)  + I org\n\t0x003927c7, // n0x1cd1 c0x0000 (---------------)  + I agrinet\n\t0x00233503, // n0x1cd2 c0x0000 (---------------)  + I com\n\t0x00222387, // n0x1cd3 c0x0000 (---------------)  + I defense\n\t0x0025d886, // n0x1cd4 c0x0000 (---------------)  + I edunet\n\t0x00215243, // n0x1cd5 c0x0000 (---------------)  + I ens\n\t0x00207503, // n0x1cd6 c0x0000 (---------------)  + I fin\n\t0x0026cc83, // n0x1cd7 c0x0000 (---------------)  + I gov\n\t0x0021d883, // n0x1cd8 c0x0000 (---------------)  + I ind\n\t0x003a1244, // n0x1cd9 c0x0000 (---------------)  + I info\n\t0x0036d504, // n0x1cda c0x0000 (---------------)  + I intl\n\t0x002da6c6, // n0x1cdb c0x0000 (---------------)  + I mincom\n\t0x0022b143, // n0x1cdc c0x0000 (---------------)  + I nat\n\t0x0021fe03, // n0x1cdd c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1cde c0x0000 (---------------)  + I org\n\t0x00295005, // n0x1cdf c0x0000 (---------------)  + I perso\n\t0x0020d344, // n0x1ce0 c0x0000 (---------------)  + I rnrt\n\t0x00266ec3, // n0x1ce1 c0x0000 (---------------)  + I rns\n\t0x00351883, // n0x1ce2 c0x0000 (---------------)  + I rnu\n\t0x002c0507, // n0x1ce3 c0x0000 (---------------)  + I tourism\n\t0x00209e45, // n0x1ce4 c0x0000 (---------------)  + I turen\n\t0x00233503, // n0x1ce5 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1ce6 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1ce7 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x1ce8 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1ce9 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1cea c0x0000 (---------------)  + I org\n\t0x00203402, // n0x1ceb c0x0000 (---------------)  + I av\n\t0x002cb903, // n0x1cec c0x0000 (---------------)  + I bbs\n\t0x0028e2c3, // n0x1ced c0x0000 (---------------)  + I bel\n\t0x00330b83, // n0x1cee c0x0000 (---------------)  + I biz\n\t0x52a33503, // n0x1cef c0x014a (n0x1d00-n0x1d01)  + I com\n\t0x0022bf42, // n0x1cf0 c0x0000 (---------------)  + I dr\n\t0x0023a783, // n0x1cf1 c0x0000 (---------------)  + I edu\n\t0x00205843, // n0x1cf2 c0x0000 (---------------)  + I gen\n\t0x0026cc83, // n0x1cf3 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x1cf4 c0x0000 (---------------)  + I info\n\t0x00309ac3, // n0x1cf5 c0x0000 (---------------)  + I k12\n\t0x00249343, // n0x1cf6 c0x0000 (---------------)  + I kep\n\t0x00209003, // n0x1cf7 c0x0000 (---------------)  + I mil\n\t0x00205284, // n0x1cf8 c0x0000 (---------------)  + I name\n\t0x52e00642, // n0x1cf9 c0x014b (n0x1d01-n0x1d02)  + I nc\n\t0x0021fe03, // n0x1cfa c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1cfb c0x0000 (---------------)  + I org\n\t0x00208103, // n0x1cfc c0x0000 (---------------)  + I pol\n\t0x0022f7c3, // n0x1cfd c0x0000 (---------------)  + I tel\n\t0x00224e42, // n0x1cfe c0x0000 (---------------)  + I tv\n\t0x00221a03, // n0x1cff c0x0000 (---------------)  + I web\n\t0x000ffa08, // n0x1d00 c0x0000 (---------------)  +   blogspot\n\t0x0026cc83, // n0x1d01 c0x0000 (---------------)  + I gov\n\t0x002389c4, // n0x1d02 c0x0000 (---------------)  + I aero\n\t0x00330b83, // n0x1d03 c0x0000 (---------------)  + I biz\n\t0x00200742, // n0x1d04 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1d05 c0x0000 (---------------)  + I com\n\t0x0023d684, // n0x1d06 c0x0000 (---------------)  + I coop\n\t0x0023a783, // n0x1d07 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1d08 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x1d09 c0x0000 (---------------)  + I info\n\t0x00201603, // n0x1d0a c0x0000 (---------------)  + I int\n\t0x002ddc44, // n0x1d0b c0x0000 (---------------)  + I jobs\n\t0x00207104, // n0x1d0c c0x0000 (---------------)  + I mobi\n\t0x002d0106, // n0x1d0d c0x0000 (---------------)  + I museum\n\t0x00205284, // n0x1d0e c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x1d0f c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1d10 c0x0000 (---------------)  + I org\n\t0x00220e43, // n0x1d11 c0x0000 (---------------)  + I pro\n\t0x0029bec6, // n0x1d12 c0x0000 (---------------)  + I travel\n\t0x00055f8b, // n0x1d13 c0x0000 (---------------)  +   better-than\n\t0x00013886, // n0x1d14 c0x0000 (---------------)  +   dyndns\n\t0x0002184a, // n0x1d15 c0x0000 (---------------)  +   on-the-web\n\t0x000fef4a, // n0x1d16 c0x0000 (---------------)  +   worse-than\n\t0x000ffa08, // n0x1d17 c0x0000 (---------------)  +   blogspot\n\t0x00238ac4, // n0x1d18 c0x0000 (---------------)  + I club\n\t0x00233503, // n0x1d19 c0x0000 (---------------)  + I com\n\t0x00330b44, // n0x1d1a c0x0000 (---------------)  + I ebiz\n\t0x0023a783, // n0x1d1b c0x0000 (---------------)  + I edu\n\t0x00297cc4, // n0x1d1c c0x0000 (---------------)  + I game\n\t0x0026cc83, // n0x1d1d c0x0000 (---------------)  + I gov\n\t0x00317243, // n0x1d1e c0x0000 (---------------)  + I idv\n\t0x00209003, // n0x1d1f c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1d20 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1d21 c0x0000 (---------------)  + I org\n\t0x0032444b, // n0x1d22 c0x0000 (---------------)  + I xn--czrw28b\n\t0x003941ca, // n0x1d23 c0x0000 (---------------)  + I xn--uc0atv\n\t0x003a54cc, // n0x1d24 c0x0000 (---------------)  + I xn--zf0ao64a\n\t0x00201542, // n0x1d25 c0x0000 (---------------)  + I ac\n\t0x00200742, // n0x1d26 c0x0000 (---------------)  + I co\n\t0x00202d42, // n0x1d27 c0x0000 (---------------)  + I go\n\t0x00234dc5, // n0x1d28 c0x0000 (---------------)  + I hotel\n\t0x003a1244, // n0x1d29 c0x0000 (---------------)  + I info\n\t0x00203e82, // n0x1d2a c0x0000 (---------------)  + I me\n\t0x00209003, // n0x1d2b c0x0000 (---------------)  + I mil\n\t0x00207104, // n0x1d2c c0x0000 (---------------)  + I mobi\n\t0x00202c02, // n0x1d2d c0x0000 (---------------)  + I ne\n\t0x00200282, // n0x1d2e c0x0000 (---------------)  + I or\n\t0x00200702, // n0x1d2f c0x0000 (---------------)  + I sc\n\t0x00224e42, // n0x1d30 c0x0000 (---------------)  + I tv\n\t0x00130b83, // n0x1d31 c0x0000 (---------------)  +   biz\n\t0x002d5d89, // n0x1d32 c0x0000 (---------------)  + I cherkassy\n\t0x00289888, // n0x1d33 c0x0000 (---------------)  + I cherkasy\n\t0x0026cb09, // n0x1d34 c0x0000 (---------------)  + I chernigov\n\t0x0027d249, // n0x1d35 c0x0000 (---------------)  + I chernihiv\n\t0x0036e44a, // n0x1d36 c0x0000 (---------------)  + I chernivtsi\n\t0x00375aca, // n0x1d37 c0x0000 (---------------)  + I chernovtsy\n\t0x0020b482, // n0x1d38 c0x0000 (---------------)  + I ck\n\t0x0021ba42, // n0x1d39 c0x0000 (---------------)  + I cn\n\t0x00000742, // n0x1d3a c0x0000 (---------------)  +   co\n\t0x00233503, // n0x1d3b c0x0000 (---------------)  + I com\n\t0x002049c2, // n0x1d3c c0x0000 (---------------)  + I cr\n\t0x00245e06, // n0x1d3d c0x0000 (---------------)  + I crimea\n\t0x00353bc2, // n0x1d3e c0x0000 (---------------)  + I cv\n\t0x00211102, // n0x1d3f c0x0000 (---------------)  + I dn\n\t0x002276ce, // n0x1d40 c0x0000 (---------------)  + I dnepropetrovsk\n\t0x0027148e, // n0x1d41 c0x0000 (---------------)  + I dnipropetrovsk\n\t0x0027d0c7, // n0x1d42 c0x0000 (---------------)  + I dominic\n\t0x003219c7, // n0x1d43 c0x0000 (---------------)  + I donetsk\n\t0x0024dc82, // n0x1d44 c0x0000 (---------------)  + I dp\n\t0x0023a783, // n0x1d45 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1d46 c0x0000 (---------------)  + I gov\n\t0x00200f02, // n0x1d47 c0x0000 (---------------)  + I if\n\t0x002013c2, // n0x1d48 c0x0000 (---------------)  + I in\n\t0x0024048f, // n0x1d49 c0x0000 (---------------)  + I ivano-frankivsk\n\t0x0021acc2, // n0x1d4a c0x0000 (---------------)  + I kh\n\t0x0023fb87, // n0x1d4b c0x0000 (---------------)  + I kharkiv\n\t0x00240807, // n0x1d4c c0x0000 (---------------)  + I kharkov\n\t0x0024b387, // n0x1d4d c0x0000 (---------------)  + I kherson\n\t0x0024eb8c, // n0x1d4e c0x0000 (---------------)  + I khmelnitskiy\n\t0x00250bcc, // n0x1d4f c0x0000 (---------------)  + I khmelnytskyi\n\t0x00202ac4, // n0x1d50 c0x0000 (---------------)  + I kiev\n\t0x0027ea4a, // n0x1d51 c0x0000 (---------------)  + I kirovograd\n\t0x002316c2, // n0x1d52 c0x0000 (---------------)  + I km\n\t0x00206fc2, // n0x1d53 c0x0000 (---------------)  + I kr\n\t0x002b1504, // n0x1d54 c0x0000 (---------------)  + I krym\n\t0x00254e42, // n0x1d55 c0x0000 (---------------)  + I ks\n\t0x002bb402, // n0x1d56 c0x0000 (---------------)  + I kv\n\t0x00250e04, // n0x1d57 c0x0000 (---------------)  + I kyiv\n\t0x00219082, // n0x1d58 c0x0000 (---------------)  + I lg\n\t0x00209e02, // n0x1d59 c0x0000 (---------------)  + I lt\n\t0x00250a47, // n0x1d5a c0x0000 (---------------)  + I lugansk\n\t0x00238045, // n0x1d5b c0x0000 (---------------)  + I lutsk\n\t0x00205d02, // n0x1d5c c0x0000 (---------------)  + I lv\n\t0x00240404, // n0x1d5d c0x0000 (---------------)  + I lviv\n\t0x00367142, // n0x1d5e c0x0000 (---------------)  + I mk\n\t0x002f0388, // n0x1d5f c0x0000 (---------------)  + I mykolaiv\n\t0x0021fe03, // n0x1d60 c0x0000 (---------------)  + I net\n\t0x00203488, // n0x1d61 c0x0000 (---------------)  + I nikolaev\n\t0x00202d82, // n0x1d62 c0x0000 (---------------)  + I od\n\t0x0023bac5, // n0x1d63 c0x0000 (---------------)  + I odesa\n\t0x00372946, // n0x1d64 c0x0000 (---------------)  + I odessa\n\t0x0022d1c3, // n0x1d65 c0x0000 (---------------)  + I org\n\t0x002063c2, // n0x1d66 c0x0000 (---------------)  + I pl\n\t0x002dea07, // n0x1d67 c0x0000 (---------------)  + I poltava\n\t0x00009302, // n0x1d68 c0x0000 (---------------)  +   pp\n\t0x002e1c85, // n0x1d69 c0x0000 (---------------)  + I rivne\n\t0x0038af45, // n0x1d6a c0x0000 (---------------)  + I rovno\n\t0x00206882, // n0x1d6b c0x0000 (---------------)  + I rv\n\t0x0022d142, // n0x1d6c c0x0000 (---------------)  + I sb\n\t0x00207f4a, // n0x1d6d c0x0000 (---------------)  + I sebastopol\n\t0x0025140a, // n0x1d6e c0x0000 (---------------)  + I sevastopol\n\t0x0024cdc2, // n0x1d6f c0x0000 (---------------)  + I sm\n\t0x002f0304, // n0x1d70 c0x0000 (---------------)  + I sumy\n\t0x002012c2, // n0x1d71 c0x0000 (---------------)  + I te\n\t0x00320448, // n0x1d72 c0x0000 (---------------)  + I ternopil\n\t0x00211342, // n0x1d73 c0x0000 (---------------)  + I uz\n\t0x0029cfc8, // n0x1d74 c0x0000 (---------------)  + I uzhgorod\n\t0x002f6cc7, // n0x1d75 c0x0000 (---------------)  + I vinnica\n\t0x002f7889, // n0x1d76 c0x0000 (---------------)  + I vinnytsia\n\t0x00203442, // n0x1d77 c0x0000 (---------------)  + I vn\n\t0x002fcc45, // n0x1d78 c0x0000 (---------------)  + I volyn\n\t0x00289d45, // n0x1d79 c0x0000 (---------------)  + I yalta\n\t0x002c300b, // n0x1d7a c0x0000 (---------------)  + I zaporizhzhe\n\t0x002c3a4c, // n0x1d7b c0x0000 (---------------)  + I zaporizhzhia\n\t0x00230c08, // n0x1d7c c0x0000 (---------------)  + I zhitomir\n\t0x002fd008, // n0x1d7d c0x0000 (---------------)  + I zhytomyr\n\t0x00264682, // n0x1d7e c0x0000 (---------------)  + I zp\n\t0x00219b02, // n0x1d7f c0x0000 (---------------)  + I zt\n\t0x00201542, // n0x1d80 c0x0000 (---------------)  + I ac\n\t0x000ffa08, // n0x1d81 c0x0000 (---------------)  +   blogspot\n\t0x00200742, // n0x1d82 c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1d83 c0x0000 (---------------)  + I com\n\t0x00202d42, // n0x1d84 c0x0000 (---------------)  + I go\n\t0x00202c02, // n0x1d85 c0x0000 (---------------)  + I ne\n\t0x00200282, // n0x1d86 c0x0000 (---------------)  + I or\n\t0x0022d1c3, // n0x1d87 c0x0000 (---------------)  + I org\n\t0x00200702, // n0x1d88 c0x0000 (---------------)  + I sc\n\t0x00201542, // n0x1d89 c0x0000 (---------------)  + I ac\n\t0x54e00742, // n0x1d8a c0x0153 (n0x1d94-n0x1d95)  + I co\n\t0x5526cc83, // n0x1d8b c0x0154 (n0x1d95-n0x1d96)  + I gov\n\t0x00322cc3, // n0x1d8c c0x0000 (---------------)  + I ltd\n\t0x00203e82, // n0x1d8d c0x0000 (---------------)  + I me\n\t0x0021fe03, // n0x1d8e c0x0000 (---------------)  + I net\n\t0x0038eb83, // n0x1d8f c0x0000 (---------------)  + I nhs\n\t0x0022d1c3, // n0x1d90 c0x0000 (---------------)  + I org\n\t0x002db143, // n0x1d91 c0x0000 (---------------)  + I plc\n\t0x00225d06, // n0x1d92 c0x0000 (---------------)  + I police\n\t0x01617443, // n0x1d93 c0x0005 (---------------)* o I sch\n\t0x000ffa08, // n0x1d94 c0x0000 (---------------)  +   blogspot\n\t0x00006807, // n0x1d95 c0x0000 (---------------)  +   service\n\t0x55a01dc2, // n0x1d96 c0x0156 (n0x1dd5-n0x1dd8)  + I ak\n\t0x55e001c2, // n0x1d97 c0x0157 (n0x1dd8-n0x1ddb)  + I al\n\t0x56200a42, // n0x1d98 c0x0158 (n0x1ddb-n0x1dde)  + I ar\n\t0x56601d42, // n0x1d99 c0x0159 (n0x1dde-n0x1de1)  + I as\n\t0x56a05f42, // n0x1d9a c0x015a (n0x1de1-n0x1de4)  + I az\n\t0x56e00302, // n0x1d9b c0x015b (n0x1de4-n0x1de7)  + I ca\n\t0x57200742, // n0x1d9c c0x015c (n0x1de7-n0x1dea)  + I co\n\t0x57631382, // n0x1d9d c0x015d (n0x1dea-n0x1ded)  + I ct\n\t0x57a1fb42, // n0x1d9e c0x015e (n0x1ded-n0x1df0)  + I dc\n\t0x57e04d82, // n0x1d9f c0x015f (n0x1df0-n0x1df3)  + I de\n\t0x00271483, // n0x1da0 c0x0000 (---------------)  + I dni\n\t0x00211503, // n0x1da1 c0x0000 (---------------)  + I fed\n\t0x582175c2, // n0x1da2 c0x0160 (n0x1df3-n0x1df6)  + I fl\n\t0x58601042, // n0x1da3 c0x0161 (n0x1df6-n0x1df9)  + I ga\n\t0x58a0dd42, // n0x1da4 c0x0162 (n0x1df9-n0x1dfc)  + I gu\n\t0x58e00d82, // n0x1da5 c0x0163 (n0x1dfc-n0x1dfe)  + I hi\n\t0x59207682, // n0x1da6 c0x0164 (n0x1dfe-n0x1e01)  + I ia\n\t0x5960c782, // n0x1da7 c0x0165 (n0x1e01-n0x1e04)  + I id\n\t0x59a02902, // n0x1da8 c0x0166 (n0x1e04-n0x1e07)  + I il\n\t0x59e013c2, // n0x1da9 c0x0167 (n0x1e07-n0x1e0a)  + I in\n\t0x000b8d45, // n0x1daa c0x0000 (---------------)  +   is-by\n\t0x00223543, // n0x1dab c0x0000 (---------------)  + I isa\n\t0x0028cd44, // n0x1dac c0x0000 (---------------)  + I kids\n\t0x5a254e42, // n0x1dad c0x0168 (n0x1e0a-n0x1e0d)  + I ks\n\t0x5a636902, // n0x1dae c0x0169 (n0x1e0d-n0x1e10)  + I ky\n\t0x5aa00802, // n0x1daf c0x016a (n0x1e10-n0x1e13)  + I la\n\t0x0007958b, // n0x1db0 c0x0000 (---------------)  +   land-4-sale\n\t0x5ae00182, // n0x1db1 c0x016b (n0x1e13-n0x1e16)  + I ma\n\t0x5b64da82, // n0x1db2 c0x016d (n0x1e19-n0x1e1c)  + I md\n\t0x5ba03e82, // n0x1db3 c0x016e (n0x1e1c-n0x1e1f)  + I me\n\t0x5be09002, // n0x1db4 c0x016f (n0x1e1f-n0x1e22)  + I mi\n\t0x5c21fdc2, // n0x1db5 c0x0170 (n0x1e22-n0x1e25)  + I mn\n\t0x5c607102, // n0x1db6 c0x0171 (n0x1e25-n0x1e28)  + I mo\n\t0x5ca0f702, // n0x1db7 c0x0172 (n0x1e28-n0x1e2b)  + I ms\n\t0x5ce04c02, // n0x1db8 c0x0173 (n0x1e2b-n0x1e2e)  + I mt\n\t0x5d200642, // n0x1db9 c0x0174 (n0x1e2e-n0x1e31)  + I nc\n\t0x5d600882, // n0x1dba c0x0175 (n0x1e31-n0x1e33)  + I nd\n\t0x5da02c02, // n0x1dbb c0x0176 (n0x1e33-n0x1e36)  + I ne\n\t0x5de03382, // n0x1dbc c0x0177 (n0x1e36-n0x1e39)  + I nh\n\t0x5e204002, // n0x1dbd c0x0178 (n0x1e39-n0x1e3c)  + I nj\n\t0x5e63db02, // n0x1dbe c0x0179 (n0x1e3c-n0x1e3f)  + I nm\n\t0x002e0f43, // n0x1dbf c0x0000 (---------------)  + I nsn\n\t0x5ea03d42, // n0x1dc0 c0x017a (n0x1e3f-n0x1e42)  + I nv\n\t0x5ee15842, // n0x1dc1 c0x017b (n0x1e42-n0x1e45)  + I ny\n\t0x5f207382, // n0x1dc2 c0x017c (n0x1e45-n0x1e48)  + I oh\n\t0x5f601b82, // n0x1dc3 c0x017d (n0x1e48-n0x1e4b)  + I ok\n\t0x5fa00282, // n0x1dc4 c0x017e (n0x1e4b-n0x1e4e)  + I or\n\t0x5fe0ac42, // n0x1dc5 c0x017f (n0x1e4e-n0x1e51)  + I pa\n\t0x60204602, // n0x1dc6 c0x0180 (n0x1e51-n0x1e54)  + I pr\n\t0x60600a82, // n0x1dc7 c0x0181 (n0x1e54-n0x1e57)  + I ri\n\t0x60a00702, // n0x1dc8 c0x0182 (n0x1e57-n0x1e5a)  + I sc\n\t0x60e496c2, // n0x1dc9 c0x0183 (n0x1e5a-n0x1e5c)  + I sd\n\t0x000e868c, // n0x1dca c0x0000 (---------------)  +   stuff-4-sale\n\t0x6124f882, // n0x1dcb c0x0184 (n0x1e5c-n0x1e5f)  + I tn\n\t0x61673442, // n0x1dcc c0x0185 (n0x1e5f-n0x1e62)  + I tx\n\t0x61a03b02, // n0x1dcd c0x0186 (n0x1e62-n0x1e65)  + I ut\n\t0x61e000c2, // n0x1dce c0x0187 (n0x1e65-n0x1e68)  + I va\n\t0x62205d42, // n0x1dcf c0x0188 (n0x1e68-n0x1e6b)  + I vi\n\t0x62671f82, // n0x1dd0 c0x0189 (n0x1e6b-n0x1e6e)  + I vt\n\t0x62a010c2, // n0x1dd1 c0x018a (n0x1e6e-n0x1e71)  + I wa\n\t0x62e0ae82, // n0x1dd2 c0x018b (n0x1e71-n0x1e74)  + I wi\n\t0x632755c2, // n0x1dd3 c0x018c (n0x1e74-n0x1e75)  + I wv\n\t0x63674502, // n0x1dd4 c0x018d (n0x1e75-n0x1e78)  + I wy\n\t0x0022e182, // n0x1dd5 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1dd6 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1dd7 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1dd8 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1dd9 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1dda c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1ddb c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1ddc c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1ddd c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1dde c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1ddf c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1de0 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1de1 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1de2 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1de3 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1de4 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1de5 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1de6 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1de7 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1de8 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1de9 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1dea c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1deb c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1dec c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1ded c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1dee c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1def c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1df0 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1df1 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1df2 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1df3 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1df4 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1df5 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1df6 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1df7 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1df8 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1df9 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1dfa c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1dfb c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1dfc c0x0000 (---------------)  + I cc\n\t0x0027b703, // n0x1dfd c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1dfe c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1dff c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e00 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e01 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e02 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e03 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e04 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e05 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e06 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e07 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e08 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e09 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e0a c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e0b c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e0c c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e0d c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e0e c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e0f c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e10 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e11 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e12 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e13 c0x0000 (---------------)  + I cc\n\t0x5b309ac3, // n0x1e14 c0x016c (n0x1e16-n0x1e19)  + I k12\n\t0x0027b703, // n0x1e15 c0x0000 (---------------)  + I lib\n\t0x0022a644, // n0x1e16 c0x0000 (---------------)  + I chtr\n\t0x00289786, // n0x1e17 c0x0000 (---------------)  + I paroch\n\t0x002e5543, // n0x1e18 c0x0000 (---------------)  + I pvt\n\t0x0022e182, // n0x1e19 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e1a c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e1b c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e1c c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e1d c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e1e c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e1f c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e20 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e21 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e22 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e23 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e24 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e25 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e26 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e27 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e28 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e29 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e2a c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e2b c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e2c c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e2d c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e2e c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e2f c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e30 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e31 c0x0000 (---------------)  + I cc\n\t0x0027b703, // n0x1e32 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e33 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e34 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e35 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e36 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e37 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e38 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e39 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e3a c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e3b c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e3c c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e3d c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e3e c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e3f c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e40 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e41 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e42 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e43 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e44 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e45 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e46 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e47 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e48 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e49 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e4a c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e4b c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e4c c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e4d c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e4e c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e4f c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e50 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e51 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e52 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e53 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e54 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e55 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e56 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e57 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e58 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e59 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e5a c0x0000 (---------------)  + I cc\n\t0x0027b703, // n0x1e5b c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e5c c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e5d c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e5e c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e5f c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e60 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e61 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e62 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e63 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e64 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e65 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e66 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e67 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e68 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e69 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e6a c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e6b c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e6c c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e6d c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e6e c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e6f c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e70 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e71 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e72 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e73 c0x0000 (---------------)  + I lib\n\t0x0022e182, // n0x1e74 c0x0000 (---------------)  + I cc\n\t0x0022e182, // n0x1e75 c0x0000 (---------------)  + I cc\n\t0x00309ac3, // n0x1e76 c0x0000 (---------------)  + I k12\n\t0x0027b703, // n0x1e77 c0x0000 (---------------)  + I lib\n\t0x63e33503, // n0x1e78 c0x018f (n0x1e7e-n0x1e7f)  + I com\n\t0x0023a783, // n0x1e79 c0x0000 (---------------)  + I edu\n\t0x0024a483, // n0x1e7a c0x0000 (---------------)  + I gub\n\t0x00209003, // n0x1e7b c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1e7c c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1e7d c0x0000 (---------------)  + I org\n\t0x000ffa08, // n0x1e7e c0x0000 (---------------)  +   blogspot\n\t0x00200742, // n0x1e7f c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1e80 c0x0000 (---------------)  + I com\n\t0x0021fe03, // n0x1e81 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1e82 c0x0000 (---------------)  + I org\n\t0x00233503, // n0x1e83 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1e84 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1e85 c0x0000 (---------------)  + I gov\n\t0x00209003, // n0x1e86 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1e87 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1e88 c0x0000 (---------------)  + I org\n\t0x0024bf84, // n0x1e89 c0x0000 (---------------)  + I arts\n\t0x00200742, // n0x1e8a c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1e8b c0x0000 (---------------)  + I com\n\t0x00328c03, // n0x1e8c c0x0000 (---------------)  + I e12\n\t0x0023a783, // n0x1e8d c0x0000 (---------------)  + I edu\n\t0x0024d9c4, // n0x1e8e c0x0000 (---------------)  + I firm\n\t0x00213183, // n0x1e8f c0x0000 (---------------)  + I gob\n\t0x0026cc83, // n0x1e90 c0x0000 (---------------)  + I gov\n\t0x003a1244, // n0x1e91 c0x0000 (---------------)  + I info\n\t0x00201603, // n0x1e92 c0x0000 (---------------)  + I int\n\t0x00209003, // n0x1e93 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1e94 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1e95 c0x0000 (---------------)  + I org\n\t0x0022a5c3, // n0x1e96 c0x0000 (---------------)  + I rec\n\t0x00391185, // n0x1e97 c0x0000 (---------------)  + I store\n\t0x002d59c3, // n0x1e98 c0x0000 (---------------)  + I tec\n\t0x00221a03, // n0x1e99 c0x0000 (---------------)  + I web\n\t0x00200742, // n0x1e9a c0x0000 (---------------)  + I co\n\t0x00233503, // n0x1e9b c0x0000 (---------------)  + I com\n\t0x00309ac3, // n0x1e9c c0x0000 (---------------)  + I k12\n\t0x0021fe03, // n0x1e9d c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1e9e c0x0000 (---------------)  + I org\n\t0x00201542, // n0x1e9f c0x0000 (---------------)  + I ac\n\t0x00330b83, // n0x1ea0 c0x0000 (---------------)  + I biz\n\t0x000ffa08, // n0x1ea1 c0x0000 (---------------)  +   blogspot\n\t0x00233503, // n0x1ea2 c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1ea3 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1ea4 c0x0000 (---------------)  + I gov\n\t0x0036b386, // n0x1ea5 c0x0000 (---------------)  + I health\n\t0x003a1244, // n0x1ea6 c0x0000 (---------------)  + I info\n\t0x00201603, // n0x1ea7 c0x0000 (---------------)  + I int\n\t0x00205284, // n0x1ea8 c0x0000 (---------------)  + I name\n\t0x0021fe03, // n0x1ea9 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1eaa c0x0000 (---------------)  + I org\n\t0x00220e43, // n0x1eab c0x0000 (---------------)  + I pro\n\t0x00233503, // n0x1eac c0x0000 (---------------)  + I com\n\t0x0023a783, // n0x1ead c0x0000 (---------------)  + I edu\n\t0x0021fe03, // n0x1eae c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1eaf c0x0000 (---------------)  + I org\n\t0x00233503, // n0x1eb0 c0x0000 (---------------)  + I com\n\t0x00013886, // n0x1eb1 c0x0000 (---------------)  +   dyndns\n\t0x0023a783, // n0x1eb2 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1eb3 c0x0000 (---------------)  + I gov\n\t0x000d0d86, // n0x1eb4 c0x0000 (---------------)  +   mypets\n\t0x0021fe03, // n0x1eb5 c0x0000 (---------------)  + I net\n\t0x0022d1c3, // n0x1eb6 c0x0000 (---------------)  + I org\n\t0x00309e08, // n0x1eb7 c0x0000 (---------------)  + I xn--80au\n\t0x0030c549, // n0x1eb8 c0x0000 (---------------)  + I xn--90azh\n\t0x00318cc9, // n0x1eb9 c0x0000 (---------------)  + I xn--c1avg\n\t0x00329088, // n0x1eba c0x0000 (---------------)  + I xn--d1at\n\t0x00374908, // n0x1ebb c0x0000 (---------------)  + I xn--o1ac\n\t0x00374909, // n0x1ebc c0x0000 (---------------)  + I xn--o1ach\n\t0x00201542, // n0x1ebd c0x0000 (---------------)  + I ac\n\t0x00209c85, // n0x1ebe c0x0000 (---------------)  + I agric\n\t0x0023adc3, // n0x1ebf c0x0000 (---------------)  + I alt\n\t0x66600742, // n0x1ec0 c0x0199 (n0x1ece-n0x1ecf)  + I co\n\t0x0023a783, // n0x1ec1 c0x0000 (---------------)  + I edu\n\t0x0026cc83, // n0x1ec2 c0x0000 (---------------)  + I gov\n\t0x0027d907, // n0x1ec3 c0x0000 (---------------)  + I grondar\n\t0x00274483, // n0x1ec4 c0x0000 (---------------)  + I law\n\t0x00209003, // n0x1ec5 c0x0000 (---------------)  + I mil\n\t0x0021fe03, // n0x1ec6 c0x0000 (---------------)  + I net\n\t0x00202d03, // n0x1ec7 c0x0000 (---------------)  + I ngo\n\t0x00211803, // n0x1ec8 c0x0000 (---------------)  + I nis\n\t0x00201483, // n0x1ec9 c0x0000 (---------------)  + I nom\n\t0x0022d1c3, // n0x1eca c0x0000 (---------------)  + I org\n\t0x0023d0c6, // n0x1ecb c0x0000 (---------------)  + I school\n\t0x00200142, // n0x1ecc c0x0000 (---------------)  + I tm\n\t0x00221a03, // n0x1ecd c0x0000 (---------------)  + I web\n\t0x000ffa08, // n0x1ece c0x0000 (---------------)  +   blogspot\n}\n\n// children is the list of nodes' children, the parent's wildcard bit and the\n// parent's node type. If a node has no children then their children index\n// will be in the range [0, 6), depending on the wildcard bit and node type.\n//\n// The layout within the uint32, from MSB to LSB, is:\n//\t[ 1 bits] unused\n//\t[ 1 bits] wildcard bit\n//\t[ 2 bits] node type\n//\t[14 bits] high nodes index (exclusive) of children\n//\t[14 bits] low nodes index (inclusive) of children\nvar children = [...]uint32{\n\t0x00000000, // c0x0000 (---------------)  +\n\t0x10000000, // c0x0001 (---------------)  !\n\t0x20000000, // c0x0002 (---------------)  o\n\t0x40000000, // c0x0003 (---------------)* +\n\t0x50000000, // c0x0004 (---------------)* !\n\t0x60000000, // c0x0005 (---------------)* o\n\t0x0183c609, // c0x0006 (n0x0609-n0x060f)  +\n\t0x0184060f, // c0x0007 (n0x060f-n0x0610)  +\n\t0x01860610, // c0x0008 (n0x0610-n0x0618)  +\n\t0x019bc618, // c0x0009 (n0x0618-n0x066f)  +\n\t0x019d066f, // c0x000a (n0x066f-n0x0674)  +\n\t0x019e4674, // c0x000b (n0x0674-n0x0679)  +\n\t0x019f4679, // c0x000c (n0x0679-n0x067d)  +\n\t0x01a1067d, // c0x000d (n0x067d-n0x0684)  +\n\t0x01a14684, // c0x000e (n0x0684-n0x0685)  +\n\t0x01a2c685, // c0x000f (n0x0685-n0x068b)  +\n\t0x01a5068b, // c0x0010 (n0x068b-n0x0694)  +\n\t0x01a54694, // c0x0011 (n0x0694-n0x0695)  +\n\t0x01a6c695, // c0x0012 (n0x0695-n0x069b)  +\n\t0x01a7069b, // c0x0013 (n0x069b-n0x069c)  +\n\t0x01a8c69c, // c0x0014 (n0x069c-n0x06a3)  +\n\t0x01a906a3, // c0x0015 (n0x06a3-n0x06a4)  +\n\t0x01ad86a4, // c0x0016 (n0x06a4-n0x06b6)  +\n\t0x01adc6b6, // c0x0017 (n0x06b6-n0x06b7)  +\n\t0x01afc6b7, // c0x0018 (n0x06b7-n0x06bf)  +\n\t0x01b106bf, // c0x0019 (n0x06bf-n0x06c4)  +\n\t0x01b146c4, // c0x001a (n0x06c4-n0x06c5)  +\n\t0x01b446c5, // c0x001b (n0x06c5-n0x06d1)  +\n\t0x01b706d1, // c0x001c (n0x06d1-n0x06dc)  +\n\t0x01b986dc, // c0x001d (n0x06dc-n0x06e6)  +\n\t0x01ba06e6, // c0x001e (n0x06e6-n0x06e8)  +\n\t0x01ba46e8, // c0x001f (n0x06e8-n0x06e9)  +\n\t0x01c386e9, // c0x0020 (n0x06e9-n0x070e)  +\n\t0x01c4c70e, // c0x0021 (n0x070e-n0x0713)  +\n\t0x01c60713, // c0x0022 (n0x0713-n0x0718)  +\n\t0x01c80718, // c0x0023 (n0x0718-n0x0720)  +\n\t0x01c90720, // c0x0024 (n0x0720-n0x0724)  +\n\t0x01ca4724, // c0x0025 (n0x0724-n0x0729)  +\n\t0x01cc8729, // c0x0026 (n0x0729-n0x0732)  +\n\t0x01de0732, // c0x0027 (n0x0732-n0x0778)  +\n\t0x01de4778, // c0x0028 (n0x0778-n0x0779)  +\n\t0x01df8779, // c0x0029 (n0x0779-n0x077e)  +\n\t0x01e0c77e, // c0x002a (n0x077e-n0x0783)  +\n\t0x01e14783, // c0x002b (n0x0783-n0x0785)  +\n\t0x01e24785, // c0x002c (n0x0785-n0x0789)  +\n\t0x01e28789, // c0x002d (n0x0789-n0x078a)  +\n\t0x01e4078a, // c0x002e (n0x078a-n0x0790)  +\n\t0x01e84790, // c0x002f (n0x0790-n0x07a1)  +\n\t0x01e947a1, // c0x0030 (n0x07a1-n0x07a5)  +\n\t0x01e987a5, // c0x0031 (n0x07a5-n0x07a6)  +\n\t0x01e9c7a6, // c0x0032 (n0x07a6-n0x07a7)  +\n\t0x01ea07a7, // c0x0033 (n0x07a7-n0x07a8)  +\n\t0x01edc7a8, // c0x0034 (n0x07a8-n0x07b7)  +\n\t0x61ee07b7, // c0x0035 (n0x07b7-n0x07b8)* o\n\t0x01ef47b8, // c0x0036 (n0x07b8-n0x07bd)  +\n\t0x01f047bd, // c0x0037 (n0x07bd-n0x07c1)  +\n\t0x01fb87c1, // c0x0038 (n0x07c1-n0x07ee)  +\n\t0x21fbc7ee, // c0x0039 (n0x07ee-n0x07ef)  o\n\t0x01fc07ef, // c0x003a (n0x07ef-n0x07f0)  +\n\t0x01fc47f0, // c0x003b (n0x07f0-n0x07f1)  +\n\t0x21fc87f1, // c0x003c (n0x07f1-n0x07f2)  o\n\t0x21fcc7f2, // c0x003d (n0x07f2-n0x07f3)  o\n\t0x020007f3, // c0x003e (n0x07f3-n0x0800)  +\n\t0x02004800, // c0x003f (n0x0800-n0x0801)  +\n\t0x0235c801, // c0x0040 (n0x0801-n0x08d7)  +\n\t0x223ac8d7, // c0x0041 (n0x08d7-n0x08eb)  o\n\t0x223b08eb, // c0x0042 (n0x08eb-n0x08ec)  o\n\t0x023d88ec, // c0x0043 (n0x08ec-n0x08f6)  +\n\t0x023e08f6, // c0x0044 (n0x08f6-n0x08f8)  +\n\t0x223e48f8, // c0x0045 (n0x08f8-n0x08f9)  o\n\t0x223e88f9, // c0x0046 (n0x08f9-n0x08fa)  o\n\t0x023f48fa, // c0x0047 (n0x08fa-n0x08fd)  +\n\t0x223f88fd, // c0x0048 (n0x08fd-n0x08fe)  o\n\t0x024148fe, // c0x0049 (n0x08fe-n0x0905)  +\n\t0x0242c905, // c0x004a (n0x0905-n0x090b)  +\n\t0x0243090b, // c0x004b (n0x090b-n0x090c)  +\n\t0x0244090c, // c0x004c (n0x090c-n0x0910)  +\n\t0x02448910, // c0x004d (n0x0910-n0x0912)  +\n\t0x2247c912, // c0x004e (n0x0912-n0x091f)  o\n\t0x0248091f, // c0x004f (n0x091f-n0x0920)  +\n\t0x02488920, // c0x0050 (n0x0920-n0x0922)  +\n\t0x024a8922, // c0x0051 (n0x0922-n0x092a)  +\n\t0x024ac92a, // c0x0052 (n0x092a-n0x092b)  +\n\t0x024c092b, // c0x0053 (n0x092b-n0x0930)  +\n\t0x024e8930, // c0x0054 (n0x0930-n0x093a)  +\n\t0x0250893a, // c0x0055 (n0x093a-n0x0942)  +\n\t0x02538942, // c0x0056 (n0x0942-n0x094e)  +\n\t0x0256094e, // c0x0057 (n0x094e-n0x0958)  +\n\t0x02564958, // c0x0058 (n0x0958-n0x0959)  +\n\t0x02588959, // c0x0059 (n0x0959-n0x0962)  +\n\t0x0258c962, // c0x005a (n0x0962-n0x0963)  +\n\t0x025a0963, // c0x005b (n0x0963-n0x0968)  +\n\t0x025a4968, // c0x005c (n0x0968-n0x0969)  +\n\t0x025c4969, // c0x005d (n0x0969-n0x0971)  +\n\t0x025d0971, // c0x005e (n0x0971-n0x0974)  +\n\t0x02630974, // c0x005f (n0x0974-n0x098c)  +\n\t0x0264c98c, // c0x0060 (n0x098c-n0x0993)  +\n\t0x02658993, // c0x0061 (n0x0993-n0x0996)  +\n\t0x0266c996, // c0x0062 (n0x0996-n0x099b)  +\n\t0x0268499b, // c0x0063 (n0x099b-n0x09a1)  +\n\t0x026989a1, // c0x0064 (n0x09a1-n0x09a6)  +\n\t0x026b09a6, // c0x0065 (n0x09a6-n0x09ac)  +\n\t0x026c89ac, // c0x0066 (n0x09ac-n0x09b2)  +\n\t0x026e09b2, // c0x0067 (n0x09b2-n0x09b8)  +\n\t0x026fc9b8, // c0x0068 (n0x09b8-n0x09bf)  +\n\t0x027149bf, // c0x0069 (n0x09bf-n0x09c5)  +\n\t0x027749c5, // c0x006a (n0x09c5-n0x09dd)  +\n\t0x0278c9dd, // c0x006b (n0x09dd-n0x09e3)  +\n\t0x027a09e3, // c0x006c (n0x09e3-n0x09e8)  +\n\t0x027e49e8, // c0x006d (n0x09e8-n0x09f9)  +\n\t0x028649f9, // c0x006e (n0x09f9-n0x0a19)  +\n\t0x02890a19, // c0x006f (n0x0a19-n0x0a24)  +\n\t0x02894a24, // c0x0070 (n0x0a24-n0x0a25)  +\n\t0x0289ca25, // c0x0071 (n0x0a25-n0x0a27)  +\n\t0x028bca27, // c0x0072 (n0x0a27-n0x0a2f)  +\n\t0x028c0a2f, // c0x0073 (n0x0a2f-n0x0a30)  +\n\t0x028dca30, // c0x0074 (n0x0a30-n0x0a37)  +\n\t0x028e4a37, // c0x0075 (n0x0a37-n0x0a39)  +\n\t0x02918a39, // c0x0076 (n0x0a39-n0x0a46)  +\n\t0x02940a46, // c0x0077 (n0x0a46-n0x0a50)  +\n\t0x02944a50, // c0x0078 (n0x0a50-n0x0a51)  +\n\t0x0295ca51, // c0x0079 (n0x0a51-n0x0a57)  +\n\t0x02974a57, // c0x007a (n0x0a57-n0x0a5d)  +\n\t0x02998a5d, // c0x007b (n0x0a5d-n0x0a66)  +\n\t0x029b8a66, // c0x007c (n0x0a66-n0x0a6e)  +\n\t0x02f7ca6e, // c0x007d (n0x0a6e-n0x0bdf)  +\n\t0x02f88bdf, // c0x007e (n0x0bdf-n0x0be2)  +\n\t0x02fa8be2, // c0x007f (n0x0be2-n0x0bea)  +\n\t0x03164bea, // c0x0080 (n0x0bea-n0x0c59)  +\n\t0x03234c59, // c0x0081 (n0x0c59-n0x0c8d)  +\n\t0x032a4c8d, // c0x0082 (n0x0c8d-n0x0ca9)  +\n\t0x032fcca9, // c0x0083 (n0x0ca9-n0x0cbf)  +\n\t0x033e4cbf, // c0x0084 (n0x0cbf-n0x0cf9)  +\n\t0x0343ccf9, // c0x0085 (n0x0cf9-n0x0d0f)  +\n\t0x03478d0f, // c0x0086 (n0x0d0f-n0x0d1e)  +\n\t0x03574d1e, // c0x0087 (n0x0d1e-n0x0d5d)  +\n\t0x03640d5d, // c0x0088 (n0x0d5d-n0x0d90)  +\n\t0x036d8d90, // c0x0089 (n0x0d90-n0x0db6)  +\n\t0x03768db6, // c0x008a (n0x0db6-n0x0dda)  +\n\t0x037ccdda, // c0x008b (n0x0dda-n0x0df3)  +\n\t0x03a04df3, // c0x008c (n0x0df3-n0x0e81)  +\n\t0x03abce81, // c0x008d (n0x0e81-n0x0eaf)  +\n\t0x03b88eaf, // c0x008e (n0x0eaf-n0x0ee2)  +\n\t0x03bd4ee2, // c0x008f (n0x0ee2-n0x0ef5)  +\n\t0x03c5cef5, // c0x0090 (n0x0ef5-n0x0f17)  +\n\t0x03c98f17, // c0x0091 (n0x0f17-n0x0f26)  +\n\t0x03ce8f26, // c0x0092 (n0x0f26-n0x0f3a)  +\n\t0x03d60f3a, // c0x0093 (n0x0f3a-n0x0f58)  +\n\t0x63d64f58, // c0x0094 (n0x0f58-n0x0f59)* o\n\t0x63d68f59, // c0x0095 (n0x0f59-n0x0f5a)* o\n\t0x63d6cf5a, // c0x0096 (n0x0f5a-n0x0f5b)* o\n\t0x03de8f5b, // c0x0097 (n0x0f5b-n0x0f7a)  +\n\t0x03e50f7a, // c0x0098 (n0x0f7a-n0x0f94)  +\n\t0x03eccf94, // c0x0099 (n0x0f94-n0x0fb3)  +\n\t0x03f44fb3, // c0x009a (n0x0fb3-n0x0fd1)  +\n\t0x03fc8fd1, // c0x009b (n0x0fd1-n0x0ff2)  +\n\t0x04034ff2, // c0x009c (n0x0ff2-n0x100d)  +\n\t0x0416100d, // c0x009d (n0x100d-n0x1058)  +\n\t0x041b9058, // c0x009e (n0x1058-n0x106e)  +\n\t0x641bd06e, // c0x009f (n0x106e-n0x106f)* o\n\t0x0425506f, // c0x00a0 (n0x106f-n0x1095)  +\n\t0x042dd095, // c0x00a1 (n0x1095-n0x10b7)  +\n\t0x043290b7, // c0x00a2 (n0x10b7-n0x10ca)  +\n\t0x043910ca, // c0x00a3 (n0x10ca-n0x10e4)  +\n\t0x044390e4, // c0x00a4 (n0x10e4-n0x110e)  +\n\t0x0450110e, // c0x00a5 (n0x110e-n0x1140)  +\n\t0x04569140, // c0x00a6 (n0x1140-n0x115a)  +\n\t0x0467d15a, // c0x00a7 (n0x115a-n0x119f)  +\n\t0x6468119f, // c0x00a8 (n0x119f-n0x11a0)* o\n\t0x646851a0, // c0x00a9 (n0x11a0-n0x11a1)* o\n\t0x046e11a1, // c0x00aa (n0x11a1-n0x11b8)  +\n\t0x0473d1b8, // c0x00ab (n0x11b8-n0x11cf)  +\n\t0x047cd1cf, // c0x00ac (n0x11cf-n0x11f3)  +\n\t0x048491f3, // c0x00ad (n0x11f3-n0x1212)  +\n\t0x0488d212, // c0x00ae (n0x1212-n0x1223)  +\n\t0x04971223, // c0x00af (n0x1223-n0x125c)  +\n\t0x049a525c, // c0x00b0 (n0x125c-n0x1269)  +\n\t0x04a05269, // c0x00b1 (n0x1269-n0x1281)  +\n\t0x04a79281, // c0x00b2 (n0x1281-n0x129e)  +\n\t0x04b0129e, // c0x00b3 (n0x129e-n0x12c0)  +\n\t0x04b412c0, // c0x00b4 (n0x12c0-n0x12d0)  +\n\t0x04bb12d0, // c0x00b5 (n0x12d0-n0x12ec)  +\n\t0x64bb52ec, // c0x00b6 (n0x12ec-n0x12ed)* o\n\t0x64bb92ed, // c0x00b7 (n0x12ed-n0x12ee)* o\n\t0x24bbd2ee, // c0x00b8 (n0x12ee-n0x12ef)  o\n\t0x04bd52ef, // c0x00b9 (n0x12ef-n0x12f5)  +\n\t0x04bf12f5, // c0x00ba (n0x12f5-n0x12fc)  +\n\t0x04c352fc, // c0x00bb (n0x12fc-n0x130d)  +\n\t0x04c4530d, // c0x00bc (n0x130d-n0x1311)  +\n\t0x04c5d311, // c0x00bd (n0x1311-n0x1317)  +\n\t0x04cd5317, // c0x00be (n0x1317-n0x1335)  +\n\t0x04ce9335, // c0x00bf (n0x1335-n0x133a)  +\n\t0x04d0133a, // c0x00c0 (n0x133a-n0x1340)  +\n\t0x04d25340, // c0x00c1 (n0x1340-n0x1349)  +\n\t0x04d39349, // c0x00c2 (n0x1349-n0x134e)  +\n\t0x04d5134e, // c0x00c3 (n0x134e-n0x1354)  +\n\t0x04d55354, // c0x00c4 (n0x1354-n0x1355)  +\n\t0x04d91355, // c0x00c5 (n0x1355-n0x1364)  +\n\t0x04da5364, // c0x00c6 (n0x1364-n0x1369)  +\n\t0x04dad369, // c0x00c7 (n0x1369-n0x136b)  +\n\t0x04db536b, // c0x00c8 (n0x136b-n0x136d)  +\n\t0x04db936d, // c0x00c9 (n0x136d-n0x136e)  +\n\t0x04ddd36e, // c0x00ca (n0x136e-n0x1377)  +\n\t0x04e01377, // c0x00cb (n0x1377-n0x1380)  +\n\t0x04e19380, // c0x00cc (n0x1380-n0x1386)  +\n\t0x04e21386, // c0x00cd (n0x1386-n0x1388)  +\n\t0x04e25388, // c0x00ce (n0x1388-n0x1389)  +\n\t0x04e59389, // c0x00cf (n0x1389-n0x1396)  +\n\t0x04e7d396, // c0x00d0 (n0x1396-n0x139f)  +\n\t0x04e9d39f, // c0x00d1 (n0x139f-n0x13a7)  +\n\t0x04eb93a7, // c0x00d2 (n0x13a7-n0x13ae)  +\n\t0x04ec93ae, // c0x00d3 (n0x13ae-n0x13b2)  +\n\t0x04edd3b2, // c0x00d4 (n0x13b2-n0x13b7)  +\n\t0x04ee13b7, // c0x00d5 (n0x13b7-n0x13b8)  +\n\t0x04ee93b8, // c0x00d6 (n0x13b8-n0x13ba)  +\n\t0x04efd3ba, // c0x00d7 (n0x13ba-n0x13bf)  +\n\t0x04f0d3bf, // c0x00d8 (n0x13bf-n0x13c3)  +\n\t0x04f113c3, // c0x00d9 (n0x13c3-n0x13c4)  +\n\t0x04f2d3c4, // c0x00da (n0x13c4-n0x13cb)  +\n\t0x057bd3cb, // c0x00db (n0x13cb-n0x15ef)  +\n\t0x057f55ef, // c0x00dc (n0x15ef-n0x15fd)  +\n\t0x058215fd, // c0x00dd (n0x15fd-n0x1608)  +\n\t0x05839608, // c0x00de (n0x1608-n0x160e)  +\n\t0x0585960e, // c0x00df (n0x160e-n0x1616)  +\n\t0x6585d616, // c0x00e0 (n0x1616-n0x1617)* o\n\t0x058a1617, // c0x00e1 (n0x1617-n0x1628)  +\n\t0x058a9628, // c0x00e2 (n0x1628-n0x162a)  +\n\t0x258ad62a, // c0x00e3 (n0x162a-n0x162b)  o\n\t0x258b162b, // c0x00e4 (n0x162b-n0x162c)  o\n\t0x058b562c, // c0x00e5 (n0x162c-n0x162d)  +\n\t0x0598d62d, // c0x00e6 (n0x162d-n0x1663)  +\n\t0x25991663, // c0x00e7 (n0x1663-n0x1664)  o\n\t0x25999664, // c0x00e8 (n0x1664-n0x1666)  o\n\t0x259a1666, // c0x00e9 (n0x1666-n0x1668)  o\n\t0x259ad668, // c0x00ea (n0x1668-n0x166b)  o\n\t0x059d566b, // c0x00eb (n0x166b-n0x1675)  +\n\t0x059fd675, // c0x00ec (n0x1675-n0x167f)  +\n\t0x05a0167f, // c0x00ed (n0x167f-n0x1680)  +\n\t0x25a39680, // c0x00ee (n0x1680-n0x168e)  o\n\t0x05a4568e, // c0x00ef (n0x168e-n0x1691)  +\n\t0x0659d691, // c0x00f0 (n0x1691-n0x1967)  +\n\t0x065a1967, // c0x00f1 (n0x1967-n0x1968)  +\n\t0x065a5968, // c0x00f2 (n0x1968-n0x1969)  +\n\t0x265a9969, // c0x00f3 (n0x1969-n0x196a)  o\n\t0x065ad96a, // c0x00f4 (n0x196a-n0x196b)  +\n\t0x265b196b, // c0x00f5 (n0x196b-n0x196c)  o\n\t0x065b596c, // c0x00f6 (n0x196c-n0x196d)  +\n\t0x265c196d, // c0x00f7 (n0x196d-n0x1970)  o\n\t0x065c5970, // c0x00f8 (n0x1970-n0x1971)  +\n\t0x065c9971, // c0x00f9 (n0x1971-n0x1972)  +\n\t0x265cd972, // c0x00fa (n0x1972-n0x1973)  o\n\t0x065d1973, // c0x00fb (n0x1973-n0x1974)  +\n\t0x265d9974, // c0x00fc (n0x1974-n0x1976)  o\n\t0x065dd976, // c0x00fd (n0x1976-n0x1977)  +\n\t0x065e1977, // c0x00fe (n0x1977-n0x1978)  +\n\t0x265f1978, // c0x00ff (n0x1978-n0x197c)  o\n\t0x065f597c, // c0x0100 (n0x197c-n0x197d)  +\n\t0x065f997d, // c0x0101 (n0x197d-n0x197e)  +\n\t0x065fd97e, // c0x0102 (n0x197e-n0x197f)  +\n\t0x0660197f, // c0x0103 (n0x197f-n0x1980)  +\n\t0x26605980, // c0x0104 (n0x1980-n0x1981)  o\n\t0x06609981, // c0x0105 (n0x1981-n0x1982)  +\n\t0x0660d982, // c0x0106 (n0x1982-n0x1983)  +\n\t0x06611983, // c0x0107 (n0x1983-n0x1984)  +\n\t0x06615984, // c0x0108 (n0x1984-n0x1985)  +\n\t0x2661d985, // c0x0109 (n0x1985-n0x1987)  o\n\t0x06621987, // c0x010a (n0x1987-n0x1988)  +\n\t0x06625988, // c0x010b (n0x1988-n0x1989)  +\n\t0x06629989, // c0x010c (n0x1989-n0x198a)  +\n\t0x2662d98a, // c0x010d (n0x198a-n0x198b)  o\n\t0x0663198b, // c0x010e (n0x198b-n0x198c)  +\n\t0x2663998c, // c0x010f (n0x198c-n0x198e)  o\n\t0x2663d98e, // c0x0110 (n0x198e-n0x198f)  o\n\t0x0665998f, // c0x0111 (n0x198f-n0x1996)  +\n\t0x06665996, // c0x0112 (n0x1996-n0x1999)  +\n\t0x066a5999, // c0x0113 (n0x1999-n0x19a9)  +\n\t0x066a99a9, // c0x0114 (n0x19a9-n0x19aa)  +\n\t0x066cd9aa, // c0x0115 (n0x19aa-n0x19b3)  +\n\t0x067c19b3, // c0x0116 (n0x19b3-n0x19f0)  +\n\t0x267c99f0, // c0x0117 (n0x19f0-n0x19f2)  o\n\t0x267cd9f2, // c0x0118 (n0x19f2-n0x19f3)  o\n\t0x267d19f3, // c0x0119 (n0x19f3-n0x19f4)  o\n\t0x067d99f4, // c0x011a (n0x19f4-n0x19f6)  +\n\t0x068b59f6, // c0x011b (n0x19f6-n0x1a2d)  +\n\t0x068e1a2d, // c0x011c (n0x1a2d-n0x1a38)  +\n\t0x06901a38, // c0x011d (n0x1a38-n0x1a40)  +\n\t0x0690da40, // c0x011e (n0x1a40-n0x1a43)  +\n\t0x0692da43, // c0x011f (n0x1a43-n0x1a4b)  +\n\t0x06965a4b, // c0x0120 (n0x1a4b-n0x1a59)  +\n\t0x06bf9a59, // c0x0121 (n0x1a59-n0x1afe)  +\n\t0x06cb5afe, // c0x0122 (n0x1afe-n0x1b2d)  +\n\t0x06cc9b2d, // c0x0123 (n0x1b2d-n0x1b32)  +\n\t0x06cfdb32, // c0x0124 (n0x1b32-n0x1b3f)  +\n\t0x06d29b3f, // c0x0125 (n0x1b3f-n0x1b4a)  +\n\t0x06d45b4a, // c0x0126 (n0x1b4a-n0x1b51)  +\n\t0x06d69b51, // c0x0127 (n0x1b51-n0x1b5a)  +\n\t0x06d81b5a, // c0x0128 (n0x1b5a-n0x1b60)  +\n\t0x06d9db60, // c0x0129 (n0x1b60-n0x1b67)  +\n\t0x06dc1b67, // c0x012a (n0x1b67-n0x1b70)  +\n\t0x06dd1b70, // c0x012b (n0x1b70-n0x1b74)  +\n\t0x06e01b74, // c0x012c (n0x1b74-n0x1b80)  +\n\t0x06e1db80, // c0x012d (n0x1b80-n0x1b87)  +\n\t0x07029b87, // c0x012e (n0x1b87-n0x1c0a)  +\n\t0x0704dc0a, // c0x012f (n0x1c0a-n0x1c13)  +\n\t0x0706dc13, // c0x0130 (n0x1c13-n0x1c1b)  +\n\t0x07081c1b, // c0x0131 (n0x1c1b-n0x1c20)  +\n\t0x07095c20, // c0x0132 (n0x1c20-n0x1c25)  +\n\t0x070b5c25, // c0x0133 (n0x1c25-n0x1c2d)  +\n\t0x07159c2d, // c0x0134 (n0x1c2d-n0x1c56)  +\n\t0x07175c56, // c0x0135 (n0x1c56-n0x1c5d)  +\n\t0x07191c5d, // c0x0136 (n0x1c5d-n0x1c64)  +\n\t0x07195c64, // c0x0137 (n0x1c64-n0x1c65)  +\n\t0x07199c65, // c0x0138 (n0x1c65-n0x1c66)  +\n\t0x071adc66, // c0x0139 (n0x1c66-n0x1c6b)  +\n\t0x071cdc6b, // c0x013a (n0x1c6b-n0x1c73)  +\n\t0x071d9c73, // c0x013b (n0x1c73-n0x1c76)  +\n\t0x07209c76, // c0x013c (n0x1c76-n0x1c82)  +\n\t0x07289c82, // c0x013d (n0x1c82-n0x1ca2)  +\n\t0x0729dca2, // c0x013e (n0x1ca2-n0x1ca7)  +\n\t0x072a1ca7, // c0x013f (n0x1ca7-n0x1ca8)  +\n\t0x072b9ca8, // c0x0140 (n0x1ca8-n0x1cae)  +\n\t0x072c5cae, // c0x0141 (n0x1cae-n0x1cb1)  +\n\t0x072c9cb1, // c0x0142 (n0x1cb1-n0x1cb2)  +\n\t0x072e5cb2, // c0x0143 (n0x1cb2-n0x1cb9)  +\n\t0x07321cb9, // c0x0144 (n0x1cb9-n0x1cc8)  +\n\t0x07325cc8, // c0x0145 (n0x1cc8-n0x1cc9)  +\n\t0x07345cc9, // c0x0146 (n0x1cc9-n0x1cd1)  +\n\t0x07395cd1, // c0x0147 (n0x1cd1-n0x1ce5)  +\n\t0x073adce5, // c0x0148 (n0x1ce5-n0x1ceb)  +\n\t0x07401ceb, // c0x0149 (n0x1ceb-n0x1d00)  +\n\t0x07405d00, // c0x014a (n0x1d00-n0x1d01)  +\n\t0x07409d01, // c0x014b (n0x1d01-n0x1d02)  +\n\t0x0744dd02, // c0x014c (n0x1d02-n0x1d13)  +\n\t0x0745dd13, // c0x014d (n0x1d13-n0x1d17)  +\n\t0x07495d17, // c0x014e (n0x1d17-n0x1d25)  +\n\t0x074c5d25, // c0x014f (n0x1d25-n0x1d31)  +\n\t0x07601d31, // c0x0150 (n0x1d31-n0x1d80)  +\n\t0x07625d80, // c0x0151 (n0x1d80-n0x1d89)  +\n\t0x07651d89, // c0x0152 (n0x1d89-n0x1d94)  +\n\t0x07655d94, // c0x0153 (n0x1d94-n0x1d95)  +\n\t0x07659d95, // c0x0154 (n0x1d95-n0x1d96)  +\n\t0x07755d96, // c0x0155 (n0x1d96-n0x1dd5)  +\n\t0x07761dd5, // c0x0156 (n0x1dd5-n0x1dd8)  +\n\t0x0776ddd8, // c0x0157 (n0x1dd8-n0x1ddb)  +\n\t0x07779ddb, // c0x0158 (n0x1ddb-n0x1dde)  +\n\t0x07785dde, // c0x0159 (n0x1dde-n0x1de1)  +\n\t0x07791de1, // c0x015a (n0x1de1-n0x1de4)  +\n\t0x0779dde4, // c0x015b (n0x1de4-n0x1de7)  +\n\t0x077a9de7, // c0x015c (n0x1de7-n0x1dea)  +\n\t0x077b5dea, // c0x015d (n0x1dea-n0x1ded)  +\n\t0x077c1ded, // c0x015e (n0x1ded-n0x1df0)  +\n\t0x077cddf0, // c0x015f (n0x1df0-n0x1df3)  +\n\t0x077d9df3, // c0x0160 (n0x1df3-n0x1df6)  +\n\t0x077e5df6, // c0x0161 (n0x1df6-n0x1df9)  +\n\t0x077f1df9, // c0x0162 (n0x1df9-n0x1dfc)  +\n\t0x077f9dfc, // c0x0163 (n0x1dfc-n0x1dfe)  +\n\t0x07805dfe, // c0x0164 (n0x1dfe-n0x1e01)  +\n\t0x07811e01, // c0x0165 (n0x1e01-n0x1e04)  +\n\t0x0781de04, // c0x0166 (n0x1e04-n0x1e07)  +\n\t0x07829e07, // c0x0167 (n0x1e07-n0x1e0a)  +\n\t0x07835e0a, // c0x0168 (n0x1e0a-n0x1e0d)  +\n\t0x07841e0d, // c0x0169 (n0x1e0d-n0x1e10)  +\n\t0x0784de10, // c0x016a (n0x1e10-n0x1e13)  +\n\t0x07859e13, // c0x016b (n0x1e13-n0x1e16)  +\n\t0x07865e16, // c0x016c (n0x1e16-n0x1e19)  +\n\t0x07871e19, // c0x016d (n0x1e19-n0x1e1c)  +\n\t0x0787de1c, // c0x016e (n0x1e1c-n0x1e1f)  +\n\t0x07889e1f, // c0x016f (n0x1e1f-n0x1e22)  +\n\t0x07895e22, // c0x0170 (n0x1e22-n0x1e25)  +\n\t0x078a1e25, // c0x0171 (n0x1e25-n0x1e28)  +\n\t0x078ade28, // c0x0172 (n0x1e28-n0x1e2b)  +\n\t0x078b9e2b, // c0x0173 (n0x1e2b-n0x1e2e)  +\n\t0x078c5e2e, // c0x0174 (n0x1e2e-n0x1e31)  +\n\t0x078cde31, // c0x0175 (n0x1e31-n0x1e33)  +\n\t0x078d9e33, // c0x0176 (n0x1e33-n0x1e36)  +\n\t0x078e5e36, // c0x0177 (n0x1e36-n0x1e39)  +\n\t0x078f1e39, // c0x0178 (n0x1e39-n0x1e3c)  +\n\t0x078fde3c, // c0x0179 (n0x1e3c-n0x1e3f)  +\n\t0x07909e3f, // c0x017a (n0x1e3f-n0x1e42)  +\n\t0x07915e42, // c0x017b (n0x1e42-n0x1e45)  +\n\t0x07921e45, // c0x017c (n0x1e45-n0x1e48)  +\n\t0x0792de48, // c0x017d (n0x1e48-n0x1e4b)  +\n\t0x07939e4b, // c0x017e (n0x1e4b-n0x1e4e)  +\n\t0x07945e4e, // c0x017f (n0x1e4e-n0x1e51)  +\n\t0x07951e51, // c0x0180 (n0x1e51-n0x1e54)  +\n\t0x0795de54, // c0x0181 (n0x1e54-n0x1e57)  +\n\t0x07969e57, // c0x0182 (n0x1e57-n0x1e5a)  +\n\t0x07971e5a, // c0x0183 (n0x1e5a-n0x1e5c)  +\n\t0x0797de5c, // c0x0184 (n0x1e5c-n0x1e5f)  +\n\t0x07989e5f, // c0x0185 (n0x1e5f-n0x1e62)  +\n\t0x07995e62, // c0x0186 (n0x1e62-n0x1e65)  +\n\t0x079a1e65, // c0x0187 (n0x1e65-n0x1e68)  +\n\t0x079ade68, // c0x0188 (n0x1e68-n0x1e6b)  +\n\t0x079b9e6b, // c0x0189 (n0x1e6b-n0x1e6e)  +\n\t0x079c5e6e, // c0x018a (n0x1e6e-n0x1e71)  +\n\t0x079d1e71, // c0x018b (n0x1e71-n0x1e74)  +\n\t0x079d5e74, // c0x018c (n0x1e74-n0x1e75)  +\n\t0x079e1e75, // c0x018d (n0x1e75-n0x1e78)  +\n\t0x079f9e78, // c0x018e (n0x1e78-n0x1e7e)  +\n\t0x079fde7e, // c0x018f (n0x1e7e-n0x1e7f)  +\n\t0x07a0de7f, // c0x0190 (n0x1e7f-n0x1e83)  +\n\t0x07a25e83, // c0x0191 (n0x1e83-n0x1e89)  +\n\t0x07a69e89, // c0x0192 (n0x1e89-n0x1e9a)  +\n\t0x07a7de9a, // c0x0193 (n0x1e9a-n0x1e9f)  +\n\t0x07ab1e9f, // c0x0194 (n0x1e9f-n0x1eac)  +\n\t0x07ac1eac, // c0x0195 (n0x1eac-n0x1eb0)  +\n\t0x07addeb0, // c0x0196 (n0x1eb0-n0x1eb7)  +\n\t0x07af5eb7, // c0x0197 (n0x1eb7-n0x1ebd)  +\n\t0x27b39ebd, // c0x0198 (n0x1ebd-n0x1ece)  o\n\t0x07b3dece, // c0x0199 (n0x1ece-n0x1ecf)  +\n}\n\n// max children 409 (capacity 511)\n// max text offset 27059 (capacity 32767)\n// max text length 36 (capacity 63)\n// max hi 7887 (capacity 16383)\n// max lo 7886 (capacity 16383)\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/LICENSE",
    "content": "\nCopyright (c) 2011-2014 - Canonical Inc.\n\nThis software is licensed under the LGPLv3, included below.\n\nAs a special exception to the GNU Lesser General Public License version 3\n(\"LGPL3\"), the copyright holders of this Library give you permission to\nconvey to a third party a Combined Work that links statically or dynamically\nto this Library without providing any Minimal Corresponding Source or\nMinimal Application Code as set out in 4d or providing the installation\ninformation set out in section 4e, provided that you comply with the other\nprovisions of LGPL3 and provided that you meet, for the Application the\nterms and conditions of the license(s) which apply to the Application.\n\nExcept as stated in this special exception, the provisions of LGPL3 will\ncontinue to comply in full to this Library. If you modify this Library, you\nmay apply this exception to your version of this Library, but you are not\nobliged to do so. If you do not wish to do so, delete this exception\nstatement from your version. This exception does not (and cannot) modify any\nlicense terms which apply to the Application, with which you must still\ncomply.\n\n\n                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions.\n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version.\n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/LICENSE.libyaml",
    "content": "The following files were ported to Go from C files of libyaml, and thus\nare still covered by their original copyright and license:\n\n    apic.go\n    emitterc.go\n    parserc.go\n    readerc.go\n    scannerc.go\n    writerc.go\n    yamlh.go\n    yamlprivateh.go\n\nCopyright (c) 2006 Kirill Simonov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/README.md",
    "content": "# YAML support for the Go language\n\nIntroduction\n------------\n\nThe yaml package enables Go programs to comfortably encode and decode YAML\nvalues. It was developed within [Canonical](https://www.canonical.com) as\npart of the [juju](https://juju.ubuntu.com) project, and is based on a\npure Go port of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML)\nC library to parse and generate YAML data quickly and reliably.\n\nCompatibility\n-------------\n\nThe yaml package supports most of YAML 1.1 and 1.2, including support for\nanchors, tags, map merging, etc. Multi-document unmarshalling is not yet\nimplemented, and base-60 floats from YAML 1.1 are purposefully not\nsupported since they're a poor design and are gone in YAML 1.2.\n\nInstallation and usage\n----------------------\n\nThe import path for the package is *gopkg.in/yaml.v1*.\n\nTo install it, run:\n\n    go get gopkg.in/yaml.v1\n\nAPI documentation\n-----------------\n\nIf opened in a browser, the import path itself leads to the API documentation:\n\n  * [https://gopkg.in/yaml.v1](https://gopkg.in/yaml.v1)\n\nAPI stability\n-------------\n\nThe package API for yaml v1 will remain stable as described in [gopkg.in](https://gopkg.in).\n\n\nLicense\n-------\n\nThe yaml package is licensed under the LGPL with an exception that allows it to be linked statically. Please see the LICENSE file for details.\n\n\nExample\n-------\n\n```Go\npackage main\n\nimport (\n        \"fmt\"\n        \"log\"\n\n        \"gopkg.in/yaml.v1\"\n)\n\nvar data = `\na: Easy!\nb:\n  c: 2\n  d: [3, 4]\n`\n\ntype T struct {\n        A string\n        B struct{C int; D []int \",flow\"}\n}\n\nfunc main() {\n        t := T{}\n    \n        err := yaml.Unmarshal([]byte(data), &t)\n        if err != nil {\n                log.Fatalf(\"error: %v\", err)\n        }\n        fmt.Printf(\"--- t:\\n%v\\n\\n\", t)\n    \n        d, err := yaml.Marshal(&t)\n        if err != nil {\n                log.Fatalf(\"error: %v\", err)\n        }\n        fmt.Printf(\"--- t dump:\\n%s\\n\\n\", string(d))\n    \n        m := make(map[interface{}]interface{})\n    \n        err = yaml.Unmarshal([]byte(data), &m)\n        if err != nil {\n                log.Fatalf(\"error: %v\", err)\n        }\n        fmt.Printf(\"--- m:\\n%v\\n\\n\", m)\n    \n        d, err = yaml.Marshal(&m)\n        if err != nil {\n                log.Fatalf(\"error: %v\", err)\n        }\n        fmt.Printf(\"--- m dump:\\n%s\\n\\n\", string(d))\n}\n```\n\nThis example will generate the following output:\n\n```\n--- t:\n{Easy! {2 [3 4]}}\n\n--- t dump:\na: Easy!\nb:\n  c: 2\n  d: [3, 4]\n\n\n--- m:\nmap[a:Easy! b:map[c:2 d:[3 4]]]\n\n--- m dump:\na: Easy!\nb:\n  c: 2\n  d:\n  - 3\n  - 4\n```\n\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/apic.go",
    "content": "package yaml\n\nimport (\n\t\"io\"\n\t\"os\"\n)\n\nfunc yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) {\n\t//fmt.Println(\"yaml_insert_token\", \"pos:\", pos, \"typ:\", token.typ, \"head:\", parser.tokens_head, \"len:\", len(parser.tokens))\n\n\t// Check if we can move the queue at the beginning of the buffer.\n\tif parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) {\n\t\tif parser.tokens_head != len(parser.tokens) {\n\t\t\tcopy(parser.tokens, parser.tokens[parser.tokens_head:])\n\t\t}\n\t\tparser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head]\n\t\tparser.tokens_head = 0\n\t}\n\tparser.tokens = append(parser.tokens, *token)\n\tif pos < 0 {\n\t\treturn\n\t}\n\tcopy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:])\n\tparser.tokens[parser.tokens_head+pos] = *token\n}\n\n// Create a new parser object.\nfunc yaml_parser_initialize(parser *yaml_parser_t) bool {\n\t*parser = yaml_parser_t{\n\t\traw_buffer: make([]byte, 0, input_raw_buffer_size),\n\t\tbuffer:     make([]byte, 0, input_buffer_size),\n\t}\n\treturn true\n}\n\n// Destroy a parser object.\nfunc yaml_parser_delete(parser *yaml_parser_t) {\n\t*parser = yaml_parser_t{}\n}\n\n// String read handler.\nfunc yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {\n\tif parser.input_pos == len(parser.input) {\n\t\treturn 0, io.EOF\n\t}\n\tn = copy(buffer, parser.input[parser.input_pos:])\n\tparser.input_pos += n\n\treturn n, nil\n}\n\n// File read handler.\nfunc yaml_file_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {\n\treturn parser.input_file.Read(buffer)\n}\n\n// Set a string input.\nfunc yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) {\n\tif parser.read_handler != nil {\n\t\tpanic(\"must set the input source only once\")\n\t}\n\tparser.read_handler = yaml_string_read_handler\n\tparser.input = input\n\tparser.input_pos = 0\n}\n\n// Set a file input.\nfunc yaml_parser_set_input_file(parser *yaml_parser_t, file *os.File) {\n\tif parser.read_handler != nil {\n\t\tpanic(\"must set the input source only once\")\n\t}\n\tparser.read_handler = yaml_file_read_handler\n\tparser.input_file = file\n}\n\n// Set the source encoding.\nfunc yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) {\n\tif parser.encoding != yaml_ANY_ENCODING {\n\t\tpanic(\"must set the encoding only once\")\n\t}\n\tparser.encoding = encoding\n}\n\n// Create a new emitter object.\nfunc yaml_emitter_initialize(emitter *yaml_emitter_t) bool {\n\t*emitter = yaml_emitter_t{\n\t\tbuffer:     make([]byte, output_buffer_size),\n\t\traw_buffer: make([]byte, 0, output_raw_buffer_size),\n\t\tstates:     make([]yaml_emitter_state_t, 0, initial_stack_size),\n\t\tevents:     make([]yaml_event_t, 0, initial_queue_size),\n\t}\n\treturn true\n}\n\n// Destroy an emitter object.\nfunc yaml_emitter_delete(emitter *yaml_emitter_t) {\n\t*emitter = yaml_emitter_t{}\n}\n\n// String write handler.\nfunc yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error {\n\t*emitter.output_buffer = append(*emitter.output_buffer, buffer...)\n\treturn nil\n}\n\n// File write handler.\nfunc yaml_file_write_handler(emitter *yaml_emitter_t, buffer []byte) error {\n\t_, err := emitter.output_file.Write(buffer)\n\treturn err\n}\n\n// Set a string output.\nfunc yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) {\n\tif emitter.write_handler != nil {\n\t\tpanic(\"must set the output target only once\")\n\t}\n\temitter.write_handler = yaml_string_write_handler\n\temitter.output_buffer = output_buffer\n}\n\n// Set a file output.\nfunc yaml_emitter_set_output_file(emitter *yaml_emitter_t, file io.Writer) {\n\tif emitter.write_handler != nil {\n\t\tpanic(\"must set the output target only once\")\n\t}\n\temitter.write_handler = yaml_file_write_handler\n\temitter.output_file = file\n}\n\n// Set the output encoding.\nfunc yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) {\n\tif emitter.encoding != yaml_ANY_ENCODING {\n\t\tpanic(\"must set the output encoding only once\")\n\t}\n\temitter.encoding = encoding\n}\n\n// Set the canonical output style.\nfunc yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) {\n\temitter.canonical = canonical\n}\n\n//// Set the indentation increment.\nfunc yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) {\n\tif indent < 2 || indent > 9 {\n\t\tindent = 2\n\t}\n\temitter.best_indent = indent\n}\n\n// Set the preferred line width.\nfunc yaml_emitter_set_width(emitter *yaml_emitter_t, width int) {\n\tif width < 0 {\n\t\twidth = -1\n\t}\n\temitter.best_width = width\n}\n\n// Set if unescaped non-ASCII characters are allowed.\nfunc yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) {\n\temitter.unicode = unicode\n}\n\n// Set the preferred line break character.\nfunc yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) {\n\temitter.line_break = line_break\n}\n\n///*\n// * Destroy a token object.\n// */\n//\n//YAML_DECLARE(void)\n//yaml_token_delete(yaml_token_t *token)\n//{\n//    assert(token);  // Non-NULL token object expected.\n//\n//    switch (token.type)\n//    {\n//        case YAML_TAG_DIRECTIVE_TOKEN:\n//            yaml_free(token.data.tag_directive.handle);\n//            yaml_free(token.data.tag_directive.prefix);\n//            break;\n//\n//        case YAML_ALIAS_TOKEN:\n//            yaml_free(token.data.alias.value);\n//            break;\n//\n//        case YAML_ANCHOR_TOKEN:\n//            yaml_free(token.data.anchor.value);\n//            break;\n//\n//        case YAML_TAG_TOKEN:\n//            yaml_free(token.data.tag.handle);\n//            yaml_free(token.data.tag.suffix);\n//            break;\n//\n//        case YAML_SCALAR_TOKEN:\n//            yaml_free(token.data.scalar.value);\n//            break;\n//\n//        default:\n//            break;\n//    }\n//\n//    memset(token, 0, sizeof(yaml_token_t));\n//}\n//\n///*\n// * Check if a string is a valid UTF-8 sequence.\n// *\n// * Check 'reader.c' for more details on UTF-8 encoding.\n// */\n//\n//static int\n//yaml_check_utf8(yaml_char_t *start, size_t length)\n//{\n//    yaml_char_t *end = start+length;\n//    yaml_char_t *pointer = start;\n//\n//    while (pointer < end) {\n//        unsigned char octet;\n//        unsigned int width;\n//        unsigned int value;\n//        size_t k;\n//\n//        octet = pointer[0];\n//        width = (octet & 0x80) == 0x00 ? 1 :\n//                (octet & 0xE0) == 0xC0 ? 2 :\n//                (octet & 0xF0) == 0xE0 ? 3 :\n//                (octet & 0xF8) == 0xF0 ? 4 : 0;\n//        value = (octet & 0x80) == 0x00 ? octet & 0x7F :\n//                (octet & 0xE0) == 0xC0 ? octet & 0x1F :\n//                (octet & 0xF0) == 0xE0 ? octet & 0x0F :\n//                (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;\n//        if (!width) return 0;\n//        if (pointer+width > end) return 0;\n//        for (k = 1; k < width; k ++) {\n//            octet = pointer[k];\n//            if ((octet & 0xC0) != 0x80) return 0;\n//            value = (value << 6) + (octet & 0x3F);\n//        }\n//        if (!((width == 1) ||\n//            (width == 2 && value >= 0x80) ||\n//            (width == 3 && value >= 0x800) ||\n//            (width == 4 && value >= 0x10000))) return 0;\n//\n//        pointer += width;\n//    }\n//\n//    return 1;\n//}\n//\n\n// Create STREAM-START.\nfunc yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_STREAM_START_EVENT,\n\t\tencoding: encoding,\n\t}\n\treturn true\n}\n\n// Create STREAM-END.\nfunc yaml_stream_end_event_initialize(event *yaml_event_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp: yaml_STREAM_END_EVENT,\n\t}\n\treturn true\n}\n\n// Create DOCUMENT-START.\nfunc yaml_document_start_event_initialize(event *yaml_event_t, version_directive *yaml_version_directive_t,\n\ttag_directives []yaml_tag_directive_t, implicit bool) bool {\n\t*event = yaml_event_t{\n\t\ttyp:               yaml_DOCUMENT_START_EVENT,\n\t\tversion_directive: version_directive,\n\t\ttag_directives:    tag_directives,\n\t\timplicit:          implicit,\n\t}\n\treturn true\n}\n\n// Create DOCUMENT-END.\nfunc yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) bool {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_DOCUMENT_END_EVENT,\n\t\timplicit: implicit,\n\t}\n\treturn true\n}\n\n///*\n// * Create ALIAS.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_alias_event_initialize(event *yaml_event_t, anchor *yaml_char_t)\n//{\n//    mark yaml_mark_t = { 0, 0, 0 }\n//    anchor_copy *yaml_char_t = NULL\n//\n//    assert(event) // Non-NULL event object is expected.\n//    assert(anchor) // Non-NULL anchor is expected.\n//\n//    if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0\n//\n//    anchor_copy = yaml_strdup(anchor)\n//    if (!anchor_copy)\n//        return 0\n//\n//    ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark)\n//\n//    return 1\n//}\n\n// Create SCALAR.\nfunc yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:             yaml_SCALAR_EVENT,\n\t\tanchor:          anchor,\n\t\ttag:             tag,\n\t\tvalue:           value,\n\t\timplicit:        plain_implicit,\n\t\tquoted_implicit: quoted_implicit,\n\t\tstyle:           yaml_style_t(style),\n\t}\n\treturn true\n}\n\n// Create SEQUENCE-START.\nfunc yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_SEQUENCE_START_EVENT,\n\t\tanchor:   anchor,\n\t\ttag:      tag,\n\t\timplicit: implicit,\n\t\tstyle:    yaml_style_t(style),\n\t}\n\treturn true\n}\n\n// Create SEQUENCE-END.\nfunc yaml_sequence_end_event_initialize(event *yaml_event_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp: yaml_SEQUENCE_END_EVENT,\n\t}\n\treturn true\n}\n\n// Create MAPPING-START.\nfunc yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_MAPPING_START_EVENT,\n\t\tanchor:   anchor,\n\t\ttag:      tag,\n\t\timplicit: implicit,\n\t\tstyle:    yaml_style_t(style),\n\t}\n\treturn true\n}\n\n// Create MAPPING-END.\nfunc yaml_mapping_end_event_initialize(event *yaml_event_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp: yaml_MAPPING_END_EVENT,\n\t}\n\treturn true\n}\n\n// Destroy an event object.\nfunc yaml_event_delete(event *yaml_event_t) {\n\t*event = yaml_event_t{}\n}\n\n///*\n// * Create a document object.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_initialize(document *yaml_document_t,\n//        version_directive *yaml_version_directive_t,\n//        tag_directives_start *yaml_tag_directive_t,\n//        tag_directives_end *yaml_tag_directive_t,\n//        start_implicit int, end_implicit int)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    struct {\n//        start *yaml_node_t\n//        end *yaml_node_t\n//        top *yaml_node_t\n//    } nodes = { NULL, NULL, NULL }\n//    version_directive_copy *yaml_version_directive_t = NULL\n//    struct {\n//        start *yaml_tag_directive_t\n//        end *yaml_tag_directive_t\n//        top *yaml_tag_directive_t\n//    } tag_directives_copy = { NULL, NULL, NULL }\n//    value yaml_tag_directive_t = { NULL, NULL }\n//    mark yaml_mark_t = { 0, 0, 0 }\n//\n//    assert(document) // Non-NULL document object is expected.\n//    assert((tag_directives_start && tag_directives_end) ||\n//            (tag_directives_start == tag_directives_end))\n//                            // Valid tag directives are expected.\n//\n//    if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error\n//\n//    if (version_directive) {\n//        version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t))\n//        if (!version_directive_copy) goto error\n//        version_directive_copy.major = version_directive.major\n//        version_directive_copy.minor = version_directive.minor\n//    }\n//\n//    if (tag_directives_start != tag_directives_end) {\n//        tag_directive *yaml_tag_directive_t\n//        if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE))\n//            goto error\n//        for (tag_directive = tag_directives_start\n//                tag_directive != tag_directives_end; tag_directive ++) {\n//            assert(tag_directive.handle)\n//            assert(tag_directive.prefix)\n//            if (!yaml_check_utf8(tag_directive.handle,\n//                        strlen((char *)tag_directive.handle)))\n//                goto error\n//            if (!yaml_check_utf8(tag_directive.prefix,\n//                        strlen((char *)tag_directive.prefix)))\n//                goto error\n//            value.handle = yaml_strdup(tag_directive.handle)\n//            value.prefix = yaml_strdup(tag_directive.prefix)\n//            if (!value.handle || !value.prefix) goto error\n//            if (!PUSH(&context, tag_directives_copy, value))\n//                goto error\n//            value.handle = NULL\n//            value.prefix = NULL\n//        }\n//    }\n//\n//    DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy,\n//            tag_directives_copy.start, tag_directives_copy.top,\n//            start_implicit, end_implicit, mark, mark)\n//\n//    return 1\n//\n//error:\n//    STACK_DEL(&context, nodes)\n//    yaml_free(version_directive_copy)\n//    while (!STACK_EMPTY(&context, tag_directives_copy)) {\n//        value yaml_tag_directive_t = POP(&context, tag_directives_copy)\n//        yaml_free(value.handle)\n//        yaml_free(value.prefix)\n//    }\n//    STACK_DEL(&context, tag_directives_copy)\n//    yaml_free(value.handle)\n//    yaml_free(value.prefix)\n//\n//    return 0\n//}\n//\n///*\n// * Destroy a document object.\n// */\n//\n//YAML_DECLARE(void)\n//yaml_document_delete(document *yaml_document_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    tag_directive *yaml_tag_directive_t\n//\n//    context.error = YAML_NO_ERROR // Eliminate a compliler warning.\n//\n//    assert(document) // Non-NULL document object is expected.\n//\n//    while (!STACK_EMPTY(&context, document.nodes)) {\n//        node yaml_node_t = POP(&context, document.nodes)\n//        yaml_free(node.tag)\n//        switch (node.type) {\n//            case YAML_SCALAR_NODE:\n//                yaml_free(node.data.scalar.value)\n//                break\n//            case YAML_SEQUENCE_NODE:\n//                STACK_DEL(&context, node.data.sequence.items)\n//                break\n//            case YAML_MAPPING_NODE:\n//                STACK_DEL(&context, node.data.mapping.pairs)\n//                break\n//            default:\n//                assert(0) // Should not happen.\n//        }\n//    }\n//    STACK_DEL(&context, document.nodes)\n//\n//    yaml_free(document.version_directive)\n//    for (tag_directive = document.tag_directives.start\n//            tag_directive != document.tag_directives.end\n//            tag_directive++) {\n//        yaml_free(tag_directive.handle)\n//        yaml_free(tag_directive.prefix)\n//    }\n//    yaml_free(document.tag_directives.start)\n//\n//    memset(document, 0, sizeof(yaml_document_t))\n//}\n//\n///**\n// * Get a document node.\n// */\n//\n//YAML_DECLARE(yaml_node_t *)\n//yaml_document_get_node(document *yaml_document_t, index int)\n//{\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (index > 0 && document.nodes.start + index <= document.nodes.top) {\n//        return document.nodes.start + index - 1\n//    }\n//    return NULL\n//}\n//\n///**\n// * Get the root object.\n// */\n//\n//YAML_DECLARE(yaml_node_t *)\n//yaml_document_get_root_node(document *yaml_document_t)\n//{\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (document.nodes.top != document.nodes.start) {\n//        return document.nodes.start\n//    }\n//    return NULL\n//}\n//\n///*\n// * Add a scalar node to a document.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_add_scalar(document *yaml_document_t,\n//        tag *yaml_char_t, value *yaml_char_t, length int,\n//        style yaml_scalar_style_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    mark yaml_mark_t = { 0, 0, 0 }\n//    tag_copy *yaml_char_t = NULL\n//    value_copy *yaml_char_t = NULL\n//    node yaml_node_t\n//\n//    assert(document) // Non-NULL document object is expected.\n//    assert(value) // Non-NULL value is expected.\n//\n//    if (!tag) {\n//        tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG\n//    }\n//\n//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error\n//    tag_copy = yaml_strdup(tag)\n//    if (!tag_copy) goto error\n//\n//    if (length < 0) {\n//        length = strlen((char *)value)\n//    }\n//\n//    if (!yaml_check_utf8(value, length)) goto error\n//    value_copy = yaml_malloc(length+1)\n//    if (!value_copy) goto error\n//    memcpy(value_copy, value, length)\n//    value_copy[length] = '\\0'\n//\n//    SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark)\n//    if (!PUSH(&context, document.nodes, node)) goto error\n//\n//    return document.nodes.top - document.nodes.start\n//\n//error:\n//    yaml_free(tag_copy)\n//    yaml_free(value_copy)\n//\n//    return 0\n//}\n//\n///*\n// * Add a sequence node to a document.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_add_sequence(document *yaml_document_t,\n//        tag *yaml_char_t, style yaml_sequence_style_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    mark yaml_mark_t = { 0, 0, 0 }\n//    tag_copy *yaml_char_t = NULL\n//    struct {\n//        start *yaml_node_item_t\n//        end *yaml_node_item_t\n//        top *yaml_node_item_t\n//    } items = { NULL, NULL, NULL }\n//    node yaml_node_t\n//\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (!tag) {\n//        tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG\n//    }\n//\n//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error\n//    tag_copy = yaml_strdup(tag)\n//    if (!tag_copy) goto error\n//\n//    if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error\n//\n//    SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end,\n//            style, mark, mark)\n//    if (!PUSH(&context, document.nodes, node)) goto error\n//\n//    return document.nodes.top - document.nodes.start\n//\n//error:\n//    STACK_DEL(&context, items)\n//    yaml_free(tag_copy)\n//\n//    return 0\n//}\n//\n///*\n// * Add a mapping node to a document.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_add_mapping(document *yaml_document_t,\n//        tag *yaml_char_t, style yaml_mapping_style_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    mark yaml_mark_t = { 0, 0, 0 }\n//    tag_copy *yaml_char_t = NULL\n//    struct {\n//        start *yaml_node_pair_t\n//        end *yaml_node_pair_t\n//        top *yaml_node_pair_t\n//    } pairs = { NULL, NULL, NULL }\n//    node yaml_node_t\n//\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (!tag) {\n//        tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG\n//    }\n//\n//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error\n//    tag_copy = yaml_strdup(tag)\n//    if (!tag_copy) goto error\n//\n//    if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error\n//\n//    MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end,\n//            style, mark, mark)\n//    if (!PUSH(&context, document.nodes, node)) goto error\n//\n//    return document.nodes.top - document.nodes.start\n//\n//error:\n//    STACK_DEL(&context, pairs)\n//    yaml_free(tag_copy)\n//\n//    return 0\n//}\n//\n///*\n// * Append an item to a sequence node.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_append_sequence_item(document *yaml_document_t,\n//        sequence int, item int)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//\n//    assert(document) // Non-NULL document is required.\n//    assert(sequence > 0\n//            && document.nodes.start + sequence <= document.nodes.top)\n//                            // Valid sequence id is required.\n//    assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE)\n//                            // A sequence node is required.\n//    assert(item > 0 && document.nodes.start + item <= document.nodes.top)\n//                            // Valid item id is required.\n//\n//    if (!PUSH(&context,\n//                document.nodes.start[sequence-1].data.sequence.items, item))\n//        return 0\n//\n//    return 1\n//}\n//\n///*\n// * Append a pair of a key and a value to a mapping node.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_append_mapping_pair(document *yaml_document_t,\n//        mapping int, key int, value int)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//\n//    pair yaml_node_pair_t\n//\n//    assert(document) // Non-NULL document is required.\n//    assert(mapping > 0\n//            && document.nodes.start + mapping <= document.nodes.top)\n//                            // Valid mapping id is required.\n//    assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE)\n//                            // A mapping node is required.\n//    assert(key > 0 && document.nodes.start + key <= document.nodes.top)\n//                            // Valid key id is required.\n//    assert(value > 0 && document.nodes.start + value <= document.nodes.top)\n//                            // Valid value id is required.\n//\n//    pair.key = key\n//    pair.value = value\n//\n//    if (!PUSH(&context,\n//                document.nodes.start[mapping-1].data.mapping.pairs, pair))\n//        return 0\n//\n//    return 1\n//}\n//\n//\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/decode.go",
    "content": "package yaml\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"time\"\n)\n\nconst (\n\tdocumentNode = 1 << iota\n\tmappingNode\n\tsequenceNode\n\tscalarNode\n\taliasNode\n)\n\ntype node struct {\n\tkind         int\n\tline, column int\n\ttag          string\n\tvalue        string\n\timplicit     bool\n\tchildren     []*node\n\tanchors      map[string]*node\n}\n\n// ----------------------------------------------------------------------------\n// Parser, produces a node tree out of a libyaml event stream.\n\ntype parser struct {\n\tparser yaml_parser_t\n\tevent  yaml_event_t\n\tdoc    *node\n}\n\nfunc newParser(b []byte) *parser {\n\tp := parser{}\n\tif !yaml_parser_initialize(&p.parser) {\n\t\tpanic(\"Failed to initialize YAML emitter\")\n\t}\n\n\tif len(b) == 0 {\n\t\tb = []byte{'\\n'}\n\t}\n\n\tyaml_parser_set_input_string(&p.parser, b)\n\n\tp.skip()\n\tif p.event.typ != yaml_STREAM_START_EVENT {\n\t\tpanic(\"Expected stream start event, got \" + strconv.Itoa(int(p.event.typ)))\n\t}\n\tp.skip()\n\treturn &p\n}\n\nfunc (p *parser) destroy() {\n\tif p.event.typ != yaml_NO_EVENT {\n\t\tyaml_event_delete(&p.event)\n\t}\n\tyaml_parser_delete(&p.parser)\n}\n\nfunc (p *parser) skip() {\n\tif p.event.typ != yaml_NO_EVENT {\n\t\tif p.event.typ == yaml_STREAM_END_EVENT {\n\t\t\tfail(\"Attempted to go past the end of stream. Corrupted value?\")\n\t\t}\n\t\tyaml_event_delete(&p.event)\n\t}\n\tif !yaml_parser_parse(&p.parser, &p.event) {\n\t\tp.fail()\n\t}\n}\n\nfunc (p *parser) fail() {\n\tvar where string\n\tvar line int\n\tif p.parser.problem_mark.line != 0 {\n\t\tline = p.parser.problem_mark.line\n\t} else if p.parser.context_mark.line != 0 {\n\t\tline = p.parser.context_mark.line\n\t}\n\tif line != 0 {\n\t\twhere = \"line \" + strconv.Itoa(line) + \": \"\n\t}\n\tvar msg string\n\tif len(p.parser.problem) > 0 {\n\t\tmsg = p.parser.problem\n\t} else {\n\t\tmsg = \"Unknown problem parsing YAML content\"\n\t}\n\tfail(where + msg)\n}\n\nfunc (p *parser) anchor(n *node, anchor []byte) {\n\tif anchor != nil {\n\t\tp.doc.anchors[string(anchor)] = n\n\t}\n}\n\nfunc (p *parser) parse() *node {\n\tswitch p.event.typ {\n\tcase yaml_SCALAR_EVENT:\n\t\treturn p.scalar()\n\tcase yaml_ALIAS_EVENT:\n\t\treturn p.alias()\n\tcase yaml_MAPPING_START_EVENT:\n\t\treturn p.mapping()\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\treturn p.sequence()\n\tcase yaml_DOCUMENT_START_EVENT:\n\t\treturn p.document()\n\tcase yaml_STREAM_END_EVENT:\n\t\t// Happens when attempting to decode an empty buffer.\n\t\treturn nil\n\tdefault:\n\t\tpanic(\"Attempted to parse unknown event: \" + strconv.Itoa(int(p.event.typ)))\n\t}\n\tpanic(\"unreachable\")\n}\n\nfunc (p *parser) node(kind int) *node {\n\treturn &node{\n\t\tkind:   kind,\n\t\tline:   p.event.start_mark.line,\n\t\tcolumn: p.event.start_mark.column,\n\t}\n}\n\nfunc (p *parser) document() *node {\n\tn := p.node(documentNode)\n\tn.anchors = make(map[string]*node)\n\tp.doc = n\n\tp.skip()\n\tn.children = append(n.children, p.parse())\n\tif p.event.typ != yaml_DOCUMENT_END_EVENT {\n\t\tpanic(\"Expected end of document event but got \" + strconv.Itoa(int(p.event.typ)))\n\t}\n\tp.skip()\n\treturn n\n}\n\nfunc (p *parser) alias() *node {\n\tn := p.node(aliasNode)\n\tn.value = string(p.event.anchor)\n\tp.skip()\n\treturn n\n}\n\nfunc (p *parser) scalar() *node {\n\tn := p.node(scalarNode)\n\tn.value = string(p.event.value)\n\tn.tag = string(p.event.tag)\n\tn.implicit = p.event.implicit\n\tp.anchor(n, p.event.anchor)\n\tp.skip()\n\treturn n\n}\n\nfunc (p *parser) sequence() *node {\n\tn := p.node(sequenceNode)\n\tp.anchor(n, p.event.anchor)\n\tp.skip()\n\tfor p.event.typ != yaml_SEQUENCE_END_EVENT {\n\t\tn.children = append(n.children, p.parse())\n\t}\n\tp.skip()\n\treturn n\n}\n\nfunc (p *parser) mapping() *node {\n\tn := p.node(mappingNode)\n\tp.anchor(n, p.event.anchor)\n\tp.skip()\n\tfor p.event.typ != yaml_MAPPING_END_EVENT {\n\t\tn.children = append(n.children, p.parse(), p.parse())\n\t}\n\tp.skip()\n\treturn n\n}\n\n// ----------------------------------------------------------------------------\n// Decoder, unmarshals a node into a provided value.\n\ntype decoder struct {\n\tdoc     *node\n\taliases map[string]bool\n}\n\nfunc newDecoder() *decoder {\n\td := &decoder{}\n\td.aliases = make(map[string]bool)\n\treturn d\n}\n\n// d.setter deals with setters and pointer dereferencing and initialization.\n//\n// It's a slightly convoluted case to handle properly:\n//\n// - nil pointers should be initialized, unless being set to nil\n// - we don't know at this point yet what's the value to SetYAML() with.\n// - we can't separate pointer deref/init and setter checking, because\n//   a setter may be found while going down a pointer chain.\n//\n// Thus, here is how it takes care of it:\n//\n// - out is provided as a pointer, so that it can be replaced.\n// - when looking at a non-setter ptr, *out=ptr.Elem(), unless tag=!!null\n// - when a setter is found, *out=interface{}, and a set() function is\n//   returned to call SetYAML() with the value of *out once it's defined.\n//\nfunc (d *decoder) setter(tag string, out *reflect.Value, good *bool) (set func()) {\n\tif (*out).Kind() != reflect.Ptr && (*out).CanAddr() {\n\t\tsetter, _ := (*out).Addr().Interface().(Setter)\n\t\tif setter != nil {\n\t\t\tvar arg interface{}\n\t\t\t*out = reflect.ValueOf(&arg).Elem()\n\t\t\treturn func() {\n\t\t\t\t*good = setter.SetYAML(shortTag(tag), arg)\n\t\t\t}\n\t\t}\n\t}\n\tagain := true\n\tfor again {\n\t\tagain = false\n\t\tsetter, _ := (*out).Interface().(Setter)\n\t\tif tag != yaml_NULL_TAG || setter != nil {\n\t\t\tif pv := (*out); pv.Kind() == reflect.Ptr {\n\t\t\t\tif pv.IsNil() {\n\t\t\t\t\t*out = reflect.New(pv.Type().Elem()).Elem()\n\t\t\t\t\tpv.Set((*out).Addr())\n\t\t\t\t} else {\n\t\t\t\t\t*out = pv.Elem()\n\t\t\t\t}\n\t\t\t\tsetter, _ = pv.Interface().(Setter)\n\t\t\t\tagain = true\n\t\t\t}\n\t\t}\n\t\tif setter != nil {\n\t\t\tvar arg interface{}\n\t\t\t*out = reflect.ValueOf(&arg).Elem()\n\t\t\treturn func() {\n\t\t\t\t*good = setter.SetYAML(shortTag(tag), arg)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (d *decoder) unmarshal(n *node, out reflect.Value) (good bool) {\n\tswitch n.kind {\n\tcase documentNode:\n\t\tgood = d.document(n, out)\n\tcase scalarNode:\n\t\tgood = d.scalar(n, out)\n\tcase aliasNode:\n\t\tgood = d.alias(n, out)\n\tcase mappingNode:\n\t\tgood = d.mapping(n, out)\n\tcase sequenceNode:\n\t\tgood = d.sequence(n, out)\n\tdefault:\n\t\tpanic(\"Internal error: unknown node kind: \" + strconv.Itoa(n.kind))\n\t}\n\treturn\n}\n\nfunc (d *decoder) document(n *node, out reflect.Value) (good bool) {\n\tif len(n.children) == 1 {\n\t\td.doc = n\n\t\td.unmarshal(n.children[0], out)\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (d *decoder) alias(n *node, out reflect.Value) (good bool) {\n\tan, ok := d.doc.anchors[n.value]\n\tif !ok {\n\t\tfail(\"Unknown anchor '\" + n.value + \"' referenced\")\n\t}\n\tif d.aliases[n.value] {\n\t\tfail(\"Anchor '\" + n.value + \"' value contains itself\")\n\t}\n\td.aliases[n.value] = true\n\tgood = d.unmarshal(an, out)\n\tdelete(d.aliases, n.value)\n\treturn good\n}\n\nvar zeroValue reflect.Value\n\nfunc resetMap(out reflect.Value) {\n\tfor _, k := range out.MapKeys() {\n\t\tout.SetMapIndex(k, zeroValue)\n\t}\n}\n\nvar durationType = reflect.TypeOf(time.Duration(0))\n\nfunc (d *decoder) scalar(n *node, out reflect.Value) (good bool) {\n\tvar tag string\n\tvar resolved interface{}\n\tif n.tag == \"\" && !n.implicit {\n\t\ttag = yaml_STR_TAG\n\t\tresolved = n.value\n\t} else {\n\t\ttag, resolved = resolve(n.tag, n.value)\n\t\tif tag == yaml_BINARY_TAG {\n\t\t\tdata, err := base64.StdEncoding.DecodeString(resolved.(string))\n\t\t\tif err != nil {\n\t\t\t\tfail(\"!!binary value contains invalid base64 data\")\n\t\t\t}\n\t\t\tresolved = string(data)\n\t\t}\n\t}\n\tif set := d.setter(tag, &out, &good); set != nil {\n\t\tdefer set()\n\t}\n\tif resolved == nil {\n\t\tif out.Kind() == reflect.Map && !out.CanAddr() {\n\t\t\tresetMap(out)\n\t\t} else {\n\t\t\tout.Set(reflect.Zero(out.Type()))\n\t\t}\n\t\tgood = true\n\t\treturn\n\t}\n\tswitch out.Kind() {\n\tcase reflect.String:\n\t\tif tag == yaml_BINARY_TAG {\n\t\t\tout.SetString(resolved.(string))\n\t\t\tgood = true\n\t\t} else if resolved != nil {\n\t\t\tout.SetString(n.value)\n\t\t\tgood = true\n\t\t}\n\tcase reflect.Interface:\n\t\tif resolved == nil {\n\t\t\tout.Set(reflect.Zero(out.Type()))\n\t\t} else {\n\t\t\tout.Set(reflect.ValueOf(resolved))\n\t\t}\n\t\tgood = true\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tswitch resolved := resolved.(type) {\n\t\tcase int:\n\t\t\tif !out.OverflowInt(int64(resolved)) {\n\t\t\t\tout.SetInt(int64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase int64:\n\t\t\tif !out.OverflowInt(resolved) {\n\t\t\t\tout.SetInt(resolved)\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase float64:\n\t\t\tif resolved < 1<<63-1 && !out.OverflowInt(int64(resolved)) {\n\t\t\t\tout.SetInt(int64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase string:\n\t\t\tif out.Type() == durationType {\n\t\t\t\td, err := time.ParseDuration(resolved)\n\t\t\t\tif err == nil {\n\t\t\t\t\tout.SetInt(int64(d))\n\t\t\t\t\tgood = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tswitch resolved := resolved.(type) {\n\t\tcase int:\n\t\t\tif resolved >= 0 {\n\t\t\t\tout.SetUint(uint64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase int64:\n\t\t\tif resolved >= 0 {\n\t\t\t\tout.SetUint(uint64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\tcase float64:\n\t\t\tif resolved < 1<<64-1 && !out.OverflowUint(uint64(resolved)) {\n\t\t\t\tout.SetUint(uint64(resolved))\n\t\t\t\tgood = true\n\t\t\t}\n\t\t}\n\tcase reflect.Bool:\n\t\tswitch resolved := resolved.(type) {\n\t\tcase bool:\n\t\t\tout.SetBool(resolved)\n\t\t\tgood = true\n\t\t}\n\tcase reflect.Float32, reflect.Float64:\n\t\tswitch resolved := resolved.(type) {\n\t\tcase int:\n\t\t\tout.SetFloat(float64(resolved))\n\t\t\tgood = true\n\t\tcase int64:\n\t\t\tout.SetFloat(float64(resolved))\n\t\t\tgood = true\n\t\tcase float64:\n\t\t\tout.SetFloat(resolved)\n\t\t\tgood = true\n\t\t}\n\tcase reflect.Ptr:\n\t\tif out.Type().Elem() == reflect.TypeOf(resolved) {\n\t\t\telem := reflect.New(out.Type().Elem())\n\t\t\telem.Elem().Set(reflect.ValueOf(resolved))\n\t\t\tout.Set(elem)\n\t\t\tgood = true\n\t\t}\n\t}\n\treturn good\n}\n\nfunc settableValueOf(i interface{}) reflect.Value {\n\tv := reflect.ValueOf(i)\n\tsv := reflect.New(v.Type()).Elem()\n\tsv.Set(v)\n\treturn sv\n}\n\nfunc (d *decoder) sequence(n *node, out reflect.Value) (good bool) {\n\tif set := d.setter(yaml_SEQ_TAG, &out, &good); set != nil {\n\t\tdefer set()\n\t}\n\tvar iface reflect.Value\n\tif out.Kind() == reflect.Interface {\n\t\t// No type hints. Will have to use a generic sequence.\n\t\tiface = out\n\t\tout = settableValueOf(make([]interface{}, 0))\n\t}\n\n\tif out.Kind() != reflect.Slice {\n\t\treturn false\n\t}\n\tet := out.Type().Elem()\n\n\tl := len(n.children)\n\tfor i := 0; i < l; i++ {\n\t\te := reflect.New(et).Elem()\n\t\tif ok := d.unmarshal(n.children[i], e); ok {\n\t\t\tout.Set(reflect.Append(out, e))\n\t\t}\n\t}\n\tif iface.IsValid() {\n\t\tiface.Set(out)\n\t}\n\treturn true\n}\n\nfunc (d *decoder) mapping(n *node, out reflect.Value) (good bool) {\n\tif set := d.setter(yaml_MAP_TAG, &out, &good); set != nil {\n\t\tdefer set()\n\t}\n\tif out.Kind() == reflect.Struct {\n\t\treturn d.mappingStruct(n, out)\n\t}\n\n\tif out.Kind() == reflect.Interface {\n\t\t// No type hints. Will have to use a generic map.\n\t\tiface := out\n\t\tout = settableValueOf(make(map[interface{}]interface{}))\n\t\tiface.Set(out)\n\t}\n\n\tif out.Kind() != reflect.Map {\n\t\treturn false\n\t}\n\toutt := out.Type()\n\tkt := outt.Key()\n\tet := outt.Elem()\n\n\tif out.IsNil() {\n\t\tout.Set(reflect.MakeMap(outt))\n\t}\n\tl := len(n.children)\n\tfor i := 0; i < l; i += 2 {\n\t\tif isMerge(n.children[i]) {\n\t\t\td.merge(n.children[i+1], out)\n\t\t\tcontinue\n\t\t}\n\t\tk := reflect.New(kt).Elem()\n\t\tif d.unmarshal(n.children[i], k) {\n\t\t\tkkind := k.Kind()\n\t\t\tif kkind == reflect.Interface {\n\t\t\t\tkkind = k.Elem().Kind()\n\t\t\t}\n\t\t\tif kkind == reflect.Map || kkind == reflect.Slice {\n\t\t\t\tfail(fmt.Sprintf(\"invalid map key: %#v\", k.Interface()))\n\t\t\t}\n\t\t\te := reflect.New(et).Elem()\n\t\t\tif d.unmarshal(n.children[i+1], e) {\n\t\t\t\tout.SetMapIndex(k, e)\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) {\n\tsinfo, err := getStructInfo(out.Type())\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tname := settableValueOf(\"\")\n\tl := len(n.children)\n\tfor i := 0; i < l; i += 2 {\n\t\tni := n.children[i]\n\t\tif isMerge(ni) {\n\t\t\td.merge(n.children[i+1], out)\n\t\t\tcontinue\n\t\t}\n\t\tif !d.unmarshal(ni, name) {\n\t\t\tcontinue\n\t\t}\n\t\tif info, ok := sinfo.FieldsMap[name.String()]; ok {\n\t\t\tvar field reflect.Value\n\t\t\tif info.Inline == nil {\n\t\t\t\tfield = out.Field(info.Num)\n\t\t\t} else {\n\t\t\t\tfield = out.FieldByIndex(info.Inline)\n\t\t\t}\n\t\t\td.unmarshal(n.children[i+1], field)\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (d *decoder) merge(n *node, out reflect.Value) {\n\tconst wantMap = \"map merge requires map or sequence of maps as the value\"\n\tswitch n.kind {\n\tcase mappingNode:\n\t\td.unmarshal(n, out)\n\tcase aliasNode:\n\t\tan, ok := d.doc.anchors[n.value]\n\t\tif ok && an.kind != mappingNode {\n\t\t\tfail(wantMap)\n\t\t}\n\t\td.unmarshal(n, out)\n\tcase sequenceNode:\n\t\t// Step backwards as earlier nodes take precedence.\n\t\tfor i := len(n.children) - 1; i >= 0; i-- {\n\t\t\tni := n.children[i]\n\t\t\tif ni.kind == aliasNode {\n\t\t\t\tan, ok := d.doc.anchors[ni.value]\n\t\t\t\tif ok && an.kind != mappingNode {\n\t\t\t\t\tfail(wantMap)\n\t\t\t\t}\n\t\t\t} else if ni.kind != mappingNode {\n\t\t\t\tfail(wantMap)\n\t\t\t}\n\t\t\td.unmarshal(ni, out)\n\t\t}\n\tdefault:\n\t\tfail(wantMap)\n\t}\n}\n\nfunc isMerge(n *node) bool {\n\treturn n.kind == scalarNode && n.value == \"<<\" && (n.implicit == true || n.tag == yaml_MERGE_TAG)\n}\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/emitterc.go",
    "content": "package yaml\n\nimport (\n\t\"bytes\"\n)\n\n// Flush the buffer if needed.\nfunc flush(emitter *yaml_emitter_t) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) {\n\t\treturn yaml_emitter_flush(emitter)\n\t}\n\treturn true\n}\n\n// Put a character to the output buffer.\nfunc put(emitter *yaml_emitter_t, value byte) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\temitter.buffer[emitter.buffer_pos] = value\n\temitter.buffer_pos++\n\temitter.column++\n\treturn true\n}\n\n// Put a line break to the output buffer.\nfunc put_break(emitter *yaml_emitter_t) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\tswitch emitter.line_break {\n\tcase yaml_CR_BREAK:\n\t\temitter.buffer[emitter.buffer_pos] = '\\r'\n\t\temitter.buffer_pos += 1\n\tcase yaml_LN_BREAK:\n\t\temitter.buffer[emitter.buffer_pos] = '\\n'\n\t\temitter.buffer_pos += 1\n\tcase yaml_CRLN_BREAK:\n\t\temitter.buffer[emitter.buffer_pos+0] = '\\r'\n\t\temitter.buffer[emitter.buffer_pos+1] = '\\n'\n\t\temitter.buffer_pos += 2\n\tdefault:\n\t\tpanic(\"unknown line break setting\")\n\t}\n\temitter.column = 0\n\temitter.line++\n\treturn true\n}\n\n// Copy a character from a string into buffer.\nfunc write(emitter *yaml_emitter_t, s []byte, i *int) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\tp := emitter.buffer_pos\n\tw := width(s[*i])\n\tswitch w {\n\tcase 4:\n\t\temitter.buffer[p+3] = s[*i+3]\n\t\tfallthrough\n\tcase 3:\n\t\temitter.buffer[p+2] = s[*i+2]\n\t\tfallthrough\n\tcase 2:\n\t\temitter.buffer[p+1] = s[*i+1]\n\t\tfallthrough\n\tcase 1:\n\t\temitter.buffer[p+0] = s[*i+0]\n\tdefault:\n\t\tpanic(\"unknown character width\")\n\t}\n\temitter.column++\n\temitter.buffer_pos += w\n\t*i += w\n\treturn true\n}\n\n// Write a whole string into buffer.\nfunc write_all(emitter *yaml_emitter_t, s []byte) bool {\n\tfor i := 0; i < len(s); {\n\t\tif !write(emitter, s, &i) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Copy a line break character from a string into buffer.\nfunc write_break(emitter *yaml_emitter_t, s []byte, i *int) bool {\n\tif s[*i] == '\\n' {\n\t\tif !put_break(emitter) {\n\t\t\treturn false\n\t\t}\n\t\t*i++\n\t} else {\n\t\tif !write(emitter, s, i) {\n\t\t\treturn false\n\t\t}\n\t\temitter.column = 0\n\t\temitter.line++\n\t}\n\treturn true\n}\n\n// Set an emitter error and return false.\nfunc yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool {\n\temitter.error = yaml_EMITTER_ERROR\n\temitter.problem = problem\n\treturn false\n}\n\n// Emit an event.\nfunc yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\temitter.events = append(emitter.events, *event)\n\tfor !yaml_emitter_need_more_events(emitter) {\n\t\tevent := &emitter.events[emitter.events_head]\n\t\tif !yaml_emitter_analyze_event(emitter, event) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_state_machine(emitter, event) {\n\t\t\treturn false\n\t\t}\n\t\tyaml_event_delete(event)\n\t\temitter.events_head++\n\t}\n\treturn true\n}\n\n// Check if we need to accumulate more events before emitting.\n//\n// We accumulate extra\n//  - 1 event for DOCUMENT-START\n//  - 2 events for SEQUENCE-START\n//  - 3 events for MAPPING-START\n//\nfunc yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool {\n\tif emitter.events_head == len(emitter.events) {\n\t\treturn true\n\t}\n\tvar accumulate int\n\tswitch emitter.events[emitter.events_head].typ {\n\tcase yaml_DOCUMENT_START_EVENT:\n\t\taccumulate = 1\n\t\tbreak\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\taccumulate = 2\n\t\tbreak\n\tcase yaml_MAPPING_START_EVENT:\n\t\taccumulate = 3\n\t\tbreak\n\tdefault:\n\t\treturn false\n\t}\n\tif len(emitter.events)-emitter.events_head > accumulate {\n\t\treturn false\n\t}\n\tvar level int\n\tfor i := emitter.events_head; i < len(emitter.events); i++ {\n\t\tswitch emitter.events[i].typ {\n\t\tcase yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT:\n\t\t\tlevel++\n\t\tcase yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT:\n\t\t\tlevel--\n\t\t}\n\t\tif level == 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Append a directive to the directives stack.\nfunc yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool {\n\tfor i := 0; i < len(emitter.tag_directives); i++ {\n\t\tif bytes.Equal(value.handle, emitter.tag_directives[i].handle) {\n\t\t\tif allow_duplicates {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn yaml_emitter_set_emitter_error(emitter, \"duplicate %TAG directive\")\n\t\t}\n\t}\n\n\t// [Go] Do we actually need to copy this given garbage collection\n\t// and the lack of deallocating destructors?\n\ttag_copy := yaml_tag_directive_t{\n\t\thandle: make([]byte, len(value.handle)),\n\t\tprefix: make([]byte, len(value.prefix)),\n\t}\n\tcopy(tag_copy.handle, value.handle)\n\tcopy(tag_copy.prefix, value.prefix)\n\temitter.tag_directives = append(emitter.tag_directives, tag_copy)\n\treturn true\n}\n\n// Increase the indentation level.\nfunc yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool {\n\temitter.indents = append(emitter.indents, emitter.indent)\n\tif emitter.indent < 0 {\n\t\tif flow {\n\t\t\temitter.indent = emitter.best_indent\n\t\t} else {\n\t\t\temitter.indent = 0\n\t\t}\n\t} else if !indentless {\n\t\temitter.indent += emitter.best_indent\n\t}\n\treturn true\n}\n\n// State dispatcher.\nfunc yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tswitch emitter.state {\n\tdefault:\n\tcase yaml_EMIT_STREAM_START_STATE:\n\t\treturn yaml_emitter_emit_stream_start(emitter, event)\n\n\tcase yaml_EMIT_FIRST_DOCUMENT_START_STATE:\n\t\treturn yaml_emitter_emit_document_start(emitter, event, true)\n\n\tcase yaml_EMIT_DOCUMENT_START_STATE:\n\t\treturn yaml_emitter_emit_document_start(emitter, event, false)\n\n\tcase yaml_EMIT_DOCUMENT_CONTENT_STATE:\n\t\treturn yaml_emitter_emit_document_content(emitter, event)\n\n\tcase yaml_EMIT_DOCUMENT_END_STATE:\n\t\treturn yaml_emitter_emit_document_end(emitter, event)\n\n\tcase yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE:\n\t\treturn yaml_emitter_emit_flow_sequence_item(emitter, event, true)\n\n\tcase yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE:\n\t\treturn yaml_emitter_emit_flow_sequence_item(emitter, event, false)\n\n\tcase yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_key(emitter, event, true)\n\n\tcase yaml_EMIT_FLOW_MAPPING_KEY_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_key(emitter, event, false)\n\n\tcase yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_value(emitter, event, true)\n\n\tcase yaml_EMIT_FLOW_MAPPING_VALUE_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_value(emitter, event, false)\n\n\tcase yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE:\n\t\treturn yaml_emitter_emit_block_sequence_item(emitter, event, true)\n\n\tcase yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE:\n\t\treturn yaml_emitter_emit_block_sequence_item(emitter, event, false)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_key(emitter, event, true)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_KEY_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_key(emitter, event, false)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_value(emitter, event, true)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_VALUE_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_value(emitter, event, false)\n\n\tcase yaml_EMIT_END_STATE:\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"expected nothing after STREAM-END\")\n\t}\n\tpanic(\"invalid emitter state\")\n}\n\n// Expect STREAM-START.\nfunc yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif event.typ != yaml_STREAM_START_EVENT {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"expected STREAM-START\")\n\t}\n\tif emitter.encoding == yaml_ANY_ENCODING {\n\t\temitter.encoding = event.encoding\n\t\tif emitter.encoding == yaml_ANY_ENCODING {\n\t\t\temitter.encoding = yaml_UTF8_ENCODING\n\t\t}\n\t}\n\tif emitter.best_indent < 2 || emitter.best_indent > 9 {\n\t\temitter.best_indent = 2\n\t}\n\tif emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 {\n\t\temitter.best_width = 80\n\t}\n\tif emitter.best_width < 0 {\n\t\temitter.best_width = 1<<31 - 1\n\t}\n\tif emitter.line_break == yaml_ANY_BREAK {\n\t\temitter.line_break = yaml_LN_BREAK\n\t}\n\n\temitter.indent = -1\n\temitter.line = 0\n\temitter.column = 0\n\temitter.whitespace = true\n\temitter.indention = true\n\n\tif emitter.encoding != yaml_UTF8_ENCODING {\n\t\tif !yaml_emitter_write_bom(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE\n\treturn true\n}\n\n// Expect DOCUMENT-START or STREAM-END.\nfunc yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\n\tif event.typ == yaml_DOCUMENT_START_EVENT {\n\n\t\tif event.version_directive != nil {\n\t\t\tif !yaml_emitter_analyze_version_directive(emitter, event.version_directive) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tfor i := 0; i < len(event.tag_directives); i++ {\n\t\t\ttag_directive := &event.tag_directives[i]\n\t\t\tif !yaml_emitter_analyze_tag_directive(emitter, tag_directive) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_append_tag_directive(emitter, tag_directive, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tfor i := 0; i < len(default_tag_directives); i++ {\n\t\t\ttag_directive := &default_tag_directives[i]\n\t\t\tif !yaml_emitter_append_tag_directive(emitter, tag_directive, true) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\timplicit := event.implicit\n\t\tif !first || emitter.canonical {\n\t\t\timplicit = false\n\t\t}\n\n\t\tif emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"...\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tif event.version_directive != nil {\n\t\t\timplicit = false\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"%YAML\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"1.1\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tif len(event.tag_directives) > 0 {\n\t\t\timplicit = false\n\t\t\tfor i := 0; i < len(event.tag_directives); i++ {\n\t\t\t\ttag_directive := &event.tag_directives[i]\n\t\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"%TAG\"), true, false, false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif yaml_emitter_check_empty_document(emitter) {\n\t\t\timplicit = false\n\t\t}\n\t\tif !implicit {\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"---\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif emitter.canonical {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\temitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE\n\t\treturn true\n\t}\n\n\tif event.typ == yaml_STREAM_END_EVENT {\n\t\tif emitter.open_ended {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"...\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_flush(emitter) {\n\t\t\treturn false\n\t\t}\n\t\temitter.state = yaml_EMIT_END_STATE\n\t\treturn true\n\t}\n\n\treturn yaml_emitter_set_emitter_error(emitter, \"expected DOCUMENT-START or STREAM-END\")\n}\n\n// Expect the root node.\nfunc yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\temitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, true, false, false, false)\n}\n\n// Expect DOCUMENT-END.\nfunc yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif event.typ != yaml_DOCUMENT_END_EVENT {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"expected DOCUMENT-END\")\n\t}\n\tif !yaml_emitter_write_indent(emitter) {\n\t\treturn false\n\t}\n\tif !event.implicit {\n\t\t// [Go] Allocate the slice elsewhere.\n\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"...\"), true, false, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\temitter.state = yaml_EMIT_DOCUMENT_START_STATE\n\temitter.tag_directives = emitter.tag_directives[:0]\n\treturn true\n}\n\n// Expect a flow item node.\nfunc yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_increase_indent(emitter, true, false) {\n\t\t\treturn false\n\t\t}\n\t\temitter.flow_level++\n\t}\n\n\tif event.typ == yaml_SEQUENCE_END_EVENT {\n\t\temitter.flow_level--\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\tif emitter.canonical && !first {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\n\t\treturn true\n\t}\n\n\tif !first {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif emitter.canonical || emitter.column > emitter.best_width {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, true, false, false)\n}\n\n// Expect a flow key node.\nfunc yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_increase_indent(emitter, true, false) {\n\t\t\treturn false\n\t\t}\n\t\temitter.flow_level++\n\t}\n\n\tif event.typ == yaml_MAPPING_END_EVENT {\n\t\temitter.flow_level--\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\tif emitter.canonical && !first {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\t\treturn true\n\t}\n\n\tif !first {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif emitter.canonical || emitter.column > emitter.best_width {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif !emitter.canonical && yaml_emitter_check_simple_key(emitter) {\n\t\temitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE)\n\t\treturn yaml_emitter_emit_node(emitter, event, false, false, true, true)\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) {\n\t\treturn false\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, false, true, false)\n}\n\n// Expect a flow value node.\nfunc yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {\n\tif simple {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t} else {\n\t\tif emitter.canonical || emitter.column > emitter.best_width {\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, false, true, false)\n}\n\n// Expect a block item node.\nfunc yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\tif !yaml_emitter_increase_indent(emitter, false, emitter.mapping_context && !emitter.indention) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif event.typ == yaml_SEQUENCE_END_EVENT {\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\t\treturn true\n\t}\n\tif !yaml_emitter_write_indent(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) {\n\t\treturn false\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, true, false, false)\n}\n\n// Expect a block key node.\nfunc yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\tif !yaml_emitter_increase_indent(emitter, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif event.typ == yaml_MAPPING_END_EVENT {\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\t\treturn true\n\t}\n\tif !yaml_emitter_write_indent(emitter) {\n\t\treturn false\n\t}\n\tif yaml_emitter_check_simple_key(emitter) {\n\t\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE)\n\t\treturn yaml_emitter_emit_node(emitter, event, false, false, true, true)\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) {\n\t\treturn false\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, false, true, false)\n}\n\n// Expect a block value node.\nfunc yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {\n\tif simple {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t} else {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, false, true, false)\n}\n\n// Expect a node.\nfunc yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t,\n\troot bool, sequence bool, mapping bool, simple_key bool) bool {\n\n\temitter.root_context = root\n\temitter.sequence_context = sequence\n\temitter.mapping_context = mapping\n\temitter.simple_key_context = simple_key\n\n\tswitch event.typ {\n\tcase yaml_ALIAS_EVENT:\n\t\treturn yaml_emitter_emit_alias(emitter, event)\n\tcase yaml_SCALAR_EVENT:\n\t\treturn yaml_emitter_emit_scalar(emitter, event)\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\treturn yaml_emitter_emit_sequence_start(emitter, event)\n\tcase yaml_MAPPING_START_EVENT:\n\t\treturn yaml_emitter_emit_mapping_start(emitter, event)\n\tdefault:\n\t\treturn yaml_emitter_set_emitter_error(emitter,\n\t\t\t\"expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS\")\n\t}\n\treturn false\n}\n\n// Expect ALIAS.\nfunc yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\temitter.state = emitter.states[len(emitter.states)-1]\n\temitter.states = emitter.states[:len(emitter.states)-1]\n\treturn true\n}\n\n// Expect SCALAR.\nfunc yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_select_scalar_style(emitter, event) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_tag(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_increase_indent(emitter, true, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_scalar(emitter) {\n\t\treturn false\n\t}\n\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\temitter.state = emitter.states[len(emitter.states)-1]\n\temitter.states = emitter.states[:len(emitter.states)-1]\n\treturn true\n}\n\n// Expect SEQUENCE-START.\nfunc yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_tag(emitter) {\n\t\treturn false\n\t}\n\tif emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE ||\n\t\tyaml_emitter_check_empty_sequence(emitter) {\n\t\temitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE\n\t} else {\n\t\temitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE\n\t}\n\treturn true\n}\n\n// Expect MAPPING-START.\nfunc yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_tag(emitter) {\n\t\treturn false\n\t}\n\tif emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE ||\n\t\tyaml_emitter_check_empty_mapping(emitter) {\n\t\temitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE\n\t} else {\n\t\temitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE\n\t}\n\treturn true\n}\n\n// Check if the document content is an empty scalar.\nfunc yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool {\n\treturn false // [Go] Huh?\n}\n\n// Check if the next events represent an empty sequence.\nfunc yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool {\n\tif len(emitter.events)-emitter.events_head < 2 {\n\t\treturn false\n\t}\n\treturn emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT &&\n\t\temitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT\n}\n\n// Check if the next events represent an empty mapping.\nfunc yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool {\n\tif len(emitter.events)-emitter.events_head < 2 {\n\t\treturn false\n\t}\n\treturn emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT &&\n\t\temitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT\n}\n\n// Check if the next node can be expressed as a simple key.\nfunc yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool {\n\tlength := 0\n\tswitch emitter.events[emitter.events_head].typ {\n\tcase yaml_ALIAS_EVENT:\n\t\tlength += len(emitter.anchor_data.anchor)\n\tcase yaml_SCALAR_EVENT:\n\t\tif emitter.scalar_data.multiline {\n\t\t\treturn false\n\t\t}\n\t\tlength += len(emitter.anchor_data.anchor) +\n\t\t\tlen(emitter.tag_data.handle) +\n\t\t\tlen(emitter.tag_data.suffix) +\n\t\t\tlen(emitter.scalar_data.value)\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\tif !yaml_emitter_check_empty_sequence(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tlength += len(emitter.anchor_data.anchor) +\n\t\t\tlen(emitter.tag_data.handle) +\n\t\t\tlen(emitter.tag_data.suffix)\n\tcase yaml_MAPPING_START_EVENT:\n\t\tif !yaml_emitter_check_empty_mapping(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tlength += len(emitter.anchor_data.anchor) +\n\t\t\tlen(emitter.tag_data.handle) +\n\t\t\tlen(emitter.tag_data.suffix)\n\tdefault:\n\t\treturn false\n\t}\n\treturn length <= 128\n}\n\n// Determine an acceptable scalar style.\nfunc yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\n\tno_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0\n\tif no_tag && !event.implicit && !event.quoted_implicit {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"neither tag nor implicit flags are specified\")\n\t}\n\n\tstyle := event.scalar_style()\n\tif style == yaml_ANY_SCALAR_STYLE {\n\t\tstyle = yaml_PLAIN_SCALAR_STYLE\n\t}\n\tif emitter.canonical {\n\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t}\n\tif emitter.simple_key_context && emitter.scalar_data.multiline {\n\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t}\n\n\tif style == yaml_PLAIN_SCALAR_STYLE {\n\t\tif emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed ||\n\t\t\temitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed {\n\t\t\tstyle = yaml_SINGLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t\tif len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) {\n\t\t\tstyle = yaml_SINGLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t\tif no_tag && !event.implicit {\n\t\t\tstyle = yaml_SINGLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t}\n\tif style == yaml_SINGLE_QUOTED_SCALAR_STYLE {\n\t\tif !emitter.scalar_data.single_quoted_allowed {\n\t\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t}\n\tif style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE {\n\t\tif !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context {\n\t\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t}\n\n\tif no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE {\n\t\temitter.tag_data.handle = []byte{'!'}\n\t}\n\temitter.scalar_data.style = style\n\treturn true\n}\n\n// Write an achor.\nfunc yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool {\n\tif emitter.anchor_data.anchor == nil {\n\t\treturn true\n\t}\n\tc := []byte{'&'}\n\tif emitter.anchor_data.alias {\n\t\tc[0] = '*'\n\t}\n\tif !yaml_emitter_write_indicator(emitter, c, true, false, false) {\n\t\treturn false\n\t}\n\treturn yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor)\n}\n\n// Write a tag.\nfunc yaml_emitter_process_tag(emitter *yaml_emitter_t) bool {\n\tif len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 {\n\t\treturn true\n\t}\n\tif len(emitter.tag_data.handle) > 0 {\n\t\tif !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) {\n\t\t\treturn false\n\t\t}\n\t\tif len(emitter.tag_data.suffix) > 0 {\n\t\t\tif !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// [Go] Allocate these slices elsewhere.\n\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"!<\"), true, false, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Write a scalar.\nfunc yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool {\n\tswitch emitter.scalar_data.style {\n\tcase yaml_PLAIN_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)\n\n\tcase yaml_SINGLE_QUOTED_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)\n\n\tcase yaml_DOUBLE_QUOTED_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)\n\n\tcase yaml_LITERAL_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value)\n\n\tcase yaml_FOLDED_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value)\n\t}\n\tpanic(\"unknown scalar style\")\n}\n\n// Check if a %YAML directive is valid.\nfunc yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool {\n\tif version_directive.major != 1 || version_directive.minor != 1 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"incompatible %YAML directive\")\n\t}\n\treturn true\n}\n\n// Check if a %TAG directive is valid.\nfunc yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool {\n\thandle := tag_directive.handle\n\tprefix := tag_directive.prefix\n\tif len(handle) == 0 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must not be empty\")\n\t}\n\tif handle[0] != '!' {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must start with '!'\")\n\t}\n\tif handle[len(handle)-1] != '!' {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must end with '!'\")\n\t}\n\tfor i := 1; i < len(handle)-1; i += width(handle[i]) {\n\t\tif !is_alpha(handle, i) {\n\t\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must contain alphanumerical characters only\")\n\t\t}\n\t}\n\tif len(prefix) == 0 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag prefix must not be empty\")\n\t}\n\treturn true\n}\n\n// Check if an anchor is valid.\nfunc yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool {\n\tif len(anchor) == 0 {\n\t\tproblem := \"anchor value must not be empty\"\n\t\tif alias {\n\t\t\tproblem = \"alias value must not be empty\"\n\t\t}\n\t\treturn yaml_emitter_set_emitter_error(emitter, problem)\n\t}\n\tfor i := 0; i < len(anchor); i += width(anchor[i]) {\n\t\tif !is_alpha(anchor, i) {\n\t\t\tproblem := \"anchor value must contain alphanumerical characters only\"\n\t\t\tif alias {\n\t\t\t\tproblem = \"alias value must contain alphanumerical characters only\"\n\t\t\t}\n\t\t\treturn yaml_emitter_set_emitter_error(emitter, problem)\n\t\t}\n\t}\n\temitter.anchor_data.anchor = anchor\n\temitter.anchor_data.alias = alias\n\treturn true\n}\n\n// Check if a tag is valid.\nfunc yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool {\n\tif len(tag) == 0 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag value must not be empty\")\n\t}\n\tfor i := 0; i < len(emitter.tag_directives); i++ {\n\t\ttag_directive := &emitter.tag_directives[i]\n\t\tif bytes.HasPrefix(tag, tag_directive.prefix) {\n\t\t\temitter.tag_data.handle = tag_directive.handle\n\t\t\temitter.tag_data.suffix = tag[len(tag_directive.prefix):]\n\t\t\treturn true\n\t\t}\n\t}\n\temitter.tag_data.suffix = tag\n\treturn true\n}\n\n// Check if a scalar is valid.\nfunc yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {\n\tvar (\n\t\tblock_indicators   = false\n\t\tflow_indicators    = false\n\t\tline_breaks        = false\n\t\tspecial_characters = false\n\n\t\tleading_space  = false\n\t\tleading_break  = false\n\t\ttrailing_space = false\n\t\ttrailing_break = false\n\t\tbreak_space    = false\n\t\tspace_break    = false\n\n\t\tpreceeded_by_whitespace = false\n\t\tfollowed_by_whitespace  = false\n\t\tprevious_space          = false\n\t\tprevious_break          = false\n\t)\n\n\temitter.scalar_data.value = value\n\n\tif len(value) == 0 {\n\t\temitter.scalar_data.multiline = false\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = true\n\t\temitter.scalar_data.single_quoted_allowed = true\n\t\temitter.scalar_data.block_allowed = false\n\t\treturn true\n\t}\n\n\tif len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) {\n\t\tblock_indicators = true\n\t\tflow_indicators = true\n\t}\n\n\tpreceeded_by_whitespace = true\n\tfor i, w := 0, 0; i < len(value); i += w {\n\t\tw = width(value[0])\n\t\tfollowed_by_whitespace = i+w >= len(value) || is_blank(value, i+w)\n\n\t\tif i == 0 {\n\t\t\tswitch value[i] {\n\t\t\tcase '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\\'', '\"', '%', '@', '`':\n\t\t\t\tflow_indicators = true\n\t\t\t\tblock_indicators = true\n\t\t\tcase '?', ':':\n\t\t\t\tflow_indicators = true\n\t\t\t\tif followed_by_whitespace {\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\tcase '-':\n\t\t\t\tif followed_by_whitespace {\n\t\t\t\t\tflow_indicators = true\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tswitch value[i] {\n\t\t\tcase ',', '?', '[', ']', '{', '}':\n\t\t\t\tflow_indicators = true\n\t\t\tcase ':':\n\t\t\t\tflow_indicators = true\n\t\t\t\tif followed_by_whitespace {\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\tcase '#':\n\t\t\t\tif preceeded_by_whitespace {\n\t\t\t\t\tflow_indicators = true\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode {\n\t\t\tspecial_characters = true\n\t\t}\n\t\tif is_space(value, i) {\n\t\t\tif i == 0 {\n\t\t\t\tleading_space = true\n\t\t\t}\n\t\t\tif i+width(value[i]) == len(value) {\n\t\t\t\ttrailing_space = true\n\t\t\t}\n\t\t\tif previous_break {\n\t\t\t\tbreak_space = true\n\t\t\t}\n\t\t\tprevious_space = true\n\t\t\tprevious_break = false\n\t\t} else if is_break(value, i) {\n\t\t\tline_breaks = true\n\t\t\tif i == 0 {\n\t\t\t\tleading_break = true\n\t\t\t}\n\t\t\tif i+width(value[i]) == len(value) {\n\t\t\t\ttrailing_break = true\n\t\t\t}\n\t\t\tif previous_space {\n\t\t\t\tspace_break = true\n\t\t\t}\n\t\t\tprevious_space = false\n\t\t\tprevious_break = true\n\t\t} else {\n\t\t\tprevious_space = false\n\t\t\tprevious_break = false\n\t\t}\n\n\t\t// [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition.\n\t\tpreceeded_by_whitespace = is_blankz(value, i)\n\t}\n\n\temitter.scalar_data.multiline = line_breaks\n\temitter.scalar_data.flow_plain_allowed = true\n\temitter.scalar_data.block_plain_allowed = true\n\temitter.scalar_data.single_quoted_allowed = true\n\temitter.scalar_data.block_allowed = true\n\n\tif leading_space || leading_break || trailing_space || trailing_break {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t}\n\tif trailing_space {\n\t\temitter.scalar_data.block_allowed = false\n\t}\n\tif break_space {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t\temitter.scalar_data.single_quoted_allowed = false\n\t}\n\tif space_break || special_characters {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t\temitter.scalar_data.single_quoted_allowed = false\n\t\temitter.scalar_data.block_allowed = false\n\t}\n\tif line_breaks {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t}\n\tif flow_indicators {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t}\n\tif block_indicators {\n\t\temitter.scalar_data.block_plain_allowed = false\n\t}\n\treturn true\n}\n\n// Check if the event data is valid.\nfunc yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\n\temitter.anchor_data.anchor = nil\n\temitter.tag_data.handle = nil\n\temitter.tag_data.suffix = nil\n\temitter.scalar_data.value = nil\n\n\tswitch event.typ {\n\tcase yaml_ALIAS_EVENT:\n\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, true) {\n\t\t\treturn false\n\t\t}\n\n\tcase yaml_SCALAR_EVENT:\n\t\tif len(event.anchor) > 0 {\n\t\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) {\n\t\t\tif !yaml_emitter_analyze_tag(emitter, event.tag) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_analyze_scalar(emitter, event.value) {\n\t\t\treturn false\n\t\t}\n\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\tif len(event.anchor) > 0 {\n\t\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif len(event.tag) > 0 && (emitter.canonical || !event.implicit) {\n\t\t\tif !yaml_emitter_analyze_tag(emitter, event.tag) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\tcase yaml_MAPPING_START_EVENT:\n\t\tif len(event.anchor) > 0 {\n\t\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif len(event.tag) > 0 && (emitter.canonical || !event.implicit) {\n\t\t\tif !yaml_emitter_analyze_tag(emitter, event.tag) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\n\n// Write the BOM character.\nfunc yaml_emitter_write_bom(emitter *yaml_emitter_t) bool {\n\tif !flush(emitter) {\n\t\treturn false\n\t}\n\tpos := emitter.buffer_pos\n\temitter.buffer[pos+0] = '\\xEF'\n\temitter.buffer[pos+1] = '\\xBB'\n\temitter.buffer[pos+2] = '\\xBF'\n\temitter.buffer_pos += 3\n\treturn true\n}\n\nfunc yaml_emitter_write_indent(emitter *yaml_emitter_t) bool {\n\tindent := emitter.indent\n\tif indent < 0 {\n\t\tindent = 0\n\t}\n\tif !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) {\n\t\tif !put_break(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\tfor emitter.column < indent {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.whitespace = true\n\temitter.indention = true\n\treturn true\n}\n\nfunc yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool {\n\tif need_whitespace && !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !write_all(emitter, indicator) {\n\t\treturn false\n\t}\n\temitter.whitespace = is_whitespace\n\temitter.indention = (emitter.indention && is_indention)\n\temitter.open_ended = false\n\treturn true\n}\n\nfunc yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool {\n\tif !write_all(emitter, value) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool {\n\tif !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !write_all(emitter, value) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool {\n\tif need_whitespace && !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\tfor i := 0; i < len(value); {\n\t\tvar must_write bool\n\t\tswitch value[i] {\n\t\tcase ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\\'', '(', ')', '[', ']':\n\t\t\tmust_write = true\n\t\tdefault:\n\t\t\tmust_write = is_alpha(value, i)\n\t\t}\n\t\tif must_write {\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\tw := width(value[i])\n\t\t\tfor k := 0; k < w; k++ {\n\t\t\t\toctet := value[i]\n\t\t\t\ti++\n\t\t\t\tif !put(emitter, '%') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tc := octet >> 4\n\t\t\t\tif c < 10 {\n\t\t\t\t\tc += '0'\n\t\t\t\t} else {\n\t\t\t\t\tc += 'A' - 10\n\t\t\t\t}\n\t\t\t\tif !put(emitter, c) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tc = octet & 0x0f\n\t\t\t\tif c < 10 {\n\t\t\t\t\tc += '0'\n\t\t\t\t} else {\n\t\t\t\t\tc += 'A' - 10\n\t\t\t\t}\n\t\t\t\tif !put(emitter, c) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {\n\tif !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tspaces := false\n\tbreaks := false\n\tfor i := 0; i < len(value); {\n\t\tif is_space(value, i) {\n\t\t\tif allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else {\n\t\t\t\tif !write(emitter, value, &i) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tspaces = true\n\t\t} else if is_break(value, i) {\n\t\t\tif !breaks && value[i] == '\\n' {\n\t\t\t\tif !put_break(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tspaces = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\n\temitter.whitespace = false\n\temitter.indention = false\n\tif emitter.root_context {\n\t\temitter.open_ended = true\n\t}\n\n\treturn true\n}\n\nfunc yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {\n\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\\''}, true, false, false) {\n\t\treturn false\n\t}\n\n\tspaces := false\n\tbreaks := false\n\tfor i := 0; i < len(value); {\n\t\tif is_space(value, i) {\n\t\t\tif allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else {\n\t\t\t\tif !write(emitter, value, &i) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tspaces = true\n\t\t} else if is_break(value, i) {\n\t\t\tif !breaks && value[i] == '\\n' {\n\t\t\t\tif !put_break(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif value[i] == '\\'' {\n\t\t\t\tif !put(emitter, '\\'') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tspaces = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\\''}, false, false, false) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {\n\tspaces := false\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\"'}, true, false, false) {\n\t\treturn false\n\t}\n\n\tfor i := 0; i < len(value); {\n\t\tif !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) ||\n\t\t\tis_bom(value, i) || is_break(value, i) ||\n\t\t\tvalue[i] == '\"' || value[i] == '\\\\' {\n\n\t\t\toctet := value[i]\n\n\t\t\tvar w int\n\t\t\tvar v rune\n\t\t\tswitch {\n\t\t\tcase octet&0x80 == 0x00:\n\t\t\t\tw, v = 1, rune(octet&0x7F)\n\t\t\tcase octet&0xE0 == 0xC0:\n\t\t\t\tw, v = 2, rune(octet&0x1F)\n\t\t\tcase octet&0xF0 == 0xE0:\n\t\t\t\tw, v = 3, rune(octet&0x0F)\n\t\t\tcase octet&0xF8 == 0xF0:\n\t\t\t\tw, v = 4, rune(octet&0x07)\n\t\t\t}\n\t\t\tfor k := 1; k < w; k++ {\n\t\t\t\toctet = value[i+k]\n\t\t\t\tv = (v << 6) + (rune(octet) & 0x3F)\n\t\t\t}\n\t\t\ti += w\n\n\t\t\tif !put(emitter, '\\\\') {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tvar ok bool\n\t\t\tswitch v {\n\t\t\tcase 0x00:\n\t\t\t\tok = put(emitter, '0')\n\t\t\tcase 0x07:\n\t\t\t\tok = put(emitter, 'a')\n\t\t\tcase 0x08:\n\t\t\t\tok = put(emitter, 'b')\n\t\t\tcase 0x09:\n\t\t\t\tok = put(emitter, 't')\n\t\t\tcase 0x0A:\n\t\t\t\tok = put(emitter, 'n')\n\t\t\tcase 0x0b:\n\t\t\t\tok = put(emitter, 'v')\n\t\t\tcase 0x0c:\n\t\t\t\tok = put(emitter, 'f')\n\t\t\tcase 0x0d:\n\t\t\t\tok = put(emitter, 'r')\n\t\t\tcase 0x1b:\n\t\t\t\tok = put(emitter, 'e')\n\t\t\tcase 0x22:\n\t\t\t\tok = put(emitter, '\"')\n\t\t\tcase 0x5c:\n\t\t\t\tok = put(emitter, '\\\\')\n\t\t\tcase 0x85:\n\t\t\t\tok = put(emitter, 'N')\n\t\t\tcase 0xA0:\n\t\t\t\tok = put(emitter, '_')\n\t\t\tcase 0x2028:\n\t\t\t\tok = put(emitter, 'L')\n\t\t\tcase 0x2029:\n\t\t\t\tok = put(emitter, 'P')\n\t\t\tdefault:\n\t\t\t\tif v <= 0xFF {\n\t\t\t\t\tok = put(emitter, 'x')\n\t\t\t\t\tw = 2\n\t\t\t\t} else if v <= 0xFFFF {\n\t\t\t\t\tok = put(emitter, 'u')\n\t\t\t\t\tw = 4\n\t\t\t\t} else {\n\t\t\t\t\tok = put(emitter, 'U')\n\t\t\t\t\tw = 8\n\t\t\t\t}\n\t\t\t\tfor k := (w - 1) * 4; ok && k >= 0; k -= 4 {\n\t\t\t\t\tdigit := byte((v >> uint(k)) & 0x0F)\n\t\t\t\t\tif digit < 10 {\n\t\t\t\t\t\tok = put(emitter, digit+'0')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tok = put(emitter, digit+'A'-10)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !ok {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tspaces = false\n\t\t} else if is_space(value, i) {\n\t\t\tif allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif is_space(value, i+1) {\n\t\t\t\t\tif !put(emitter, '\\\\') {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else if !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tspaces = true\n\t\t} else {\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tspaces = false\n\t\t}\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\"'}, false, false, false) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool {\n\tif is_space(value, 0) || is_break(value, 0) {\n\t\tindent_hint := []byte{'0' + byte(emitter.best_indent)}\n\t\tif !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\temitter.open_ended = false\n\n\tvar chomp_hint [1]byte\n\tif len(value) == 0 {\n\t\tchomp_hint[0] = '-'\n\t} else {\n\t\ti := len(value) - 1\n\t\tfor value[i]&0xC0 == 0x80 {\n\t\t\ti--\n\t\t}\n\t\tif !is_break(value, i) {\n\t\t\tchomp_hint[0] = '-'\n\t\t} else if i == 0 {\n\t\t\tchomp_hint[0] = '+'\n\t\t\temitter.open_ended = true\n\t\t} else {\n\t\t\ti--\n\t\t\tfor value[i]&0xC0 == 0x80 {\n\t\t\t\ti--\n\t\t\t}\n\t\t\tif is_break(value, i) {\n\t\t\t\tchomp_hint[0] = '+'\n\t\t\t\temitter.open_ended = true\n\t\t\t}\n\t\t}\n\t}\n\tif chomp_hint[0] != 0 {\n\t\tif !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool {\n\tif !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_block_scalar_hints(emitter, value) {\n\t\treturn false\n\t}\n\tif !put_break(emitter) {\n\t\treturn false\n\t}\n\temitter.indention = true\n\temitter.whitespace = true\n\tbreaks := true\n\tfor i := 0; i < len(value); {\n\t\tif is_break(value, i) {\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool {\n\tif !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_block_scalar_hints(emitter, value) {\n\t\treturn false\n\t}\n\n\tif !put_break(emitter) {\n\t\treturn false\n\t}\n\temitter.indention = true\n\temitter.whitespace = true\n\n\tbreaks := true\n\tleading_spaces := true\n\tfor i := 0; i < len(value); {\n\t\tif is_break(value, i) {\n\t\t\tif !breaks && !leading_spaces && value[i] == '\\n' {\n\t\t\t\tk := 0\n\t\t\t\tfor is_break(value, k) {\n\t\t\t\t\tk += width(value[k])\n\t\t\t\t}\n\t\t\t\tif !is_blankz(value, k) {\n\t\t\t\t\tif !put_break(emitter) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tleading_spaces = is_blank(value, i)\n\t\t\t}\n\t\t\tif !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else {\n\t\t\t\tif !write(emitter, value, &i) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/encode.go",
    "content": "package yaml\n\nimport (\n\t\"reflect\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype encoder struct {\n\temitter yaml_emitter_t\n\tevent   yaml_event_t\n\tout     []byte\n\tflow    bool\n}\n\nfunc newEncoder() (e *encoder) {\n\te = &encoder{}\n\te.must(yaml_emitter_initialize(&e.emitter))\n\tyaml_emitter_set_output_string(&e.emitter, &e.out)\n\te.must(yaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING))\n\te.emit()\n\te.must(yaml_document_start_event_initialize(&e.event, nil, nil, true))\n\te.emit()\n\treturn e\n}\n\nfunc (e *encoder) finish() {\n\te.must(yaml_document_end_event_initialize(&e.event, true))\n\te.emit()\n\te.emitter.open_ended = false\n\te.must(yaml_stream_end_event_initialize(&e.event))\n\te.emit()\n}\n\nfunc (e *encoder) destroy() {\n\tyaml_emitter_delete(&e.emitter)\n}\n\nfunc (e *encoder) emit() {\n\t// This will internally delete the e.event value.\n\tif !yaml_emitter_emit(&e.emitter, &e.event) && e.event.typ != yaml_DOCUMENT_END_EVENT && e.event.typ != yaml_STREAM_END_EVENT {\n\t\te.must(false)\n\t}\n}\n\nfunc (e *encoder) must(ok bool) {\n\tif !ok {\n\t\tmsg := e.emitter.problem\n\t\tif msg == \"\" {\n\t\t\tmsg = \"Unknown problem generating YAML content\"\n\t\t}\n\t\tfail(msg)\n\t}\n}\n\nfunc (e *encoder) marshal(tag string, in reflect.Value) {\n\tif !in.IsValid() {\n\t\te.nilv()\n\t\treturn\n\t}\n\tvar value interface{}\n\tif getter, ok := in.Interface().(Getter); ok {\n\t\ttag, value = getter.GetYAML()\n\t\ttag = longTag(tag)\n\t\tif value == nil {\n\t\t\te.nilv()\n\t\t\treturn\n\t\t}\n\t\tin = reflect.ValueOf(value)\n\t}\n\tswitch in.Kind() {\n\tcase reflect.Interface:\n\t\tif in.IsNil() {\n\t\t\te.nilv()\n\t\t} else {\n\t\t\te.marshal(tag, in.Elem())\n\t\t}\n\tcase reflect.Map:\n\t\te.mapv(tag, in)\n\tcase reflect.Ptr:\n\t\tif in.IsNil() {\n\t\t\te.nilv()\n\t\t} else {\n\t\t\te.marshal(tag, in.Elem())\n\t\t}\n\tcase reflect.Struct:\n\t\te.structv(tag, in)\n\tcase reflect.Slice:\n\t\te.slicev(tag, in)\n\tcase reflect.String:\n\t\te.stringv(tag, in)\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tif in.Type() == durationType {\n\t\t\te.stringv(tag, reflect.ValueOf(in.Interface().(time.Duration).String()))\n\t\t} else {\n\t\t\te.intv(tag, in)\n\t\t}\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\te.uintv(tag, in)\n\tcase reflect.Float32, reflect.Float64:\n\t\te.floatv(tag, in)\n\tcase reflect.Bool:\n\t\te.boolv(tag, in)\n\tdefault:\n\t\tpanic(\"Can't marshal type: \" + in.Type().String())\n\t}\n}\n\nfunc (e *encoder) mapv(tag string, in reflect.Value) {\n\te.mappingv(tag, func() {\n\t\tkeys := keyList(in.MapKeys())\n\t\tsort.Sort(keys)\n\t\tfor _, k := range keys {\n\t\t\te.marshal(\"\", k)\n\t\t\te.marshal(\"\", in.MapIndex(k))\n\t\t}\n\t})\n}\n\nfunc (e *encoder) structv(tag string, in reflect.Value) {\n\tsinfo, err := getStructInfo(in.Type())\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\te.mappingv(tag, func() {\n\t\tfor _, info := range sinfo.FieldsList {\n\t\t\tvar value reflect.Value\n\t\t\tif info.Inline == nil {\n\t\t\t\tvalue = in.Field(info.Num)\n\t\t\t} else {\n\t\t\t\tvalue = in.FieldByIndex(info.Inline)\n\t\t\t}\n\t\t\tif info.OmitEmpty && isZero(value) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\te.marshal(\"\", reflect.ValueOf(info.Key))\n\t\t\te.flow = info.Flow\n\t\t\te.marshal(\"\", value)\n\t\t}\n\t})\n}\n\nfunc (e *encoder) mappingv(tag string, f func()) {\n\timplicit := tag == \"\"\n\tstyle := yaml_BLOCK_MAPPING_STYLE\n\tif e.flow {\n\t\te.flow = false\n\t\tstyle = yaml_FLOW_MAPPING_STYLE\n\t}\n\te.must(yaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))\n\te.emit()\n\tf()\n\te.must(yaml_mapping_end_event_initialize(&e.event))\n\te.emit()\n}\n\nfunc (e *encoder) slicev(tag string, in reflect.Value) {\n\timplicit := tag == \"\"\n\tstyle := yaml_BLOCK_SEQUENCE_STYLE\n\tif e.flow {\n\t\te.flow = false\n\t\tstyle = yaml_FLOW_SEQUENCE_STYLE\n\t}\n\te.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))\n\te.emit()\n\tn := in.Len()\n\tfor i := 0; i < n; i++ {\n\t\te.marshal(\"\", in.Index(i))\n\t}\n\te.must(yaml_sequence_end_event_initialize(&e.event))\n\te.emit()\n}\n\n// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1.\n//\n// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported\n// in YAML 1.2 and by this package, but these should be marshalled quoted for\n// the time being for compatibility with other parsers.\nfunc isBase60Float(s string) (result bool) {\n\t// Fast path.\n\tif s == \"\" {\n\t\treturn false\n\t}\n\tc := s[0]\n\tif !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 {\n\t\treturn false\n\t}\n\t// Do the full match.\n\treturn base60float.MatchString(s)\n}\n\n// From http://yaml.org/type/float.html, except the regular expression there\n// is bogus. In practice parsers do not enforce the \"\\.[0-9_]*\" suffix.\nvar base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\\.[0-9_]*)?$`)\n\nfunc (e *encoder) stringv(tag string, in reflect.Value) {\n\tvar style yaml_scalar_style_t\n\ts := in.String()\n\trtag, rs := resolve(\"\", s)\n\tif rtag == yaml_BINARY_TAG {\n\t\tif tag == \"\" || tag == yaml_STR_TAG {\n\t\t\ttag = rtag\n\t\t\ts = rs.(string)\n\t\t} else if tag == yaml_BINARY_TAG {\n\t\t\tfail(\"explicitly tagged !!binary data must be base64-encoded\")\n\t\t} else {\n\t\t\tfail(\"cannot marshal invalid UTF-8 data as \" + shortTag(tag))\n\t\t}\n\t}\n\tif tag == \"\" && (rtag != yaml_STR_TAG || isBase60Float(s)) {\n\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t} else if strings.Contains(s, \"\\n\") {\n\t\tstyle = yaml_LITERAL_SCALAR_STYLE\n\t} else {\n\t\tstyle = yaml_PLAIN_SCALAR_STYLE\n\t}\n\te.emitScalar(s, \"\", tag, style)\n}\n\nfunc (e *encoder) boolv(tag string, in reflect.Value) {\n\tvar s string\n\tif in.Bool() {\n\t\ts = \"true\"\n\t} else {\n\t\ts = \"false\"\n\t}\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE)\n}\n\nfunc (e *encoder) intv(tag string, in reflect.Value) {\n\ts := strconv.FormatInt(in.Int(), 10)\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE)\n}\n\nfunc (e *encoder) uintv(tag string, in reflect.Value) {\n\ts := strconv.FormatUint(in.Uint(), 10)\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE)\n}\n\nfunc (e *encoder) floatv(tag string, in reflect.Value) {\n\t// FIXME: Handle 64 bits here.\n\ts := strconv.FormatFloat(float64(in.Float()), 'g', -1, 32)\n\tswitch s {\n\tcase \"+Inf\":\n\t\ts = \".inf\"\n\tcase \"-Inf\":\n\t\ts = \"-.inf\"\n\tcase \"NaN\":\n\t\ts = \".nan\"\n\t}\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE)\n}\n\nfunc (e *encoder) nilv() {\n\te.emitScalar(\"null\", \"\", \"\", yaml_PLAIN_SCALAR_STYLE)\n}\n\nfunc (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t) {\n\timplicit := tag == \"\"\n\te.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style))\n\te.emit()\n}\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/parserc.go",
    "content": "package yaml\n\nimport (\n\t\"bytes\"\n)\n\n// The parser implements the following grammar:\n//\n// stream               ::= STREAM-START implicit_document? explicit_document* STREAM-END\n// implicit_document    ::= block_node DOCUMENT-END*\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n// block_node_or_indentless_sequence    ::=\n//                          ALIAS\n//                          | properties (block_content | indentless_block_sequence)?\n//                          | block_content\n//                          | indentless_block_sequence\n// block_node           ::= ALIAS\n//                          | properties block_content?\n//                          | block_content\n// flow_node            ::= ALIAS\n//                          | properties flow_content?\n//                          | flow_content\n// properties           ::= TAG ANCHOR? | ANCHOR TAG?\n// block_content        ::= block_collection | flow_collection | SCALAR\n// flow_content         ::= flow_collection | SCALAR\n// block_collection     ::= block_sequence | block_mapping\n// flow_collection      ::= flow_sequence | flow_mapping\n// block_sequence       ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END\n// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+\n// block_mapping        ::= BLOCK-MAPPING_START\n//                          ((KEY block_node_or_indentless_sequence?)?\n//                          (VALUE block_node_or_indentless_sequence?)?)*\n//                          BLOCK-END\n// flow_sequence        ::= FLOW-SEQUENCE-START\n//                          (flow_sequence_entry FLOW-ENTRY)*\n//                          flow_sequence_entry?\n//                          FLOW-SEQUENCE-END\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n// flow_mapping         ::= FLOW-MAPPING-START\n//                          (flow_mapping_entry FLOW-ENTRY)*\n//                          flow_mapping_entry?\n//                          FLOW-MAPPING-END\n// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n\n// Peek the next token in the token queue.\nfunc peek_token(parser *yaml_parser_t) *yaml_token_t {\n\tif parser.token_available || yaml_parser_fetch_more_tokens(parser) {\n\t\treturn &parser.tokens[parser.tokens_head]\n\t}\n\treturn nil\n}\n\n// Remove the next token from the queue (must be called after peek_token).\nfunc skip_token(parser *yaml_parser_t) {\n\tparser.token_available = false\n\tparser.tokens_parsed++\n\tparser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN\n\tparser.tokens_head++\n}\n\n// Get the next event.\nfunc yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool {\n\t// Erase the event object.\n\t*event = yaml_event_t{}\n\n\t// No events after the end of the stream or error.\n\tif parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE {\n\t\treturn true\n\t}\n\n\t// Generate the next event.\n\treturn yaml_parser_state_machine(parser, event)\n}\n\n// Set parser error.\nfunc yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool {\n\tparser.error = yaml_PARSER_ERROR\n\tparser.problem = problem\n\tparser.problem_mark = problem_mark\n\treturn false\n}\n\nfunc yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool {\n\tparser.error = yaml_PARSER_ERROR\n\tparser.context = context\n\tparser.context_mark = context_mark\n\tparser.problem = problem\n\tparser.problem_mark = problem_mark\n\treturn false\n}\n\n// State dispatcher.\nfunc yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool {\n\t//trace(\"yaml_parser_state_machine\", \"state:\", parser.state.String())\n\n\tswitch parser.state {\n\tcase yaml_PARSE_STREAM_START_STATE:\n\t\treturn yaml_parser_parse_stream_start(parser, event)\n\n\tcase yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:\n\t\treturn yaml_parser_parse_document_start(parser, event, true)\n\n\tcase yaml_PARSE_DOCUMENT_START_STATE:\n\t\treturn yaml_parser_parse_document_start(parser, event, false)\n\n\tcase yaml_PARSE_DOCUMENT_CONTENT_STATE:\n\t\treturn yaml_parser_parse_document_content(parser, event)\n\n\tcase yaml_PARSE_DOCUMENT_END_STATE:\n\t\treturn yaml_parser_parse_document_end(parser, event)\n\n\tcase yaml_PARSE_BLOCK_NODE_STATE:\n\t\treturn yaml_parser_parse_node(parser, event, true, false)\n\n\tcase yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:\n\t\treturn yaml_parser_parse_node(parser, event, true, true)\n\n\tcase yaml_PARSE_FLOW_NODE_STATE:\n\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\n\tcase yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn yaml_parser_parse_block_sequence_entry(parser, event, true)\n\n\tcase yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:\n\t\treturn yaml_parser_parse_block_sequence_entry(parser, event, false)\n\n\tcase yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:\n\t\treturn yaml_parser_parse_indentless_sequence_entry(parser, event)\n\n\tcase yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_parser_parse_block_mapping_key(parser, event, true)\n\n\tcase yaml_PARSE_BLOCK_MAPPING_KEY_STATE:\n\t\treturn yaml_parser_parse_block_mapping_key(parser, event, false)\n\n\tcase yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:\n\t\treturn yaml_parser_parse_block_mapping_value(parser, event)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry(parser, event, true)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry(parser, event, false)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event)\n\n\tcase yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_key(parser, event, true)\n\n\tcase yaml_PARSE_FLOW_MAPPING_KEY_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_key(parser, event, false)\n\n\tcase yaml_PARSE_FLOW_MAPPING_VALUE_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_value(parser, event, false)\n\n\tcase yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_value(parser, event, true)\n\n\tdefault:\n\t\tpanic(\"invalid parser state\")\n\t}\n\treturn false\n}\n\n// Parse the production:\n// stream   ::= STREAM-START implicit_document? explicit_document* STREAM-END\n//              ************\nfunc yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ != yaml_STREAM_START_TOKEN {\n\t\treturn yaml_parser_set_parser_error(parser, \"did not find expected <stream-start>\", token.start_mark)\n\t}\n\tparser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_STREAM_START_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.end_mark,\n\t\tencoding:   token.encoding,\n\t}\n\tskip_token(parser)\n\treturn true\n}\n\n// Parse the productions:\n// implicit_document    ::= block_node DOCUMENT-END*\n//                          *\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n//                          *************************\nfunc yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool {\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\t// Parse extra document end indicators.\n\tif !implicit {\n\t\tfor token.typ == yaml_DOCUMENT_END_TOKEN {\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\tif implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN &&\n\t\ttoken.typ != yaml_TAG_DIRECTIVE_TOKEN &&\n\t\ttoken.typ != yaml_DOCUMENT_START_TOKEN &&\n\t\ttoken.typ != yaml_STREAM_END_TOKEN {\n\t\t// Parse an implicit document.\n\t\tif !yaml_parser_process_directives(parser, nil, nil) {\n\t\t\treturn false\n\t\t}\n\t\tparser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)\n\t\tparser.state = yaml_PARSE_BLOCK_NODE_STATE\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_DOCUMENT_START_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t}\n\n\t} else if token.typ != yaml_STREAM_END_TOKEN {\n\t\t// Parse an explicit document.\n\t\tvar version_directive *yaml_version_directive_t\n\t\tvar tag_directives []yaml_tag_directive_t\n\t\tstart_mark := token.start_mark\n\t\tif !yaml_parser_process_directives(parser, &version_directive, &tag_directives) {\n\t\t\treturn false\n\t\t}\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_DOCUMENT_START_TOKEN {\n\t\t\tyaml_parser_set_parser_error(parser,\n\t\t\t\t\"did not find expected <document start>\", token.start_mark)\n\t\t\treturn false\n\t\t}\n\t\tparser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)\n\t\tparser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE\n\t\tend_mark := token.end_mark\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:               yaml_DOCUMENT_START_EVENT,\n\t\t\tstart_mark:        start_mark,\n\t\t\tend_mark:          end_mark,\n\t\t\tversion_directive: version_directive,\n\t\t\ttag_directives:    tag_directives,\n\t\t\timplicit:          false,\n\t\t}\n\t\tskip_token(parser)\n\n\t} else {\n\t\t// Parse the stream end.\n\t\tparser.state = yaml_PARSE_END_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_STREAM_END_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t}\n\t\tskip_token(parser)\n\t}\n\n\treturn true\n}\n\n// Parse the productions:\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n//                                                    ***********\n//\nfunc yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ == yaml_VERSION_DIRECTIVE_TOKEN ||\n\t\ttoken.typ == yaml_TAG_DIRECTIVE_TOKEN ||\n\t\ttoken.typ == yaml_DOCUMENT_START_TOKEN ||\n\t\ttoken.typ == yaml_DOCUMENT_END_TOKEN ||\n\t\ttoken.typ == yaml_STREAM_END_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\treturn yaml_parser_process_empty_scalar(parser, event,\n\t\t\ttoken.start_mark)\n\t}\n\treturn yaml_parser_parse_node(parser, event, true, false)\n}\n\n// Parse the productions:\n// implicit_document    ::= block_node DOCUMENT-END*\n//                                     *************\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n//\nfunc yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tstart_mark := token.start_mark\n\tend_mark := token.start_mark\n\n\timplicit := true\n\tif token.typ == yaml_DOCUMENT_END_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tskip_token(parser)\n\t\timplicit = false\n\t}\n\n\tparser.tag_directives = parser.tag_directives[:0]\n\n\tparser.state = yaml_PARSE_DOCUMENT_START_STATE\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_DOCUMENT_END_EVENT,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\timplicit:   implicit,\n\t}\n\treturn true\n}\n\n// Parse the productions:\n// block_node_or_indentless_sequence    ::=\n//                          ALIAS\n//                          *****\n//                          | properties (block_content | indentless_block_sequence)?\n//                            **********  *\n//                          | block_content | indentless_block_sequence\n//                            *\n// block_node           ::= ALIAS\n//                          *****\n//                          | properties block_content?\n//                            ********** *\n//                          | block_content\n//                            *\n// flow_node            ::= ALIAS\n//                          *****\n//                          | properties flow_content?\n//                            ********** *\n//                          | flow_content\n//                            *\n// properties           ::= TAG ANCHOR? | ANCHOR TAG?\n//                          *************************\n// block_content        ::= block_collection | flow_collection | SCALAR\n//                                                               ******\n// flow_content         ::= flow_collection | SCALAR\n//                                            ******\nfunc yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool {\n\t//defer trace(\"yaml_parser_parse_node\", \"block:\", block, \"indentless_sequence:\", indentless_sequence)()\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_ALIAS_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_ALIAS_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t\tanchor:     token.value,\n\t\t}\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\n\tstart_mark := token.start_mark\n\tend_mark := token.start_mark\n\n\tvar tag_token bool\n\tvar tag_handle, tag_suffix, anchor []byte\n\tvar tag_mark yaml_mark_t\n\tif token.typ == yaml_ANCHOR_TOKEN {\n\t\tanchor = token.value\n\t\tstart_mark = token.start_mark\n\t\tend_mark = token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ == yaml_TAG_TOKEN {\n\t\t\ttag_token = true\n\t\t\ttag_handle = token.value\n\t\t\ttag_suffix = token.suffix\n\t\t\ttag_mark = token.start_mark\n\t\t\tend_mark = token.end_mark\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t} else if token.typ == yaml_TAG_TOKEN {\n\t\ttag_token = true\n\t\ttag_handle = token.value\n\t\ttag_suffix = token.suffix\n\t\tstart_mark = token.start_mark\n\t\ttag_mark = token.start_mark\n\t\tend_mark = token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ == yaml_ANCHOR_TOKEN {\n\t\t\tanchor = token.value\n\t\t\tend_mark = token.end_mark\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\tvar tag []byte\n\tif tag_token {\n\t\tif len(tag_handle) == 0 {\n\t\t\ttag = tag_suffix\n\t\t\ttag_suffix = nil\n\t\t} else {\n\t\t\tfor i := range parser.tag_directives {\n\t\t\t\tif bytes.Equal(parser.tag_directives[i].handle, tag_handle) {\n\t\t\t\t\ttag = append([]byte(nil), parser.tag_directives[i].prefix...)\n\t\t\t\t\ttag = append(tag, tag_suffix...)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(tag) == 0 {\n\t\t\t\tyaml_parser_set_parser_error_context(parser,\n\t\t\t\t\t\"while parsing a node\", start_mark,\n\t\t\t\t\t\"found undefined tag handle\", tag_mark)\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\timplicit := len(tag) == 0\n\tif indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\tif token.typ == yaml_SCALAR_TOKEN {\n\t\tvar plain_implicit, quoted_implicit bool\n\t\tend_mark = token.end_mark\n\t\tif (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') {\n\t\t\tplain_implicit = true\n\t\t} else if len(tag) == 0 {\n\t\t\tquoted_implicit = true\n\t\t}\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:             yaml_SCALAR_EVENT,\n\t\t\tstart_mark:      start_mark,\n\t\t\tend_mark:        end_mark,\n\t\t\tanchor:          anchor,\n\t\t\ttag:             tag,\n\t\t\tvalue:           token.value,\n\t\t\timplicit:        plain_implicit,\n\t\t\tquoted_implicit: quoted_implicit,\n\t\t\tstyle:           yaml_style_t(token.style),\n\t\t}\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\tif token.typ == yaml_FLOW_SEQUENCE_START_TOKEN {\n\t\t// [Go] Some of the events below can be merged as they differ only on style.\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_FLOW_SEQUENCE_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\tif token.typ == yaml_FLOW_MAPPING_START_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_MAPPING_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\tif block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\tif block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_MAPPING_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_BLOCK_MAPPING_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\tif len(anchor) > 0 || len(tag) > 0 {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:             yaml_SCALAR_EVENT,\n\t\t\tstart_mark:      start_mark,\n\t\t\tend_mark:        end_mark,\n\t\t\tanchor:          anchor,\n\t\t\ttag:             tag,\n\t\t\timplicit:        implicit,\n\t\t\tquoted_implicit: false,\n\t\t\tstyle:           yaml_style_t(yaml_PLAIN_SCALAR_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\n\tcontext := \"while parsing a flow node\"\n\tif block {\n\t\tcontext = \"while parsing a block node\"\n\t}\n\tyaml_parser_set_parser_error_context(parser, context, start_mark,\n\t\t\"did not find expected node content\", token.start_mark)\n\treturn false\n}\n\n// Parse the productions:\n// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END\n//                    ********************  *********** *             *********\n//\nfunc yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_BLOCK_ENTRY_TOKEN {\n\t\tmark := token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, false)\n\t\t} else {\n\t\t\tparser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE\n\t\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t\t}\n\t}\n\tif token.typ == yaml_BLOCK_END_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_END_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t}\n\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\n\tcontext_mark := parser.marks[len(parser.marks)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\"while parsing a block collection\", context_mark,\n\t\t\"did not find expected '-' indicator\", token.start_mark)\n}\n\n// Parse the productions:\n// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+\n//                           *********** *\nfunc yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_BLOCK_ENTRY_TOKEN {\n\t\tmark := token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_BLOCK_ENTRY_TOKEN &&\n\t\t\ttoken.typ != yaml_KEY_TOKEN &&\n\t\t\ttoken.typ != yaml_VALUE_TOKEN &&\n\t\t\ttoken.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, false)\n\t\t}\n\t\tparser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\n\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t}\n\tparser.state = parser.states[len(parser.states)-1]\n\tparser.states = parser.states[:len(parser.states)-1]\n\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_SEQUENCE_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.start_mark, // [Go] Shouldn't this be token.end_mark?\n\t}\n\treturn true\n}\n\n// Parse the productions:\n// block_mapping        ::= BLOCK-MAPPING_START\n//                          *******************\n//                          ((KEY block_node_or_indentless_sequence?)?\n//                            *** *\n//                          (VALUE block_node_or_indentless_sequence?)?)*\n//\n//                          BLOCK-END\n//                          *********\n//\nfunc yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_KEY_TOKEN {\n\t\tmark := token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_KEY_TOKEN &&\n\t\t\ttoken.typ != yaml_VALUE_TOKEN &&\n\t\t\ttoken.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, true)\n\t\t} else {\n\t\t\tparser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE\n\t\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t\t}\n\t} else if token.typ == yaml_BLOCK_END_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_MAPPING_END_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t}\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\n\tcontext_mark := parser.marks[len(parser.marks)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\"while parsing a block mapping\", context_mark,\n\t\t\"did not find expected key\", token.start_mark)\n}\n\n// Parse the productions:\n// block_mapping        ::= BLOCK-MAPPING_START\n//\n//                          ((KEY block_node_or_indentless_sequence?)?\n//\n//                          (VALUE block_node_or_indentless_sequence?)?)*\n//                           ***** *\n//                          BLOCK-END\n//\n//\nfunc yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ == yaml_VALUE_TOKEN {\n\t\tmark := token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_KEY_TOKEN &&\n\t\t\ttoken.typ != yaml_VALUE_TOKEN &&\n\t\t\ttoken.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, true)\n\t\t}\n\t\tparser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE\n\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t}\n\tparser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n}\n\n// Parse the productions:\n// flow_sequence        ::= FLOW-SEQUENCE-START\n//                          *******************\n//                          (flow_sequence_entry FLOW-ENTRY)*\n//                           *                   **********\n//                          flow_sequence_entry?\n//                          *\n//                          FLOW-SEQUENCE-END\n//                          *****************\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                          *\n//\nfunc yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\tif !first {\n\t\t\tif token.typ == yaml_FLOW_ENTRY_TOKEN {\n\t\t\t\tskip_token(parser)\n\t\t\t\ttoken = peek_token(parser)\n\t\t\t\tif token == nil {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcontext_mark := parser.marks[len(parser.marks)-1]\n\t\t\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t\t\t\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\t\t\t\"while parsing a flow sequence\", context_mark,\n\t\t\t\t\t\"did not find expected ',' or ']'\", token.start_mark)\n\t\t\t}\n\t\t}\n\n\t\tif token.typ == yaml_KEY_TOKEN {\n\t\t\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE\n\t\t\t*event = yaml_event_t{\n\t\t\t\ttyp:        yaml_MAPPING_START_EVENT,\n\t\t\t\tstart_mark: token.start_mark,\n\t\t\t\tend_mark:   token.end_mark,\n\t\t\t\timplicit:   true,\n\t\t\t\tstyle:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),\n\t\t\t}\n\t\t\tskip_token(parser)\n\t\t\treturn true\n\t\t} else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\n\tparser.state = parser.states[len(parser.states)-1]\n\tparser.states = parser.states[:len(parser.states)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_SEQUENCE_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.end_mark,\n\t}\n\n\tskip_token(parser)\n\treturn true\n}\n\n//\n// Parse the productions:\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                                      *** *\n//\nfunc yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ != yaml_VALUE_TOKEN &&\n\t\ttoken.typ != yaml_FLOW_ENTRY_TOKEN &&\n\t\ttoken.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE)\n\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t}\n\tmark := token.end_mark\n\tskip_token(parser)\n\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n}\n\n// Parse the productions:\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                                                      ***** *\n//\nfunc yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ == yaml_VALUE_TOKEN {\n\t\tskip_token(parser)\n\t\ttoken := peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n}\n\n// Parse the productions:\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                                                                      *\n//\nfunc yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_MAPPING_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.start_mark, // [Go] Shouldn't this be end_mark?\n\t}\n\treturn true\n}\n\n// Parse the productions:\n// flow_mapping         ::= FLOW-MAPPING-START\n//                          ******************\n//                          (flow_mapping_entry FLOW-ENTRY)*\n//                           *                  **********\n//                          flow_mapping_entry?\n//                          ******************\n//                          FLOW-MAPPING-END\n//                          ****************\n// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                          *           *** *\n//\nfunc yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\tif !first {\n\t\t\tif token.typ == yaml_FLOW_ENTRY_TOKEN {\n\t\t\t\tskip_token(parser)\n\t\t\t\ttoken = peek_token(parser)\n\t\t\t\tif token == nil {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcontext_mark := parser.marks[len(parser.marks)-1]\n\t\t\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t\t\t\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\t\t\t\"while parsing a flow mapping\", context_mark,\n\t\t\t\t\t\"did not find expected ',' or '}'\", token.start_mark)\n\t\t\t}\n\t\t}\n\n\t\tif token.typ == yaml_KEY_TOKEN {\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif token.typ != yaml_VALUE_TOKEN &&\n\t\t\t\ttoken.typ != yaml_FLOW_ENTRY_TOKEN &&\n\t\t\t\ttoken.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE)\n\t\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t\t} else {\n\t\t\t\tparser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE\n\t\t\t\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n\t\t\t}\n\t\t} else if token.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\n\tparser.state = parser.states[len(parser.states)-1]\n\tparser.states = parser.states[:len(parser.states)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_MAPPING_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.end_mark,\n\t}\n\tskip_token(parser)\n\treturn true\n}\n\n// Parse the productions:\n// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//                                   *                  ***** *\n//\nfunc yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif empty {\n\t\tparser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE\n\t\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n\t}\n\tif token.typ == yaml_VALUE_TOKEN {\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\tparser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n}\n\n// Generate an empty scalar event.\nfunc yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_SCALAR_EVENT,\n\t\tstart_mark: mark,\n\t\tend_mark:   mark,\n\t\tvalue:      nil, // Empty\n\t\timplicit:   true,\n\t\tstyle:      yaml_style_t(yaml_PLAIN_SCALAR_STYLE),\n\t}\n\treturn true\n}\n\nvar default_tag_directives = []yaml_tag_directive_t{\n\t{[]byte(\"!\"), []byte(\"!\")},\n\t{[]byte(\"!!\"), []byte(\"tag:yaml.org,2002:\")},\n}\n\n// Parse directives.\nfunc yaml_parser_process_directives(parser *yaml_parser_t,\n\tversion_directive_ref **yaml_version_directive_t,\n\ttag_directives_ref *[]yaml_tag_directive_t) bool {\n\n\tvar version_directive *yaml_version_directive_t\n\tvar tag_directives []yaml_tag_directive_t\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tfor token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN {\n\t\tif token.typ == yaml_VERSION_DIRECTIVE_TOKEN {\n\t\t\tif version_directive != nil {\n\t\t\t\tyaml_parser_set_parser_error(parser,\n\t\t\t\t\t\"found duplicate %YAML directive\", token.start_mark)\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif token.major != 1 || token.minor != 1 {\n\t\t\t\tyaml_parser_set_parser_error(parser,\n\t\t\t\t\t\"found incompatible YAML document\", token.start_mark)\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tversion_directive = &yaml_version_directive_t{\n\t\t\t\tmajor: token.major,\n\t\t\t\tminor: token.minor,\n\t\t\t}\n\t\t} else if token.typ == yaml_TAG_DIRECTIVE_TOKEN {\n\t\t\tvalue := yaml_tag_directive_t{\n\t\t\t\thandle: token.value,\n\t\t\t\tprefix: token.prefix,\n\t\t\t}\n\t\t\tif !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\ttag_directives = append(tag_directives, value)\n\t\t}\n\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tfor i := range default_tag_directives {\n\t\tif !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif version_directive_ref != nil {\n\t\t*version_directive_ref = version_directive\n\t}\n\tif tag_directives_ref != nil {\n\t\t*tag_directives_ref = tag_directives\n\t}\n\treturn true\n}\n\n// Append a tag directive to the directives stack.\nfunc yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool {\n\tfor i := range parser.tag_directives {\n\t\tif bytes.Equal(value.handle, parser.tag_directives[i].handle) {\n\t\t\tif allow_duplicates {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn yaml_parser_set_parser_error(parser, \"found duplicate %TAG directive\", mark)\n\t\t}\n\t}\n\n\t// [Go] I suspect the copy is unnecessary. This was likely done\n\t// because there was no way to track ownership of the data.\n\tvalue_copy := yaml_tag_directive_t{\n\t\thandle: make([]byte, len(value.handle)),\n\t\tprefix: make([]byte, len(value.prefix)),\n\t}\n\tcopy(value_copy.handle, value.handle)\n\tcopy(value_copy.prefix, value.prefix)\n\tparser.tag_directives = append(parser.tag_directives, value_copy)\n\treturn true\n}\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/readerc.go",
    "content": "package yaml\n\nimport (\n\t\"io\"\n)\n\n// Set the reader error and return 0.\nfunc yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool {\n\tparser.error = yaml_READER_ERROR\n\tparser.problem = problem\n\tparser.problem_offset = offset\n\tparser.problem_value = value\n\treturn false\n}\n\n// Byte order marks.\nconst (\n\tbom_UTF8    = \"\\xef\\xbb\\xbf\"\n\tbom_UTF16LE = \"\\xff\\xfe\"\n\tbom_UTF16BE = \"\\xfe\\xff\"\n)\n\n// Determine the input stream encoding by checking the BOM symbol. If no BOM is\n// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure.\nfunc yaml_parser_determine_encoding(parser *yaml_parser_t) bool {\n\t// Ensure that we had enough bytes in the raw buffer.\n\tfor !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 {\n\t\tif !yaml_parser_update_raw_buffer(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Determine the encoding.\n\tbuf := parser.raw_buffer\n\tpos := parser.raw_buffer_pos\n\tavail := len(buf) - pos\n\tif avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] {\n\t\tparser.encoding = yaml_UTF16LE_ENCODING\n\t\tparser.raw_buffer_pos += 2\n\t\tparser.offset += 2\n\t} else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] {\n\t\tparser.encoding = yaml_UTF16BE_ENCODING\n\t\tparser.raw_buffer_pos += 2\n\t\tparser.offset += 2\n\t} else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] {\n\t\tparser.encoding = yaml_UTF8_ENCODING\n\t\tparser.raw_buffer_pos += 3\n\t\tparser.offset += 3\n\t} else {\n\t\tparser.encoding = yaml_UTF8_ENCODING\n\t}\n\treturn true\n}\n\n// Update the raw buffer.\nfunc yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool {\n\tsize_read := 0\n\n\t// Return if the raw buffer is full.\n\tif parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) {\n\t\treturn true\n\t}\n\n\t// Return on EOF.\n\tif parser.eof {\n\t\treturn true\n\t}\n\n\t// Move the remaining bytes in the raw buffer to the beginning.\n\tif parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) {\n\t\tcopy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:])\n\t}\n\tparser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos]\n\tparser.raw_buffer_pos = 0\n\n\t// Call the read handler to fill the buffer.\n\tsize_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)])\n\tparser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read]\n\tif err == io.EOF {\n\t\tparser.eof = true\n\t} else if err != nil {\n\t\treturn yaml_parser_set_reader_error(parser, \"input error: \"+err.Error(), parser.offset, -1)\n\t}\n\treturn true\n}\n\n// Ensure that the buffer contains at least `length` characters.\n// Return true on success, false on failure.\n//\n// The length is supposed to be significantly less that the buffer size.\nfunc yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool {\n\tif parser.read_handler == nil {\n\t\tpanic(\"read handler must be set\")\n\t}\n\n\t// If the EOF flag is set and the raw buffer is empty, do nothing.\n\tif parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) {\n\t\treturn true\n\t}\n\n\t// Return if the buffer contains enough characters.\n\tif parser.unread >= length {\n\t\treturn true\n\t}\n\n\t// Determine the input encoding if it is not known yet.\n\tif parser.encoding == yaml_ANY_ENCODING {\n\t\tif !yaml_parser_determine_encoding(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Move the unread characters to the beginning of the buffer.\n\tbuffer_len := len(parser.buffer)\n\tif parser.buffer_pos > 0 && parser.buffer_pos < buffer_len {\n\t\tcopy(parser.buffer, parser.buffer[parser.buffer_pos:])\n\t\tbuffer_len -= parser.buffer_pos\n\t\tparser.buffer_pos = 0\n\t} else if parser.buffer_pos == buffer_len {\n\t\tbuffer_len = 0\n\t\tparser.buffer_pos = 0\n\t}\n\n\t// Open the whole buffer for writing, and cut it before returning.\n\tparser.buffer = parser.buffer[:cap(parser.buffer)]\n\n\t// Fill the buffer until it has enough characters.\n\tfirst := true\n\tfor parser.unread < length {\n\n\t\t// Fill the raw buffer if necessary.\n\t\tif !first || parser.raw_buffer_pos == len(parser.raw_buffer) {\n\t\t\tif !yaml_parser_update_raw_buffer(parser) {\n\t\t\t\tparser.buffer = parser.buffer[:buffer_len]\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tfirst = false\n\n\t\t// Decode the raw buffer.\n\tinner:\n\t\tfor parser.raw_buffer_pos != len(parser.raw_buffer) {\n\t\t\tvar value rune\n\t\t\tvar width int\n\n\t\t\traw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos\n\n\t\t\t// Decode the next character.\n\t\t\tswitch parser.encoding {\n\t\t\tcase yaml_UTF8_ENCODING:\n\t\t\t\t// Decode a UTF-8 character.  Check RFC 3629\n\t\t\t\t// (http://www.ietf.org/rfc/rfc3629.txt) for more details.\n\t\t\t\t//\n\t\t\t\t// The following table (taken from the RFC) is used for\n\t\t\t\t// decoding.\n\t\t\t\t//\n\t\t\t\t//    Char. number range |        UTF-8 octet sequence\n\t\t\t\t//      (hexadecimal)    |              (binary)\n\t\t\t\t//   --------------------+------------------------------------\n\t\t\t\t//   0000 0000-0000 007F | 0xxxxxxx\n\t\t\t\t//   0000 0080-0000 07FF | 110xxxxx 10xxxxxx\n\t\t\t\t//   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx\n\t\t\t\t//   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t\t//\n\t\t\t\t// Additionally, the characters in the range 0xD800-0xDFFF\n\t\t\t\t// are prohibited as they are reserved for use with UTF-16\n\t\t\t\t// surrogate pairs.\n\n\t\t\t\t// Determine the length of the UTF-8 sequence.\n\t\t\t\toctet := parser.raw_buffer[parser.raw_buffer_pos]\n\t\t\t\tswitch {\n\t\t\t\tcase octet&0x80 == 0x00:\n\t\t\t\t\twidth = 1\n\t\t\t\tcase octet&0xE0 == 0xC0:\n\t\t\t\t\twidth = 2\n\t\t\t\tcase octet&0xF0 == 0xE0:\n\t\t\t\t\twidth = 3\n\t\t\t\tcase octet&0xF8 == 0xF0:\n\t\t\t\t\twidth = 4\n\t\t\t\tdefault:\n\t\t\t\t\t// The leading octet is invalid.\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"invalid leading UTF-8 octet\",\n\t\t\t\t\t\tparser.offset, int(octet))\n\t\t\t\t}\n\n\t\t\t\t// Check if the raw buffer contains an incomplete character.\n\t\t\t\tif width > raw_unread {\n\t\t\t\t\tif parser.eof {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"incomplete UTF-8 octet sequence\",\n\t\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t\t}\n\t\t\t\t\tbreak inner\n\t\t\t\t}\n\n\t\t\t\t// Decode the leading octet.\n\t\t\t\tswitch {\n\t\t\t\tcase octet&0x80 == 0x00:\n\t\t\t\t\tvalue = rune(octet & 0x7F)\n\t\t\t\tcase octet&0xE0 == 0xC0:\n\t\t\t\t\tvalue = rune(octet & 0x1F)\n\t\t\t\tcase octet&0xF0 == 0xE0:\n\t\t\t\t\tvalue = rune(octet & 0x0F)\n\t\t\t\tcase octet&0xF8 == 0xF0:\n\t\t\t\t\tvalue = rune(octet & 0x07)\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = 0\n\t\t\t\t}\n\n\t\t\t\t// Check and decode the trailing octets.\n\t\t\t\tfor k := 1; k < width; k++ {\n\t\t\t\t\toctet = parser.raw_buffer[parser.raw_buffer_pos+k]\n\n\t\t\t\t\t// Check if the octet is valid.\n\t\t\t\t\tif (octet & 0xC0) != 0x80 {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"invalid trailing UTF-8 octet\",\n\t\t\t\t\t\t\tparser.offset+k, int(octet))\n\t\t\t\t\t}\n\n\t\t\t\t\t// Decode the octet.\n\t\t\t\t\tvalue = (value << 6) + rune(octet&0x3F)\n\t\t\t\t}\n\n\t\t\t\t// Check the length of the sequence against the value.\n\t\t\t\tswitch {\n\t\t\t\tcase width == 1:\n\t\t\t\tcase width == 2 && value >= 0x80:\n\t\t\t\tcase width == 3 && value >= 0x800:\n\t\t\t\tcase width == 4 && value >= 0x10000:\n\t\t\t\tdefault:\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"invalid length of a UTF-8 sequence\",\n\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t}\n\n\t\t\t\t// Check the range of the value.\n\t\t\t\tif value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF {\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"invalid Unicode character\",\n\t\t\t\t\t\tparser.offset, int(value))\n\t\t\t\t}\n\n\t\t\tcase yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING:\n\t\t\t\tvar low, high int\n\t\t\t\tif parser.encoding == yaml_UTF16LE_ENCODING {\n\t\t\t\t\tlow, high = 0, 1\n\t\t\t\t} else {\n\t\t\t\t\thigh, low = 1, 0\n\t\t\t\t}\n\n\t\t\t\t// The UTF-16 encoding is not as simple as one might\n\t\t\t\t// naively think.  Check RFC 2781\n\t\t\t\t// (http://www.ietf.org/rfc/rfc2781.txt).\n\t\t\t\t//\n\t\t\t\t// Normally, two subsequent bytes describe a Unicode\n\t\t\t\t// character.  However a special technique (called a\n\t\t\t\t// surrogate pair) is used for specifying character\n\t\t\t\t// values larger than 0xFFFF.\n\t\t\t\t//\n\t\t\t\t// A surrogate pair consists of two pseudo-characters:\n\t\t\t\t//      high surrogate area (0xD800-0xDBFF)\n\t\t\t\t//      low surrogate area (0xDC00-0xDFFF)\n\t\t\t\t//\n\t\t\t\t// The following formulas are used for decoding\n\t\t\t\t// and encoding characters using surrogate pairs:\n\t\t\t\t//\n\t\t\t\t//  U  = U' + 0x10000   (0x01 00 00 <= U <= 0x10 FF FF)\n\t\t\t\t//  U' = yyyyyyyyyyxxxxxxxxxx   (0 <= U' <= 0x0F FF FF)\n\t\t\t\t//  W1 = 110110yyyyyyyyyy\n\t\t\t\t//  W2 = 110111xxxxxxxxxx\n\t\t\t\t//\n\t\t\t\t// where U is the character value, W1 is the high surrogate\n\t\t\t\t// area, W2 is the low surrogate area.\n\n\t\t\t\t// Check for incomplete UTF-16 character.\n\t\t\t\tif raw_unread < 2 {\n\t\t\t\t\tif parser.eof {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"incomplete UTF-16 character\",\n\t\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t\t}\n\t\t\t\t\tbreak inner\n\t\t\t\t}\n\n\t\t\t\t// Get the character.\n\t\t\t\tvalue = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) +\n\t\t\t\t\t(rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8)\n\n\t\t\t\t// Check for unexpected low surrogate area.\n\t\t\t\tif value&0xFC00 == 0xDC00 {\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"unexpected low surrogate area\",\n\t\t\t\t\t\tparser.offset, int(value))\n\t\t\t\t}\n\n\t\t\t\t// Check for a high surrogate area.\n\t\t\t\tif value&0xFC00 == 0xD800 {\n\t\t\t\t\twidth = 4\n\n\t\t\t\t\t// Check for incomplete surrogate pair.\n\t\t\t\t\tif raw_unread < 4 {\n\t\t\t\t\t\tif parser.eof {\n\t\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\t\"incomplete UTF-16 surrogate pair\",\n\t\t\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak inner\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get the next character.\n\t\t\t\t\tvalue2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) +\n\t\t\t\t\t\t(rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8)\n\n\t\t\t\t\t// Check for a low surrogate area.\n\t\t\t\t\tif value2&0xFC00 != 0xDC00 {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"expected low surrogate area\",\n\t\t\t\t\t\t\tparser.offset+2, int(value2))\n\t\t\t\t\t}\n\n\t\t\t\t\t// Generate the value of the surrogate pair.\n\t\t\t\t\tvalue = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF)\n\t\t\t\t} else {\n\t\t\t\t\twidth = 2\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tpanic(\"impossible\")\n\t\t\t}\n\n\t\t\t// Check if the character is in the allowed range:\n\t\t\t//      #x9 | #xA | #xD | [#x20-#x7E]               (8 bit)\n\t\t\t//      | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD]    (16 bit)\n\t\t\t//      | [#x10000-#x10FFFF]                        (32 bit)\n\t\t\tswitch {\n\t\t\tcase value == 0x09:\n\t\t\tcase value == 0x0A:\n\t\t\tcase value == 0x0D:\n\t\t\tcase value >= 0x20 && value <= 0x7E:\n\t\t\tcase value == 0x85:\n\t\t\tcase value >= 0xA0 && value <= 0xD7FF:\n\t\t\tcase value >= 0xE000 && value <= 0xFFFD:\n\t\t\tcase value >= 0x10000 && value <= 0x10FFFF:\n\t\t\tdefault:\n\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\"control characters are not allowed\",\n\t\t\t\t\tparser.offset, int(value))\n\t\t\t}\n\n\t\t\t// Move the raw pointers.\n\t\t\tparser.raw_buffer_pos += width\n\t\t\tparser.offset += width\n\n\t\t\t// Finally put the character into the buffer.\n\t\t\tif value <= 0x7F {\n\t\t\t\t// 0000 0000-0000 007F . 0xxxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(value)\n\t\t\t} else if value <= 0x7FF {\n\t\t\t\t// 0000 0080-0000 07FF . 110xxxxx 10xxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6))\n\t\t\t\tparser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F))\n\t\t\t} else if value <= 0xFFFF {\n\t\t\t\t// 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12))\n\t\t\t\tparser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F))\n\t\t\t\tparser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F))\n\t\t\t} else {\n\t\t\t\t// 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18))\n\t\t\t\tparser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F))\n\t\t\t\tparser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F))\n\t\t\t\tparser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F))\n\t\t\t}\n\t\t\tbuffer_len += width\n\n\t\t\tparser.unread++\n\t\t}\n\n\t\t// On EOF, put NUL into the buffer and return.\n\t\tif parser.eof {\n\t\t\tparser.buffer[buffer_len] = 0\n\t\t\tbuffer_len++\n\t\t\tparser.unread++\n\t\t\tbreak\n\t\t}\n\t}\n\tparser.buffer = parser.buffer[:buffer_len]\n\treturn true\n}\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/resolve.go",
    "content": "package yaml\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"math\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n// TODO: merge, timestamps, base 60 floats, omap.\n\ntype resolveMapItem struct {\n\tvalue interface{}\n\ttag   string\n}\n\nvar resolveTable = make([]byte, 256)\nvar resolveMap = make(map[string]resolveMapItem)\n\nfunc init() {\n\tt := resolveTable\n\tt[int('+')] = 'S' // Sign\n\tt[int('-')] = 'S'\n\tfor _, c := range \"0123456789\" {\n\t\tt[int(c)] = 'D' // Digit\n\t}\n\tfor _, c := range \"yYnNtTfFoO~\" {\n\t\tt[int(c)] = 'M' // In map\n\t}\n\tt[int('.')] = '.' // Float (potentially in map)\n\n\tvar resolveMapList = []struct {\n\t\tv   interface{}\n\t\ttag string\n\t\tl   []string\n\t}{\n\t\t{true, yaml_BOOL_TAG, []string{\"y\", \"Y\", \"yes\", \"Yes\", \"YES\"}},\n\t\t{true, yaml_BOOL_TAG, []string{\"true\", \"True\", \"TRUE\"}},\n\t\t{true, yaml_BOOL_TAG, []string{\"on\", \"On\", \"ON\"}},\n\t\t{false, yaml_BOOL_TAG, []string{\"n\", \"N\", \"no\", \"No\", \"NO\"}},\n\t\t{false, yaml_BOOL_TAG, []string{\"false\", \"False\", \"FALSE\"}},\n\t\t{false, yaml_BOOL_TAG, []string{\"off\", \"Off\", \"OFF\"}},\n\t\t{nil, yaml_NULL_TAG, []string{\"\", \"~\", \"null\", \"Null\", \"NULL\"}},\n\t\t{math.NaN(), yaml_FLOAT_TAG, []string{\".nan\", \".NaN\", \".NAN\"}},\n\t\t{math.Inf(+1), yaml_FLOAT_TAG, []string{\".inf\", \".Inf\", \".INF\"}},\n\t\t{math.Inf(+1), yaml_FLOAT_TAG, []string{\"+.inf\", \"+.Inf\", \"+.INF\"}},\n\t\t{math.Inf(-1), yaml_FLOAT_TAG, []string{\"-.inf\", \"-.Inf\", \"-.INF\"}},\n\t\t{\"<<\", yaml_MERGE_TAG, []string{\"<<\"}},\n\t}\n\n\tm := resolveMap\n\tfor _, item := range resolveMapList {\n\t\tfor _, s := range item.l {\n\t\t\tm[s] = resolveMapItem{item.v, item.tag}\n\t\t}\n\t}\n}\n\nconst longTagPrefix = \"tag:yaml.org,2002:\"\n\nfunc shortTag(tag string) string {\n\t// TODO This can easily be made faster and produce less garbage.\n\tif strings.HasPrefix(tag, longTagPrefix) {\n\t\treturn \"!!\" + tag[len(longTagPrefix):]\n\t}\n\treturn tag\n}\n\nfunc longTag(tag string) string {\n\tif strings.HasPrefix(tag, \"!!\") {\n\t\treturn longTagPrefix + tag[2:]\n\t}\n\treturn tag\n}\n\nfunc resolvableTag(tag string) bool {\n\tswitch tag {\n\tcase \"\", yaml_STR_TAG, yaml_BOOL_TAG, yaml_INT_TAG, yaml_FLOAT_TAG, yaml_NULL_TAG:\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc resolve(tag string, in string) (rtag string, out interface{}) {\n\tif !resolvableTag(tag) {\n\t\treturn tag, in\n\t}\n\n\tdefer func() {\n\t\tswitch tag {\n\t\tcase \"\", rtag, yaml_STR_TAG, yaml_BINARY_TAG:\n\t\t\treturn\n\t\t}\n\t\tfail(fmt.Sprintf(\"cannot decode %s `%s` as a %s\", shortTag(rtag), in, shortTag(tag)))\n\t}()\n\n\t// Any data is accepted as a !!str or !!binary.\n\t// Otherwise, the prefix is enough of a hint about what it might be.\n\thint := byte('N')\n\tif in != \"\" {\n\t\thint = resolveTable[in[0]]\n\t}\n\tif hint != 0 && tag != yaml_STR_TAG && tag != yaml_BINARY_TAG {\n\t\t// Handle things we can lookup in a map.\n\t\tif item, ok := resolveMap[in]; ok {\n\t\t\treturn item.tag, item.value\n\t\t}\n\n\t\t// Base 60 floats are a bad idea, were dropped in YAML 1.2, and\n\t\t// are purposefully unsupported here. They're still quoted on\n\t\t// the way out for compatibility with other parser, though.\n\n\t\tswitch hint {\n\t\tcase 'M':\n\t\t\t// We've already checked the map above.\n\n\t\tcase '.':\n\t\t\t// Not in the map, so maybe a normal float.\n\t\t\tfloatv, err := strconv.ParseFloat(in, 64)\n\t\t\tif err == nil {\n\t\t\t\treturn yaml_FLOAT_TAG, floatv\n\t\t\t}\n\n\t\tcase 'D', 'S':\n\t\t\t// Int, float, or timestamp.\n\t\t\tplain := strings.Replace(in, \"_\", \"\", -1)\n\t\t\tintv, err := strconv.ParseInt(plain, 0, 64)\n\t\t\tif err == nil {\n\t\t\t\tif intv == int64(int(intv)) {\n\t\t\t\t\treturn yaml_INT_TAG, int(intv)\n\t\t\t\t} else {\n\t\t\t\t\treturn yaml_INT_TAG, intv\n\t\t\t\t}\n\t\t\t}\n\t\t\tfloatv, err := strconv.ParseFloat(plain, 64)\n\t\t\tif err == nil {\n\t\t\t\treturn yaml_FLOAT_TAG, floatv\n\t\t\t}\n\t\t\tif strings.HasPrefix(plain, \"0b\") {\n\t\t\t\tintv, err := strconv.ParseInt(plain[2:], 2, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\treturn yaml_INT_TAG, int(intv)\n\t\t\t\t}\n\t\t\t} else if strings.HasPrefix(plain, \"-0b\") {\n\t\t\t\tintv, err := strconv.ParseInt(plain[3:], 2, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\treturn yaml_INT_TAG, -int(intv)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// XXX Handle timestamps here.\n\n\t\tdefault:\n\t\t\tpanic(\"resolveTable item not yet handled: \" + string(rune(hint)) + \" (with \" + in + \")\")\n\t\t}\n\t}\n\tif tag == yaml_BINARY_TAG {\n\t\treturn yaml_BINARY_TAG, in\n\t}\n\tif utf8.ValidString(in) {\n\t\treturn yaml_STR_TAG, in\n\t}\n\treturn yaml_BINARY_TAG, encodeBase64(in)\n}\n\n// encodeBase64 encodes s as base64 that is broken up into multiple lines\n// as appropriate for the resulting length.\nfunc encodeBase64(s string) string {\n\tconst lineLen = 70\n\tencLen := base64.StdEncoding.EncodedLen(len(s))\n\tlines := encLen/lineLen + 1\n\tbuf := make([]byte, encLen*2+lines)\n\tin := buf[0:encLen]\n\tout := buf[encLen:]\n\tbase64.StdEncoding.Encode(in, []byte(s))\n\tk := 0\n\tfor i := 0; i < len(in); i += lineLen {\n\t\tj := i + lineLen\n\t\tif j > len(in) {\n\t\t\tj = len(in)\n\t\t}\n\t\tk += copy(out[k:], in[i:j])\n\t\tif lines > 1 {\n\t\t\tout[k] = '\\n'\n\t\t\tk++\n\t\t}\n\t}\n\treturn string(out[:k])\n}\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/scannerc.go",
    "content": "package yaml\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\n// Introduction\n// ************\n//\n// The following notes assume that you are familiar with the YAML specification\n// (http://yaml.org/spec/cvs/current.html).  We mostly follow it, although in\n// some cases we are less restrictive that it requires.\n//\n// The process of transforming a YAML stream into a sequence of events is\n// divided on two steps: Scanning and Parsing.\n//\n// The Scanner transforms the input stream into a sequence of tokens, while the\n// parser transform the sequence of tokens produced by the Scanner into a\n// sequence of parsing events.\n//\n// The Scanner is rather clever and complicated. The Parser, on the contrary,\n// is a straightforward implementation of a recursive-descendant parser (or,\n// LL(1) parser, as it is usually called).\n//\n// Actually there are two issues of Scanning that might be called \"clever\", the\n// rest is quite straightforward.  The issues are \"block collection start\" and\n// \"simple keys\".  Both issues are explained below in details.\n//\n// Here the Scanning step is explained and implemented.  We start with the list\n// of all the tokens produced by the Scanner together with short descriptions.\n//\n// Now, tokens:\n//\n//      STREAM-START(encoding)          # The stream start.\n//      STREAM-END                      # The stream end.\n//      VERSION-DIRECTIVE(major,minor)  # The '%YAML' directive.\n//      TAG-DIRECTIVE(handle,prefix)    # The '%TAG' directive.\n//      DOCUMENT-START                  # '---'\n//      DOCUMENT-END                    # '...'\n//      BLOCK-SEQUENCE-START            # Indentation increase denoting a block\n//      BLOCK-MAPPING-START             # sequence or a block mapping.\n//      BLOCK-END                       # Indentation decrease.\n//      FLOW-SEQUENCE-START             # '['\n//      FLOW-SEQUENCE-END               # ']'\n//      BLOCK-SEQUENCE-START            # '{'\n//      BLOCK-SEQUENCE-END              # '}'\n//      BLOCK-ENTRY                     # '-'\n//      FLOW-ENTRY                      # ','\n//      KEY                             # '?' or nothing (simple keys).\n//      VALUE                           # ':'\n//      ALIAS(anchor)                   # '*anchor'\n//      ANCHOR(anchor)                  # '&anchor'\n//      TAG(handle,suffix)              # '!handle!suffix'\n//      SCALAR(value,style)             # A scalar.\n//\n// The following two tokens are \"virtual\" tokens denoting the beginning and the\n// end of the stream:\n//\n//      STREAM-START(encoding)\n//      STREAM-END\n//\n// We pass the information about the input stream encoding with the\n// STREAM-START token.\n//\n// The next two tokens are responsible for tags:\n//\n//      VERSION-DIRECTIVE(major,minor)\n//      TAG-DIRECTIVE(handle,prefix)\n//\n// Example:\n//\n//      %YAML   1.1\n//      %TAG    !   !foo\n//      %TAG    !yaml!  tag:yaml.org,2002:\n//      ---\n//\n// The correspoding sequence of tokens:\n//\n//      STREAM-START(utf-8)\n//      VERSION-DIRECTIVE(1,1)\n//      TAG-DIRECTIVE(\"!\",\"!foo\")\n//      TAG-DIRECTIVE(\"!yaml\",\"tag:yaml.org,2002:\")\n//      DOCUMENT-START\n//      STREAM-END\n//\n// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole\n// line.\n//\n// The document start and end indicators are represented by:\n//\n//      DOCUMENT-START\n//      DOCUMENT-END\n//\n// Note that if a YAML stream contains an implicit document (without '---'\n// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be\n// produced.\n//\n// In the following examples, we present whole documents together with the\n// produced tokens.\n//\n//      1. An implicit document:\n//\n//          'a scalar'\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          SCALAR(\"a scalar\",single-quoted)\n//          STREAM-END\n//\n//      2. An explicit document:\n//\n//          ---\n//          'a scalar'\n//          ...\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          DOCUMENT-START\n//          SCALAR(\"a scalar\",single-quoted)\n//          DOCUMENT-END\n//          STREAM-END\n//\n//      3. Several documents in a stream:\n//\n//          'a scalar'\n//          ---\n//          'another scalar'\n//          ---\n//          'yet another scalar'\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          SCALAR(\"a scalar\",single-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"another scalar\",single-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"yet another scalar\",single-quoted)\n//          STREAM-END\n//\n// We have already introduced the SCALAR token above.  The following tokens are\n// used to describe aliases, anchors, tag, and scalars:\n//\n//      ALIAS(anchor)\n//      ANCHOR(anchor)\n//      TAG(handle,suffix)\n//      SCALAR(value,style)\n//\n// The following series of examples illustrate the usage of these tokens:\n//\n//      1. A recursive sequence:\n//\n//          &A [ *A ]\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          ANCHOR(\"A\")\n//          FLOW-SEQUENCE-START\n//          ALIAS(\"A\")\n//          FLOW-SEQUENCE-END\n//          STREAM-END\n//\n//      2. A tagged scalar:\n//\n//          !!float \"3.14\"  # A good approximation.\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          TAG(\"!!\",\"float\")\n//          SCALAR(\"3.14\",double-quoted)\n//          STREAM-END\n//\n//      3. Various scalar styles:\n//\n//          --- # Implicit empty plain scalars do not produce tokens.\n//          --- a plain scalar\n//          --- 'a single-quoted scalar'\n//          --- \"a double-quoted scalar\"\n//          --- |-\n//            a literal scalar\n//          --- >-\n//            a folded\n//            scalar\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          DOCUMENT-START\n//          DOCUMENT-START\n//          SCALAR(\"a plain scalar\",plain)\n//          DOCUMENT-START\n//          SCALAR(\"a single-quoted scalar\",single-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"a double-quoted scalar\",double-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"a literal scalar\",literal)\n//          DOCUMENT-START\n//          SCALAR(\"a folded scalar\",folded)\n//          STREAM-END\n//\n// Now it's time to review collection-related tokens. We will start with\n// flow collections:\n//\n//      FLOW-SEQUENCE-START\n//      FLOW-SEQUENCE-END\n//      FLOW-MAPPING-START\n//      FLOW-MAPPING-END\n//      FLOW-ENTRY\n//      KEY\n//      VALUE\n//\n// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and\n// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}'\n// correspondingly.  FLOW-ENTRY represent the ',' indicator.  Finally the\n// indicators '?' and ':', which are used for denoting mapping keys and values,\n// are represented by the KEY and VALUE tokens.\n//\n// The following examples show flow collections:\n//\n//      1. A flow sequence:\n//\n//          [item 1, item 2, item 3]\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          FLOW-SEQUENCE-START\n//          SCALAR(\"item 1\",plain)\n//          FLOW-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          FLOW-ENTRY\n//          SCALAR(\"item 3\",plain)\n//          FLOW-SEQUENCE-END\n//          STREAM-END\n//\n//      2. A flow mapping:\n//\n//          {\n//              a simple key: a value,  # Note that the KEY token is produced.\n//              ? a complex key: another value,\n//          }\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          FLOW-MAPPING-START\n//          KEY\n//          SCALAR(\"a simple key\",plain)\n//          VALUE\n//          SCALAR(\"a value\",plain)\n//          FLOW-ENTRY\n//          KEY\n//          SCALAR(\"a complex key\",plain)\n//          VALUE\n//          SCALAR(\"another value\",plain)\n//          FLOW-ENTRY\n//          FLOW-MAPPING-END\n//          STREAM-END\n//\n// A simple key is a key which is not denoted by the '?' indicator.  Note that\n// the Scanner still produce the KEY token whenever it encounters a simple key.\n//\n// For scanning block collections, the following tokens are used (note that we\n// repeat KEY and VALUE here):\n//\n//      BLOCK-SEQUENCE-START\n//      BLOCK-MAPPING-START\n//      BLOCK-END\n//      BLOCK-ENTRY\n//      KEY\n//      VALUE\n//\n// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation\n// increase that precedes a block collection (cf. the INDENT token in Python).\n// The token BLOCK-END denote indentation decrease that ends a block collection\n// (cf. the DEDENT token in Python).  However YAML has some syntax pecularities\n// that makes detections of these tokens more complex.\n//\n// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators\n// '-', '?', and ':' correspondingly.\n//\n// The following examples show how the tokens BLOCK-SEQUENCE-START,\n// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner:\n//\n//      1. Block sequences:\n//\n//          - item 1\n//          - item 2\n//          -\n//            - item 3.1\n//            - item 3.2\n//          -\n//            key 1: value 1\n//            key 2: value 2\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-ENTRY\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 3.1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 3.2\",plain)\n//          BLOCK-END\n//          BLOCK-ENTRY\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n//      2. Block mappings:\n//\n//          a simple key: a value   # The KEY token is produced here.\n//          ? a complex key\n//          : another value\n//          a mapping:\n//            key 1: value 1\n//            key 2: value 2\n//          a sequence:\n//            - item 1\n//            - item 2\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"a simple key\",plain)\n//          VALUE\n//          SCALAR(\"a value\",plain)\n//          KEY\n//          SCALAR(\"a complex key\",plain)\n//          VALUE\n//          SCALAR(\"another value\",plain)\n//          KEY\n//          SCALAR(\"a mapping\",plain)\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          KEY\n//          SCALAR(\"a sequence\",plain)\n//          VALUE\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n// YAML does not always require to start a new block collection from a new\n// line.  If the current line contains only '-', '?', and ':' indicators, a new\n// block collection may start at the current line.  The following examples\n// illustrate this case:\n//\n//      1. Collections in a sequence:\n//\n//          - - item 1\n//            - item 2\n//          - key 1: value 1\n//            key 2: value 2\n//          - ? complex key\n//            : complex value\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-END\n//          BLOCK-ENTRY\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          BLOCK-ENTRY\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"complex key\")\n//          VALUE\n//          SCALAR(\"complex value\")\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n//      2. Collections in a mapping:\n//\n//          ? a sequence\n//          : - item 1\n//            - item 2\n//          ? a mapping\n//          : key 1: value 1\n//            key 2: value 2\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"a sequence\",plain)\n//          VALUE\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-END\n//          KEY\n//          SCALAR(\"a mapping\",plain)\n//          VALUE\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n// YAML also permits non-indented sequences if they are included into a block\n// mapping.  In this case, the token BLOCK-SEQUENCE-START is not produced:\n//\n//      key:\n//      - item 1    # BLOCK-SEQUENCE-START is NOT produced here.\n//      - item 2\n//\n// Tokens:\n//\n//      STREAM-START(utf-8)\n//      BLOCK-MAPPING-START\n//      KEY\n//      SCALAR(\"key\",plain)\n//      VALUE\n//      BLOCK-ENTRY\n//      SCALAR(\"item 1\",plain)\n//      BLOCK-ENTRY\n//      SCALAR(\"item 2\",plain)\n//      BLOCK-END\n//\n\n// Ensure that the buffer contains the required number of characters.\n// Return true on success, false on failure (reader error or memory error).\nfunc cache(parser *yaml_parser_t, length int) bool {\n\t// [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B)\n\treturn parser.unread >= length || yaml_parser_update_buffer(parser, length)\n}\n\n// Advance the buffer pointer.\nfunc skip(parser *yaml_parser_t) {\n\tparser.mark.index++\n\tparser.mark.column++\n\tparser.unread--\n\tparser.buffer_pos += width(parser.buffer[parser.buffer_pos])\n}\n\nfunc skip_line(parser *yaml_parser_t) {\n\tif is_crlf(parser.buffer, parser.buffer_pos) {\n\t\tparser.mark.index += 2\n\t\tparser.mark.column = 0\n\t\tparser.mark.line++\n\t\tparser.unread -= 2\n\t\tparser.buffer_pos += 2\n\t} else if is_break(parser.buffer, parser.buffer_pos) {\n\t\tparser.mark.index++\n\t\tparser.mark.column = 0\n\t\tparser.mark.line++\n\t\tparser.unread--\n\t\tparser.buffer_pos += width(parser.buffer[parser.buffer_pos])\n\t}\n}\n\n// Copy a character to a string buffer and advance pointers.\nfunc read(parser *yaml_parser_t, s []byte) []byte {\n\tw := width(parser.buffer[parser.buffer_pos])\n\tif w == 0 {\n\t\tpanic(\"invalid character sequence\")\n\t}\n\tif len(s) == 0 {\n\t\ts = make([]byte, 0, 32)\n\t}\n\tif w == 1 && len(s)+w <= cap(s) {\n\t\ts = s[:len(s)+1]\n\t\ts[len(s)-1] = parser.buffer[parser.buffer_pos]\n\t\tparser.buffer_pos++\n\t} else {\n\t\ts = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...)\n\t\tparser.buffer_pos += w\n\t}\n\tparser.mark.index++\n\tparser.mark.column++\n\tparser.unread--\n\treturn s\n}\n\n// Copy a line break character to a string buffer and advance pointers.\nfunc read_line(parser *yaml_parser_t, s []byte) []byte {\n\tbuf := parser.buffer\n\tpos := parser.buffer_pos\n\tswitch {\n\tcase buf[pos] == '\\r' && buf[pos+1] == '\\n':\n\t\t// CR LF . LF\n\t\ts = append(s, '\\n')\n\t\tparser.buffer_pos += 2\n\t\tparser.mark.index++\n\t\tparser.unread--\n\tcase buf[pos] == '\\r' || buf[pos] == '\\n':\n\t\t// CR|LF . LF\n\t\ts = append(s, '\\n')\n\t\tparser.buffer_pos += 1\n\tcase buf[pos] == '\\xC2' && buf[pos+1] == '\\x85':\n\t\t// NEL . LF\n\t\ts = append(s, '\\n')\n\t\tparser.buffer_pos += 2\n\tcase buf[pos] == '\\xE2' && buf[pos+1] == '\\x80' && (buf[pos+2] == '\\xA8' || buf[pos+2] == '\\xA9'):\n\t\t// LS|PS . LS|PS\n\t\ts = append(s, buf[parser.buffer_pos:pos+3]...)\n\t\tparser.buffer_pos += 3\n\tdefault:\n\t\treturn s\n\t}\n\tparser.mark.index++\n\tparser.mark.column = 0\n\tparser.mark.line++\n\tparser.unread--\n\treturn s\n}\n\n// Get the next token.\nfunc yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool {\n\t// Erase the token object.\n\t*token = yaml_token_t{} // [Go] Is this necessary?\n\n\t// No tokens after STREAM-END or error.\n\tif parser.stream_end_produced || parser.error != yaml_NO_ERROR {\n\t\treturn true\n\t}\n\n\t// Ensure that the tokens queue contains enough tokens.\n\tif !parser.token_available {\n\t\tif !yaml_parser_fetch_more_tokens(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Fetch the next token from the queue.\n\t*token = parser.tokens[parser.tokens_head]\n\tparser.tokens_head++\n\tparser.tokens_parsed++\n\tparser.token_available = false\n\n\tif token.typ == yaml_STREAM_END_TOKEN {\n\t\tparser.stream_end_produced = true\n\t}\n\treturn true\n}\n\n// Set the scanner error and return false.\nfunc yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool {\n\tparser.error = yaml_SCANNER_ERROR\n\tparser.context = context\n\tparser.context_mark = context_mark\n\tparser.problem = problem\n\tparser.problem_mark = parser.mark\n\treturn false\n}\n\nfunc yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool {\n\tcontext := \"while parsing a tag\"\n\tif directive {\n\t\tcontext = \"while parsing a %TAG directive\"\n\t}\n\treturn yaml_parser_set_scanner_error(parser, context, context_mark, \"did not find URI escaped octet\")\n}\n\nfunc trace(args ...interface{}) func() {\n\tpargs := append([]interface{}{\"+++\"}, args...)\n\tfmt.Println(pargs...)\n\tpargs = append([]interface{}{\"---\"}, args...)\n\treturn func() { fmt.Println(pargs...) }\n}\n\n// Ensure that the tokens queue contains at least one token which can be\n// returned to the Parser.\nfunc yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool {\n\t// While we need more tokens to fetch, do it.\n\tfor {\n\t\t// Check if we really need to fetch more tokens.\n\t\tneed_more_tokens := false\n\n\t\tif parser.tokens_head == len(parser.tokens) {\n\t\t\t// Queue is empty.\n\t\t\tneed_more_tokens = true\n\t\t} else {\n\t\t\t// Check if any potential simple key may occupy the head position.\n\t\t\tif !yaml_parser_stale_simple_keys(parser) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tfor i := range parser.simple_keys {\n\t\t\t\tsimple_key := &parser.simple_keys[i]\n\t\t\t\tif simple_key.possible && simple_key.token_number == parser.tokens_parsed {\n\t\t\t\t\tneed_more_tokens = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We are finished.\n\t\tif !need_more_tokens {\n\t\t\tbreak\n\t\t}\n\t\t// Fetch the next token.\n\t\tif !yaml_parser_fetch_next_token(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tparser.token_available = true\n\treturn true\n}\n\n// The dispatcher for token fetchers.\nfunc yaml_parser_fetch_next_token(parser *yaml_parser_t) bool {\n\t// Ensure that the buffer is initialized.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\t// Check if we just started scanning.  Fetch STREAM-START then.\n\tif !parser.stream_start_produced {\n\t\treturn yaml_parser_fetch_stream_start(parser)\n\t}\n\n\t// Eat whitespaces and comments until we reach the next token.\n\tif !yaml_parser_scan_to_next_token(parser) {\n\t\treturn false\n\t}\n\n\t// Remove obsolete potential simple keys.\n\tif !yaml_parser_stale_simple_keys(parser) {\n\t\treturn false\n\t}\n\n\t// Check the indentation level against the current column.\n\tif !yaml_parser_unroll_indent(parser, parser.mark.column) {\n\t\treturn false\n\t}\n\n\t// Ensure that the buffer contains at least 4 characters.  4 is the length\n\t// of the longest indicators ('--- ' and '... ').\n\tif parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {\n\t\treturn false\n\t}\n\n\t// Is it the end of the stream?\n\tif is_z(parser.buffer, parser.buffer_pos) {\n\t\treturn yaml_parser_fetch_stream_end(parser)\n\t}\n\n\t// Is it a directive?\n\tif parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' {\n\t\treturn yaml_parser_fetch_directive(parser)\n\t}\n\n\tbuf := parser.buffer\n\tpos := parser.buffer_pos\n\n\t// Is it the document start indicator?\n\tif parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) {\n\t\treturn yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN)\n\t}\n\n\t// Is it the document end indicator?\n\tif parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) {\n\t\treturn yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN)\n\t}\n\n\t// Is it the flow sequence start indicator?\n\tif buf[pos] == '[' {\n\t\treturn yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN)\n\t}\n\n\t// Is it the flow mapping start indicator?\n\tif parser.buffer[parser.buffer_pos] == '{' {\n\t\treturn yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN)\n\t}\n\n\t// Is it the flow sequence end indicator?\n\tif parser.buffer[parser.buffer_pos] == ']' {\n\t\treturn yaml_parser_fetch_flow_collection_end(parser,\n\t\t\tyaml_FLOW_SEQUENCE_END_TOKEN)\n\t}\n\n\t// Is it the flow mapping end indicator?\n\tif parser.buffer[parser.buffer_pos] == '}' {\n\t\treturn yaml_parser_fetch_flow_collection_end(parser,\n\t\t\tyaml_FLOW_MAPPING_END_TOKEN)\n\t}\n\n\t// Is it the flow entry indicator?\n\tif parser.buffer[parser.buffer_pos] == ',' {\n\t\treturn yaml_parser_fetch_flow_entry(parser)\n\t}\n\n\t// Is it the block entry indicator?\n\tif parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) {\n\t\treturn yaml_parser_fetch_block_entry(parser)\n\t}\n\n\t// Is it the key indicator?\n\tif parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {\n\t\treturn yaml_parser_fetch_key(parser)\n\t}\n\n\t// Is it the value indicator?\n\tif parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {\n\t\treturn yaml_parser_fetch_value(parser)\n\t}\n\n\t// Is it an alias?\n\tif parser.buffer[parser.buffer_pos] == '*' {\n\t\treturn yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN)\n\t}\n\n\t// Is it an anchor?\n\tif parser.buffer[parser.buffer_pos] == '&' {\n\t\treturn yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN)\n\t}\n\n\t// Is it a tag?\n\tif parser.buffer[parser.buffer_pos] == '!' {\n\t\treturn yaml_parser_fetch_tag(parser)\n\t}\n\n\t// Is it a literal scalar?\n\tif parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 {\n\t\treturn yaml_parser_fetch_block_scalar(parser, true)\n\t}\n\n\t// Is it a folded scalar?\n\tif parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 {\n\t\treturn yaml_parser_fetch_block_scalar(parser, false)\n\t}\n\n\t// Is it a single-quoted scalar?\n\tif parser.buffer[parser.buffer_pos] == '\\'' {\n\t\treturn yaml_parser_fetch_flow_scalar(parser, true)\n\t}\n\n\t// Is it a double-quoted scalar?\n\tif parser.buffer[parser.buffer_pos] == '\"' {\n\t\treturn yaml_parser_fetch_flow_scalar(parser, false)\n\t}\n\n\t// Is it a plain scalar?\n\t//\n\t// A plain scalar may start with any non-blank characters except\n\t//\n\t//      '-', '?', ':', ',', '[', ']', '{', '}',\n\t//      '#', '&', '*', '!', '|', '>', '\\'', '\\\"',\n\t//      '%', '@', '`'.\n\t//\n\t// In the block context (and, for the '-' indicator, in the flow context\n\t// too), it may also start with the characters\n\t//\n\t//      '-', '?', ':'\n\t//\n\t// if it is followed by a non-space character.\n\t//\n\t// The last rule is more restrictive than the specification requires.\n\t// [Go] Make this logic more reasonable.\n\t//switch parser.buffer[parser.buffer_pos] {\n\t//case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '\"', '\\'', '@', '%', '-', '`':\n\t//}\n\tif !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' ||\n\t\tparser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' ||\n\t\tparser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' ||\n\t\tparser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||\n\t\tparser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' ||\n\t\tparser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' ||\n\t\tparser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' ||\n\t\tparser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\\'' ||\n\t\tparser.buffer[parser.buffer_pos] == '\"' || parser.buffer[parser.buffer_pos] == '%' ||\n\t\tparser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') ||\n\t\t(parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) ||\n\t\t(parser.flow_level == 0 &&\n\t\t\t(parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') &&\n\t\t\t!is_blankz(parser.buffer, parser.buffer_pos+1)) {\n\t\treturn yaml_parser_fetch_plain_scalar(parser)\n\t}\n\n\t// If we don't determine the token type so far, it is an error.\n\treturn yaml_parser_set_scanner_error(parser,\n\t\t\"while scanning for the next token\", parser.mark,\n\t\t\"found character that cannot start any token\")\n}\n\n// Check the list of potential simple keys and remove the positions that\n// cannot contain simple keys anymore.\nfunc yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool {\n\t// Check for a potential simple key for each flow level.\n\tfor i := range parser.simple_keys {\n\t\tsimple_key := &parser.simple_keys[i]\n\n\t\t// The specification requires that a simple key\n\t\t//\n\t\t//  - is limited to a single line,\n\t\t//  - is shorter than 1024 characters.\n\t\tif simple_key.possible && (simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index) {\n\n\t\t\t// Check if the potential simple key to be removed is required.\n\t\t\tif simple_key.required {\n\t\t\t\treturn yaml_parser_set_scanner_error(parser,\n\t\t\t\t\t\"while scanning a simple key\", simple_key.mark,\n\t\t\t\t\t\"could not find expected ':'\")\n\t\t\t}\n\t\t\tsimple_key.possible = false\n\t\t}\n\t}\n\treturn true\n}\n\n// Check if a simple key may start at the current position and add it if\n// needed.\nfunc yaml_parser_save_simple_key(parser *yaml_parser_t) bool {\n\t// A simple key is required at the current position if the scanner is in\n\t// the block context and the current column coincides with the indentation\n\t// level.\n\n\trequired := parser.flow_level == 0 && parser.indent == parser.mark.column\n\n\t// A simple key is required only when it is the first token in the current\n\t// line.  Therefore it is always allowed.  But we add a check anyway.\n\tif required && !parser.simple_key_allowed {\n\t\tpanic(\"should not happen\")\n\t}\n\n\t//\n\t// If the current position may start a simple key, save it.\n\t//\n\tif parser.simple_key_allowed {\n\t\tsimple_key := yaml_simple_key_t{\n\t\t\tpossible:     true,\n\t\t\trequired:     required,\n\t\t\ttoken_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head),\n\t\t}\n\t\tsimple_key.mark = parser.mark\n\n\t\tif !yaml_parser_remove_simple_key(parser) {\n\t\t\treturn false\n\t\t}\n\t\tparser.simple_keys[len(parser.simple_keys)-1] = simple_key\n\t}\n\treturn true\n}\n\n// Remove a potential simple key at the current flow level.\nfunc yaml_parser_remove_simple_key(parser *yaml_parser_t) bool {\n\ti := len(parser.simple_keys) - 1\n\tif parser.simple_keys[i].possible {\n\t\t// If the key is required, it is an error.\n\t\tif parser.simple_keys[i].required {\n\t\t\treturn yaml_parser_set_scanner_error(parser,\n\t\t\t\t\"while scanning a simple key\", parser.simple_keys[i].mark,\n\t\t\t\t\"could not find expected ':'\")\n\t\t}\n\t}\n\t// Remove the key from the stack.\n\tparser.simple_keys[i].possible = false\n\treturn true\n}\n\n// Increase the flow level and resize the simple key list if needed.\nfunc yaml_parser_increase_flow_level(parser *yaml_parser_t) bool {\n\t// Reset the simple key on the next level.\n\tparser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})\n\n\t// Increase the flow level.\n\tparser.flow_level++\n\treturn true\n}\n\n// Decrease the flow level.\nfunc yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool {\n\tif parser.flow_level > 0 {\n\t\tparser.flow_level--\n\t\tparser.simple_keys = parser.simple_keys[:len(parser.simple_keys)-1]\n\t}\n\treturn true\n}\n\n// Push the current indentation level to the stack and set the new level\n// the current column is greater than the indentation level.  In this case,\n// append or insert the specified token into the token queue.\nfunc yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool {\n\t// In the flow context, do nothing.\n\tif parser.flow_level > 0 {\n\t\treturn true\n\t}\n\n\tif parser.indent < column {\n\t\t// Push the current indentation level to the stack and set the new\n\t\t// indentation level.\n\t\tparser.indents = append(parser.indents, parser.indent)\n\t\tparser.indent = column\n\n\t\t// Create a token and insert it into the queue.\n\t\ttoken := yaml_token_t{\n\t\t\ttyp:        typ,\n\t\t\tstart_mark: mark,\n\t\t\tend_mark:   mark,\n\t\t}\n\t\tif number > -1 {\n\t\t\tnumber -= parser.tokens_parsed\n\t\t}\n\t\tyaml_insert_token(parser, number, &token)\n\t}\n\treturn true\n}\n\n// Pop indentation levels from the indents stack until the current level\n// becomes less or equal to the column.  For each intendation level, append\n// the BLOCK-END token.\nfunc yaml_parser_unroll_indent(parser *yaml_parser_t, column int) bool {\n\t// In the flow context, do nothing.\n\tif parser.flow_level > 0 {\n\t\treturn true\n\t}\n\n\t// Loop through the intendation levels in the stack.\n\tfor parser.indent > column {\n\t\t// Create a token and append it to the queue.\n\t\ttoken := yaml_token_t{\n\t\t\ttyp:        yaml_BLOCK_END_TOKEN,\n\t\t\tstart_mark: parser.mark,\n\t\t\tend_mark:   parser.mark,\n\t\t}\n\t\tyaml_insert_token(parser, -1, &token)\n\n\t\t// Pop the indentation level.\n\t\tparser.indent = parser.indents[len(parser.indents)-1]\n\t\tparser.indents = parser.indents[:len(parser.indents)-1]\n\t}\n\treturn true\n}\n\n// Initialize the scanner and produce the STREAM-START token.\nfunc yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool {\n\n\t// Set the initial indentation.\n\tparser.indent = -1\n\n\t// Initialize the simple key stack.\n\tparser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})\n\n\t// A simple key is allowed at the beginning of the stream.\n\tparser.simple_key_allowed = true\n\n\t// We have started.\n\tparser.stream_start_produced = true\n\n\t// Create the STREAM-START token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_STREAM_START_TOKEN,\n\t\tstart_mark: parser.mark,\n\t\tend_mark:   parser.mark,\n\t\tencoding:   parser.encoding,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the STREAM-END token and shut down the scanner.\nfunc yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool {\n\n\t// Force new line.\n\tif parser.mark.column != 0 {\n\t\tparser.mark.column = 0\n\t\tparser.mark.line++\n\t}\n\n\t// Reset the indentation level.\n\tif !yaml_parser_unroll_indent(parser, -1) {\n\t\treturn false\n\t}\n\n\t// Reset simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\tparser.simple_key_allowed = false\n\n\t// Create the STREAM-END token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_STREAM_END_TOKEN,\n\t\tstart_mark: parser.mark,\n\t\tend_mark:   parser.mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token.\nfunc yaml_parser_fetch_directive(parser *yaml_parser_t) bool {\n\t// Reset the indentation level.\n\tif !yaml_parser_unroll_indent(parser, -1) {\n\t\treturn false\n\t}\n\n\t// Reset simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\tparser.simple_key_allowed = false\n\n\t// Create the YAML-DIRECTIVE or TAG-DIRECTIVE token.\n\ttoken := yaml_token_t{}\n\tif !yaml_parser_scan_directive(parser, &token) {\n\t\treturn false\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the DOCUMENT-START or DOCUMENT-END token.\nfunc yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\t// Reset the indentation level.\n\tif !yaml_parser_unroll_indent(parser, -1) {\n\t\treturn false\n\t}\n\n\t// Reset simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\tparser.simple_key_allowed = false\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\n\tskip(parser)\n\tskip(parser)\n\tskip(parser)\n\n\tend_mark := parser.mark\n\n\t// Create the DOCUMENT-START or DOCUMENT-END token.\n\ttoken := yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token.\nfunc yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\t// The indicators '[' and '{' may start a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Increase the flow level.\n\tif !yaml_parser_increase_flow_level(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key may follow the indicators '[' and '{'.\n\tparser.simple_key_allowed = true\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token.\n\ttoken := yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token.\nfunc yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\t// Reset any potential simple key on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Decrease the flow level.\n\tif !yaml_parser_decrease_flow_level(parser) {\n\t\treturn false\n\t}\n\n\t// No simple keys after the indicators ']' and '}'.\n\tparser.simple_key_allowed = false\n\n\t// Consume the token.\n\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token.\n\ttoken := yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the FLOW-ENTRY token.\nfunc yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool {\n\t// Reset any potential simple keys on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Simple keys are allowed after ','.\n\tparser.simple_key_allowed = true\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the FLOW-ENTRY token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_FLOW_ENTRY_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the BLOCK-ENTRY token.\nfunc yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool {\n\t// Check if the scanner is in the block context.\n\tif parser.flow_level == 0 {\n\t\t// Check if we are allowed to start a new entry.\n\t\tif !parser.simple_key_allowed {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"\", parser.mark,\n\t\t\t\t\"block sequence entries are not allowed in this context\")\n\t\t}\n\t\t// Add the BLOCK-SEQUENCE-START token if needed.\n\t\tif !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) {\n\t\t\treturn false\n\t\t}\n\t} else {\n\t\t// It is an error for the '-' indicator to occur in the flow context,\n\t\t// but we let the Parser detect and report about it because the Parser\n\t\t// is able to point to the context.\n\t}\n\n\t// Reset any potential simple keys on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Simple keys are allowed after '-'.\n\tparser.simple_key_allowed = true\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the BLOCK-ENTRY token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_BLOCK_ENTRY_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the KEY token.\nfunc yaml_parser_fetch_key(parser *yaml_parser_t) bool {\n\n\t// In the block context, additional checks are required.\n\tif parser.flow_level == 0 {\n\t\t// Check if we are allowed to start a new key (not nessesary simple).\n\t\tif !parser.simple_key_allowed {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"\", parser.mark,\n\t\t\t\t\"mapping keys are not allowed in this context\")\n\t\t}\n\t\t// Add the BLOCK-MAPPING-START token if needed.\n\t\tif !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Reset any potential simple keys on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Simple keys are allowed after '?' in the block context.\n\tparser.simple_key_allowed = parser.flow_level == 0\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the KEY token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_KEY_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the VALUE token.\nfunc yaml_parser_fetch_value(parser *yaml_parser_t) bool {\n\n\tsimple_key := &parser.simple_keys[len(parser.simple_keys)-1]\n\n\t// Have we found a simple key?\n\tif simple_key.possible {\n\t\t// Create the KEY token and insert it into the queue.\n\t\ttoken := yaml_token_t{\n\t\t\ttyp:        yaml_KEY_TOKEN,\n\t\t\tstart_mark: simple_key.mark,\n\t\t\tend_mark:   simple_key.mark,\n\t\t}\n\t\tyaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token)\n\n\t\t// In the block context, we may need to add the BLOCK-MAPPING-START token.\n\t\tif !yaml_parser_roll_indent(parser, simple_key.mark.column,\n\t\t\tsimple_key.token_number,\n\t\t\tyaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Remove the simple key.\n\t\tsimple_key.possible = false\n\n\t\t// A simple key cannot follow another simple key.\n\t\tparser.simple_key_allowed = false\n\n\t} else {\n\t\t// The ':' indicator follows a complex key.\n\n\t\t// In the block context, extra checks are required.\n\t\tif parser.flow_level == 0 {\n\n\t\t\t// Check if we are allowed to start a complex value.\n\t\t\tif !parser.simple_key_allowed {\n\t\t\t\treturn yaml_parser_set_scanner_error(parser, \"\", parser.mark,\n\t\t\t\t\t\"mapping values are not allowed in this context\")\n\t\t\t}\n\n\t\t\t// Add the BLOCK-MAPPING-START token if needed.\n\t\t\tif !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Simple keys after ':' are allowed in the block context.\n\t\tparser.simple_key_allowed = parser.flow_level == 0\n\t}\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the VALUE token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_VALUE_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the ALIAS or ANCHOR token.\nfunc yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\t// An anchor or an alias could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow an anchor or an alias.\n\tparser.simple_key_allowed = false\n\n\t// Create the ALIAS or ANCHOR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_anchor(parser, &token, typ) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the TAG token.\nfunc yaml_parser_fetch_tag(parser *yaml_parser_t) bool {\n\t// A tag could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow a tag.\n\tparser.simple_key_allowed = false\n\n\t// Create the TAG token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_tag(parser, &token) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens.\nfunc yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool {\n\t// Remove any potential simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key may follow a block scalar.\n\tparser.simple_key_allowed = true\n\n\t// Create the SCALAR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_block_scalar(parser, &token, literal) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens.\nfunc yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool {\n\t// A plain scalar could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow a flow scalar.\n\tparser.simple_key_allowed = false\n\n\t// Create the SCALAR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_flow_scalar(parser, &token, single) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the SCALAR(...,plain) token.\nfunc yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool {\n\t// A plain scalar could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow a flow scalar.\n\tparser.simple_key_allowed = false\n\n\t// Create the SCALAR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_plain_scalar(parser, &token) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Eat whitespaces and comments until the next token is found.\nfunc yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool {\n\n\t// Until the next token is not found.\n\tfor {\n\t\t// Allow the BOM mark to start a line.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tif parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t}\n\n\t\t// Eat whitespaces.\n\t\t// Tabs are allowed:\n\t\t//  - in the flow context\n\t\t//  - in the block context, but not at the beginning of the line or\n\t\t//  after '-', '?', or ':' (complex value).\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\n\t\tfor parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\\t') {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Eat a comment until a line break.\n\t\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\t\tfor !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\t\tskip(parser)\n\t\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If it is a line break, eat it.\n\t\tif is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tskip_line(parser)\n\n\t\t\t// In the block context, a new line may start a simple key.\n\t\t\tif parser.flow_level == 0 {\n\t\t\t\tparser.simple_key_allowed = true\n\t\t\t}\n\t\t} else {\n\t\t\tbreak // We have found a token.\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token.\n//\n// Scope:\n//      %YAML    1.1    # a comment \\n\n//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n//      %TAG    !yaml!  tag:yaml.org,2002:  \\n\n//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n//\nfunc yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool {\n\t// Eat '%'.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Scan the directive name.\n\tvar name []byte\n\tif !yaml_parser_scan_directive_name(parser, start_mark, &name) {\n\t\treturn false\n\t}\n\n\t// Is it a YAML directive?\n\tif bytes.Equal(name, []byte(\"YAML\")) {\n\t\t// Scan the VERSION directive value.\n\t\tvar major, minor int8\n\t\tif !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) {\n\t\t\treturn false\n\t\t}\n\t\tend_mark := parser.mark\n\n\t\t// Create a VERSION-DIRECTIVE token.\n\t\t*token = yaml_token_t{\n\t\t\ttyp:        yaml_VERSION_DIRECTIVE_TOKEN,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tmajor:      major,\n\t\t\tminor:      minor,\n\t\t}\n\n\t\t// Is it a TAG directive?\n\t} else if bytes.Equal(name, []byte(\"TAG\")) {\n\t\t// Scan the TAG directive value.\n\t\tvar handle, prefix []byte\n\t\tif !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) {\n\t\t\treturn false\n\t\t}\n\t\tend_mark := parser.mark\n\n\t\t// Create a TAG-DIRECTIVE token.\n\t\t*token = yaml_token_t{\n\t\t\ttyp:        yaml_TAG_DIRECTIVE_TOKEN,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tvalue:      handle,\n\t\t\tprefix:     prefix,\n\t\t}\n\n\t\t// Unknown directive.\n\t} else {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"found uknown directive name\")\n\t\treturn false\n\t}\n\n\t// Eat the rest of the line including any comments.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\tfor !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check if we are at the end of the line.\n\tif !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"did not find expected comment or line break\")\n\t\treturn false\n\t}\n\n\t// Eat a line break.\n\tif is_break(parser.buffer, parser.buffer_pos) {\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\t\tskip_line(parser)\n\t}\n\n\treturn true\n}\n\n// Scan the directive name.\n//\n// Scope:\n//      %YAML   1.1     # a comment \\n\n//       ^^^^\n//      %TAG    !yaml!  tag:yaml.org,2002:  \\n\n//       ^^^\n//\nfunc yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool {\n\t// Consume the directive name.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tvar s []byte\n\tfor is_alpha(parser.buffer, parser.buffer_pos) {\n\t\ts = read(parser, s)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check if the name is empty.\n\tif len(s) == 0 {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"could not find expected directive name\")\n\t\treturn false\n\t}\n\n\t// Check for an blank character after the name.\n\tif !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"found unexpected non-alphabetical character\")\n\t\treturn false\n\t}\n\t*name = s\n\treturn true\n}\n\n// Scan the value of VERSION-DIRECTIVE.\n//\n// Scope:\n//      %YAML   1.1     # a comment \\n\n//           ^^^^^^\nfunc yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool {\n\t// Eat whitespaces.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Consume the major version number.\n\tif !yaml_parser_scan_version_directive_number(parser, start_mark, major) {\n\t\treturn false\n\t}\n\n\t// Eat '.'.\n\tif parser.buffer[parser.buffer_pos] != '.' {\n\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n\t\t\tstart_mark, \"did not find expected digit or '.' character\")\n\t}\n\n\tskip(parser)\n\n\t// Consume the minor version number.\n\tif !yaml_parser_scan_version_directive_number(parser, start_mark, minor) {\n\t\treturn false\n\t}\n\treturn true\n}\n\nconst max_number_length = 2\n\n// Scan the version number of VERSION-DIRECTIVE.\n//\n// Scope:\n//      %YAML   1.1     # a comment \\n\n//              ^\n//      %YAML   1.1     # a comment \\n\n//                ^\nfunc yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool {\n\n\t// Repeat while the next character is digit.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tvar value, length int8\n\tfor is_digit(parser.buffer, parser.buffer_pos) {\n\t\t// Check if the number is too long.\n\t\tlength++\n\t\tif length > max_number_length {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n\t\t\t\tstart_mark, \"found extremely long version number\")\n\t\t}\n\t\tvalue = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos))\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check if the number was present.\n\tif length == 0 {\n\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n\t\t\tstart_mark, \"did not find expected version number\")\n\t}\n\t*number = value\n\treturn true\n}\n\n// Scan the value of a TAG-DIRECTIVE token.\n//\n// Scope:\n//      %TAG    !yaml!  tag:yaml.org,2002:  \\n\n//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n//\nfunc yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool {\n\tvar handle_value, prefix_value []byte\n\n\t// Eat whitespaces.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Scan a handle.\n\tif !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) {\n\t\treturn false\n\t}\n\n\t// Expect a whitespace.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif !is_blank(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a %TAG directive\",\n\t\t\tstart_mark, \"did not find expected whitespace\")\n\t\treturn false\n\t}\n\n\t// Eat whitespaces.\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Scan a prefix.\n\tif !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) {\n\t\treturn false\n\t}\n\n\t// Expect a whitespace or line break.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a %TAG directive\",\n\t\t\tstart_mark, \"did not find expected whitespace or line break\")\n\t\treturn false\n\t}\n\n\t*handle = handle_value\n\t*prefix = prefix_value\n\treturn true\n}\n\nfunc yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool {\n\tvar s []byte\n\n\t// Eat the indicator character.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Consume the value.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tfor is_alpha(parser.buffer, parser.buffer_pos) {\n\t\ts = read(parser, s)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tend_mark := parser.mark\n\n\t/*\n\t * Check if length of the anchor is greater than 0 and it is followed by\n\t * a whitespace character or one of the indicators:\n\t *\n\t *      '?', ':', ',', ']', '}', '%', '@', '`'.\n\t */\n\n\tif len(s) == 0 ||\n\t\t!(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' ||\n\t\t\tparser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' ||\n\t\t\tparser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' ||\n\t\t\tparser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' ||\n\t\t\tparser.buffer[parser.buffer_pos] == '`') {\n\t\tcontext := \"while scanning an alias\"\n\t\tif typ == yaml_ANCHOR_TOKEN {\n\t\t\tcontext = \"while scanning an anchor\"\n\t\t}\n\t\tyaml_parser_set_scanner_error(parser, context, start_mark,\n\t\t\t\"did not find expected alphabetic or numeric character\")\n\t\treturn false\n\t}\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t}\n\n\treturn true\n}\n\n/*\n * Scan a TAG token.\n */\n\nfunc yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool {\n\tvar handle, suffix []byte\n\n\tstart_mark := parser.mark\n\n\t// Check if the tag is in the canonical form.\n\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\treturn false\n\t}\n\n\tif parser.buffer[parser.buffer_pos+1] == '<' {\n\t\t// Keep the handle as ''\n\n\t\t// Eat '!<'\n\t\tskip(parser)\n\t\tskip(parser)\n\n\t\t// Consume the tag value.\n\t\tif !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Check for '>' and eat it.\n\t\tif parser.buffer[parser.buffer_pos] != '>' {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a tag\",\n\t\t\t\tstart_mark, \"did not find the expected '>'\")\n\t\t\treturn false\n\t\t}\n\n\t\tskip(parser)\n\t} else {\n\t\t// The tag has either the '!suffix' or the '!handle!suffix' form.\n\n\t\t// First, try to scan a handle.\n\t\tif !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Check if it is, indeed, handle.\n\t\tif handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' {\n\t\t\t// Scan the suffix now.\n\t\t\tif !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\t// It wasn't a handle after all.  Scan the rest of the tag.\n\t\t\tif !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Set the handle to '!'.\n\t\t\thandle = []byte{'!'}\n\n\t\t\t// A special case: the '!' tag.  Set the handle to '' and the\n\t\t\t// suffix to '!'.\n\t\t\tif len(suffix) == 0 {\n\t\t\t\thandle, suffix = suffix, handle\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check the character which ends the tag.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a tag\",\n\t\t\tstart_mark, \"did not find expected whitespace or line break\")\n\t\treturn false\n\t}\n\n\tend_mark := parser.mark\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_TAG_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      handle,\n\t\tsuffix:     suffix,\n\t}\n\treturn true\n}\n\n// Scan a tag handle.\nfunc yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool {\n\t// Check the initial '!' character.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif parser.buffer[parser.buffer_pos] != '!' {\n\t\tyaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\tstart_mark, \"did not find expected '!'\")\n\t\treturn false\n\t}\n\n\tvar s []byte\n\n\t// Copy the '!' character.\n\ts = read(parser, s)\n\n\t// Copy all subsequent alphabetical and numerical characters.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tfor is_alpha(parser.buffer, parser.buffer_pos) {\n\t\ts = read(parser, s)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check if the trailing character is '!' and copy it.\n\tif parser.buffer[parser.buffer_pos] == '!' {\n\t\ts = read(parser, s)\n\t} else {\n\t\t// It's either the '!' tag or not really a tag handle.  If it's a %TAG\n\t\t// directive, it's an error.  If it's a tag token, it must be a part of URI.\n\t\tif directive && !(s[0] == '!' && s[1] == 0) {\n\t\t\tyaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\tstart_mark, \"did not find expected '!'\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\t*handle = s\n\treturn true\n}\n\n// Scan a tag.\nfunc yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool {\n\t//size_t length = head ? strlen((char *)head) : 0\n\tvar s []byte\n\n\t// Copy the head if needed.\n\t//\n\t// Note that we don't copy the leading '!' character.\n\tif len(head) > 1 {\n\t\ts = append(s, head[1:]...)\n\t}\n\n\t// Scan the tag.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\t// The set of characters that may appear in URI is as follows:\n\t//\n\t//      '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&',\n\t//      '=', '+', '$', ',', '.', '!', '~', '*', '\\'', '(', ')', '[', ']',\n\t//      '%'.\n\t// [Go] Convert this into more reasonable logic.\n\tfor is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' ||\n\t\tparser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' ||\n\t\tparser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' ||\n\t\tparser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' ||\n\t\tparser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' ||\n\t\tparser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' ||\n\t\tparser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' ||\n\t\tparser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\\'' ||\n\t\tparser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' ||\n\t\tparser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' ||\n\t\tparser.buffer[parser.buffer_pos] == '%' {\n\t\t// Check if it is a URI-escape sequence.\n\t\tif parser.buffer[parser.buffer_pos] == '%' {\n\t\t\tif !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\ts = read(parser, s)\n\t\t}\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check if the tag is non-empty.\n\tif len(s) == 0 {\n\t\tyaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\tstart_mark, \"did not find expected tag URI\")\n\t\treturn false\n\t}\n\t*uri = s\n\treturn true\n}\n\n// Decode an URI-escape sequence corresponding to a single UTF-8 character.\nfunc yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool {\n\n\t// Decode the required number of characters.\n\tw := 1024\n\tfor w > 0 {\n\t\t// Check for a URI-escaped octet.\n\t\tif parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {\n\t\t\treturn false\n\t\t}\n\n\t\tif !(parser.buffer[parser.buffer_pos] == '%' &&\n\t\t\tis_hex(parser.buffer, parser.buffer_pos+1) &&\n\t\t\tis_hex(parser.buffer, parser.buffer_pos+2)) {\n\t\t\treturn yaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\tstart_mark, \"did not find URI escaped octet\")\n\t\t}\n\n\t\t// Get the octet.\n\t\toctet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2))\n\n\t\t// If it is the leading octet, determine the length of the UTF-8 sequence.\n\t\tif w == 1024 {\n\t\t\tw = width(octet)\n\t\t\tif w == 0 {\n\t\t\t\treturn yaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\t\tstart_mark, \"found an incorrect leading UTF-8 octet\")\n\t\t\t}\n\t\t} else {\n\t\t\t// Check if the trailing octet is correct.\n\t\t\tif octet&0xC0 != 0x80 {\n\t\t\t\treturn yaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\t\tstart_mark, \"found an incorrect trailing UTF-8 octet\")\n\t\t\t}\n\t\t}\n\n\t\t// Copy the octet and move the pointers.\n\t\t*s = append(*s, octet)\n\t\tskip(parser)\n\t\tskip(parser)\n\t\tskip(parser)\n\t\tw--\n\t}\n\treturn true\n}\n\n// Scan a block scalar.\nfunc yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool {\n\t// Eat the indicator '|' or '>'.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Scan the additional block scalar indicators.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\t// Check for a chomping indicator.\n\tvar chomping, increment int\n\tif parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {\n\t\t// Set the chomping method and eat the indicator.\n\t\tif parser.buffer[parser.buffer_pos] == '+' {\n\t\t\tchomping = +1\n\t\t} else {\n\t\t\tchomping = -1\n\t\t}\n\t\tskip(parser)\n\n\t\t// Check for an indentation indicator.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tif is_digit(parser.buffer, parser.buffer_pos) {\n\t\t\t// Check that the intendation is greater than 0.\n\t\t\tif parser.buffer[parser.buffer_pos] == '0' {\n\t\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\t\t\tstart_mark, \"found an intendation indicator equal to 0\")\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Get the intendation level and eat the indicator.\n\t\t\tincrement = as_digit(parser.buffer, parser.buffer_pos)\n\t\t\tskip(parser)\n\t\t}\n\n\t} else if is_digit(parser.buffer, parser.buffer_pos) {\n\t\t// Do the same as above, but in the opposite order.\n\n\t\tif parser.buffer[parser.buffer_pos] == '0' {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\t\tstart_mark, \"found an intendation indicator equal to 0\")\n\t\t\treturn false\n\t\t}\n\t\tincrement = as_digit(parser.buffer, parser.buffer_pos)\n\t\tskip(parser)\n\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tif parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {\n\t\t\tif parser.buffer[parser.buffer_pos] == '+' {\n\t\t\t\tchomping = +1\n\t\t\t} else {\n\t\t\t\tchomping = -1\n\t\t\t}\n\t\t\tskip(parser)\n\t\t}\n\t}\n\n\t// Eat whitespaces and comments to the end of the line.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\tfor !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check if we are at the end of the line.\n\tif !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\tstart_mark, \"did not find expected comment or line break\")\n\t\treturn false\n\t}\n\n\t// Eat a line break.\n\tif is_break(parser.buffer, parser.buffer_pos) {\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\t\tskip_line(parser)\n\t}\n\n\tend_mark := parser.mark\n\n\t// Set the intendation level if it was specified.\n\tvar indent int\n\tif increment > 0 {\n\t\tif parser.indent >= 0 {\n\t\t\tindent = parser.indent + increment\n\t\t} else {\n\t\t\tindent = increment\n\t\t}\n\t}\n\n\t// Scan the leading line breaks and determine the indentation level if needed.\n\tvar s, leading_break, trailing_breaks []byte\n\tif !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {\n\t\treturn false\n\t}\n\n\t// Scan the block scalar content.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tvar leading_blank, trailing_blank bool\n\tfor parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) {\n\t\t// We are at the beginning of a non-empty line.\n\n\t\t// Is it a trailing whitespace?\n\t\ttrailing_blank = is_blank(parser.buffer, parser.buffer_pos)\n\n\t\t// Check if we need to fold the leading line break.\n\t\tif !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\\n' {\n\t\t\t// Do we need to join the lines by space?\n\t\t\tif len(trailing_breaks) == 0 {\n\t\t\t\ts = append(s, ' ')\n\t\t\t}\n\t\t} else {\n\t\t\ts = append(s, leading_break...)\n\t\t}\n\t\tleading_break = leading_break[:0]\n\n\t\t// Append the remaining line breaks.\n\t\ts = append(s, trailing_breaks...)\n\t\ttrailing_breaks = trailing_breaks[:0]\n\n\t\t// Is it a leading whitespace?\n\t\tleading_blank = is_blank(parser.buffer, parser.buffer_pos)\n\n\t\t// Consume the current line.\n\t\tfor !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\ts = read(parser, s)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Consume the line break.\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\n\t\tleading_break = read_line(parser, leading_break)\n\n\t\t// Eat the following intendation spaces and line breaks.\n\t\tif !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Chomp the tail.\n\tif chomping != -1 {\n\t\ts = append(s, leading_break...)\n\t}\n\tif chomping == 1 {\n\t\ts = append(s, trailing_breaks...)\n\t}\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_SCALAR_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t\tstyle:      yaml_LITERAL_SCALAR_STYLE,\n\t}\n\tif !literal {\n\t\ttoken.style = yaml_FOLDED_SCALAR_STYLE\n\t}\n\treturn true\n}\n\n// Scan intendation spaces and line breaks for a block scalar.  Determine the\n// intendation level if needed.\nfunc yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool {\n\t*end_mark = parser.mark\n\n\t// Eat the intendation spaces and line breaks.\n\tmax_indent := 0\n\tfor {\n\t\t// Eat the intendation spaces.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tfor (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif parser.mark.column > max_indent {\n\t\t\tmax_indent = parser.mark.column\n\t\t}\n\n\t\t// Check for a tab character messing the intendation.\n\t\tif (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\t\tstart_mark, \"found a tab character where an intendation space is expected\")\n\t\t}\n\n\t\t// Have we found a non-empty line?\n\t\tif !is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume the line break.\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\t\t// [Go] Should really be returning breaks instead.\n\t\t*breaks = read_line(parser, *breaks)\n\t\t*end_mark = parser.mark\n\t}\n\n\t// Determine the indentation level if needed.\n\tif *indent == 0 {\n\t\t*indent = max_indent\n\t\tif *indent < parser.indent+1 {\n\t\t\t*indent = parser.indent + 1\n\t\t}\n\t\tif *indent < 1 {\n\t\t\t*indent = 1\n\t\t}\n\t}\n\treturn true\n}\n\n// Scan a quoted scalar.\nfunc yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool {\n\t// Eat the left quote.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Consume the content of the quoted scalar.\n\tvar s, leading_break, trailing_breaks, whitespaces []byte\n\tfor {\n\t\t// Check that there are no document indicators at the beginning of the line.\n\t\tif parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {\n\t\t\treturn false\n\t\t}\n\n\t\tif parser.mark.column == 0 &&\n\t\t\t((parser.buffer[parser.buffer_pos+0] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+1] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+2] == '-') ||\n\t\t\t\t(parser.buffer[parser.buffer_pos+0] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+1] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+2] == '.')) &&\n\t\t\tis_blankz(parser.buffer, parser.buffer_pos+3) {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a quoted scalar\",\n\t\t\t\tstart_mark, \"found unexpected document indicator\")\n\t\t\treturn false\n\t\t}\n\n\t\t// Check for EOF.\n\t\tif is_z(parser.buffer, parser.buffer_pos) {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a quoted scalar\",\n\t\t\t\tstart_mark, \"found unexpected end of stream\")\n\t\t\treturn false\n\t\t}\n\n\t\t// Consume non-blank characters.\n\t\tleading_blanks := false\n\t\tfor !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\t\tif single && parser.buffer[parser.buffer_pos] == '\\'' && parser.buffer[parser.buffer_pos+1] == '\\'' {\n\t\t\t\t// Is is an escaped single quote.\n\t\t\t\ts = append(s, '\\'')\n\t\t\t\tskip(parser)\n\t\t\t\tskip(parser)\n\n\t\t\t} else if single && parser.buffer[parser.buffer_pos] == '\\'' {\n\t\t\t\t// It is a right single quote.\n\t\t\t\tbreak\n\t\t\t} else if !single && parser.buffer[parser.buffer_pos] == '\"' {\n\t\t\t\t// It is a right double quote.\n\t\t\t\tbreak\n\n\t\t\t} else if !single && parser.buffer[parser.buffer_pos] == '\\\\' && is_break(parser.buffer, parser.buffer_pos+1) {\n\t\t\t\t// It is an escaped line break.\n\t\t\t\tif parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tskip(parser)\n\t\t\t\tskip_line(parser)\n\t\t\t\tleading_blanks = true\n\t\t\t\tbreak\n\n\t\t\t} else if !single && parser.buffer[parser.buffer_pos] == '\\\\' {\n\t\t\t\t// It is an escape sequence.\n\t\t\t\tcode_length := 0\n\n\t\t\t\t// Check the escape character.\n\t\t\t\tswitch parser.buffer[parser.buffer_pos+1] {\n\t\t\t\tcase '0':\n\t\t\t\t\ts = append(s, 0)\n\t\t\t\tcase 'a':\n\t\t\t\t\ts = append(s, '\\x07')\n\t\t\t\tcase 'b':\n\t\t\t\t\ts = append(s, '\\x08')\n\t\t\t\tcase 't', '\\t':\n\t\t\t\t\ts = append(s, '\\x09')\n\t\t\t\tcase 'n':\n\t\t\t\t\ts = append(s, '\\x0A')\n\t\t\t\tcase 'v':\n\t\t\t\t\ts = append(s, '\\x0B')\n\t\t\t\tcase 'f':\n\t\t\t\t\ts = append(s, '\\x0C')\n\t\t\t\tcase 'r':\n\t\t\t\t\ts = append(s, '\\x0D')\n\t\t\t\tcase 'e':\n\t\t\t\t\ts = append(s, '\\x1B')\n\t\t\t\tcase ' ':\n\t\t\t\t\ts = append(s, '\\x20')\n\t\t\t\tcase '\"':\n\t\t\t\t\ts = append(s, '\"')\n\t\t\t\tcase '\\'':\n\t\t\t\t\ts = append(s, '\\'')\n\t\t\t\tcase '\\\\':\n\t\t\t\t\ts = append(s, '\\\\')\n\t\t\t\tcase 'N': // NEL (#x85)\n\t\t\t\t\ts = append(s, '\\xC2')\n\t\t\t\t\ts = append(s, '\\x85')\n\t\t\t\tcase '_': // #xA0\n\t\t\t\t\ts = append(s, '\\xC2')\n\t\t\t\t\ts = append(s, '\\xA0')\n\t\t\t\tcase 'L': // LS (#x2028)\n\t\t\t\t\ts = append(s, '\\xE2')\n\t\t\t\t\ts = append(s, '\\x80')\n\t\t\t\t\ts = append(s, '\\xA8')\n\t\t\t\tcase 'P': // PS (#x2029)\n\t\t\t\t\ts = append(s, '\\xE2')\n\t\t\t\t\ts = append(s, '\\x80')\n\t\t\t\t\ts = append(s, '\\xA9')\n\t\t\t\tcase 'x':\n\t\t\t\t\tcode_length = 2\n\t\t\t\tcase 'u':\n\t\t\t\t\tcode_length = 4\n\t\t\t\tcase 'U':\n\t\t\t\t\tcode_length = 8\n\t\t\t\tdefault:\n\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n\t\t\t\t\t\tstart_mark, \"found unknown escape character\")\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tskip(parser)\n\t\t\t\tskip(parser)\n\n\t\t\t\t// Consume an arbitrary escape code.\n\t\t\t\tif code_length > 0 {\n\t\t\t\t\tvar value int\n\n\t\t\t\t\t// Scan the character value.\n\t\t\t\t\tif parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tfor k := 0; k < code_length; k++ {\n\t\t\t\t\t\tif !is_hex(parser.buffer, parser.buffer_pos+k) {\n\t\t\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n\t\t\t\t\t\t\t\tstart_mark, \"did not find expected hexdecimal number\")\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check the value and write the character.\n\t\t\t\t\tif (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF {\n\t\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n\t\t\t\t\t\t\tstart_mark, \"found invalid Unicode character escape code\")\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tif value <= 0x7F {\n\t\t\t\t\t\ts = append(s, byte(value))\n\t\t\t\t\t} else if value <= 0x7FF {\n\t\t\t\t\t\ts = append(s, byte(0xC0+(value>>6)))\n\t\t\t\t\t\ts = append(s, byte(0x80+(value&0x3F)))\n\t\t\t\t\t} else if value <= 0xFFFF {\n\t\t\t\t\t\ts = append(s, byte(0xE0+(value>>12)))\n\t\t\t\t\t\ts = append(s, byte(0x80+((value>>6)&0x3F)))\n\t\t\t\t\t\ts = append(s, byte(0x80+(value&0x3F)))\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts = append(s, byte(0xF0+(value>>18)))\n\t\t\t\t\t\ts = append(s, byte(0x80+((value>>12)&0x3F)))\n\t\t\t\t\t\ts = append(s, byte(0x80+((value>>6)&0x3F)))\n\t\t\t\t\t\ts = append(s, byte(0x80+(value&0x3F)))\n\t\t\t\t\t}\n\n\t\t\t\t\t// Advance the pointer.\n\t\t\t\t\tfor k := 0; k < code_length; k++ {\n\t\t\t\t\t\tskip(parser)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// It is a non-escaped non-blank character.\n\t\t\t\ts = read(parser, s)\n\t\t\t}\n\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Check if we are at the end of the scalar.\n\t\tif single {\n\t\t\tif parser.buffer[parser.buffer_pos] == '\\'' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tif parser.buffer[parser.buffer_pos] == '\"' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// Consume blank characters.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\n\t\tfor is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tif is_blank(parser.buffer, parser.buffer_pos) {\n\t\t\t\t// Consume a space or a tab character.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = read(parser, whitespaces)\n\t\t\t\t} else {\n\t\t\t\t\tskip(parser)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Check if it is a first line break.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = whitespaces[:0]\n\t\t\t\t\tleading_break = read_line(parser, leading_break)\n\t\t\t\t\tleading_blanks = true\n\t\t\t\t} else {\n\t\t\t\t\ttrailing_breaks = read_line(parser, trailing_breaks)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Join the whitespaces or fold line breaks.\n\t\tif leading_blanks {\n\t\t\t// Do we need to fold line breaks?\n\t\t\tif len(leading_break) > 0 && leading_break[0] == '\\n' {\n\t\t\t\tif len(trailing_breaks) == 0 {\n\t\t\t\t\ts = append(s, ' ')\n\t\t\t\t} else {\n\t\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ts = append(s, leading_break...)\n\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t}\n\t\t\ttrailing_breaks = trailing_breaks[:0]\n\t\t\tleading_break = leading_break[:0]\n\t\t} else {\n\t\t\ts = append(s, whitespaces...)\n\t\t\twhitespaces = whitespaces[:0]\n\t\t}\n\t}\n\n\t// Eat the right quote.\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_SCALAR_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t\tstyle:      yaml_SINGLE_QUOTED_SCALAR_STYLE,\n\t}\n\tif !single {\n\t\ttoken.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t}\n\treturn true\n}\n\n// Scan a plain scalar.\nfunc yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool {\n\n\tvar s, leading_break, trailing_breaks, whitespaces []byte\n\tvar leading_blanks bool\n\tvar indent = parser.indent + 1\n\n\tstart_mark := parser.mark\n\tend_mark := parser.mark\n\n\t// Consume the content of the plain scalar.\n\tfor {\n\t\t// Check for a document indicator.\n\t\tif parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {\n\t\t\treturn false\n\t\t}\n\t\tif parser.mark.column == 0 &&\n\t\t\t((parser.buffer[parser.buffer_pos+0] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+1] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+2] == '-') ||\n\t\t\t\t(parser.buffer[parser.buffer_pos+0] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+1] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+2] == '.')) &&\n\t\t\tis_blankz(parser.buffer, parser.buffer_pos+3) {\n\t\t\tbreak\n\t\t}\n\n\t\t// Check for a comment.\n\t\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume non-blank characters.\n\t\tfor !is_blankz(parser.buffer, parser.buffer_pos) {\n\n\t\t\t// Check for 'x:x' in the flow context. TODO: Fix the test \"spec-08-13\".\n\t\t\tif parser.flow_level > 0 &&\n\t\t\t\tparser.buffer[parser.buffer_pos] == ':' &&\n\t\t\t\t!is_blankz(parser.buffer, parser.buffer_pos+1) {\n\t\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a plain scalar\",\n\t\t\t\t\tstart_mark, \"found unexpected ':'\")\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Check for indicators that may end a plain scalar.\n\t\t\tif (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) ||\n\t\t\t\t(parser.flow_level > 0 &&\n\t\t\t\t\t(parser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == ':' ||\n\t\t\t\t\t\tparser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' ||\n\t\t\t\t\t\tparser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||\n\t\t\t\t\t\tparser.buffer[parser.buffer_pos] == '}')) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Check if we need to join whitespaces and breaks.\n\t\t\tif leading_blanks || len(whitespaces) > 0 {\n\t\t\t\tif leading_blanks {\n\t\t\t\t\t// Do we need to fold line breaks?\n\t\t\t\t\tif leading_break[0] == '\\n' {\n\t\t\t\t\t\tif len(trailing_breaks) == 0 {\n\t\t\t\t\t\t\ts = append(s, ' ')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts = append(s, leading_break...)\n\t\t\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t\t\t}\n\t\t\t\t\ttrailing_breaks = trailing_breaks[:0]\n\t\t\t\t\tleading_break = leading_break[:0]\n\t\t\t\t\tleading_blanks = false\n\t\t\t\t} else {\n\t\t\t\t\ts = append(s, whitespaces...)\n\t\t\t\t\twhitespaces = whitespaces[:0]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the character.\n\t\t\ts = read(parser, s)\n\n\t\t\tend_mark = parser.mark\n\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Is it the end?\n\t\tif !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume blank characters.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\n\t\tfor is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tif is_blank(parser.buffer, parser.buffer_pos) {\n\n\t\t\t\t// Check for tab character that abuse intendation.\n\t\t\t\tif leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) {\n\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a plain scalar\",\n\t\t\t\t\t\tstart_mark, \"found a tab character that violate intendation\")\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Consume a space or a tab character.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = read(parser, whitespaces)\n\t\t\t\t} else {\n\t\t\t\t\tskip(parser)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Check if it is a first line break.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = whitespaces[:0]\n\t\t\t\t\tleading_break = read_line(parser, leading_break)\n\t\t\t\t\tleading_blanks = true\n\t\t\t\t} else {\n\t\t\t\t\ttrailing_breaks = read_line(parser, trailing_breaks)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Check intendation level.\n\t\tif parser.flow_level == 0 && parser.mark.column < indent {\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_SCALAR_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t\tstyle:      yaml_PLAIN_SCALAR_STYLE,\n\t}\n\n\t// Note that we change the 'simple_key_allowed' flag.\n\tif leading_blanks {\n\t\tparser.simple_key_allowed = true\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/sorter.go",
    "content": "package yaml\n\nimport (\n\t\"reflect\"\n\t\"unicode\"\n)\n\ntype keyList []reflect.Value\n\nfunc (l keyList) Len() int      { return len(l) }\nfunc (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] }\nfunc (l keyList) Less(i, j int) bool {\n\ta := l[i]\n\tb := l[j]\n\tak := a.Kind()\n\tbk := b.Kind()\n\tfor (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() {\n\t\ta = a.Elem()\n\t\tak = a.Kind()\n\t}\n\tfor (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() {\n\t\tb = b.Elem()\n\t\tbk = b.Kind()\n\t}\n\taf, aok := keyFloat(a)\n\tbf, bok := keyFloat(b)\n\tif aok && bok {\n\t\tif af != bf {\n\t\t\treturn af < bf\n\t\t}\n\t\tif ak != bk {\n\t\t\treturn ak < bk\n\t\t}\n\t\treturn numLess(a, b)\n\t}\n\tif ak != reflect.String || bk != reflect.String {\n\t\treturn ak < bk\n\t}\n\tar, br := []rune(a.String()), []rune(b.String())\n\tfor i := 0; i < len(ar) && i < len(br); i++ {\n\t\tif ar[i] == br[i] {\n\t\t\tcontinue\n\t\t}\n\t\tal := unicode.IsLetter(ar[i])\n\t\tbl := unicode.IsLetter(br[i])\n\t\tif al && bl {\n\t\t\treturn ar[i] < br[i]\n\t\t}\n\t\tif al || bl {\n\t\t\treturn bl\n\t\t}\n\t\tvar ai, bi int\n\t\tvar an, bn int64\n\t\tfor ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ {\n\t\t\tan = an*10 + int64(ar[ai]-'0')\n\t\t}\n\t\tfor bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ {\n\t\t\tbn = bn*10 + int64(br[bi]-'0')\n\t\t}\n\t\tif an != bn {\n\t\t\treturn an < bn\n\t\t}\n\t\tif ai != bi {\n\t\t\treturn ai < bi\n\t\t}\n\t\treturn ar[i] < br[i]\n\t}\n\treturn len(ar) < len(br)\n}\n\n// keyFloat returns a float value for v if it is a number/bool\n// and whether it is a number/bool or not.\nfunc keyFloat(v reflect.Value) (f float64, ok bool) {\n\tswitch v.Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn float64(v.Int()), true\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float(), true\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn float64(v.Uint()), true\n\tcase reflect.Bool:\n\t\tif v.Bool() {\n\t\t\treturn 1, true\n\t\t}\n\t\treturn 0, true\n\t}\n\treturn 0, false\n}\n\n// numLess returns whether a < b.\n// a and b must necessarily have the same kind.\nfunc numLess(a, b reflect.Value) bool {\n\tswitch a.Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn a.Int() < b.Int()\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn a.Float() < b.Float()\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn a.Uint() < b.Uint()\n\tcase reflect.Bool:\n\t\treturn !a.Bool() && b.Bool()\n\t}\n\tpanic(\"not a number\")\n}\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/writerc.go",
    "content": "package yaml\n\n// Set the writer error and return false.\nfunc yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool {\n\temitter.error = yaml_WRITER_ERROR\n\temitter.problem = problem\n\treturn false\n}\n\n// Flush the output buffer.\nfunc yaml_emitter_flush(emitter *yaml_emitter_t) bool {\n\tif emitter.write_handler == nil {\n\t\tpanic(\"write handler not set\")\n\t}\n\n\t// Check if the buffer is empty.\n\tif emitter.buffer_pos == 0 {\n\t\treturn true\n\t}\n\n\t// If the output encoding is UTF-8, we don't need to recode the buffer.\n\tif emitter.encoding == yaml_UTF8_ENCODING {\n\t\tif err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil {\n\t\t\treturn yaml_emitter_set_writer_error(emitter, \"write error: \"+err.Error())\n\t\t}\n\t\temitter.buffer_pos = 0\n\t\treturn true\n\t}\n\n\t// Recode the buffer into the raw buffer.\n\tvar low, high int\n\tif emitter.encoding == yaml_UTF16LE_ENCODING {\n\t\tlow, high = 0, 1\n\t} else {\n\t\thigh, low = 1, 0\n\t}\n\n\tpos := 0\n\tfor pos < emitter.buffer_pos {\n\t\t// See the \"reader.c\" code for more details on UTF-8 encoding.  Note\n\t\t// that we assume that the buffer contains a valid UTF-8 sequence.\n\n\t\t// Read the next UTF-8 character.\n\t\toctet := emitter.buffer[pos]\n\n\t\tvar w int\n\t\tvar value rune\n\t\tswitch {\n\t\tcase octet&0x80 == 0x00:\n\t\t\tw, value = 1, rune(octet&0x7F)\n\t\tcase octet&0xE0 == 0xC0:\n\t\t\tw, value = 2, rune(octet&0x1F)\n\t\tcase octet&0xF0 == 0xE0:\n\t\t\tw, value = 3, rune(octet&0x0F)\n\t\tcase octet&0xF8 == 0xF0:\n\t\t\tw, value = 4, rune(octet&0x07)\n\t\t}\n\t\tfor k := 1; k < w; k++ {\n\t\t\toctet = emitter.buffer[pos+k]\n\t\t\tvalue = (value << 6) + (rune(octet) & 0x3F)\n\t\t}\n\t\tpos += w\n\n\t\t// Write the character.\n\t\tif value < 0x10000 {\n\t\t\tvar b [2]byte\n\t\t\tb[high] = byte(value >> 8)\n\t\t\tb[low] = byte(value & 0xFF)\n\t\t\temitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1])\n\t\t} else {\n\t\t\t// Write the character using a surrogate pair (check \"reader.c\").\n\t\t\tvar b [4]byte\n\t\t\tvalue -= 0x10000\n\t\t\tb[high] = byte(0xD8 + (value >> 18))\n\t\t\tb[low] = byte((value >> 10) & 0xFF)\n\t\t\tb[high+2] = byte(0xDC + ((value >> 8) & 0xFF))\n\t\t\tb[low+2] = byte(value & 0xFF)\n\t\t\temitter.raw_buffer = append(emitter.raw_buffer, b[0], b[1], b[2], b[3])\n\t\t}\n\t}\n\n\t// Write the raw buffer.\n\tif err := emitter.write_handler(emitter, emitter.raw_buffer); err != nil {\n\t\treturn yaml_emitter_set_writer_error(emitter, \"write error: \"+err.Error())\n\t}\n\temitter.buffer_pos = 0\n\temitter.raw_buffer = emitter.raw_buffer[:0]\n\treturn true\n}\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/yaml.go",
    "content": "// Package yaml implements YAML support for the Go language.\n//\n// Source code and other details for the project are available at GitHub:\n//\n//   https://github.com/go-yaml/yaml\n//\npackage yaml\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n)\n\ntype yamlError string\n\nfunc fail(msg string) {\n\tpanic(yamlError(msg))\n}\n\nfunc handleErr(err *error) {\n\tif r := recover(); r != nil {\n\t\tif e, ok := r.(yamlError); ok {\n\t\t\t*err = errors.New(\"YAML error: \" + string(e))\n\t\t} else {\n\t\t\tpanic(r)\n\t\t}\n\t}\n}\n\n// The Setter interface may be implemented by types to do their own custom\n// unmarshalling of YAML values, rather than being implicitly assigned by\n// the yaml package machinery. If setting the value works, the method should\n// return true.  If it returns false, the value is considered unsupported\n// and is omitted from maps and slices.\ntype Setter interface {\n\tSetYAML(tag string, value interface{}) bool\n}\n\n// The Getter interface is implemented by types to do their own custom\n// marshalling into a YAML tag and value.\ntype Getter interface {\n\tGetYAML() (tag string, value interface{})\n}\n\n// Unmarshal decodes the first document found within the in byte slice\n// and assigns decoded values into the out value.\n//\n// Maps and pointers (to a struct, string, int, etc) are accepted as out\n// values.  If an internal pointer within a struct is not initialized,\n// the yaml package will initialize it if necessary for unmarshalling\n// the provided data. The out parameter must not be nil.\n//\n// The type of the decoded values and the type of out will be considered,\n// and Unmarshal will do the best possible job to unmarshal values\n// appropriately.  It is NOT considered an error, though, to skip values\n// because they are not available in the decoded YAML, or if they are not\n// compatible with the out value. To ensure something was properly\n// unmarshaled use a map or compare against the previous value for the\n// field (usually the zero value).\n//\n// Struct fields are only unmarshalled if they are exported (have an\n// upper case first letter), and are unmarshalled using the field name\n// lowercased as the default key. Custom keys may be defined via the\n// \"yaml\" name in the field tag: the content preceding the first comma\n// is used as the key, and the following comma-separated options are\n// used to tweak the marshalling process (see Marshal).\n// Conflicting names result in a runtime error.\n//\n// For example:\n//\n//     type T struct {\n//         F int `yaml:\"a,omitempty\"`\n//         B int\n//     }\n//     var t T\n//     yaml.Unmarshal([]byte(\"a: 1\\nb: 2\"), &t)\n//\n// See the documentation of Marshal for the format of tags and a list of\n// supported tag options.\n//\nfunc Unmarshal(in []byte, out interface{}) (err error) {\n\tdefer handleErr(&err)\n\td := newDecoder()\n\tp := newParser(in)\n\tdefer p.destroy()\n\tnode := p.parse()\n\tif node != nil {\n\t\tv := reflect.ValueOf(out)\n\t\tif v.Kind() == reflect.Ptr && !v.IsNil() {\n\t\t\tv = v.Elem()\n\t\t}\n\t\td.unmarshal(node, v)\n\t}\n\treturn nil\n}\n\n// Marshal serializes the value provided into a YAML document. The structure\n// of the generated document will reflect the structure of the value itself.\n// Maps and pointers (to struct, string, int, etc) are accepted as the in value.\n//\n// Struct fields are only unmarshalled if they are exported (have an upper case\n// first letter), and are unmarshalled using the field name lowercased as the\n// default key. Custom keys may be defined via the \"yaml\" name in the field\n// tag: the content preceding the first comma is used as the key, and the\n// following comma-separated options are used to tweak the marshalling process.\n// Conflicting names result in a runtime error.\n//\n// The field tag format accepted is:\n//\n//     `(...) yaml:\"[<key>][,<flag1>[,<flag2>]]\" (...)`\n//\n// The following flags are currently supported:\n//\n//     omitempty    Only include the field if it's not set to the zero\n//                  value for the type or to empty slices or maps.\n//                  Does not apply to zero valued structs.\n//\n//     flow         Marshal using a flow style (useful for structs,\n//                  sequences and maps.\n//\n//     inline       Inline the struct it's applied to, so its fields\n//                  are processed as if they were part of the outer\n//                  struct.\n//\n// In addition, if the key is \"-\", the field is ignored.\n//\n// For example:\n//\n//     type T struct {\n//         F int \"a,omitempty\"\n//         B int\n//     }\n//     yaml.Marshal(&T{B: 2}) // Returns \"b: 2\\n\"\n//     yaml.Marshal(&T{F: 1}} // Returns \"a: 1\\nb: 0\\n\"\n//\nfunc Marshal(in interface{}) (out []byte, err error) {\n\tdefer handleErr(&err)\n\te := newEncoder()\n\tdefer e.destroy()\n\te.marshal(\"\", reflect.ValueOf(in))\n\te.finish()\n\tout = e.out\n\treturn\n}\n\n// --------------------------------------------------------------------------\n// Maintain a mapping of keys to structure field indexes\n\n// The code in this section was copied from mgo/bson.\n\n// structInfo holds details for the serialization of fields of\n// a given struct.\ntype structInfo struct {\n\tFieldsMap  map[string]fieldInfo\n\tFieldsList []fieldInfo\n\n\t// InlineMap is the number of the field in the struct that\n\t// contains an ,inline map, or -1 if there's none.\n\tInlineMap int\n}\n\ntype fieldInfo struct {\n\tKey       string\n\tNum       int\n\tOmitEmpty bool\n\tFlow      bool\n\n\t// Inline holds the field index if the field is part of an inlined struct.\n\tInline []int\n}\n\nvar structMap = make(map[reflect.Type]*structInfo)\nvar fieldMapMutex sync.RWMutex\n\nfunc getStructInfo(st reflect.Type) (*structInfo, error) {\n\tfieldMapMutex.RLock()\n\tsinfo, found := structMap[st]\n\tfieldMapMutex.RUnlock()\n\tif found {\n\t\treturn sinfo, nil\n\t}\n\n\tn := st.NumField()\n\tfieldsMap := make(map[string]fieldInfo)\n\tfieldsList := make([]fieldInfo, 0, n)\n\tinlineMap := -1\n\tfor i := 0; i != n; i++ {\n\t\tfield := st.Field(i)\n\t\tif field.PkgPath != \"\" {\n\t\t\tcontinue // Private field\n\t\t}\n\n\t\tinfo := fieldInfo{Num: i}\n\n\t\ttag := field.Tag.Get(\"yaml\")\n\t\tif tag == \"\" && strings.Index(string(field.Tag), \":\") < 0 {\n\t\t\ttag = string(field.Tag)\n\t\t}\n\t\tif tag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tinline := false\n\t\tfields := strings.Split(tag, \",\")\n\t\tif len(fields) > 1 {\n\t\t\tfor _, flag := range fields[1:] {\n\t\t\t\tswitch flag {\n\t\t\t\tcase \"omitempty\":\n\t\t\t\t\tinfo.OmitEmpty = true\n\t\t\t\tcase \"flow\":\n\t\t\t\t\tinfo.Flow = true\n\t\t\t\tcase \"inline\":\n\t\t\t\t\tinline = true\n\t\t\t\tdefault:\n\t\t\t\t\treturn nil, errors.New(fmt.Sprintf(\"Unsupported flag %q in tag %q of type %s\", flag, tag, st))\n\t\t\t\t}\n\t\t\t}\n\t\t\ttag = fields[0]\n\t\t}\n\n\t\tif inline {\n\t\t\tswitch field.Type.Kind() {\n\t\t\t// TODO: Implement support for inline maps.\n\t\t\t//case reflect.Map:\n\t\t\t//\tif inlineMap >= 0 {\n\t\t\t//\t\treturn nil, errors.New(\"Multiple ,inline maps in struct \" + st.String())\n\t\t\t//\t}\n\t\t\t//\tif field.Type.Key() != reflect.TypeOf(\"\") {\n\t\t\t//\t\treturn nil, errors.New(\"Option ,inline needs a map with string keys in struct \" + st.String())\n\t\t\t//\t}\n\t\t\t//\tinlineMap = info.Num\n\t\t\tcase reflect.Struct:\n\t\t\t\tsinfo, err := getStructInfo(field.Type)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tfor _, finfo := range sinfo.FieldsList {\n\t\t\t\t\tif _, found := fieldsMap[finfo.Key]; found {\n\t\t\t\t\t\tmsg := \"Duplicated key '\" + finfo.Key + \"' in struct \" + st.String()\n\t\t\t\t\t\treturn nil, errors.New(msg)\n\t\t\t\t\t}\n\t\t\t\t\tif finfo.Inline == nil {\n\t\t\t\t\t\tfinfo.Inline = []int{i, finfo.Num}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfinfo.Inline = append([]int{i}, finfo.Inline...)\n\t\t\t\t\t}\n\t\t\t\t\tfieldsMap[finfo.Key] = finfo\n\t\t\t\t\tfieldsList = append(fieldsList, finfo)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\t//return nil, errors.New(\"Option ,inline needs a struct value or map field\")\n\t\t\t\treturn nil, errors.New(\"Option ,inline needs a struct value field\")\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif tag != \"\" {\n\t\t\tinfo.Key = tag\n\t\t} else {\n\t\t\tinfo.Key = strings.ToLower(field.Name)\n\t\t}\n\n\t\tif _, found = fieldsMap[info.Key]; found {\n\t\t\tmsg := \"Duplicated key '\" + info.Key + \"' in struct \" + st.String()\n\t\t\treturn nil, errors.New(msg)\n\t\t}\n\n\t\tfieldsList = append(fieldsList, info)\n\t\tfieldsMap[info.Key] = info\n\t}\n\n\tsinfo = &structInfo{fieldsMap, fieldsList, inlineMap}\n\n\tfieldMapMutex.Lock()\n\tstructMap[st] = sinfo\n\tfieldMapMutex.Unlock()\n\treturn sinfo, nil\n}\n\nfunc isZero(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.String:\n\t\treturn len(v.String()) == 0\n\tcase reflect.Interface, reflect.Ptr:\n\t\treturn v.IsNil()\n\tcase reflect.Slice:\n\t\treturn v.Len() == 0\n\tcase reflect.Map:\n\t\treturn v.Len() == 0\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn v.Uint() == 0\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/yamlh.go",
    "content": "package yaml\n\nimport (\n\t\"io\"\n)\n\n// The version directive data.\ntype yaml_version_directive_t struct {\n\tmajor int8 // The major version number.\n\tminor int8 // The minor version number.\n}\n\n// The tag directive data.\ntype yaml_tag_directive_t struct {\n\thandle []byte // The tag handle.\n\tprefix []byte // The tag prefix.\n}\n\ntype yaml_encoding_t int\n\n// The stream encoding.\nconst (\n\t// Let the parser choose the encoding.\n\tyaml_ANY_ENCODING yaml_encoding_t = iota\n\n\tyaml_UTF8_ENCODING    // The default UTF-8 encoding.\n\tyaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM.\n\tyaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM.\n)\n\ntype yaml_break_t int\n\n// Line break types.\nconst (\n\t// Let the parser choose the break type.\n\tyaml_ANY_BREAK yaml_break_t = iota\n\n\tyaml_CR_BREAK   // Use CR for line breaks (Mac style).\n\tyaml_LN_BREAK   // Use LN for line breaks (Unix style).\n\tyaml_CRLN_BREAK // Use CR LN for line breaks (DOS style).\n)\n\ntype yaml_error_type_t int\n\n// Many bad things could happen with the parser and emitter.\nconst (\n\t// No error is produced.\n\tyaml_NO_ERROR yaml_error_type_t = iota\n\n\tyaml_MEMORY_ERROR   // Cannot allocate or reallocate a block of memory.\n\tyaml_READER_ERROR   // Cannot read or decode the input stream.\n\tyaml_SCANNER_ERROR  // Cannot scan the input stream.\n\tyaml_PARSER_ERROR   // Cannot parse the input stream.\n\tyaml_COMPOSER_ERROR // Cannot compose a YAML document.\n\tyaml_WRITER_ERROR   // Cannot write to the output stream.\n\tyaml_EMITTER_ERROR  // Cannot emit a YAML stream.\n)\n\n// The pointer position.\ntype yaml_mark_t struct {\n\tindex  int // The position index.\n\tline   int // The position line.\n\tcolumn int // The position column.\n}\n\n// Node Styles\n\ntype yaml_style_t int8\n\ntype yaml_scalar_style_t yaml_style_t\n\n// Scalar styles.\nconst (\n\t// Let the emitter choose the style.\n\tyaml_ANY_SCALAR_STYLE yaml_scalar_style_t = iota\n\n\tyaml_PLAIN_SCALAR_STYLE         // The plain scalar style.\n\tyaml_SINGLE_QUOTED_SCALAR_STYLE // The single-quoted scalar style.\n\tyaml_DOUBLE_QUOTED_SCALAR_STYLE // The double-quoted scalar style.\n\tyaml_LITERAL_SCALAR_STYLE       // The literal scalar style.\n\tyaml_FOLDED_SCALAR_STYLE        // The folded scalar style.\n)\n\ntype yaml_sequence_style_t yaml_style_t\n\n// Sequence styles.\nconst (\n\t// Let the emitter choose the style.\n\tyaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota\n\n\tyaml_BLOCK_SEQUENCE_STYLE // The block sequence style.\n\tyaml_FLOW_SEQUENCE_STYLE  // The flow sequence style.\n)\n\ntype yaml_mapping_style_t yaml_style_t\n\n// Mapping styles.\nconst (\n\t// Let the emitter choose the style.\n\tyaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota\n\n\tyaml_BLOCK_MAPPING_STYLE // The block mapping style.\n\tyaml_FLOW_MAPPING_STYLE  // The flow mapping style.\n)\n\n// Tokens\n\ntype yaml_token_type_t int\n\n// Token types.\nconst (\n\t// An empty token.\n\tyaml_NO_TOKEN yaml_token_type_t = iota\n\n\tyaml_STREAM_START_TOKEN // A STREAM-START token.\n\tyaml_STREAM_END_TOKEN   // A STREAM-END token.\n\n\tyaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token.\n\tyaml_TAG_DIRECTIVE_TOKEN     // A TAG-DIRECTIVE token.\n\tyaml_DOCUMENT_START_TOKEN    // A DOCUMENT-START token.\n\tyaml_DOCUMENT_END_TOKEN      // A DOCUMENT-END token.\n\n\tyaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token.\n\tyaml_BLOCK_MAPPING_START_TOKEN  // A BLOCK-SEQUENCE-END token.\n\tyaml_BLOCK_END_TOKEN            // A BLOCK-END token.\n\n\tyaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token.\n\tyaml_FLOW_SEQUENCE_END_TOKEN   // A FLOW-SEQUENCE-END token.\n\tyaml_FLOW_MAPPING_START_TOKEN  // A FLOW-MAPPING-START token.\n\tyaml_FLOW_MAPPING_END_TOKEN    // A FLOW-MAPPING-END token.\n\n\tyaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token.\n\tyaml_FLOW_ENTRY_TOKEN  // A FLOW-ENTRY token.\n\tyaml_KEY_TOKEN         // A KEY token.\n\tyaml_VALUE_TOKEN       // A VALUE token.\n\n\tyaml_ALIAS_TOKEN  // An ALIAS token.\n\tyaml_ANCHOR_TOKEN // An ANCHOR token.\n\tyaml_TAG_TOKEN    // A TAG token.\n\tyaml_SCALAR_TOKEN // A SCALAR token.\n)\n\nfunc (tt yaml_token_type_t) String() string {\n\tswitch tt {\n\tcase yaml_NO_TOKEN:\n\t\treturn \"yaml_NO_TOKEN\"\n\tcase yaml_STREAM_START_TOKEN:\n\t\treturn \"yaml_STREAM_START_TOKEN\"\n\tcase yaml_STREAM_END_TOKEN:\n\t\treturn \"yaml_STREAM_END_TOKEN\"\n\tcase yaml_VERSION_DIRECTIVE_TOKEN:\n\t\treturn \"yaml_VERSION_DIRECTIVE_TOKEN\"\n\tcase yaml_TAG_DIRECTIVE_TOKEN:\n\t\treturn \"yaml_TAG_DIRECTIVE_TOKEN\"\n\tcase yaml_DOCUMENT_START_TOKEN:\n\t\treturn \"yaml_DOCUMENT_START_TOKEN\"\n\tcase yaml_DOCUMENT_END_TOKEN:\n\t\treturn \"yaml_DOCUMENT_END_TOKEN\"\n\tcase yaml_BLOCK_SEQUENCE_START_TOKEN:\n\t\treturn \"yaml_BLOCK_SEQUENCE_START_TOKEN\"\n\tcase yaml_BLOCK_MAPPING_START_TOKEN:\n\t\treturn \"yaml_BLOCK_MAPPING_START_TOKEN\"\n\tcase yaml_BLOCK_END_TOKEN:\n\t\treturn \"yaml_BLOCK_END_TOKEN\"\n\tcase yaml_FLOW_SEQUENCE_START_TOKEN:\n\t\treturn \"yaml_FLOW_SEQUENCE_START_TOKEN\"\n\tcase yaml_FLOW_SEQUENCE_END_TOKEN:\n\t\treturn \"yaml_FLOW_SEQUENCE_END_TOKEN\"\n\tcase yaml_FLOW_MAPPING_START_TOKEN:\n\t\treturn \"yaml_FLOW_MAPPING_START_TOKEN\"\n\tcase yaml_FLOW_MAPPING_END_TOKEN:\n\t\treturn \"yaml_FLOW_MAPPING_END_TOKEN\"\n\tcase yaml_BLOCK_ENTRY_TOKEN:\n\t\treturn \"yaml_BLOCK_ENTRY_TOKEN\"\n\tcase yaml_FLOW_ENTRY_TOKEN:\n\t\treturn \"yaml_FLOW_ENTRY_TOKEN\"\n\tcase yaml_KEY_TOKEN:\n\t\treturn \"yaml_KEY_TOKEN\"\n\tcase yaml_VALUE_TOKEN:\n\t\treturn \"yaml_VALUE_TOKEN\"\n\tcase yaml_ALIAS_TOKEN:\n\t\treturn \"yaml_ALIAS_TOKEN\"\n\tcase yaml_ANCHOR_TOKEN:\n\t\treturn \"yaml_ANCHOR_TOKEN\"\n\tcase yaml_TAG_TOKEN:\n\t\treturn \"yaml_TAG_TOKEN\"\n\tcase yaml_SCALAR_TOKEN:\n\t\treturn \"yaml_SCALAR_TOKEN\"\n\t}\n\treturn \"<unknown token>\"\n}\n\n// The token structure.\ntype yaml_token_t struct {\n\t// The token type.\n\ttyp yaml_token_type_t\n\n\t// The start/end of the token.\n\tstart_mark, end_mark yaml_mark_t\n\n\t// The stream encoding (for yaml_STREAM_START_TOKEN).\n\tencoding yaml_encoding_t\n\n\t// The alias/anchor/scalar value or tag/tag directive handle\n\t// (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN).\n\tvalue []byte\n\n\t// The tag suffix (for yaml_TAG_TOKEN).\n\tsuffix []byte\n\n\t// The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN).\n\tprefix []byte\n\n\t// The scalar style (for yaml_SCALAR_TOKEN).\n\tstyle yaml_scalar_style_t\n\n\t// The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN).\n\tmajor, minor int8\n}\n\n// Events\n\ntype yaml_event_type_t int8\n\n// Event types.\nconst (\n\t// An empty event.\n\tyaml_NO_EVENT yaml_event_type_t = iota\n\n\tyaml_STREAM_START_EVENT   // A STREAM-START event.\n\tyaml_STREAM_END_EVENT     // A STREAM-END event.\n\tyaml_DOCUMENT_START_EVENT // A DOCUMENT-START event.\n\tyaml_DOCUMENT_END_EVENT   // A DOCUMENT-END event.\n\tyaml_ALIAS_EVENT          // An ALIAS event.\n\tyaml_SCALAR_EVENT         // A SCALAR event.\n\tyaml_SEQUENCE_START_EVENT // A SEQUENCE-START event.\n\tyaml_SEQUENCE_END_EVENT   // A SEQUENCE-END event.\n\tyaml_MAPPING_START_EVENT  // A MAPPING-START event.\n\tyaml_MAPPING_END_EVENT    // A MAPPING-END event.\n)\n\n// The event structure.\ntype yaml_event_t struct {\n\n\t// The event type.\n\ttyp yaml_event_type_t\n\n\t// The start and end of the event.\n\tstart_mark, end_mark yaml_mark_t\n\n\t// The document encoding (for yaml_STREAM_START_EVENT).\n\tencoding yaml_encoding_t\n\n\t// The version directive (for yaml_DOCUMENT_START_EVENT).\n\tversion_directive *yaml_version_directive_t\n\n\t// The list of tag directives (for yaml_DOCUMENT_START_EVENT).\n\ttag_directives []yaml_tag_directive_t\n\n\t// The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT).\n\tanchor []byte\n\n\t// The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).\n\ttag []byte\n\n\t// The scalar value (for yaml_SCALAR_EVENT).\n\tvalue []byte\n\n\t// Is the document start/end indicator implicit, or the tag optional?\n\t// (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT).\n\timplicit bool\n\n\t// Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT).\n\tquoted_implicit bool\n\n\t// The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).\n\tstyle yaml_style_t\n}\n\nfunc (e *yaml_event_t) scalar_style() yaml_scalar_style_t     { return yaml_scalar_style_t(e.style) }\nfunc (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) }\nfunc (e *yaml_event_t) mapping_style() yaml_mapping_style_t   { return yaml_mapping_style_t(e.style) }\n\n// Nodes\n\nconst (\n\tyaml_NULL_TAG      = \"tag:yaml.org,2002:null\"      // The tag !!null with the only possible value: null.\n\tyaml_BOOL_TAG      = \"tag:yaml.org,2002:bool\"      // The tag !!bool with the values: true and false.\n\tyaml_STR_TAG       = \"tag:yaml.org,2002:str\"       // The tag !!str for string values.\n\tyaml_INT_TAG       = \"tag:yaml.org,2002:int\"       // The tag !!int for integer values.\n\tyaml_FLOAT_TAG     = \"tag:yaml.org,2002:float\"     // The tag !!float for float values.\n\tyaml_TIMESTAMP_TAG = \"tag:yaml.org,2002:timestamp\" // The tag !!timestamp for date and time values.\n\n\tyaml_SEQ_TAG = \"tag:yaml.org,2002:seq\" // The tag !!seq is used to denote sequences.\n\tyaml_MAP_TAG = \"tag:yaml.org,2002:map\" // The tag !!map is used to denote mapping.\n\n\t// Not in original libyaml.\n\tyaml_BINARY_TAG = \"tag:yaml.org,2002:binary\"\n\tyaml_MERGE_TAG = \"tag:yaml.org,2002:merge\"\n\n\tyaml_DEFAULT_SCALAR_TAG   = yaml_STR_TAG // The default scalar tag is !!str.\n\tyaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq.\n\tyaml_DEFAULT_MAPPING_TAG  = yaml_MAP_TAG // The default mapping tag is !!map.\n)\n\ntype yaml_node_type_t int\n\n// Node types.\nconst (\n\t// An empty node.\n\tyaml_NO_NODE yaml_node_type_t = iota\n\n\tyaml_SCALAR_NODE   // A scalar node.\n\tyaml_SEQUENCE_NODE // A sequence node.\n\tyaml_MAPPING_NODE  // A mapping node.\n)\n\n// An element of a sequence node.\ntype yaml_node_item_t int\n\n// An element of a mapping node.\ntype yaml_node_pair_t struct {\n\tkey   int // The key of the element.\n\tvalue int // The value of the element.\n}\n\n// The node structure.\ntype yaml_node_t struct {\n\ttyp yaml_node_type_t // The node type.\n\ttag []byte           // The node tag.\n\n\t// The node data.\n\n\t// The scalar parameters (for yaml_SCALAR_NODE).\n\tscalar struct {\n\t\tvalue  []byte              // The scalar value.\n\t\tlength int                 // The length of the scalar value.\n\t\tstyle  yaml_scalar_style_t // The scalar style.\n\t}\n\n\t// The sequence parameters (for YAML_SEQUENCE_NODE).\n\tsequence struct {\n\t\titems_data []yaml_node_item_t    // The stack of sequence items.\n\t\tstyle      yaml_sequence_style_t // The sequence style.\n\t}\n\n\t// The mapping parameters (for yaml_MAPPING_NODE).\n\tmapping struct {\n\t\tpairs_data  []yaml_node_pair_t   // The stack of mapping pairs (key, value).\n\t\tpairs_start *yaml_node_pair_t    // The beginning of the stack.\n\t\tpairs_end   *yaml_node_pair_t    // The end of the stack.\n\t\tpairs_top   *yaml_node_pair_t    // The top of the stack.\n\t\tstyle       yaml_mapping_style_t // The mapping style.\n\t}\n\n\tstart_mark yaml_mark_t // The beginning of the node.\n\tend_mark   yaml_mark_t // The end of the node.\n\n}\n\n// The document structure.\ntype yaml_document_t struct {\n\n\t// The document nodes.\n\tnodes []yaml_node_t\n\n\t// The version directive.\n\tversion_directive *yaml_version_directive_t\n\n\t// The list of tag directives.\n\ttag_directives_data  []yaml_tag_directive_t\n\ttag_directives_start int // The beginning of the tag directives list.\n\ttag_directives_end   int // The end of the tag directives list.\n\n\tstart_implicit int // Is the document start indicator implicit?\n\tend_implicit   int // Is the document end indicator implicit?\n\n\t// The start/end of the document.\n\tstart_mark, end_mark yaml_mark_t\n}\n\n// The prototype of a read handler.\n//\n// The read handler is called when the parser needs to read more bytes from the\n// source. The handler should write not more than size bytes to the buffer.\n// The number of written bytes should be set to the size_read variable.\n//\n// [in,out]   data        A pointer to an application data specified by\n//                        yaml_parser_set_input().\n// [out]      buffer      The buffer to write the data from the source.\n// [in]       size        The size of the buffer.\n// [out]      size_read   The actual number of bytes read from the source.\n//\n// On success, the handler should return 1.  If the handler failed,\n// the returned value should be 0. On EOF, the handler should set the\n// size_read to 0 and return 1.\ntype yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error)\n\n// This structure holds information about a potential simple key.\ntype yaml_simple_key_t struct {\n\tpossible     bool        // Is a simple key possible?\n\trequired     bool        // Is a simple key required?\n\ttoken_number int         // The number of the token.\n\tmark         yaml_mark_t // The position mark.\n}\n\n// The states of the parser.\ntype yaml_parser_state_t int\n\nconst (\n\tyaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota\n\n\tyaml_PARSE_IMPLICIT_DOCUMENT_START_STATE           // Expect the beginning of an implicit document.\n\tyaml_PARSE_DOCUMENT_START_STATE                    // Expect DOCUMENT-START.\n\tyaml_PARSE_DOCUMENT_CONTENT_STATE                  // Expect the content of a document.\n\tyaml_PARSE_DOCUMENT_END_STATE                      // Expect DOCUMENT-END.\n\tyaml_PARSE_BLOCK_NODE_STATE                        // Expect a block node.\n\tyaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence.\n\tyaml_PARSE_FLOW_NODE_STATE                         // Expect a flow node.\n\tyaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE        // Expect the first entry of a block sequence.\n\tyaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE              // Expect an entry of a block sequence.\n\tyaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE         // Expect an entry of an indentless sequence.\n\tyaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE           // Expect the first key of a block mapping.\n\tyaml_PARSE_BLOCK_MAPPING_KEY_STATE                 // Expect a block mapping key.\n\tyaml_PARSE_BLOCK_MAPPING_VALUE_STATE               // Expect a block mapping value.\n\tyaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE         // Expect the first entry of a flow sequence.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE               // Expect an entry of a flow sequence.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE   // Expect a key of an ordered mapping.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE   // Expect the and of an ordered mapping entry.\n\tyaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE            // Expect the first key of a flow mapping.\n\tyaml_PARSE_FLOW_MAPPING_KEY_STATE                  // Expect a key of a flow mapping.\n\tyaml_PARSE_FLOW_MAPPING_VALUE_STATE                // Expect a value of a flow mapping.\n\tyaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE          // Expect an empty value of a flow mapping.\n\tyaml_PARSE_END_STATE                               // Expect nothing.\n)\n\nfunc (ps yaml_parser_state_t) String() string {\n\tswitch ps {\n\tcase yaml_PARSE_STREAM_START_STATE:\n\t\treturn \"yaml_PARSE_STREAM_START_STATE\"\n\tcase yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:\n\t\treturn \"yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE\"\n\tcase yaml_PARSE_DOCUMENT_START_STATE:\n\t\treturn \"yaml_PARSE_DOCUMENT_START_STATE\"\n\tcase yaml_PARSE_DOCUMENT_CONTENT_STATE:\n\t\treturn \"yaml_PARSE_DOCUMENT_CONTENT_STATE\"\n\tcase yaml_PARSE_DOCUMENT_END_STATE:\n\t\treturn \"yaml_PARSE_DOCUMENT_END_STATE\"\n\tcase yaml_PARSE_BLOCK_NODE_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_NODE_STATE\"\n\tcase yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE\"\n\tcase yaml_PARSE_FLOW_NODE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_NODE_STATE\"\n\tcase yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE\"\n\tcase yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE\"\n\tcase yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\"\n\tcase yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE\"\n\tcase yaml_PARSE_BLOCK_MAPPING_KEY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_MAPPING_KEY_STATE\"\n\tcase yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_MAPPING_VALUE_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_KEY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_KEY_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_VALUE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_VALUE_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE\"\n\tcase yaml_PARSE_END_STATE:\n\t\treturn \"yaml_PARSE_END_STATE\"\n\t}\n\treturn \"<unknown parser state>\"\n}\n\n// This structure holds aliases data.\ntype yaml_alias_data_t struct {\n\tanchor []byte      // The anchor.\n\tindex  int         // The node id.\n\tmark   yaml_mark_t // The anchor mark.\n}\n\n// The parser structure.\n//\n// All members are internal. Manage the structure using the\n// yaml_parser_ family of functions.\ntype yaml_parser_t struct {\n\n\t// Error handling\n\n\terror yaml_error_type_t // Error type.\n\n\tproblem string // Error description.\n\n\t// The byte about which the problem occured.\n\tproblem_offset int\n\tproblem_value  int\n\tproblem_mark   yaml_mark_t\n\n\t// The error context.\n\tcontext      string\n\tcontext_mark yaml_mark_t\n\n\t// Reader stuff\n\n\tread_handler yaml_read_handler_t // Read handler.\n\n\tinput_file io.Reader // File input data.\n\tinput      []byte    // String input data.\n\tinput_pos  int\n\n\teof bool // EOF flag\n\n\tbuffer     []byte // The working buffer.\n\tbuffer_pos int    // The current position of the buffer.\n\n\tunread int // The number of unread characters in the buffer.\n\n\traw_buffer     []byte // The raw buffer.\n\traw_buffer_pos int    // The current position of the buffer.\n\n\tencoding yaml_encoding_t // The input encoding.\n\n\toffset int         // The offset of the current position (in bytes).\n\tmark   yaml_mark_t // The mark of the current position.\n\n\t// Scanner stuff\n\n\tstream_start_produced bool // Have we started to scan the input stream?\n\tstream_end_produced   bool // Have we reached the end of the input stream?\n\n\tflow_level int // The number of unclosed '[' and '{' indicators.\n\n\ttokens          []yaml_token_t // The tokens queue.\n\ttokens_head     int            // The head of the tokens queue.\n\ttokens_parsed   int            // The number of tokens fetched from the queue.\n\ttoken_available bool           // Does the tokens queue contain a token ready for dequeueing.\n\n\tindent  int   // The current indentation level.\n\tindents []int // The indentation levels stack.\n\n\tsimple_key_allowed bool                // May a simple key occur at the current position?\n\tsimple_keys        []yaml_simple_key_t // The stack of simple keys.\n\n\t// Parser stuff\n\n\tstate          yaml_parser_state_t    // The current parser state.\n\tstates         []yaml_parser_state_t  // The parser states stack.\n\tmarks          []yaml_mark_t          // The stack of marks.\n\ttag_directives []yaml_tag_directive_t // The list of TAG directives.\n\n\t// Dumper stuff\n\n\taliases []yaml_alias_data_t // The alias data.\n\n\tdocument *yaml_document_t // The currently parsed document.\n}\n\n// Emitter Definitions\n\n// The prototype of a write handler.\n//\n// The write handler is called when the emitter needs to flush the accumulated\n// characters to the output.  The handler should write @a size bytes of the\n// @a buffer to the output.\n//\n// @param[in,out]   data        A pointer to an application data specified by\n//                              yaml_emitter_set_output().\n// @param[in]       buffer      The buffer with bytes to be written.\n// @param[in]       size        The size of the buffer.\n//\n// @returns On success, the handler should return @c 1.  If the handler failed,\n// the returned value should be @c 0.\n//\ntype yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error\n\ntype yaml_emitter_state_t int\n\n// The emitter states.\nconst (\n\t// Expect STREAM-START.\n\tyaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota\n\n\tyaml_EMIT_FIRST_DOCUMENT_START_STATE       // Expect the first DOCUMENT-START or STREAM-END.\n\tyaml_EMIT_DOCUMENT_START_STATE             // Expect DOCUMENT-START or STREAM-END.\n\tyaml_EMIT_DOCUMENT_CONTENT_STATE           // Expect the content of a document.\n\tyaml_EMIT_DOCUMENT_END_STATE               // Expect DOCUMENT-END.\n\tyaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE   // Expect the first item of a flow sequence.\n\tyaml_EMIT_FLOW_SEQUENCE_ITEM_STATE         // Expect an item of a flow sequence.\n\tyaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE     // Expect the first key of a flow mapping.\n\tyaml_EMIT_FLOW_MAPPING_KEY_STATE           // Expect a key of a flow mapping.\n\tyaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE  // Expect a value for a simple key of a flow mapping.\n\tyaml_EMIT_FLOW_MAPPING_VALUE_STATE         // Expect a value of a flow mapping.\n\tyaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE  // Expect the first item of a block sequence.\n\tyaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE        // Expect an item of a block sequence.\n\tyaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE    // Expect the first key of a block mapping.\n\tyaml_EMIT_BLOCK_MAPPING_KEY_STATE          // Expect the key of a block mapping.\n\tyaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping.\n\tyaml_EMIT_BLOCK_MAPPING_VALUE_STATE        // Expect a value of a block mapping.\n\tyaml_EMIT_END_STATE                        // Expect nothing.\n)\n\n// The emitter structure.\n//\n// All members are internal.  Manage the structure using the @c yaml_emitter_\n// family of functions.\ntype yaml_emitter_t struct {\n\n\t// Error handling\n\n\terror   yaml_error_type_t // Error type.\n\tproblem string            // Error description.\n\n\t// Writer stuff\n\n\twrite_handler yaml_write_handler_t // Write handler.\n\n\toutput_buffer *[]byte   // String output data.\n\toutput_file   io.Writer // File output data.\n\n\tbuffer     []byte // The working buffer.\n\tbuffer_pos int    // The current position of the buffer.\n\n\traw_buffer     []byte // The raw buffer.\n\traw_buffer_pos int    // The current position of the buffer.\n\n\tencoding yaml_encoding_t // The stream encoding.\n\n\t// Emitter stuff\n\n\tcanonical   bool         // If the output is in the canonical style?\n\tbest_indent int          // The number of indentation spaces.\n\tbest_width  int          // The preferred width of the output lines.\n\tunicode     bool         // Allow unescaped non-ASCII characters?\n\tline_break  yaml_break_t // The preferred line break.\n\n\tstate  yaml_emitter_state_t   // The current emitter state.\n\tstates []yaml_emitter_state_t // The stack of states.\n\n\tevents      []yaml_event_t // The event queue.\n\tevents_head int            // The head of the event queue.\n\n\tindents []int // The stack of indentation levels.\n\n\ttag_directives []yaml_tag_directive_t // The list of tag directives.\n\n\tindent int // The current indentation level.\n\n\tflow_level int // The current flow level.\n\n\troot_context       bool // Is it the document root context?\n\tsequence_context   bool // Is it a sequence context?\n\tmapping_context    bool // Is it a mapping context?\n\tsimple_key_context bool // Is it a simple mapping key context?\n\n\tline       int  // The current line.\n\tcolumn     int  // The current column.\n\twhitespace bool // If the last character was a whitespace?\n\tindention  bool // If the last character was an indentation character (' ', '-', '?', ':')?\n\topen_ended bool // If an explicit document end is required?\n\n\t// Anchor analysis.\n\tanchor_data struct {\n\t\tanchor []byte // The anchor value.\n\t\talias  bool   // Is it an alias?\n\t}\n\n\t// Tag analysis.\n\ttag_data struct {\n\t\thandle []byte // The tag handle.\n\t\tsuffix []byte // The tag suffix.\n\t}\n\n\t// Scalar analysis.\n\tscalar_data struct {\n\t\tvalue                 []byte              // The scalar value.\n\t\tmultiline             bool                // Does the scalar contain line breaks?\n\t\tflow_plain_allowed    bool                // Can the scalar be expessed in the flow plain style?\n\t\tblock_plain_allowed   bool                // Can the scalar be expressed in the block plain style?\n\t\tsingle_quoted_allowed bool                // Can the scalar be expressed in the single quoted style?\n\t\tblock_allowed         bool                // Can the scalar be expressed in the literal or folded styles?\n\t\tstyle                 yaml_scalar_style_t // The output style.\n\t}\n\n\t// Dumper stuff\n\n\topened bool // If the stream was already opened?\n\tclosed bool // If the stream was already closed?\n\n\t// The information associated with the document nodes.\n\tanchors *struct {\n\t\treferences int  // The number of references.\n\t\tanchor     int  // The anchor id.\n\t\tserialized bool // If the node has been emitted?\n\t}\n\n\tlast_anchor_id int // The last assigned anchor id.\n\n\tdocument *yaml_document_t // The currently emitted document.\n}\n"
  },
  {
    "path": "vendor/gopkg.in/yaml.v1/yamlprivateh.go",
    "content": "package yaml\n\nconst (\n\t// The size of the input raw buffer.\n\tinput_raw_buffer_size = 512\n\n\t// The size of the input buffer.\n\t// It should be possible to decode the whole raw buffer.\n\tinput_buffer_size = input_raw_buffer_size * 3\n\n\t// The size of the output buffer.\n\toutput_buffer_size = 128\n\n\t// The size of the output raw buffer.\n\t// It should be possible to encode the whole output buffer.\n\toutput_raw_buffer_size = (output_buffer_size*2 + 2)\n\n\t// The size of other stacks and queues.\n\tinitial_stack_size  = 16\n\tinitial_queue_size  = 16\n\tinitial_string_size = 16\n)\n\n// Check if the character at the specified position is an alphabetical\n// character, a digit, '_', or '-'.\nfunc is_alpha(b []byte, i int) bool {\n\treturn b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-'\n}\n\n// Check if the character at the specified position is a digit.\nfunc is_digit(b []byte, i int) bool {\n\treturn b[i] >= '0' && b[i] <= '9'\n}\n\n// Get the value of a digit.\nfunc as_digit(b []byte, i int) int {\n\treturn int(b[i]) - '0'\n}\n\n// Check if the character at the specified position is a hex-digit.\nfunc is_hex(b []byte, i int) bool {\n\treturn b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f'\n}\n\n// Get the value of a hex-digit.\nfunc as_hex(b []byte, i int) int {\n\tbi := b[i]\n\tif bi >= 'A' && bi <= 'F' {\n\t\treturn int(bi) - 'A' + 10\n\t}\n\tif bi >= 'a' && bi <= 'f' {\n\t\treturn int(bi) - 'a' + 10\n\t}\n\treturn int(bi) - '0'\n}\n\n// Check if the character is ASCII.\nfunc is_ascii(b []byte, i int) bool {\n\treturn b[i] <= 0x7F\n}\n\n// Check if the character at the start of the buffer can be printed unescaped.\nfunc is_printable(b []byte, i int) bool {\n\treturn ((b[i] == 0x0A) || // . == #x0A\n\t\t(b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E\n\t\t(b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF\n\t\t(b[i] > 0xC2 && b[i] < 0xED) ||\n\t\t(b[i] == 0xED && b[i+1] < 0xA0) ||\n\t\t(b[i] == 0xEE) ||\n\t\t(b[i] == 0xEF && // #xE000 <= . <= #xFFFD\n\t\t\t!(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF\n\t\t\t!(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF))))\n}\n\n// Check if the character at the specified position is NUL.\nfunc is_z(b []byte, i int) bool {\n\treturn b[i] == 0x00\n}\n\n// Check if the beginning of the buffer is a BOM.\nfunc is_bom(b []byte, i int) bool {\n\treturn b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF\n}\n\n// Check if the character at the specified position is space.\nfunc is_space(b []byte, i int) bool {\n\treturn b[i] == ' '\n}\n\n// Check if the character at the specified position is tab.\nfunc is_tab(b []byte, i int) bool {\n\treturn b[i] == '\\t'\n}\n\n// Check if the character at the specified position is blank (space or tab).\nfunc is_blank(b []byte, i int) bool {\n\t//return is_space(b, i) || is_tab(b, i)\n\treturn b[i] == ' ' || b[i] == '\\t'\n}\n\n// Check if the character at the specified position is a line break.\nfunc is_break(b []byte, i int) bool {\n\treturn (b[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029)\n}\n\nfunc is_crlf(b []byte, i int) bool {\n\treturn b[i] == '\\r' && b[i+1] == '\\n'\n}\n\n// Check if the character is a line break or NUL.\nfunc is_breakz(b []byte, i int) bool {\n\t//return is_break(b, i) || is_z(b, i)\n\treturn (        // is_break:\n\tb[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)\n\t\t// is_z:\n\t\tb[i] == 0)\n}\n\n// Check if the character is a line break, space, or NUL.\nfunc is_spacez(b []byte, i int) bool {\n\t//return is_space(b, i) || is_breakz(b, i)\n\treturn ( // is_space:\n\tb[i] == ' ' ||\n\t\t// is_breakz:\n\t\tb[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)\n\t\tb[i] == 0)\n}\n\n// Check if the character is a line break, space, tab, or NUL.\nfunc is_blankz(b []byte, i int) bool {\n\t//return is_blank(b, i) || is_breakz(b, i)\n\treturn ( // is_blank:\n\tb[i] == ' ' || b[i] == '\\t' ||\n\t\t// is_breakz:\n\t\tb[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)\n\t\tb[i] == 0)\n}\n\n// Determine the width of the character.\nfunc width(b byte) int {\n\t// Don't replace these by a switch without first\n\t// confirming that it is being inlined.\n\tif b&0x80 == 0x00 {\n\t\treturn 1\n\t}\n\tif b&0xE0 == 0xC0 {\n\t\treturn 2\n\t}\n\tif b&0xF0 == 0xE0 {\n\t\treturn 3\n\t}\n\tif b&0xF8 == 0xF0 {\n\t\treturn 4\n\t}\n\treturn 0\n\n}\n"
  }
]