diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000000000000000000000000000000000..57b7f6982f7d7b7b9677c795488b11864d69d19e --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +ko_fi: oobabooga diff --git a/.github/ISSUE_TEMPLATE/bug_report_template.yml b/.github/ISSUE_TEMPLATE/bug_report_template.yml new file mode 100644 index 0000000000000000000000000000000000000000..bd30a0c9c17dd514bf364846fe7914b6d10a4584 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report_template.yml @@ -0,0 +1,53 @@ +name: "Bug report" +description: Report a bug +labels: [ "bug" ] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + - type: textarea + id: bug-description + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + placeholder: Bug description + validations: + required: true + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the issue you encountered. + options: + - label: I have searched the existing issues + required: true + - type: textarea + id: reproduction + attributes: + label: Reproduction + description: Please provide the steps necessary to reproduce your issue. + placeholder: Reproduction + validations: + required: true + - type: textarea + id: screenshot + attributes: + label: Screenshot + description: "If possible, please include screenshot(s) so that we can understand what the issue is." + - type: textarea + id: logs + attributes: + label: Logs + description: "Please include the full stacktrace of the errors you get in the command-line (if any)." + render: shell + validations: + required: true + - type: textarea + id: system-info + attributes: + label: System Info + description: "Please share your system info with us: operating system, GPU brand, and GPU model. If you are using a Google Colab notebook, mention that instead." + render: shell + placeholder: + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000000000000000000000000000000000..b94974f865491731a1251e3e9736e01cbe81b06f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,16 @@ +--- +name: Feature request +about: Suggest an improvement or new feature for the web UI +title: '' +labels: 'enhancement' +assignees: '' + +--- + +**Description** + +A clear and concise description of what you want to be implemented. + +**Additional Context** + +If applicable, please provide any extra information, external links, or screenshots that could be useful. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000000000000000000000000000000000..91abb11fdf507883caeeb2d2958e1c65fb6cbdc1 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "pip" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000000000000000000000000000000000..51e26b13a38889a38cac5392b6e22190fd75a8b7 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,3 @@ +## Checklist: + +- [ ] I have read the [Contributing guidelines](https://github.com/oobabooga/text-generation-webui/wiki/Contributing-guidelines). diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml new file mode 100644 index 0000000000000000000000000000000000000000..59287718a4685059577fff5810e52514a577e59b --- /dev/null +++ b/.github/workflows/auto-release.yml @@ -0,0 +1,28 @@ +name: Weekly Snapshot Release +on: + schedule: + - cron: '15 20 * * 0' + workflow_dispatch: {} + +jobs: + create_release: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set snapshot tag + id: set_snapshot_tag + run: echo ::set-output name=tag::snapshot-$(date +'%Y-%m-%d') + + - name: Create release + id: create_release + uses: softprops/action-gh-release@v1 + with: + generate_release_notes: true + tag_name: ${{ steps.set_snapshot_tag.outputs.tag }} + name: ${{ steps.set_snapshot_tag.outputs.tag }} + draft: false + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000000000000000000000000000000000000..2de6d955a3c739d03716b6c6f884ab9bf1c47b59 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,22 @@ +name: Close inactive issues +on: + schedule: + - cron: "10 23 * * *" + +jobs: + close-issues: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v5 + with: + stale-issue-message: "" + close-issue-message: "This issue has been closed due to inactivity for 6 weeks. If you believe it is still relevant, please leave a comment below. You can tag a developer in your comment." + days-before-issue-stale: 42 + days-before-issue-close: 0 + stale-issue-label: "stale" + days-before-pr-stale: -1 + days-before-pr-close: -1 + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..cf47b628365548f2cc71cbd41d0bd0f5a67c28e1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,49 @@ +/cache +/characters +/css +/extensions +/grammars +/installer_files +/logs +/loras +/models +/presets +/prompts +/repositories +/softprompts +/torch-dumps +/training/datasets + +/CMD_FLAGS.txt +/img_bot* +/img_me* +/models/config-user.yaml +/notification.mp3 +/settings*.json +/settings*.yaml + +.chroma +.DS_Store +.eslintrc.js +.idea +.venv +venv +.envrc +.direnv +.vscode +*.bak +*.ipynb +*.log +*pycache* +cert.pem +key.pem +package.json +package-lock.json +Thumbs.db +wandb + +# ignore user docker config and top level links to docker files +/docker-compose.yaml +/docker-compose.yml +/Dockerfile +.env diff --git a/CMD_FLAGS.txt b/CMD_FLAGS.txt new file mode 100644 index 0000000000000000000000000000000000000000..c2d63d9e8fbb1e043a9f6742cead71701a99f9a2 --- /dev/null +++ b/CMD_FLAGS.txt @@ -0,0 +1,3 @@ +# Only used by the one-click installer. +# Example: +# --listen --api diff --git a/Colab-TextGen-GPU.ipynb b/Colab-TextGen-GPU.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..f73947bf402148dee9fdd156e46b34b556eb8572 --- /dev/null +++ b/Colab-TextGen-GPU.ipynb @@ -0,0 +1,133 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "private_outputs": true, + "provenance": [], + "gpuType": "T4" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# oobabooga/text-generation-webui\n", + "\n", + "After running both cells, a public gradio URL will appear at the bottom in a few minutes. You can optionally generate an API link.\n", + "\n", + "* Project page: https://github.com/oobabooga/text-generation-webui\n", + "* Gradio server status: https://status.gradio.app/" + ], + "metadata": { + "id": "MFQl6-FjSYtY" + } + }, + { + "cell_type": "code", + "source": [ + "#@title 1. Keep this tab alive to prevent Colab from disconnecting you { display-mode: \"form\" }\n", + "\n", + "#@markdown Press play on the music player that will appear below:\n", + "%%html\n", + "\n\n{reply}"] + else: + history['visible'][i] = [history['visible'][i][0], f"{visible_reply.split('')[0]}"] + + return history + + +def random_sentence(): + with open(Path("extensions/coqui_tts/harvard_sentences.txt")) as f: + return random.choice(list(f)) + + +def voice_preview(string): + string = html.unescape(string) or random_sentence() + + output_file = Path('extensions/coqui_tts/outputs/voice_preview.wav') + model.tts_to_file( + text=string, + file_path=output_file, + speaker_wav=[f"{this_dir}/voices/{params['voice']}"], + language=languages[params["language"]] + ) + + return f'' + + +def history_modifier(history): + # Remove autoplay from the last reply + if len(history['internal']) > 0: + history['visible'][-1] = [ + history['visible'][-1][0], + history['visible'][-1][1].replace('controls autoplay>', 'controls>') + ] + + return history + + +def state_modifier(state): + if not params['activate']: + return state + + state['stream'] = False + return state + + +def input_modifier(string, state): + if not params['activate']: + return string + + shared.processing_message = "*Is recording a voice message...*" + return string + + +def output_modifier(string, state): + if not params['activate']: + return string + + original_string = string + string = preprocess(html.unescape(string)) + if string == '': + string = '*Empty reply, try regenerating*' + else: + output_file = Path(f'extensions/coqui_tts/outputs/{state["character_menu"]}_{int(time.time())}.wav') + model.tts_to_file( + text=string, + file_path=output_file, + speaker_wav=[f"{this_dir}/voices/{params['voice']}"], + language=languages[params["language"]] + ) + + autoplay = 'autoplay' if params['autoplay'] else '' + string = f'' + if params['show_text']: + string += f'\n\n{original_string}' + + shared.processing_message = "*Is typing...*" + return string + + +def custom_css(): + path_to_css = Path(f"{this_dir}/style.css") + return open(path_to_css, 'r').read() + + +def setup(): + global model + print("[XTTS] Loading XTTS...") + model = load_model() + print("[XTTS] Done!") + Path(f"{this_dir}/outputs").mkdir(parents=True, exist_ok=True) + + +def ui(): + with gr.Accordion("Coqui TTS (XTTSv2)"): + with gr.Row(): + activate = gr.Checkbox(value=params['activate'], label='Activate TTS') + autoplay = gr.Checkbox(value=params['autoplay'], label='Play TTS automatically') + + with gr.Row(): + show_text = gr.Checkbox(value=params['show_text'], label='Show message text under audio player') + remove_trailing_dots = gr.Checkbox(value=params['remove_trailing_dots'], label='Remove trailing "." from text segments before converting to audio') + + with gr.Row(): + with gr.Row(): + voice = gr.Dropdown(get_available_voices(), label="Voice wav", value=params["voice"]) + create_refresh_button(voice, lambda: None, lambda: {'choices': get_available_voices(), 'value': params["voice"]}, 'refresh-button') + + language = gr.Dropdown(languages.keys(), label="Language", value=params["language"]) + + with gr.Row(): + preview_text = gr.Text(show_label=False, placeholder="Preview text", elem_id="silero_preview_text") + preview_play = gr.Button("Preview") + preview_audio = gr.HTML(visible=False) + + with gr.Row(): + convert = gr.Button('Permanently replace audios with the message texts') + convert_cancel = gr.Button('Cancel', visible=False) + convert_confirm = gr.Button('Confirm (cannot be undone)', variant="stop", visible=False) + + # Convert history with confirmation + convert_arr = [convert_confirm, convert, convert_cancel] + convert.click(lambda: [gr.update(visible=True), gr.update(visible=False), gr.update(visible=True)], None, convert_arr) + convert_confirm.click( + lambda: [gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)], None, convert_arr).then( + remove_tts_from_history, gradio('history'), gradio('history')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None).then( + chat.redraw_html, gradio(ui_chat.reload_arr), gradio('display')) + + convert_cancel.click(lambda: [gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)], None, convert_arr) + + # Toggle message text in history + show_text.change( + lambda x: params.update({"show_text": x}), show_text, None).then( + toggle_text_in_history, gradio('history'), gradio('history')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None).then( + chat.redraw_html, gradio(ui_chat.reload_arr), gradio('display')) + + # Event functions to update the parameters in the backend + activate.change(lambda x: params.update({"activate": x}), activate, None) + autoplay.change(lambda x: params.update({"autoplay": x}), autoplay, None) + remove_trailing_dots.change(lambda x: params.update({"remove_trailing_dots": x}), remove_trailing_dots, None) + voice.change(lambda x: params.update({"voice": x}), voice, None) + language.change(lambda x: params.update({"language": x}), language, None) + + # Play preview + preview_text.submit(voice_preview, preview_text, preview_audio) + preview_play.click(voice_preview, preview_text, preview_audio) diff --git a/extensions/coqui_tts/style.css b/extensions/coqui_tts/style.css new file mode 100644 index 0000000000000000000000000000000000000000..2ab7aefbbfca19982414f13a76dfdd4324793903 --- /dev/null +++ b/extensions/coqui_tts/style.css @@ -0,0 +1,8 @@ +.SDAP .hires_opts input[type="number"] { + width: 6em !important; +} + +/* silero_tts preview */ +.form:has(> #silero_preview_text) { + min-width: 75% +} diff --git a/extensions/coqui_tts/voices/arnold.wav b/extensions/coqui_tts/voices/arnold.wav new file mode 100644 index 0000000000000000000000000000000000000000..cccdf013c0fb693b82a00616dd0efd00971b6b4b Binary files /dev/null and b/extensions/coqui_tts/voices/arnold.wav differ diff --git a/extensions/coqui_tts/voices/female_01.wav b/extensions/coqui_tts/voices/female_01.wav new file mode 100644 index 0000000000000000000000000000000000000000..6fd8a4ee131b1b692f6b40b302f6ab749bc2d5a6 Binary files /dev/null and b/extensions/coqui_tts/voices/female_01.wav differ diff --git a/extensions/coqui_tts/voices/female_02.wav b/extensions/coqui_tts/voices/female_02.wav new file mode 100644 index 0000000000000000000000000000000000000000..ecf1440002a431900596f26446e3e62c56fd2d3e Binary files /dev/null and b/extensions/coqui_tts/voices/female_02.wav differ diff --git a/extensions/example/script.py b/extensions/example/script.py new file mode 100644 index 0000000000000000000000000000000000000000..44f0cb3c64d2fcc2556c30426c94c29543e599dd --- /dev/null +++ b/extensions/example/script.py @@ -0,0 +1,139 @@ +""" +An example of extension. It does nothing, but you can add transformations +before the return statements to customize the webui behavior. + +Starting from history_modifier and ending in output_modifier, the +functions are declared in the same order that they are called at +generation time. +""" + +import gradio as gr +import torch +from transformers import LogitsProcessor + +from modules import chat, shared +from modules.text_generation import ( + decode, + encode, + generate_reply, +) + +params = { + "display_name": "Example Extension", + "is_tab": False, +} + +class MyLogits(LogitsProcessor): + """ + Manipulates the probabilities for the next token before it gets sampled. + Used in the logits_processor_modifier function below. + """ + def __init__(self): + pass + + def __call__(self, input_ids, scores): + # probs = torch.softmax(scores, dim=-1, dtype=torch.float) + # probs[0] /= probs[0].sum() + # scores = torch.log(probs / (1 - probs)) + return scores + +def history_modifier(history): + """ + Modifies the chat history. + Only used in chat mode. + """ + return history + +def state_modifier(state): + """ + Modifies the state variable, which is a dictionary containing the input + values in the UI like sliders and checkboxes. + """ + return state + +def chat_input_modifier(text, visible_text, state): + """ + Modifies the user input string in chat mode (visible_text). + You can also modify the internal representation of the user + input (text) to change how it will appear in the prompt. + """ + return text, visible_text + +def input_modifier(string, state, is_chat=False): + """ + In default/notebook modes, modifies the whole prompt. + + In chat mode, it is the same as chat_input_modifier but only applied + to "text", here called "string", and not to "visible_text". + """ + return string + +def bot_prefix_modifier(string, state): + """ + Modifies the prefix for the next bot reply in chat mode. + By default, the prefix will be something like "Bot Name:". + """ + return string + +def tokenizer_modifier(state, prompt, input_ids, input_embeds): + """ + Modifies the input ids and embeds. + Used by the multimodal extension to put image embeddings in the prompt. + Only used by loaders that use the transformers library for sampling. + """ + return prompt, input_ids, input_embeds + +def logits_processor_modifier(processor_list, input_ids): + """ + Adds logits processors to the list, allowing you to access and modify + the next token probabilities. + Only used by loaders that use the transformers library for sampling. + """ + processor_list.append(MyLogits()) + return processor_list + +def output_modifier(string, state, is_chat=False): + """ + Modifies the LLM output before it gets presented. + + In chat mode, the modified version goes into history['visible'], + and the original version goes into history['internal']. + """ + return string + +def custom_generate_chat_prompt(user_input, state, **kwargs): + """ + Replaces the function that generates the prompt from the chat history. + Only used in chat mode. + """ + result = chat.generate_chat_prompt(user_input, state, **kwargs) + return result + +def custom_css(): + """ + Returns a CSS string that gets appended to the CSS for the webui. + """ + return '' + +def custom_js(): + """ + Returns a javascript string that gets appended to the javascript + for the webui. + """ + return '' + +def setup(): + """ + Gets executed only once, when the extension is imported. + """ + pass + +def ui(): + """ + Gets executed when the UI is drawn. Custom gradio elements and + their corresponding event handlers should be defined here. + + To learn about gradio components, check out the docs: + https://gradio.app/docs/ + """ + pass diff --git a/extensions/gallery/__pycache__/script.cpython-310.pyc b/extensions/gallery/__pycache__/script.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d42297c29bab12562e48009aaebe6427680092e Binary files /dev/null and b/extensions/gallery/__pycache__/script.cpython-310.pyc differ diff --git a/extensions/gallery/script.js b/extensions/gallery/script.js new file mode 100644 index 0000000000000000000000000000000000000000..9717aa671e0d7e283b3f97c2445910131337f63f --- /dev/null +++ b/extensions/gallery/script.js @@ -0,0 +1,40 @@ +let gallery_element = document.getElementById('gallery-extension'); +let chat_mode_element = document.getElementById('chat-mode'); + +let extensions_block = document.getElementById('extensions'); +let extensions_block_size = extensions_block.childNodes.length; +let gallery_only = (extensions_block_size == 5); + +function gotoFirstPage() { + const firstPageButton = gallery_element.querySelector('.paginate > button'); + if (firstPageButton) { + firstPageButton.click(); + } +} + +document.querySelector('.header_bar').addEventListener('click', function(event) { + if (event.target.tagName === 'BUTTON') { + const buttonText = event.target.textContent.trim(); + + let chat_visible = (buttonText == 'Chat'); + let default_visible = (buttonText == 'Default'); + let notebook_visible = (buttonText == 'Notebook'); + let chat_mode_visible = (chat_mode_element.offsetHeight > 0 && chat_mode_element.offsetWidth > 0); + + // Only show this extension in the Chat tab + if (chat_visible) { + if (chat_mode_visible) { + gallery_element.style.display = 'block'; + extensions_block.style.display = ''; + } else { + gallery_element.style.display = 'none'; + extensions_block.style.display = 'none'; + } + } else { + gallery_element.style.display = 'none'; + if (gallery_only) { + extensions_block.style.display = 'none'; + } + } + } +}); diff --git a/extensions/gallery/script.py b/extensions/gallery/script.py new file mode 100644 index 0000000000000000000000000000000000000000..739d58417d7aa68d2e267c48ddae9e1ee6c4591a --- /dev/null +++ b/extensions/gallery/script.py @@ -0,0 +1,129 @@ +from pathlib import Path + +import gradio as gr + +from modules.html_generator import get_image_cache +from modules.shared import gradio, settings + + +cards = [] + + +def generate_css(): + css = """ + .highlighted-border { + border-color: rgb(249, 115, 22) !important; + } + + .character-gallery > .gallery { + margin: 1rem 0; + display: grid !important; + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + grid-column-gap: 0.4rem; + grid-row-gap: 1.2rem; + } + + .character-gallery > .label { + display: none !important; + } + + .character-gallery button.gallery-item { + display: contents; + } + + .character-container { + cursor: pointer; + text-align: center; + position: relative; + opacity: 0.85; + } + + .character-container:hover { + opacity: 1; + } + + .character-container .placeholder, .character-container img { + width: 150px; + height: 200px; + background-color: gray; + object-fit: cover; + margin: 0 auto; + border-radius: 1rem; + border: 3px solid white; + box-shadow: 3px 3px 6px 0px rgb(0 0 0 / 50%); + } + + .character-name { + margin-top: 0.3rem; + display: block; + font-size: 1.2rem; + font-weight: 600; + overflow-wrap: anywhere; + } + """ + return css + + +def generate_html(): + global cards + cards = [] + # Iterate through files in image folder + for file in sorted(Path("characters").glob("*")): + if file.suffix in [".json", ".yml", ".yaml"]: + character = file.stem + container_html = '
' + image_html = "
" + + for path in [Path(f"characters/{character}.{extension}") for extension in ['png', 'jpg', 'jpeg']]: + if path.exists(): + image_html = f'' + break + + container_html += f'{image_html} {character}' + container_html += "
" + cards.append([container_html, character]) + + return cards + + +def filter_cards(filter_str=''): + if filter_str == '': + return cards + + filter_upper = filter_str.upper() + return [k for k in cards if filter_upper in k[1].upper()] + + +def select_character(evt: gr.SelectData): + return (evt.value[1]) + + +def custom_js(): + path_to_js = Path(__file__).parent.resolve() / 'script.js' + return open(path_to_js, 'r').read() + + +def ui(): + with gr.Accordion("Character gallery", open=settings["gallery-open"], elem_id='gallery-extension'): + gr.HTML(value="") + with gr.Row(): + filter_box = gr.Textbox(label='', placeholder='Filter', lines=1, max_lines=1, container=False, elem_id='gallery-filter-box') + gr.ClearButton(filter_box, value='🗑️', elem_classes='refresh-button') + update = gr.Button("Refresh", elem_classes='refresh-button') + + gallery = gr.Dataset( + components=[gr.HTML(visible=False)], + label="", + samples=generate_html(), + elem_classes=["character-gallery"], + samples_per_page=settings["gallery-items_per_page"] + ) + + filter_box.change(lambda: None, None, None, _js=f'() => {{{custom_js()}; gotoFirstPage()}}').success( + filter_cards, filter_box, gallery).then( + lambda x: gr.update(elem_classes='highlighted-border' if x != '' else ''), filter_box, filter_box, show_progress=False) + + update.click(generate_html, [], None).success( + filter_cards, filter_box, gallery) + + gallery.select(select_character, None, gradio['character_menu']) diff --git a/extensions/google_translate/requirements.txt b/extensions/google_translate/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..554a00df62818f96ba7d396ae39d8e58efbe9bfe --- /dev/null +++ b/extensions/google_translate/requirements.txt @@ -0,0 +1 @@ +deep-translator==1.9.2 diff --git a/extensions/google_translate/script.py b/extensions/google_translate/script.py new file mode 100644 index 0000000000000000000000000000000000000000..784668c1e4a704b306b7f0bb70afce07eebb255b --- /dev/null +++ b/extensions/google_translate/script.py @@ -0,0 +1,59 @@ +import html + +import gradio as gr +from deep_translator import GoogleTranslator + +params = { + "activate": True, + "language string": "ja", +} + +language_codes = {'Afrikaans': 'af', 'Albanian': 'sq', 'Amharic': 'am', 'Arabic': 'ar', 'Armenian': 'hy', 'Azerbaijani': 'az', 'Basque': 'eu', 'Belarusian': 'be', 'Bengali': 'bn', 'Bosnian': 'bs', 'Bulgarian': 'bg', 'Catalan': 'ca', 'Cebuano': 'ceb', 'Chinese (Simplified)': 'zh-CN', 'Chinese (Traditional)': 'zh-TW', 'Corsican': 'co', 'Croatian': 'hr', 'Czech': 'cs', 'Danish': 'da', 'Dutch': 'nl', 'English': 'en', 'Esperanto': 'eo', 'Estonian': 'et', 'Finnish': 'fi', 'French': 'fr', 'Frisian': 'fy', 'Galician': 'gl', 'Georgian': 'ka', 'German': 'de', 'Greek': 'el', 'Gujarati': 'gu', 'Haitian Creole': 'ht', 'Hausa': 'ha', 'Hawaiian': 'haw', 'Hebrew': 'iw', 'Hindi': 'hi', 'Hmong': 'hmn', 'Hungarian': 'hu', 'Icelandic': 'is', 'Igbo': 'ig', 'Indonesian': 'id', 'Irish': 'ga', 'Italian': 'it', 'Japanese': 'ja', 'Javanese': 'jw', 'Kannada': 'kn', 'Kazakh': 'kk', 'Khmer': 'km', 'Korean': 'ko', 'Kurdish': 'ku', 'Kyrgyz': 'ky', 'Lao': 'lo', 'Latin': 'la', 'Latvian': 'lv', 'Lithuanian': 'lt', 'Luxembourgish': 'lb', 'Macedonian': 'mk', 'Malagasy': 'mg', 'Malay': 'ms', 'Malayalam': 'ml', 'Maltese': 'mt', 'Maori': 'mi', 'Marathi': 'mr', 'Mongolian': 'mn', 'Myanmar (Burmese)': 'my', 'Nepali': 'ne', 'Norwegian': 'no', 'Nyanja (Chichewa)': 'ny', 'Pashto': 'ps', 'Persian': 'fa', 'Polish': 'pl', 'Portuguese (Portugal, Brazil)': 'pt', 'Punjabi': 'pa', 'Romanian': 'ro', 'Russian': 'ru', 'Samoan': 'sm', 'Scots Gaelic': 'gd', 'Serbian': 'sr', 'Sesotho': 'st', 'Shona': 'sn', 'Sindhi': 'sd', 'Sinhala (Sinhalese)': 'si', 'Slovak': 'sk', 'Slovenian': 'sl', 'Somali': 'so', 'Spanish': 'es', 'Sundanese': 'su', 'Swahili': 'sw', 'Swedish': 'sv', 'Tagalog (Filipino)': 'tl', 'Tajik': 'tg', 'Tamil': 'ta', 'Telugu': 'te', 'Thai': 'th', 'Turkish': 'tr', 'Ukrainian': 'uk', 'Urdu': 'ur', 'Uzbek': 'uz', 'Vietnamese': 'vi', 'Welsh': 'cy', 'Xhosa': 'xh', 'Yiddish': 'yi', 'Yoruba': 'yo', 'Zulu': 'zu'} + + +def input_modifier(string): + """ + This function is applied to your text inputs before + they are fed into the model. + """ + if not params['activate']: + return string + + return GoogleTranslator(source=params['language string'], target='en').translate(string) + + +def output_modifier(string): + """ + This function is applied to the model outputs. + """ + if not params['activate']: + return string + + translated_str = GoogleTranslator(source='en', target=params['language string']).translate(html.unescape(string)) + return html.escape(translated_str) + + +def bot_prefix_modifier(string): + """ + This function is only applied in chat mode. It modifies + the prefix text for the Bot and can be used to bias its + behavior. + """ + + return string + + +def ui(): + # Finding the language name from the language code to use as the default value + language_name = list(language_codes.keys())[list(language_codes.values()).index(params['language string'])] + + # Gradio elements + with gr.Row(): + activate = gr.Checkbox(value=params['activate'], label='Activate translation') + + with gr.Row(): + language = gr.Dropdown(value=language_name, choices=[k for k in language_codes], label='Language') + + # Event functions to update the parameters in the backend + activate.change(lambda x: params.update({"activate": x}), activate, None) + language.change(lambda x: params.update({"language string": language_codes[x]}), language, None) diff --git a/extensions/long_replies/script.py b/extensions/long_replies/script.py new file mode 100644 index 0000000000000000000000000000000000000000..035e8c9e1c5005620eb72cb83be456464d5f3e78 --- /dev/null +++ b/extensions/long_replies/script.py @@ -0,0 +1,143 @@ +import torch +from modules import chat, shared +from modules.text_generation import ( + decode, + encode, + generate_reply, +) +from transformers import LogitsProcessor +import gradio as gr + +params = { + "display_name": "Long replies", + "is_tab": False, + "min_length": 120, +} + +initial_size = 0 + +class MyLogits(LogitsProcessor): + """ + Manipulates the probabilities for the next token before it gets sampled. + Used in the logits_processor_modifier function below. + """ + def __init__(self): + self.newline_id = shared.tokenizer.encode('\n')[-1] + pass + + def __call__(self, input_ids, scores): + if input_ids.shape[-1] - initial_size < params["min_length"]: + scores[...,self.newline_id] = -1000 + # scores[...,shared.tokenizer.eos_token_id] = -1000 + + # probs = torch.softmax(scores, dim=-1, dtype=torch.float) + # probs[0] /= probs[0].sum() + # scores = torch.log(probs / (1 - probs)) + return scores + +def history_modifier(history): + """ + Modifies the chat history. + Only used in chat mode. + """ + return history + +def state_modifier(state): + """ + Modifies the state variable, which is a dictionary containing the input + values in the UI like sliders and checkboxes. + """ + return state + +def chat_input_modifier(text, visible_text, state): + """ + Modifies the user input string in chat mode (visible_text). + You can also modify the internal representation of the user + input (text) to change how it will appear in the prompt. + """ + return text, visible_text + +def input_modifier(string, state): + """ + In default/notebook modes, modifies the whole prompt. + + In chat mode, it is the same as chat_input_modifier but only applied + to "text", here called "string", and not to "visible_text". + """ + return string + +def bot_prefix_modifier(string, state): + """ + Modifies the prefix for the next bot reply in chat mode. + By default, the prefix will be something like "Bot Name:". + """ + return string + +def tokenizer_modifier(state, prompt, input_ids, input_embeds): + """ + Modifies the input ids and embeds. + Used by the multimodal extension to put image embeddings in the prompt. + Only used by loaders that use the transformers library for sampling. + """ + + global initial_size + initial_size = input_ids.shape[-1] + + return prompt, input_ids, input_embeds + +def logits_processor_modifier(processor_list, input_ids): + """ + Adds logits processors to the list, allowing you to access and modify + the next token probabilities. + Only used by loaders that use the transformers library for sampling. + """ + processor_list.append(MyLogits()) + return processor_list + +def output_modifier(string, state): + """ + Modifies the LLM output before it gets presented. + + In chat mode, the modified version goes into history['visible'], + and the original version goes into history['internal']. + """ + return string + +def custom_generate_chat_prompt(user_input, state, **kwargs): + """ + Replaces the function that generates the prompt from the chat history. + Only used in chat mode. + """ + result = chat.generate_chat_prompt(user_input, state, **kwargs) + return result + +def custom_css(): + """ + Returns a CSS string that gets appended to the CSS for the webui. + """ + return '' + +def custom_js(): + """ + Returns a javascript string that gets appended to the javascript + for the webui. + """ + return '' + +def setup(): + """ + Gets executed only once, when the extension is imported. + """ + pass + +def ui(): + """ + Gets executed when the UI is drawn. Custom gradio elements and + their corresponding event handlers should be defined here. + + To learn about gradio components, check out the docs: + https://gradio.app/docs/ + """ + + min_length = gr.Slider(0, 800, step=10, value=params['min_length'], label='Minimum reply length') + min_length.change(lambda x: params.update({'min_length': x}), min_length, None) diff --git a/extensions/multimodal/DOCS.md b/extensions/multimodal/DOCS.md new file mode 100644 index 0000000000000000000000000000000000000000..eaa4365e9a304a14ebbdb1d4d435f3a2a1f7a7d2 --- /dev/null +++ b/extensions/multimodal/DOCS.md @@ -0,0 +1,85 @@ +# Technical description of multimodal extension + +## Working principle +Multimodality extension does most of the stuff which is required for any image input: + +- adds the UI +- saves the images as base64 JPEGs to history +- provides the hooks to the UI +- if there are images in the prompt, it: + - splits the prompt to text and image parts + - adds image start/end markers to text parts, then encodes and embeds the text parts + - calls the vision pipeline to embed the images + - stitches the embeddings together, and returns them to text generation +- loads the appropriate vision pipeline, selected either from model name, or by specifying --multimodal-pipeline parameter + +Now, for the pipelines, they: + +- load the required vision models +- return some consts, for example the number of tokens taken up by image +- and most importantly: return the embeddings for LLM, given a list of images + +## Prompts/history + +To save images in prompt/history, this extension is using a base64 JPEG, wrapped in a HTML tag, like so: +``` + +``` +where `{img_str}` is the actual image data. This format makes displaying them in the UI for free. Do note, that this format is required to be exactly the same, the regex used to find the images is: ``. + +## LLM input +To describe the input, let's see it on an example prompt: +``` +text1text2text3 +``` +where `textN` is N-th text, `` is N-th image, in HTML format specified above. + +**The first step is to split the prompt into image/text parts**, so we get: +``` +['text1', '', 'text2', '', 'text3'] +``` +this is done in `MultimodalEmbedder._split_prompt(...)` function, which returns a list of `PromptPart`s - dataclasses wrapping the separate parts. + +This function also appends the image start/end markers to text, which are provided by `AbstractMultimodalPipeline.image_start()` / `AbstractMultimodalPipeline.image_end()` functions. If image start is ``, and end is ``, this function will return: +``` +['text1', '', 'text2', '', 'text3'] +``` + +**The returned prompt parts are then turned into token embeddings.** + +First, they are modified to token IDs, for the text it is done using standard `modules.text_generation.encode()` function, and for the images the returned token IDs are changed to placeholders. The placeholder is a list of `N` times `placeholder token id`, where `N` is specified using `AbstractMultimodalPipeline.num_image_embeds()`, and placeholder token IDs using `AbstractMultimodalPipeline.placeholder_token_id()`. + +Now, based on the token IDs, the prompt might get truncated, especially if `max_new_tokens` are unreasonably high. Unfortunately, it can't be done simply, just by trimming the prompt to be short enough. This way will lead to sometimes splitting the prompt in the middle of an image embedding, which usually breaks the generation. Therefore, in this case, the entire image needs to be removed from input. This is done inside `MultimodalEmbedder._encode_text(...)` function. + +**After the tokenization, the tokens need to get embedded**, the text and images are once again treated separately. + +The text parts are turned to embeddings, using `AbstractMultimodalPipeline.embed_tokens(...)` function. It uses standard embedding function from the model, but to support many LLMs, the actual function is returned by the pipeline (as it might be different for different LLMs), for LLaMA it is `shared.model.model.embed_tokens(...)`. + +The image parts are turned to embeddings, using `AbstractMultimodalPipeline.embed_images(...)` function. This function is specific for a given pipeline, it takes the images as input, forwards them through vision model/projector, and returns the embeddings. + +**Now, the returned embeddings are stitched together**, using `torch.cat()`, this is creating the final input to the LLM. + +## Pipelines + +All of the pipelines should subclass `AbstractMultimodalPipeline` class. The idea is to allow for new pipelines to be added in the same way as user extensions - git clone into `extensions/multimodal/pipelines`. + +The pipelines are the description of the vision part, containing vision model/multimodal projector. All of the pipelines should have an unique `name()`, which is then selected by user, in `--multimodal-pipeline` CLI argument. For an example, see `pipelines/llava/llava.py`. + +## Pipeline modules + +Pipelines are organized into "pipeline modules" - subdirectories in `pipelines` directory. The pipeline modules should contain a file called `pipelines.py`, that should contain the following fields: +- `available_pipelines: List[str]` - list of pipelines provided by this module, shown as the list of available pipelines to the user +- `def get_pipeline(name: str, params: dict) -> Optional[AbstractMultimodalPipeline]`: - a function to get a concrete pipeline by `name`, if `name` doesn't match any, should return `None`. `params` is the user settings for multimodal extension +- `def get_pipeline_from_model_name(model_name: str, params: dict) -> Optional[AbstractMultimodalPipeline]`: - a function to get a pipeline from `model_name`, should be eager to return `None`, unless the determination can be done clearly (for example: minigpt-4 bases on vicuna - it should never return the pipeline, but llava can, as it has its own specific LLM finetune) + +**NOTE**: A pipeline module should lazy-import the pipelines only when necessary, and it should keep its imports to minimum + +## Pipeline params + +The pipelines will get the extension `params` in the constructor. They should honor the following fields: +- `vision_device` - string, specifying `torch.device` to run the vision model (CLIP/ViT) on +- `vision_bits` - int, number of fp bits to load the vision model(s) in +- `projector_device` - string, specifying `torch.device` to run the projector models (Linear layers, QFormer, etc.) on +- `projector_bits` - int, number of fp bits to load the projector models in + +As a helper, `AbstractMultimodalPipeline` has `_get_device(self, setting_name: str, params: dict)` and `_get_dtype(self, setting_name: str, params: dict)` helper functions, which parse string/int and return `torch.device` / `torch.dtype`. diff --git a/extensions/multimodal/README.md b/extensions/multimodal/README.md new file mode 100644 index 0000000000000000000000000000000000000000..87183587c8b9e73a816f215a15596032bacd08e3 --- /dev/null +++ b/extensions/multimodal/README.md @@ -0,0 +1,91 @@ +# Multimodal + +## Description + +Adds support for multimodality (text+images) to text-generation-webui. + +Note: multimodal currently only works for transformers, AutoGPTQ, and GPTQ-for-LLaMa loaders. ExLlama (v1 and v2) and llama.cpp support are planned. + +https://user-images.githubusercontent.com/3718215/233817203-69b57e77-0c55-4fd6-b742-3204bb13b8fc.mp4 + +## Usage + +To run this extension, download a LLM that supports multimodality, and then start server.py with the appropriate `--multimodal-pipeline` argument. Examples: + +``` +# LLaVA 1.5 13B has the best performance +python server.py --model liuhaotian_llava-v1.5-13b --multimodal-pipeline llava-v1.5-13b --load-in-4bit +# LLaVA 1.5 7B is relatively weaker, but requires less memory +python server.py --model liuhaotian_llava-v1.5-7b --multimodal-pipeline llava-v1.5-7b --load-in-4bit +python server.py --model TheBloke_llava-v1.5-13B-GPTQ_gptq-4bit-32g-actorder_True --multimodal-pipeline llava-v1.5-13b --disable_exllama --loader autogptq +python server.py --model wojtab_llava-7b-v0-4bit-128g --multimodal-pipeline llava-7b +python server.py --model wojtab_llava-13b-v0-4bit-128g --multimodal-pipeline llava-13b +python server.py --model anon8231489123_vicuna-13b-GPTQ-4bit-128g --multimodal-pipeline minigpt4-13b +python server.py --model llama-7b-4bit --multimodal-pipeline minigpt4-7b +``` + +There is built-in support for LLaVA-v0-13B, LLaVA-v0-7b, and LLaVA-v1.5-13B. To install `minigpt4`: + +- clone https://github.com/Wojtab/minigpt-4-pipeline into `extensions/multimodal/pipelines` +- install the requirements.txt + +The same procedure should be used to install other pipelines, which can then be used with `--multimodal-pipeline [pipeline name]`. For additional multimodal pipelines refer to the compatibility section below. + +Do note, that each image takes up a considerable amount of tokens, so adjust `max_new_tokens` to be at most 1700 (recommended value is between 200 to 500), so the images don't get truncated. + +To send an image, just upload it to the extension field below chat, and send a prompt as always. The image will be added to the end of your message. If you wish to modify the placement, include a string `` in your prompt. + +Additionally, there is *Embed all images, not only the last one* checkbox. It modifies the image embeddings, by default (if it's unchecked), all but the most recent images have their embeddings empty, so they are not fed to the network. It seems as if some multimodal networks consider the features in all images at the same time as if they were a single image. Due to this behavior, by default, the extension skips previous images. However, it can lead to sub-par generation on other pipelines. If you want to include all images, just tick this checkbox. + +## Compatibility + +As of now, the following multimodal pipelines are supported: +|Pipeline|`--multimodal-pipeline`|Default LLM|LLM info(for the linked model)|Pipeline repository| +|-|-|-|-|-| +|[LLaVA 13B](https://github.com/haotian-liu/LLaVA)|`llava-13b`|[LLaVA 13B](https://huggingface.co/wojtab/llava-13b-v0-4bit-128g)|GPTQ 4-bit quant, old CUDA|built-in| +|[LLaVA 7B](https://github.com/haotian-liu/LLaVA)|`llava-7b`|[LLaVA 7B](https://huggingface.co/wojtab/llava-7b-v0-4bit-128g)|GPTQ 4-bit quant, old CUDA|built-in| +|[MiniGPT-4 7B](https://github.com/Vision-CAIR/MiniGPT-4)|`minigpt4-7b`|[Vicuna v0 7B](https://huggingface.co/TheBloke/vicuna-7B-GPTQ-4bit-128g)|GPTQ 4-bit quant, new format|[Wojtab/minigpt-4-pipeline](https://github.com/Wojtab/minigpt-4-pipeline)| +|[MiniGPT-4 13B](https://github.com/Vision-CAIR/MiniGPT-4)|`minigpt4-13b`|[Vicuna v0 13B](https://huggingface.co/anon8231489123/vicuna-13b-GPTQ-4bit-128g)|GPTQ 4-bit quant, old CUDA|[Wojtab/minigpt-4-pipeline](https://github.com/Wojtab/minigpt-4-pipeline)| +|[InstructBLIP 7B](https://github.com/salesforce/LAVIS/tree/main/projects/instructblip)|`instructblip-7b`|[Vicuna v1.1 7B](https://huggingface.co/TheBloke/vicuna-7B-1.1-GPTQ-4bit-128g)|GPTQ 4-bit quant|[kjerk/instructblip-pipeline](https://github.com/kjerk/instructblip-pipeline)| +|[InstructBLIP 13B](https://github.com/salesforce/LAVIS/tree/main/projects/instructblip)|`instructblip-13b`|[Vicuna v1.1 13B](https://huggingface.co/TheBloke/vicuna-13B-1.1-GPTQ-4bit-128g)|GPTQ 4-bit quant|[kjerk/instructblip-pipeline](https://github.com/kjerk/instructblip-pipeline)| + +Some pipelines could support different LLMs but do note that while it might work, it isn't a supported configuration. + +DO NOT report bugs if you are using a different LLM. + +DO NOT report bugs with pipelines in this repository (unless they are built-in) + +## Extension config +This extension uses the following parameters (from `settings.json`): +|Parameter|Description| +|---------|-----------| +|`multimodal-vision_bits`|Number of bits to load vision models (CLIP/ViT) feature extractor in (most pipelines should support either 32 or 16, default=32)| +|`multimodal-vision_device`|Torch device to run the feature extractor on, for example, `cpu` or `cuda:0`, by default `cuda:0` if available| +|`multimodal-projector_bits`|Number of bits to load feature projector model(s) in (most pipelines should support either 32 or 16, default=32)| +|`multimodal-projector_device`|Torch device to run the feature projector model(s) on, for example `cpu` or `cuda:0`, by default `cuda:0` if available| +|`multimodal-add_all_images_to_prompt`|Default value of "Embed all images, not only the last one" checkbox| + +## Usage through API + +You can run the multimodal inference through API, by inputting the images to prompt. Images are embedded like so: `f''`, where `img_str` is base-64 jpeg data. Note that you will need to launch `server.py` with the arguments `--api --extensions multimodal`. + +Python example: + +```Python +import base64 +import requests + +CONTEXT = "You are LLaVA, a large language and vision assistant trained by UW Madison WAIV Lab. You are able to understand the visual content that the user provides, and assist the user with a variety of tasks using natural language. Follow the instructions carefully and explain your answers in detail.### Human: Hi!### Assistant: Hi there! How can I help you today?\n" + +with open('extreme_ironing.jpg', 'rb') as f: + img_str = base64.b64encode(f.read()).decode('utf-8') + prompt = CONTEXT + f'### Human: What is unusual about this image: \n### Assistant: ' + print(requests.post('http://127.0.0.1:5000/v1/completions', json={'prompt': prompt, 'max_tokens': 200, 'stop': ['\n###']}).json()) +``` +script output: +```Python +{'results': [{'text': "The unusual aspect of this image is that a man is standing on top of a yellow minivan while doing his laundry. He has set up a makeshift clothes line using the car's rooftop as an outdoor drying area. This scene is uncommon because people typically do their laundry indoors, in a dedicated space like a laundromat or a room in their home, rather than on top of a moving vehicle. Additionally, hanging clothes on the car could be potentially hazardous or illegal in some jurisdictions due to the risk of damaging the vehicle or causing accidents on the road.\n##"}]} +``` + +## For pipeline developers/technical description +see [DOCS.md](https://github.com/oobabooga/text-generation-webui/blob/main/extensions/multimodal/DOCS.md) diff --git a/extensions/multimodal/abstract_pipeline.py b/extensions/multimodal/abstract_pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..9c49935a2d734ac2628b4d71d9ce02f9a6d64f40 --- /dev/null +++ b/extensions/multimodal/abstract_pipeline.py @@ -0,0 +1,63 @@ +from abc import ABC, abstractmethod +from typing import List, Optional + +import torch +from PIL import Image +from transformers import is_torch_xpu_available + + +class AbstractMultimodalPipeline(ABC): + @staticmethod + @abstractmethod + def name() -> str: + 'name of the pipeline, should be same as in --multimodal-pipeline' + pass + + @staticmethod + @abstractmethod + def image_start() -> Optional[str]: + 'return image start string, string representation of image start token, or None if not applicable' + pass + + @staticmethod + @abstractmethod + def image_end() -> Optional[str]: + 'return image end string, string representation of image end token, or None if not applicable' + pass + + @staticmethod + @abstractmethod + def placeholder_token_id() -> int: + 'return placeholder token id' + pass + + @staticmethod + @abstractmethod + def num_image_embeds() -> int: + 'return the number of embeds used by a single image (for example: 256 for LLaVA)' + pass + + @abstractmethod + def embed_images(self, images: List[Image.Image]) -> torch.Tensor: + 'forward the images through vision pipeline, and return their embeddings' + pass + + @staticmethod + @abstractmethod + def embed_tokens(input_ids: torch.Tensor) -> torch.Tensor: + 'embed tokens, the exact function varies by LLM, for LLaMA it is `shared.model.model.embed_tokens`' + pass + + @staticmethod + @abstractmethod + def placeholder_embeddings() -> torch.Tensor: + 'get placeholder embeddings if there are multiple images, and `add_all_images_to_prompt` is False' + pass + + def _get_device(self, setting_name: str, params: dict): + if params[setting_name] is None: + return torch.device("cuda:0" if torch.cuda.is_available() else "xpu:0" if is_torch_xpu_available() else "cpu") + return torch.device(params[setting_name]) + + def _get_dtype(self, setting_name: str, params: dict): + return torch.float32 if int(params[setting_name]) == 32 else torch.float16 diff --git a/extensions/multimodal/multimodal_embedder.py b/extensions/multimodal/multimodal_embedder.py new file mode 100644 index 0000000000000000000000000000000000000000..626077cb80987d66af90f390e31aa2f2def76fec --- /dev/null +++ b/extensions/multimodal/multimodal_embedder.py @@ -0,0 +1,178 @@ +import base64 +import re +from dataclasses import dataclass +from io import BytesIO +from typing import Any, List, Optional + +import torch +from PIL import Image + +from extensions.multimodal.pipeline_loader import load_pipeline +from modules import shared +from modules.logging_colors import logger +from modules.text_generation import encode, get_max_prompt_length + + +@dataclass +class PromptPart: + text: str + image: Optional[Image.Image] = None + is_image: bool = False + input_ids: Optional[torch.Tensor] = None + embedding: Optional[torch.Tensor] = None + + +class MultimodalEmbedder: + def __init__(self, params: dict): + pipeline, source = load_pipeline(params) + self.pipeline = pipeline + logger.info(f'Multimodal: loaded pipeline {self.pipeline.name()} from pipelines/{source} ({self.pipeline.__class__.__name__})') + + def _split_prompt(self, prompt: str, load_images: bool = False) -> List[PromptPart]: + """Splits a prompt into a list of `PromptParts` to separate image data from text. + It will also append `image_start` and `image_end` before and after the image, and optionally parse and load the images, + if `load_images` is `True`. + """ + parts: List[PromptPart] = [] + curr = 0 + while True: + match = re.search(r'', prompt[curr:]) + if match is None: + # no more image tokens, append the rest of the prompt + if curr > 0: + # add image end token after last image + parts.append(PromptPart(text=self.pipeline.image_end() + prompt[curr:])) + else: + parts.append(PromptPart(text=prompt)) + break + # found an image, append image start token to the text + if match.start() > 0: + parts.append(PromptPart(text=prompt[curr:curr + match.start()] + self.pipeline.image_start())) + else: + parts.append(PromptPart(text=self.pipeline.image_start())) + # append the image + parts.append(PromptPart( + text=match.group(0), + image=Image.open(BytesIO(base64.b64decode(match.group(1)))) if load_images else None, + is_image=True + )) + curr += match.end() + return parts + + def _len_in_tokens_prompt_parts(self, parts: List[PromptPart]) -> int: + """Total length in tokens of all `parts`""" + tokens = 0 + for part in parts: + if part.is_image: + tokens += self.pipeline.num_image_embeds() + elif part.input_ids is not None: + tokens += len(part.input_ids) + else: + tokens += len(encode(part.text)[0]) + return tokens + + def len_in_tokens(self, prompt: str) -> int: + """Total length in tokens for a given text `prompt`""" + parts = self._split_prompt(prompt, False) + return self._len_in_tokens_prompt_parts(parts) + + def _encode_single_text(self, part: PromptPart, add_bos_token: bool) -> PromptPart: + """Encode a single prompt `part` to `input_ids`. Returns a `PromptPart`""" + if part.is_image: + placeholders = torch.ones((self.pipeline.num_image_embeds())) * self.pipeline.placeholder_token_id() + part.input_ids = placeholders.to(shared.model.device, dtype=torch.int64) + else: + part.input_ids = encode(part.text, add_bos_token=add_bos_token)[0].to(shared.model.device, dtype=torch.int64) + return part + + @staticmethod + def _num_images(parts: List[PromptPart]) -> int: + count = 0 + for part in parts: + if part.is_image: + count += 1 + return count + + def _encode_text(self, state, parts: List[PromptPart]) -> List[PromptPart]: + """Encode text to token_ids, also truncate the prompt, if necessary. + + The chat/instruct mode should make prompts that fit in get_max_prompt_length, but if max_new_tokens are set + such that the context + min_rows don't fit, we can get a prompt which is too long. + We can't truncate image embeddings, as it leads to broken generation, so remove the images instead and warn the user + """ + encoded: List[PromptPart] = [] + for i, part in enumerate(parts): + encoded.append(self._encode_single_text(part, i == 0 and state['add_bos_token'])) + + # truncation: + max_len = get_max_prompt_length(state) + removed_images = 0 + + # 1. remove entire text/image blocks + while self._len_in_tokens_prompt_parts(encoded[1:]) > max_len: + if encoded[0].is_image: + removed_images += 1 + encoded = encoded[1:] + + # 2. check if the last prompt part doesn't need to get truncated + if self._len_in_tokens_prompt_parts(encoded) > max_len: + if encoded[0].is_image: + # don't truncate image embeddings, just remove the image, otherwise generation will be broken + removed_images += 1 + encoded = encoded[1:] + elif len(encoded) > 1 and encoded[0].text.endswith(self.pipeline.image_start()): + # see if we can keep image_start token + len_image_start = len(encode(self.pipeline.image_start(), add_bos_token=state['add_bos_token'])[0]) + if self._len_in_tokens_prompt_parts(encoded[1:]) + len_image_start > max_len: + # we can't -> remove this text, and the image + encoded = encoded[2:] + removed_images += 1 + else: + # we can -> just truncate the text + trunc_len = self._len_in_tokens_prompt_parts(encoded) - max_len + encoded[0].input_ids = encoded[0].input_ids[trunc_len:] + elif len(encoded) > 0: + # only one text left, truncate it normally + trunc_len = self._len_in_tokens_prompt_parts(encoded) - max_len + encoded[0].input_ids = encoded[0].input_ids[trunc_len:] + + # notify user if we truncated an image + if removed_images > 0: + logger.warning(f"Multimodal: removed {removed_images} image(s) from prompt. Try decreasing max_new_tokens if generation is broken") + + return encoded + + def _embed(self, parts: List[PromptPart]) -> List[PromptPart]: + # batch images + image_indicies = [i for i, part in enumerate(parts) if part.is_image] + embedded = self.pipeline.embed_images([parts[i].image for i in image_indicies]) + for i, embeds in zip(image_indicies, embedded): + parts[i].embedding = embeds + # embed text + for (i, part) in enumerate(parts): + if not part.is_image: + parts[i].embedding = self.pipeline.embed_tokens(part.input_ids) + return parts + + def _remove_old_images(self, parts: List[PromptPart], params: dict) -> List[PromptPart]: + if params['add_all_images_to_prompt']: + return parts + already_added = False + for i, part in reversed(list(enumerate(parts))): + if part.is_image: + if already_added: + parts[i].embedding = self.pipeline.placeholder_embeddings() + else: + already_added = True + return parts + + def forward(self, prompt: str, state: Any, params: dict): + prompt_parts = self._split_prompt(prompt, True) + prompt_parts = self._encode_text(state, prompt_parts) + prompt_parts = self._embed(prompt_parts) + prompt_parts = self._remove_old_images(prompt_parts, params) + embeds = tuple(part.embedding for part in prompt_parts) + ids = tuple(part.input_ids for part in prompt_parts) + input_embeds = torch.cat(embeds, dim=0) + input_ids = torch.cat(ids, dim=0) + return prompt, input_ids, input_embeds, self._num_images(prompt_parts) diff --git a/extensions/multimodal/pipeline_loader.py b/extensions/multimodal/pipeline_loader.py new file mode 100644 index 0000000000000000000000000000000000000000..8fcd0a9b410fbc44a51941e0a87b294de871ef8b --- /dev/null +++ b/extensions/multimodal/pipeline_loader.py @@ -0,0 +1,52 @@ +import traceback +from importlib import import_module +from pathlib import Path +from typing import Tuple + +from extensions.multimodal.abstract_pipeline import AbstractMultimodalPipeline +from modules import shared +from modules.logging_colors import logger + + +def _get_available_pipeline_modules(): + pipeline_path = Path(__file__).parent / 'pipelines' + modules = [p for p in pipeline_path.iterdir() if p.is_dir()] + return [m.name for m in modules if (m / 'pipelines.py').exists()] + + +def load_pipeline(params: dict) -> Tuple[AbstractMultimodalPipeline, str]: + pipeline_modules = {} + available_pipeline_modules = _get_available_pipeline_modules() + for name in available_pipeline_modules: + try: + pipeline_modules[name] = import_module(f'extensions.multimodal.pipelines.{name}.pipelines') + except: + logger.warning(f'Failed to get multimodal pipelines from {name}') + logger.warning(traceback.format_exc()) + + if shared.args.multimodal_pipeline is not None: + for k in pipeline_modules: + if hasattr(pipeline_modules[k], 'get_pipeline'): + pipeline = getattr(pipeline_modules[k], 'get_pipeline')(shared.args.multimodal_pipeline, params) + if pipeline is not None: + return (pipeline, k) + else: + model_name = shared.args.model.lower() + for k in pipeline_modules: + if hasattr(pipeline_modules[k], 'get_pipeline_from_model_name'): + pipeline = getattr(pipeline_modules[k], 'get_pipeline_from_model_name')(model_name, params) + if pipeline is not None: + return (pipeline, k) + + available = [] + for k in pipeline_modules: + if hasattr(pipeline_modules[k], 'available_pipelines'): + pipelines = getattr(pipeline_modules[k], 'available_pipelines') + available += pipelines + + if shared.args.multimodal_pipeline is not None: + log = f'Multimodal - ERROR: Failed to load multimodal pipeline "{shared.args.multimodal_pipeline}", available pipelines are: {available}.' + else: + log = f'Multimodal - ERROR: Failed to determine multimodal pipeline for model {shared.args.model}, please select one manually using --multimodal-pipeline [PIPELINE]. Available pipelines are: {available}.' + logger.critical(f'{log} Please specify a correct pipeline, or disable the extension') + raise RuntimeError(f'{log} Please specify a correct pipeline, or disable the extension') diff --git a/extensions/multimodal/pipelines/llava/README.md b/extensions/multimodal/pipelines/llava/README.md new file mode 100644 index 0000000000000000000000000000000000000000..aff64faaae07d2f4da6c24e8ea03693326313139 --- /dev/null +++ b/extensions/multimodal/pipelines/llava/README.md @@ -0,0 +1,9 @@ +## LLaVA pipeline + +This module provides 2 pipelines: +- `llava-7b` - for use with LLaVA v0 7B model (finetuned LLaMa 7B) +- `llava-13b` - for use with LLaVA v0 13B model (finetuned LLaMa 13B) + +[LLaVA](https://github.com/haotian-liu/LLaVA) uses CLIP `openai/clip-vit-large-patch14` as the vision model, and then a single linear layer. For 13B the projector weights are in `liuhaotian/LLaVA-13b-delta-v0`, and for 7B they are in `liuhaotian/LLaVA-7b-delta-v0`. + +The supported parameter combinations for both the vision model, and the projector are: CUDA/32bit, CUDA/16bit, CPU/32bit diff --git a/extensions/multimodal/pipelines/llava/llava.py b/extensions/multimodal/pipelines/llava/llava.py new file mode 100644 index 0000000000000000000000000000000000000000..09b5aff7b8826b5da2645be39075b599af2d24da --- /dev/null +++ b/extensions/multimodal/pipelines/llava/llava.py @@ -0,0 +1,262 @@ +import time +from abc import abstractmethod +from typing import List, Tuple + +import torch +from huggingface_hub import hf_hub_download +from PIL import Image +from transformers import CLIPImageProcessor, CLIPVisionModel + +from extensions.multimodal.abstract_pipeline import AbstractMultimodalPipeline +from modules import shared +from modules.logging_colors import logger +from modules.text_generation import encode + + +def expand2square(pil_img: Image.Image, background_color: Tuple[int]) -> Image.Image: + width, height = pil_img.size + if width == height: + return pil_img + elif width > height: + result = Image.new(pil_img.mode, (width, width), background_color) + result.paste(pil_img, (0, (width - height) // 2)) + return result + else: + result = Image.new(pil_img.mode, (height, height), background_color) + result.paste(pil_img, ((height - width) // 2, 0)) + return result + + +class LLaVA_v0_Pipeline(AbstractMultimodalPipeline): + CLIP_REPO = "openai/clip-vit-large-patch14" + + def __init__(self, params: dict) -> None: + super().__init__() + self.clip_device = self._get_device("vision_device", params) + self.clip_dtype = self._get_dtype("vision_bits", params) + self.projector_device = self._get_device("projector_device", params) + self.projector_dtype = self._get_dtype("projector_bits", params) + self.image_processor, self.vision_tower, self.mm_projector = self._load_models() + + def _load_models(self): + start_ts = time.time() + + logger.info(f"LLaVA - Loading CLIP from {self.CLIP_REPO} as {self.clip_dtype} on {self.clip_device}...") + image_processor = CLIPImageProcessor.from_pretrained(self.CLIP_REPO, torch_dtype=self.clip_dtype) + vision_tower = CLIPVisionModel.from_pretrained(self.CLIP_REPO, torch_dtype=self.clip_dtype).to(self.clip_device) + + logger.info(f"LLaVA - Loading projector from {self.llava_projector_repo()} as {self.projector_dtype} on {self.projector_device}...") + projector_path = hf_hub_download(self.llava_projector_repo(), self.llava_projector_filename()) + mm_projector = self.build_mm_projector() + projector_data = torch.load(projector_path) + projector_data = {k[19:]: v for k, v in projector_data.items() if k.startswith('model.mm_projector.')} + mm_projector.load_state_dict(projector_data) + mm_projector = mm_projector.to(self.projector_device) + + logger.info(f"LLaVA supporting models loaded, took {time.time() - start_ts:.2f} seconds") + return image_processor, vision_tower, mm_projector + + def build_mm_projector(self) -> torch.nn.Module: + projector_shape = self.llava_projector_shape() + if len(projector_shape) == 2: + return torch.nn.Linear(*projector_shape) + else: + modules = [] + modules.append(torch.nn.Linear(projector_shape[0], projector_shape[1])) + for i in range(2, len(projector_shape)): + modules.append(torch.nn.GELU()) + modules.append(torch.nn.Linear(projector_shape[i-1], projector_shape[i])) + return torch.nn.Sequential(*modules) + + @staticmethod + def image_start() -> str: + return "" + + @staticmethod + def image_end() -> str: + return "" + + @staticmethod + def num_image_embeds() -> int: + return 256 + + @staticmethod + def embed_tokens(input_ids: torch.Tensor) -> torch.Tensor: + for attr in ['', 'model', 'model.model', 'model.model.model']: + tmp = getattr(shared.model, attr, None) if attr != '' else shared.model + if tmp is not None and hasattr(tmp, 'embed_tokens'): + func = tmp.embed_tokens + break + else: + raise ValueError('The embed_tokens method has not been found for this loader.') + + return func(input_ids).to(shared.model.device, dtype=shared.model.dtype) + + @staticmethod + def placeholder_embeddings() -> torch.Tensor: + return LLaVA_v0_Pipeline.embed_tokens(encode(""*256, add_bos_token=False)[0]) + + def embed_images(self, images: List[Image.Image]) -> torch.Tensor: + images = self.image_processor(images, return_tensors='pt')['pixel_values'] + images = images.to(self.clip_device, dtype=self.clip_dtype) + + with torch.no_grad(): + image_forward_outs = self.vision_tower(images, output_hidden_states=True) + select_hidden_state_layer = -2 + select_hidden_state = image_forward_outs.hidden_states[select_hidden_state_layer] + image_features = select_hidden_state[:, 1:].to(self.projector_device, dtype=self.projector_dtype) + image_features = self.mm_projector(image_features) + return image_features.to(shared.model.device, dtype=shared.model.dtype) + + @staticmethod + @abstractmethod + def llava_projector_repo() -> str: + pass + + @staticmethod + @abstractmethod + def llava_projector_filename() -> str: + pass + + @staticmethod + @abstractmethod + def llava_projector_shape() -> Tuple[int, int]: + pass + + +class LLaVA_v0_13B_Pipeline(LLaVA_v0_Pipeline): + def __init__(self, params: dict) -> None: + super().__init__(params) + + @staticmethod + def name() -> str: + return "llava-13b" + + @staticmethod + def placeholder_token_id() -> int: + return 32000 + + @staticmethod + def llava_projector_shape() -> Tuple[int, int]: + return (1024, 5120) + + @staticmethod + def llava_projector_filename() -> str: + return "mm_projector.bin" + + @staticmethod + def llava_projector_repo() -> str: + return "liuhaotian/LLaVA-13b-delta-v0" + + +class LLaVA_v0_7B_Pipeline(LLaVA_v0_Pipeline): + def __init__(self, params: dict) -> None: + super().__init__(params) + + @staticmethod + def name() -> str: + return "llava-7b" + + @staticmethod + def placeholder_token_id() -> int: + return 32001 + + @staticmethod + def llava_projector_shape() -> Tuple[int, int]: + return (1024, 4096) + + @staticmethod + def llava_projector_filename() -> str: + return "mm_projector.bin" + + @staticmethod + def llava_projector_repo() -> str: + return "liuhaotian/LLaVA-7b-delta-v0" + + +class LLaVA_LLaMA_2_13B_Pipeline(LLaVA_v0_13B_Pipeline): + def __init__(self, params: dict) -> None: + super().__init__(params) + + @staticmethod + def name() -> str: + return "llava-llama-2-13b" + + @staticmethod + def placeholder_token_id() -> int: + return 0 + + @staticmethod + def llava_projector_repo() -> str: + return "liuhaotian/llava-llama-2-13b-chat-lightning-preview" + + @staticmethod + def image_start() -> str: + return "" + + @staticmethod + def image_end() -> str: + return "" + + @staticmethod + def placeholder_embeddings() -> torch.Tensor: + return LLaVA_v0_Pipeline.embed_tokens(encode(""*256, add_bos_token=False)[0]) + + +class LLaVA_v1_5_13B_Pipeline(LLaVA_v0_13B_Pipeline): + CLIP_REPO = "openai/clip-vit-large-patch14-336" + + def __init__(self, params: dict) -> None: + super().__init__(params) + + @staticmethod + def name() -> str: + return "llava-v1.5-13b" + + @staticmethod + def llava_projector_shape() -> Tuple[int, int]: + return (1024, 5120, 5120) + + @staticmethod + def placeholder_token_id() -> int: + return 0 + + @staticmethod + def llava_projector_repo() -> str: + return "liuhaotian/llava-v1.5-13b" + + @staticmethod + def image_start() -> str: + return "" + + @staticmethod + def image_end() -> str: + return "" + + @staticmethod + def num_image_embeds() -> int: + return 576 + + def embed_images(self, images: List[Image.Image]) -> torch.Tensor: + # pad it to square first + images = [ + expand2square(image, tuple(int(x*255) for x in self.image_processor.image_mean)) + for image in images + ] + return super().embed_images(images) + + @staticmethod + def placeholder_embeddings() -> torch.Tensor: + return LLaVA_v0_Pipeline.embed_tokens(encode(""*576, add_bos_token=False)[0]) + +class LLaVA_v1_5_7B_Pipeline(LLaVA_v1_5_13B_Pipeline): + @staticmethod + def name() -> str: + return "llava-v1.5-7b" + + @staticmethod + def llava_projector_shape() -> Tuple[int, int]: + return (1024, 4096, 4096) + @staticmethod + def llava_projector_repo() -> str: + return "liuhaotian/llava-v1.5-7b" \ No newline at end of file diff --git a/extensions/multimodal/pipelines/llava/pipelines.py b/extensions/multimodal/pipelines/llava/pipelines.py new file mode 100644 index 0000000000000000000000000000000000000000..e6833ed6ff94f8e2c8e8494bc827843f388b7fb8 --- /dev/null +++ b/extensions/multimodal/pipelines/llava/pipelines.py @@ -0,0 +1,48 @@ +from typing import Optional + +from extensions.multimodal.abstract_pipeline import AbstractMultimodalPipeline + +available_pipelines = ['llava-7b', 'llava-13b', 'llava-llama-2-13b', 'llava-v1.5-13b', 'llava-v1.5-7b'] + + +def get_pipeline(name: str, params: dict) -> Optional[AbstractMultimodalPipeline]: + if name == 'llava-7b': + from .llava import LLaVA_v0_7B_Pipeline + return LLaVA_v0_7B_Pipeline(params) + if name == 'llava-13b': + from .llava import LLaVA_v0_13B_Pipeline + return LLaVA_v0_13B_Pipeline(params) + if name == 'llava-llama-2-13b': + from .llava import LLaVA_LLaMA_2_13B_Pipeline + return LLaVA_LLaMA_2_13B_Pipeline(params) + if name == 'llava-v1.5-7b': + from .llava import LLaVA_v1_5_7B_Pipeline + return LLaVA_v1_5_7B_Pipeline(params) + if name == 'llava-v1.5-13b': + from .llava import LLaVA_v1_5_13B_Pipeline + return LLaVA_v1_5_13B_Pipeline(params) + return None + + +def get_pipeline_from_model_name(model_name: str, params: dict) -> Optional[AbstractMultimodalPipeline]: + if 'llava' not in model_name.lower(): + return None + if 'llama-2' in model_name.lower(): + if '13b' in model_name.lower(): + from .llava import LLaVA_LLaMA_2_13B_Pipeline + return LLaVA_LLaMA_2_13B_Pipeline(params) + elif 'llava-v1.5' in model_name.lower(): + if '13b' in model_name.lower(): + from .llava import LLaVA_v1_5_13B_Pipeline + return LLaVA_v1_5_13B_Pipeline(params) + if '7b' in model_name.lower(): + from .llava import LLaVA_v1_5_7B_Pipeline + return LLaVA_v1_5_7B_Pipeline(params) + else: + if '7b' in model_name.lower(): + from .llava import LLaVA_v0_7B_Pipeline + return LLaVA_v0_7B_Pipeline(params) + if '13b' in model_name.lower(): + from .llava import LLaVA_v0_13B_Pipeline + return LLaVA_v0_13B_Pipeline(params) + return None diff --git a/extensions/multimodal/pipelines/place-additional-pipelines-here.txt b/extensions/multimodal/pipelines/place-additional-pipelines-here.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/extensions/multimodal/script.py b/extensions/multimodal/script.py new file mode 100644 index 0000000000000000000000000000000000000000..6607ce5a32b7f05d51de3f69820bb62124d8450a --- /dev/null +++ b/extensions/multimodal/script.py @@ -0,0 +1,113 @@ +import base64 +import re +import time +from functools import partial +from io import BytesIO + +import gradio as gr +import torch + +from extensions.multimodal.multimodal_embedder import MultimodalEmbedder +from modules import shared +from modules.logging_colors import logger + +params = { + "add_all_images_to_prompt": False, + # device to run vision encoder on + "vision_device": None, + # bits to load vision encoder in, either 16 or 32 + "vision_bits": 32, + # device to run multimodal projector on + "projector_device": None, + # multimodal projector bits, either 32 or 16 + "projector_bits": 32 +} + + +# If 'state' is True, will hijack the next chat generation +input_hijack = { + 'state': False, + 'value': ["", ""] +} + + +# initialized in ui, so that params are loaded from settings +multimodal_embedder: MultimodalEmbedder = None + + +def chat_input_modifier(text, visible_text, state): + global input_hijack + if input_hijack['state']: + input_hijack['state'] = False + return input_hijack['value'](text, visible_text) + else: + return text, visible_text + + +def add_chat_picture(picture, text, visible_text): + # resize the image, so that shortest edge is at least 224 (size for CLIP), and at most 300 (to keep history manageable) + # Adjusted to 336 for the values here, due to the increased resolution in llava-v1.5 + max_hw, min_hw = max(picture.size), min(picture.size) + aspect_ratio = max_hw / min_hw + shortest_edge = int(max(336 / aspect_ratio, 336)) + longest_edge = int(shortest_edge * aspect_ratio) + w = shortest_edge if picture.width < picture.height else longest_edge + h = shortest_edge if picture.width >= picture.height else longest_edge + picture = picture.resize((w, h)) + + buffer = BytesIO() + picture.save(buffer, format="PNG") + img_str = base64.b64encode(buffer.getvalue()).decode('utf-8') + image = f'' + + if '' in text: + text = text.replace('', image) + else: + text = image + '\n' + text + + if visible_text == '' or visible_text is None: + visible_text = text + elif '' in visible_text: + visible_text = visible_text.replace('', image) + else: + visible_text = visible_text + '\n' + image + + return text, visible_text + + +def custom_tokenized_length(prompt): + return multimodal_embedder.len_in_tokens(prompt) + + +def tokenizer_modifier(state, prompt, input_ids, input_embeds): + global params + start_ts = time.time() + image_match = re.search(r'', prompt) + + if image_match is None: + return prompt, input_ids, input_embeds + + prompt, input_ids, input_embeds, total_embedded = multimodal_embedder.forward(prompt, state, params) + logger.info(f'Embedded {total_embedded} image(s) in {time.time()-start_ts:.2f}s') + return (prompt, + input_ids.unsqueeze(0).to(shared.model.device, dtype=torch.int64), + input_embeds.unsqueeze(0).to(shared.model.device, dtype=shared.model.dtype)) + + +def ui(): + global multimodal_embedder + multimodal_embedder = MultimodalEmbedder(params) + with gr.Column(): + picture_select = gr.Image(label='Send a picture', type='pil') + # The models don't seem to deal well with multiple images + single_image_checkbox = gr.Checkbox(False, label='Embed all images, not only the last one') + # Prepare the input hijack + picture_select.upload( + lambda picture: input_hijack.update({"state": True, "value": partial(add_chat_picture, picture)}), + [picture_select], + None + ) + picture_select.clear(lambda: input_hijack.update({"state": False, "value": ["", ""]}), None, None) + single_image_checkbox.change(lambda x: params.update({"add_all_images_to_prompt": x}), single_image_checkbox, None) + shared.gradio['Generate'].click(lambda: None, None, picture_select) + shared.gradio['textbox'].submit(lambda: None, None, picture_select) diff --git a/extensions/ngrok/README.md b/extensions/ngrok/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0324bf9852408d9d2b86cc0165c2d548996f9c94 --- /dev/null +++ b/extensions/ngrok/README.md @@ -0,0 +1,69 @@ +# Adding an ingress URL through the ngrok Agent SDK for Python + +[ngrok](https://ngrok.com) is a globally distributed reverse proxy commonly used for quickly getting a public URL to a +service running inside a private network, such as on your local laptop. The ngrok agent is usually +deployed inside a private network and is used to communicate with the ngrok cloud service. + +By default the authtoken in the NGROK_AUTHTOKEN environment variable will be used. Alternatively one may be specified in +the `settings.json` file, see the Examples below. Retrieve your authtoken on the [Auth Token page of your ngrok dashboard](https://dashboard.ngrok.com/get-started/your-authtoken), signing up is free. + +# Documentation + +For a list of all available options, see [the configuration documentation](https://ngrok.com/docs/ngrok-agent/config/) or [the connect example](https://github.com/ngrok/ngrok-py/blob/main/examples/ngrok-connect-full.py). + +The ngrok Python SDK is [on github here](https://github.com/ngrok/ngrok-py). A quickstart guide and a full API reference are included in the [ngrok-py Python API documentation](https://ngrok.github.io/ngrok-py/). + +# Running + +To enable ngrok install the requirements and then add `--extension ngrok` to the command line options, for instance: + +```bash +pip install -r extensions/ngrok/requirements.txt +python server.py --extension ngrok +``` + +In the output you should then see something like this: + +```bash +INFO:Loading the extension "ngrok"... +INFO:Session created +INFO:Created tunnel "9d9d0944dc75ff9d3aae653e5eb29fe9" with url "https://d83706cf7be7.ngrok.app" +INFO:Tunnel "9d9d0944dc75ff9d3aae653e5eb29fe9" TCP forwarding to "localhost:7860" +INFO:Ingress established at https://d83706cf7be7.ngrok.app +``` + +You can now access the webui via the url shown, in this case `https://d83706cf7be7.ngrok.app`. It is recommended to add some authentication to the ingress, see below. + +# Example Settings + +In `settings.json` add a `ngrok` key with a dictionary of options, for instance: + +To enable basic authentication: +```json +{ + "ngrok": { + "basic_auth": "user:password" + } +} +``` + +To enable OAUTH authentication: +```json +{ + "ngrok": { + "oauth_provider": "google", + "oauth_allow_domains": "asdf.com", + "oauth_allow_emails": "asdf@asdf.com" + } +} +``` + +To add an authtoken instead of using the NGROK_AUTHTOKEN environment variable: +```json +{ + "ngrok": { + "authtoken": "", + "authtoken_from_env":false + } +} +``` \ No newline at end of file diff --git a/extensions/ngrok/requirements.txt b/extensions/ngrok/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..8acb99f2a1f2a165f496121e539949e18f3fcd81 --- /dev/null +++ b/extensions/ngrok/requirements.txt @@ -0,0 +1 @@ +ngrok==0.* diff --git a/extensions/ngrok/script.py b/extensions/ngrok/script.py new file mode 100644 index 0000000000000000000000000000000000000000..46f39bd327b6046f8e0d38ef266fc7d3687640da --- /dev/null +++ b/extensions/ngrok/script.py @@ -0,0 +1,36 @@ +# Adds ngrok ingress, to use add `--extension ngrok` to the command line options +# +# Parameters can be customized in settings.json of webui, e.g.: +# {"ngrok": {"basic_auth":"user:password"} } +# or +# {"ngrok": {"oauth_provider":"google", "oauth_allow_emails":["asdf@asdf.com"]} } +# +# See this example for full list of options: https://github.com/ngrok/ngrok-py/blob/main/examples/ngrok-connect-full.py +# or the README.md in this directory. + +import logging +from modules import shared + +# Pick up host/port command line arguments +host = shared.args.listen_host if shared.args.listen_host and shared.args.listen else '127.0.0.1' +port = shared.args.listen_port if shared.args.listen_port else '7860' + +# Default options +options = { + 'addr': f"{host}:{port}", + 'authtoken_from_env': True, + 'session_metadata': 'text-generation-webui', +} + + +def ui(): + settings = shared.settings.get("ngrok") + if settings: + options.update(settings) + + try: + import ngrok + tunnel = ngrok.connect(**options) + logging.info(f"Ingress established at: {tunnel.url()}") + except ModuleNotFoundError: + logging.error("===> ngrok library not found, please run `pip install -r extensions/ngrok/requirements.txt`") diff --git a/extensions/openai/cache_embedding_model.py b/extensions/openai/cache_embedding_model.py new file mode 100644 index 0000000000000000000000000000000000000000..8166cb4b491b681314150b6dd36b4c29899db6ae --- /dev/null +++ b/extensions/openai/cache_embedding_model.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 +# preload the embedding model, useful for Docker images to prevent re-download on config change +# Dockerfile: +# ENV OPENEDAI_EMBEDDING_MODEL="sentence-transformers/all-mpnet-base-v2" # Optional +# RUN python3 cache_embedded_model.py +import os + +import sentence_transformers + +st_model = os.environ.get("OPENEDAI_EMBEDDING_MODEL", "sentence-transformers/all-mpnet-base-v2") +model = sentence_transformers.SentenceTransformer(st_model) diff --git a/extensions/openai/completions.py b/extensions/openai/completions.py new file mode 100644 index 0000000000000000000000000000000000000000..70cdfe48cebfaee4a0d8bc066b6549ade591a2a1 --- /dev/null +++ b/extensions/openai/completions.py @@ -0,0 +1,508 @@ +import copy +import time +from collections import deque + +import tiktoken +import torch +import torch.nn.functional as F +from transformers import LogitsProcessor, LogitsProcessorList + +from extensions.openai.errors import InvalidRequestError +from extensions.openai.utils import debug_msg +from modules import shared +from modules.chat import ( + generate_chat_prompt, + generate_chat_reply, + load_character_memoized, + load_instruction_template_memoized +) +from modules.presets import load_preset_memoized +from modules.text_generation import decode, encode, generate_reply + + +class LogitsBiasProcessor(LogitsProcessor): + def __init__(self, logit_bias={}): + self.logit_bias = logit_bias + if self.logit_bias: + self.keys = list([int(key) for key in self.logit_bias.keys()]) + values = [self.logit_bias[str(key)] for key in self.keys] + self.values = torch.tensor(values, dtype=torch.float, device=shared.model.device) + debug_msg(f"{self})") + + def __call__(self, input_ids: torch.LongTensor, logits: torch.FloatTensor) -> torch.FloatTensor: + if self.logit_bias: + debug_msg(logits[0, self.keys], " + ", self.values) + logits[0, self.keys] += self.values + debug_msg(" --> ", logits[0, self.keys]) + debug_msg(" max/min ", float(torch.max(logits[0])), float(torch.min(logits[0]))) + + return logits + + def __repr__(self): + return f"<{self.__class__.__name__}(logit_bias={self.logit_bias})>" + + +class LogprobProcessor(LogitsProcessor): + def __init__(self, logprobs=None): + self.logprobs = logprobs + self.token_alternatives = {} + + def __call__(self, input_ids: torch.LongTensor, logits: torch.FloatTensor) -> torch.FloatTensor: + if self.logprobs is not None: # 0-5 + log_e_probabilities = F.log_softmax(logits, dim=1) + top_values, top_indices = torch.topk(log_e_probabilities, k=self.logprobs + 1) + top_tokens = [decode(tok) for tok in top_indices[0]] + top_probs = [float(x) for x in top_values[0]] + self.token_alternatives = dict(zip(top_tokens, top_probs)) + debug_msg(repr(self)) + + return logits + + def __repr__(self): + return f"<{self.__class__.__name__}(logprobs={self.logprobs}, token_alternatives={self.token_alternatives})>" + + +def convert_logprobs_to_tiktoken(model, logprobs): + # more problems than it's worth. + # try: + # encoder = tiktoken.encoding_for_model(model) + # # just pick the first one if it encodes to multiple tokens... 99.9% not required and maybe worse overall. + # return dict([(encoder.decode([encoder.encode(token)[0]]), prob) for token, prob in logprobs.items()]) + # except KeyError: + # # assume native tokens if we can't find the tokenizer + # return logprobs + + return logprobs + + +def process_parameters(body, is_legacy=False): + generate_params = body + max_tokens_str = 'length' if is_legacy else 'max_tokens' + generate_params['max_new_tokens'] = body.pop(max_tokens_str) + if generate_params['truncation_length'] == 0: + generate_params['truncation_length'] = shared.settings['truncation_length'] + + if body['preset'] is not None: + preset = load_preset_memoized(body['preset']) + generate_params.update(preset) + + generate_params['custom_stopping_strings'] = [] + if 'stop' in body: # str or array, max len 4 (ignored) + if isinstance(body['stop'], str): + generate_params['custom_stopping_strings'] = [body['stop']] + elif isinstance(body['stop'], list): + generate_params['custom_stopping_strings'] = body['stop'] + + logits_processor = [] + logit_bias = body.get('logit_bias', None) + if logit_bias: # {str: float, ...} + # XXX convert tokens from tiktoken based on requested model + # Ex.: 'logit_bias': {'1129': 100, '11442': 100, '16243': 100} + try: + encoder = tiktoken.encoding_for_model(generate_params['model']) + new_logit_bias = {} + for logit, bias in logit_bias.items(): + for x in encode(encoder.decode([int(logit)]), add_special_tokens=False)[0]: + if int(x) in [0, 1, 2, 29871]: # XXX LLAMA tokens + continue + + new_logit_bias[str(int(x))] = bias + debug_msg('logit_bias_map', logit_bias, '->', new_logit_bias) + logit_bias = new_logit_bias + except KeyError: + pass # assume native tokens if we can't find the tokenizer + + logits_processor = [LogitsBiasProcessor(logit_bias)] + + logprobs = None # coming to chat eventually + if 'logprobs' in body: + logprobs = body.get('logprobs', 0) # maybe cap at topk? don't clamp 0-5. + generate_params['logprob_proc'] = LogprobProcessor(logprobs) + logits_processor.extend([generate_params['logprob_proc']]) + else: + logprobs = None + + if logits_processor: # requires logits_processor support + generate_params['logits_processor'] = LogitsProcessorList(logits_processor) + + return generate_params + + +def convert_history(history): + ''' + Chat histories in this program are in the format [message, reply]. + This function converts OpenAI histories to that format. + ''' + chat_dialogue = [] + current_message = "" + current_reply = "" + user_input = "" + system_message = "" + + for entry in history: + content = entry["content"] + role = entry["role"] + + if role == "user": + user_input = content + if current_message: + chat_dialogue.append([current_message, '']) + current_message = "" + current_message = content + elif role == "assistant": + current_reply = content + if current_message: + chat_dialogue.append([current_message, current_reply]) + current_message = "" + current_reply = "" + else: + chat_dialogue.append(['', current_reply]) + elif role == "system": + system_message = content + + # if current_message: + # chat_dialogue.append([current_message, '']) + + return user_input, system_message, {'internal': chat_dialogue, 'visible': copy.deepcopy(chat_dialogue)} + + +def chat_completions_common(body: dict, is_legacy: bool = False, stream=False) -> dict: + if body.get('functions', []): + raise InvalidRequestError(message="functions is not supported.", param='functions') + + if body.get('function_call', ''): + raise InvalidRequestError(message="function_call is not supported.", param='function_call') + + if 'messages' not in body: + raise InvalidRequestError(message="messages is required", param='messages') + + messages = body['messages'] + for m in messages: + if 'role' not in m: + raise InvalidRequestError(message="messages: missing role", param='messages') + elif m['role'] == 'function': + raise InvalidRequestError(message="role: function is not supported.", param='messages') + if 'content' not in m: + raise InvalidRequestError(message="messages: missing content", param='messages') + + # Chat Completions + object_type = 'chat.completions' if not stream else 'chat.completions.chunk' + created_time = int(time.time()) + cmpl_id = "chatcmpl-%d" % (int(time.time() * 1000000000)) + resp_list = 'data' if is_legacy else 'choices' + + # generation parameters + generate_params = process_parameters(body, is_legacy=is_legacy) + continue_ = body['continue_'] + + # Instruction template + if body['instruction_template_str']: + instruction_template_str = body['instruction_template_str'] + elif body['instruction_template']: + instruction_template = body['instruction_template'] + instruction_template = "Alpaca" if instruction_template == "None" else instruction_template + instruction_template_str = load_instruction_template_memoized(instruction_template) + else: + instruction_template_str = shared.settings['instruction_template_str'] + + chat_template_str = body['chat_template_str'] or shared.settings['chat_template_str'] + chat_instruct_command = body['chat_instruct_command'] or shared.settings['chat-instruct_command'] + + # Chat character + character = body['character'] or shared.settings['character'] + character = "Assistant" if character == "None" else character + name1 = body['name1'] or shared.settings['name1'] + name1, name2, _, greeting, context = load_character_memoized(character, name1, '') + name2 = body['name2'] or name2 + context = body['context'] or context + greeting = body['greeting'] or greeting + + # History + user_input, custom_system_message, history = convert_history(messages) + + generate_params.update({ + 'mode': body['mode'], + 'name1': name1, + 'name2': name2, + 'context': context, + 'greeting': greeting, + 'instruction_template_str': instruction_template_str, + 'custom_system_message': custom_system_message, + 'chat_template_str': chat_template_str, + 'chat-instruct_command': chat_instruct_command, + 'history': history, + 'stream': stream + }) + + max_tokens = generate_params['max_new_tokens'] + if max_tokens in [None, 0]: + generate_params['max_new_tokens'] = 512 + generate_params['auto_max_new_tokens'] = True + + requested_model = generate_params.pop('model') + logprob_proc = generate_params.pop('logprob_proc', None) + + def chat_streaming_chunk(content): + # begin streaming + chunk = { + "id": cmpl_id, + "object": object_type, + "created": created_time, + "model": shared.model_name, + resp_list: [{ + "index": 0, + "finish_reason": None, + # So yeah... do both methods? delta and messages. + "message": {'role': 'assistant', 'content': content}, + "delta": {'role': 'assistant', 'content': content}, + }], + } + + if logprob_proc: # not official for chat yet + top_logprobs = convert_logprobs_to_tiktoken(model=requested_model, logprobs=logprob_proc.token_alternatives) + chunk[resp_list][0]["logprobs"] = {'top_logprobs': [top_logprobs]} + # else: + # chunk[resp_list][0]["logprobs"] = None + return chunk + + if stream: + yield chat_streaming_chunk('') + + # generate reply ####################################### + prompt = generate_chat_prompt(user_input, generate_params) + token_count = len(encode(prompt)[0]) + debug_msg({'prompt': prompt, 'generate_params': generate_params}) + + generator = generate_chat_reply( + user_input, generate_params, regenerate=False, _continue=continue_, loading_message=False) + + answer = '' + seen_content = '' + completion_token_count = 0 + + for a in generator: + answer = a['internal'][-1][1] + if stream: + len_seen = len(seen_content) + new_content = answer[len_seen:] + + if not new_content or chr(0xfffd) in new_content: # partial unicode character, don't send it yet. + continue + + seen_content = answer + chunk = chat_streaming_chunk(new_content) + yield chunk + + completion_token_count = len(encode(answer)[0]) + stop_reason = "stop" + if token_count + completion_token_count >= generate_params['truncation_length'] or completion_token_count >= generate_params['max_new_tokens']: + stop_reason = "length" + + if stream: + chunk = chat_streaming_chunk('') + chunk[resp_list][0]['finish_reason'] = stop_reason + chunk['usage'] = { + "prompt_tokens": token_count, + "completion_tokens": completion_token_count, + "total_tokens": token_count + completion_token_count + } + + yield chunk + else: + resp = { + "id": cmpl_id, + "object": object_type, + "created": created_time, + "model": shared.model_name, + resp_list: [{ + "index": 0, + "finish_reason": stop_reason, + "message": {"role": "assistant", "content": answer} + }], + "usage": { + "prompt_tokens": token_count, + "completion_tokens": completion_token_count, + "total_tokens": token_count + completion_token_count + } + } + if logprob_proc: # not official for chat yet + top_logprobs = convert_logprobs_to_tiktoken(model=requested_model, logprobs=logprob_proc.token_alternatives) + resp[resp_list][0]["logprobs"] = {'top_logprobs': [top_logprobs]} + # else: + # resp[resp_list][0]["logprobs"] = None + + yield resp + + +def completions_common(body: dict, is_legacy: bool = False, stream=False): + object_type = 'text_completion.chunk' if stream else 'text_completion' + created_time = int(time.time()) + cmpl_id = "conv-%d" % (int(time.time() * 1000000000)) + resp_list = 'data' if is_legacy else 'choices' + + prompt_str = 'context' if is_legacy else 'prompt' + + # ... encoded as a string, array of strings, array of tokens, or array of token arrays. + if prompt_str not in body: + raise InvalidRequestError("Missing required input", param=prompt_str) + + # common params + generate_params = process_parameters(body, is_legacy=is_legacy) + max_tokens = generate_params['max_new_tokens'] + generate_params['stream'] = stream + requested_model = generate_params.pop('model') + logprob_proc = generate_params.pop('logprob_proc', None) + suffix = body['suffix'] if body['suffix'] else '' + echo = body['echo'] + + if not stream: + prompt_arg = body[prompt_str] + if isinstance(prompt_arg, str) or (isinstance(prompt_arg, list) and isinstance(prompt_arg[0], int)): + prompt_arg = [prompt_arg] + + resp_list_data = [] + total_completion_token_count = 0 + total_prompt_token_count = 0 + + for idx, prompt in enumerate(prompt_arg, start=0): + if isinstance(prompt[0], int): + # token lists + if requested_model == shared.model_name: + prompt = decode(prompt)[0] + else: + try: + encoder = tiktoken.encoding_for_model(requested_model) + prompt = encoder.decode(prompt) + except KeyError: + prompt = decode(prompt)[0] + + prefix = prompt if echo else '' + token_count = len(encode(prompt)[0]) + total_prompt_token_count += token_count + + # generate reply ####################################### + debug_msg({'prompt': prompt, 'generate_params': generate_params}) + generator = generate_reply(prompt, generate_params, is_chat=False) + answer = '' + + for a in generator: + answer = a + + completion_token_count = len(encode(answer)[0]) + total_completion_token_count += completion_token_count + stop_reason = "stop" + if token_count + completion_token_count >= generate_params['truncation_length'] or completion_token_count >= max_tokens: + stop_reason = "length" + + respi = { + "index": idx, + "finish_reason": stop_reason, + "text": prefix + answer + suffix, + "logprobs": {'top_logprobs': [logprob_proc.token_alternatives]} if logprob_proc else None, + } + + resp_list_data.extend([respi]) + + resp = { + "id": cmpl_id, + "object": object_type, + "created": created_time, + "model": shared.model_name, + resp_list: resp_list_data, + "usage": { + "prompt_tokens": total_prompt_token_count, + "completion_tokens": total_completion_token_count, + "total_tokens": total_prompt_token_count + total_completion_token_count + } + } + + yield resp + else: + prompt = body[prompt_str] + if isinstance(prompt, list): + if prompt and isinstance(prompt[0], int): + try: + encoder = tiktoken.encoding_for_model(requested_model) + prompt = encoder.decode(prompt) + except KeyError: + prompt = decode(prompt)[0] + else: + raise InvalidRequestError(message="API Batched generation not yet supported.", param=prompt_str) + + prefix = prompt if echo else '' + token_count = len(encode(prompt)[0]) + + def text_streaming_chunk(content): + # begin streaming + chunk = { + "id": cmpl_id, + "object": object_type, + "created": created_time, + "model": shared.model_name, + resp_list: [{ + "index": 0, + "finish_reason": None, + "text": content, + "logprobs": {'top_logprobs': [logprob_proc.token_alternatives]} if logprob_proc else None, + }], + } + + return chunk + + yield text_streaming_chunk(prefix) + + # generate reply ####################################### + debug_msg({'prompt': prompt, 'generate_params': generate_params}) + generator = generate_reply(prompt, generate_params, is_chat=False) + + answer = '' + seen_content = '' + completion_token_count = 0 + + for a in generator: + answer = a + + len_seen = len(seen_content) + new_content = answer[len_seen:] + + if not new_content or chr(0xfffd) in new_content: # partial unicode character, don't send it yet. + continue + + seen_content = answer + chunk = text_streaming_chunk(new_content) + yield chunk + + completion_token_count = len(encode(answer)[0]) + stop_reason = "stop" + if token_count + completion_token_count >= generate_params['truncation_length'] or completion_token_count >= max_tokens: + stop_reason = "length" + + chunk = text_streaming_chunk(suffix) + chunk[resp_list][0]["finish_reason"] = stop_reason + chunk["usage"] = { + "prompt_tokens": token_count, + "completion_tokens": completion_token_count, + "total_tokens": token_count + completion_token_count + } + + yield chunk + + +def chat_completions(body: dict, is_legacy: bool = False) -> dict: + generator = chat_completions_common(body, is_legacy, stream=False) + return deque(generator, maxlen=1).pop() + + +def stream_chat_completions(body: dict, is_legacy: bool = False): + for resp in chat_completions_common(body, is_legacy, stream=True): + yield resp + + +def completions(body: dict, is_legacy: bool = False) -> dict: + generator = completions_common(body, is_legacy, stream=False) + return deque(generator, maxlen=1).pop() + + +def stream_completions(body: dict, is_legacy: bool = False): + for resp in completions_common(body, is_legacy, stream=True): + yield resp diff --git a/extensions/openai/embeddings.py b/extensions/openai/embeddings.py new file mode 100644 index 0000000000000000000000000000000000000000..1420879cc94309e79e137704ff054c760c7ca743 --- /dev/null +++ b/extensions/openai/embeddings.py @@ -0,0 +1,98 @@ +import os + +import numpy as np +from transformers import AutoModel + +from extensions.openai.errors import ServiceUnavailableError +from extensions.openai.utils import debug_msg, float_list_to_base64 +from modules.logging_colors import logger + +embeddings_params_initialized = False + + +def initialize_embedding_params(): + ''' + using 'lazy loading' to avoid circular import + so this function will be executed only once + ''' + global embeddings_params_initialized + if not embeddings_params_initialized: + from extensions.openai.script import params + + global st_model, embeddings_model, embeddings_device + + st_model = os.environ.get("OPENEDAI_EMBEDDING_MODEL", params.get('embedding_model', 'all-mpnet-base-v2')) + embeddings_model = None + # OPENEDAI_EMBEDDING_DEVICE: auto (best or cpu), cpu, cuda, ipu, xpu, mkldnn, opengl, opencl, ideep, hip, ve, fpga, ort, xla, lazy, vulkan, mps, meta, hpu, mtia, privateuseone + embeddings_device = os.environ.get("OPENEDAI_EMBEDDING_DEVICE", params.get('embedding_device', 'cpu')) + if embeddings_device.lower() == 'auto': + embeddings_device = None + + embeddings_params_initialized = True + + +def load_embedding_model(model: str): + try: + from sentence_transformers import SentenceTransformer + except ModuleNotFoundError: + logger.error("The sentence_transformers module has not been found. Please install it manually with pip install -U sentence-transformers.") + raise ModuleNotFoundError + + initialize_embedding_params() + global embeddings_device, embeddings_model + try: + print(f"Try embedding model: {model} on {embeddings_device}") + if 'jina-embeddings' in model: + embeddings_model = AutoModel.from_pretrained(model, trust_remote_code=True) # trust_remote_code is needed to use the encode method + embeddings_model = embeddings_model.to(embeddings_device) + else: + embeddings_model = SentenceTransformer(model, device=embeddings_device) + + print(f"Loaded embedding model: {model}") + except Exception as e: + embeddings_model = None + raise ServiceUnavailableError(f"Error: Failed to load embedding model: {model}", internal_message=repr(e)) + + +def get_embeddings_model(): + initialize_embedding_params() + global embeddings_model, st_model + if st_model and not embeddings_model: + load_embedding_model(st_model) # lazy load the model + + return embeddings_model + + +def get_embeddings_model_name() -> str: + initialize_embedding_params() + global st_model + return st_model + + +def get_embeddings(input: list) -> np.ndarray: + model = get_embeddings_model() + debug_msg(f"embedding model : {model}") + embedding = model.encode(input, convert_to_numpy=True, normalize_embeddings=True, convert_to_tensor=False) + debug_msg(f"embedding result : {embedding}") # might be too long even for debug, use at you own will + return embedding + + +def embeddings(input: list, encoding_format: str) -> dict: + embeddings = get_embeddings(input) + if encoding_format == "base64": + data = [{"object": "embedding", "embedding": float_list_to_base64(emb), "index": n} for n, emb in enumerate(embeddings)] + else: + data = [{"object": "embedding", "embedding": emb.tolist(), "index": n} for n, emb in enumerate(embeddings)] + + response = { + "object": "list", + "data": data, + "model": st_model, # return the real model + "usage": { + "prompt_tokens": 0, + "total_tokens": 0, + } + } + + debug_msg(f"Embeddings return size: {len(embeddings[0])}, number: {len(embeddings)}") + return response diff --git a/extensions/openai/errors.py b/extensions/openai/errors.py new file mode 100644 index 0000000000000000000000000000000000000000..838d1e7cc6f5577aad94bcd01f33f13ba49b349e --- /dev/null +++ b/extensions/openai/errors.py @@ -0,0 +1,31 @@ +class OpenAIError(Exception): + def __init__(self, message=None, code=500, internal_message=''): + self.message = message + self.code = code + self.internal_message = internal_message + + def __repr__(self): + return "%s(message=%r, code=%d)" % ( + self.__class__.__name__, + self.message, + self.code, + ) + + +class InvalidRequestError(OpenAIError): + def __init__(self, message, param, code=400, internal_message=''): + super().__init__(message, code, internal_message) + self.param = param + + def __repr__(self): + return "%s(message=%r, code=%d, param=%s)" % ( + self.__class__.__name__, + self.message, + self.code, + self.param, + ) + + +class ServiceUnavailableError(OpenAIError): + def __init__(self, message="Service unavailable, please try again later.", code=503, internal_message=''): + super().__init__(message, code, internal_message) diff --git a/extensions/openai/images.py b/extensions/openai/images.py new file mode 100644 index 0000000000000000000000000000000000000000..92bd85f08bcd6557dcc880825cc6a6df1c2ec9e2 --- /dev/null +++ b/extensions/openai/images.py @@ -0,0 +1,70 @@ +import os +import time + +import requests + +from extensions.openai.errors import ServiceUnavailableError + + +def generations(prompt: str, size: str, response_format: str, n: int): + # Stable Diffusion callout wrapper for txt2img + # Low effort implementation for compatibility. With only "prompt" being passed and assuming DALL-E + # the results will be limited and likely poor. SD has hundreds of models and dozens of settings. + # If you want high quality tailored results you should just use the Stable Diffusion API directly. + # it's too general an API to try and shape the result with specific tags like negative prompts + # or "masterpiece", etc. SD configuration is beyond the scope of this API. + # At this point I will not add the edits and variations endpoints (ie. img2img) because they + # require changing the form data handling to accept multipart form data, also to properly support + # url return types will require file management and a web serving files... Perhaps later! + base_model_size = 512 if 'SD_BASE_MODEL_SIZE' not in os.environ else int(os.environ.get('SD_BASE_MODEL_SIZE', 512)) + sd_defaults = { + 'sampler_name': 'DPM++ 2M Karras', # vast improvement + 'steps': 30, + } + + width, height = [int(x) for x in size.split('x')] # ignore the restrictions on size + + # to hack on better generation, edit default payload. + payload = { + 'prompt': prompt, # ignore prompt limit of 1000 characters + 'width': width, + 'height': height, + 'batch_size': n, + } + payload.update(sd_defaults) + + scale = min(width, height) / base_model_size + if scale >= 1.2: + # for better performance with the default size (1024), and larger res. + scaler = { + 'width': width // scale, + 'height': height // scale, + 'hr_scale': scale, + 'enable_hr': True, + 'hr_upscaler': 'Latent', + 'denoising_strength': 0.68, + } + payload.update(scaler) + + resp = { + 'created': int(time.time()), + 'data': [] + } + from extensions.openai.script import params + + # TODO: support SD_WEBUI_AUTH username:password pair. + sd_url = f"{os.environ.get('SD_WEBUI_URL', params.get('sd_webui_url', ''))}/sdapi/v1/txt2img" + + response = requests.post(url=sd_url, json=payload) + r = response.json() + if response.status_code != 200 or 'images' not in r: + print(r) + raise ServiceUnavailableError(r.get('error', 'Unknown error calling Stable Diffusion'), code=response.status_code, internal_message=r.get('errors', None)) + # r['parameters']... + for b64_json in r['images']: + if response_format == 'b64_json': + resp['data'].extend([{'b64_json': b64_json}]) + else: + resp['data'].extend([{'url': f'data:image/png;base64,{b64_json}'}]) # yeah it's lazy. requests.get() will not work with this + + return resp diff --git a/extensions/openai/logits.py b/extensions/openai/logits.py new file mode 100644 index 0000000000000000000000000000000000000000..357e70fa6043ba561f1a9d756425a349e9daa0cc --- /dev/null +++ b/extensions/openai/logits.py @@ -0,0 +1,11 @@ +from extensions.openai.completions import process_parameters +from modules.logits import get_next_logits + + +def _get_next_logits(body): + # Pre-process the input payload to simulate a real generation + use_samplers = body['use_samplers'] + state = process_parameters(body) if use_samplers else {} + state['stream'] = True + + return get_next_logits(body['prompt'], state, use_samplers, "", top_logits=body['top_logits'], return_dict=True) diff --git a/extensions/openai/models.py b/extensions/openai/models.py new file mode 100644 index 0000000000000000000000000000000000000000..01045f90e5de1021de3da2b37dfab74ad9aad0cd --- /dev/null +++ b/extensions/openai/models.py @@ -0,0 +1,79 @@ +from modules import shared +from modules.logging_colors import logger +from modules.LoRA import add_lora_to_model +from modules.models import load_model, unload_model +from modules.models_settings import get_model_metadata, update_model_parameters +from modules.utils import get_available_loras, get_available_models + + +def get_current_model_info(): + return { + 'model_name': shared.model_name, + 'lora_names': shared.lora_names + } + + +def list_models(): + return {'model_names': get_available_models()[1:]} + + +def list_dummy_models(): + result = { + "object": "list", + "data": [] + } + + # these are expected by so much, so include some here as a dummy + for model in ['gpt-3.5-turbo', 'text-embedding-ada-002']: + result["data"].append(model_info_dict(model)) + + return result + + +def model_info_dict(model_name: str) -> dict: + return { + "id": model_name, + "object": "model", + "created": 0, + "owned_by": "user" + } + + +def _load_model(data): + model_name = data["model_name"] + args = data["args"] + settings = data["settings"] + + unload_model() + model_settings = get_model_metadata(model_name) + update_model_parameters(model_settings) + + # Update shared.args with custom model loading settings + if args: + for k in args: + if hasattr(shared.args, k): + setattr(shared.args, k, args[k]) + + shared.model, shared.tokenizer = load_model(model_name) + + # Update shared.settings with custom generation defaults + if settings: + for k in settings: + if k in shared.settings: + shared.settings[k] = settings[k] + if k == 'truncation_length': + logger.info(f"TRUNCATION LENGTH (UPDATED): {shared.settings['truncation_length']}") + elif k == 'instruction_template': + logger.info(f"INSTRUCTION TEMPLATE (UPDATED): {shared.settings['instruction_template']}") + + +def list_loras(): + return {'lora_names': get_available_loras()[1:]} + + +def load_loras(lora_names): + add_lora_to_model(lora_names) + + +def unload_all_loras(): + add_lora_to_model([]) diff --git a/extensions/openai/moderations.py b/extensions/openai/moderations.py new file mode 100644 index 0000000000000000000000000000000000000000..1ca6b8abb2582e71ed41fc1ba4e0ae58ed3cfd68 --- /dev/null +++ b/extensions/openai/moderations.py @@ -0,0 +1,69 @@ +import time + +import numpy as np +from numpy.linalg import norm + +from extensions.openai.embeddings import get_embeddings + +moderations_disabled = False # return 0/false +category_embeddings = None +antonym_embeddings = None +categories = ["sexual", "hate", "harassment", "self-harm", "sexual/minors", "hate/threatening", "violence/graphic", "self-harm/intent", "self-harm/instructions", "harassment/threatening", "violence"] +flag_threshold = 0.5 + + +def get_category_embeddings() -> dict: + global category_embeddings, categories + if category_embeddings is None: + embeddings = get_embeddings(categories).tolist() + category_embeddings = dict(zip(categories, embeddings)) + + return category_embeddings + + +def cosine_similarity(a: np.ndarray, b: np.ndarray) -> float: + return np.dot(a, b) / (norm(a) * norm(b)) + + +# seems most openai like with all-mpnet-base-v2 +def mod_score(a: np.ndarray, b: np.ndarray) -> float: + return 2.0 * np.dot(a, b) + + +def moderations(input): + global category_embeddings, categories, flag_threshold, moderations_disabled + results = { + "id": f"modr-{int(time.time()*1e9)}", + "model": "text-moderation-001", + "results": [], + } + + if moderations_disabled: + results['results'] = [{ + 'categories': dict([(C, False) for C in categories]), + 'category_scores': dict([(C, 0.0) for C in categories]), + 'flagged': False, + }] + return results + + category_embeddings = get_category_embeddings() + + # input, string or array + if isinstance(input, str): + input = [input] + + for in_str in input: + for ine in get_embeddings([in_str]): + category_scores = dict([(C, mod_score(category_embeddings[C], ine)) for C in categories]) + category_flags = dict([(C, bool(category_scores[C] > flag_threshold)) for C in categories]) + flagged = any(category_flags.values()) + + results['results'].extend([{ + 'flagged': flagged, + 'categories': category_flags, + 'category_scores': category_scores, + }]) + + print(results) + + return results diff --git a/extensions/openai/requirements.txt b/extensions/openai/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..e5d6d797d7d5d023bd8a2c6ac90ff42f3557335e --- /dev/null +++ b/extensions/openai/requirements.txt @@ -0,0 +1,4 @@ +SpeechRecognition==3.10.0 +flask_cloudflared==0.0.14 +sse-starlette==1.6.5 +tiktoken diff --git a/extensions/openai/script.py b/extensions/openai/script.py new file mode 100644 index 0000000000000000000000000000000000000000..0be83442fb2adf1f15a58461eb8ff8b117b81224 --- /dev/null +++ b/extensions/openai/script.py @@ -0,0 +1,379 @@ +import asyncio +import json +import logging +import os +import traceback +from threading import Thread + +import speech_recognition as sr +import uvicorn +from fastapi import Depends, FastAPI, Header, HTTPException +from fastapi.middleware.cors import CORSMiddleware +from fastapi.requests import Request +from fastapi.responses import JSONResponse +from pydub import AudioSegment +from sse_starlette import EventSourceResponse + +import extensions.openai.completions as OAIcompletions +import extensions.openai.embeddings as OAIembeddings +import extensions.openai.images as OAIimages +import extensions.openai.logits as OAIlogits +import extensions.openai.models as OAImodels +import extensions.openai.moderations as OAImoderations +from extensions.openai.errors import ServiceUnavailableError +from extensions.openai.tokens import token_count, token_decode, token_encode +from extensions.openai.utils import _start_cloudflared +from modules import shared +from modules.logging_colors import logger +from modules.models import unload_model +from modules.text_generation import stop_everything_event + +from .typing import ( + ChatCompletionRequest, + ChatCompletionResponse, + CompletionRequest, + CompletionResponse, + DecodeRequest, + DecodeResponse, + EmbeddingsRequest, + EmbeddingsResponse, + EncodeRequest, + EncodeResponse, + LoadLorasRequest, + LoadModelRequest, + LogitsRequest, + LogitsResponse, + LoraListResponse, + ModelInfoResponse, + ModelListResponse, + TokenCountResponse, + to_dict +) + +params = { + 'embedding_device': 'cpu', + 'embedding_model': 'sentence-transformers/all-mpnet-base-v2', + 'sd_webui_url': '', + 'debug': 0 +} + + +streaming_semaphore = asyncio.Semaphore(1) + + +def verify_api_key(authorization: str = Header(None)) -> None: + expected_api_key = shared.args.api_key + if expected_api_key and (authorization is None or authorization != f"Bearer {expected_api_key}"): + raise HTTPException(status_code=401, detail="Unauthorized") + + +def verify_admin_key(authorization: str = Header(None)) -> None: + expected_api_key = shared.args.admin_key + if expected_api_key and (authorization is None or authorization != f"Bearer {expected_api_key}"): + raise HTTPException(status_code=401, detail="Unauthorized") + + +app = FastAPI() +check_key = [Depends(verify_api_key)] +check_admin_key = [Depends(verify_admin_key)] + +# Configure CORS settings to allow all origins, methods, and headers +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"] +) + + +@app.options("/", dependencies=check_key) +async def options_route(): + return JSONResponse(content="OK") + + +@app.post('/v1/completions', response_model=CompletionResponse, dependencies=check_key) +async def openai_completions(request: Request, request_data: CompletionRequest): + path = request.url.path + is_legacy = "/generate" in path + + if request_data.stream: + async def generator(): + async with streaming_semaphore: + response = OAIcompletions.stream_completions(to_dict(request_data), is_legacy=is_legacy) + for resp in response: + disconnected = await request.is_disconnected() + if disconnected: + break + + yield {"data": json.dumps(resp)} + + return EventSourceResponse(generator()) # SSE streaming + + else: + response = OAIcompletions.completions(to_dict(request_data), is_legacy=is_legacy) + return JSONResponse(response) + + +@app.post('/v1/chat/completions', response_model=ChatCompletionResponse, dependencies=check_key) +async def openai_chat_completions(request: Request, request_data: ChatCompletionRequest): + path = request.url.path + is_legacy = "/generate" in path + + if request_data.stream: + async def generator(): + async with streaming_semaphore: + response = OAIcompletions.stream_chat_completions(to_dict(request_data), is_legacy=is_legacy) + for resp in response: + disconnected = await request.is_disconnected() + if disconnected: + break + + yield {"data": json.dumps(resp)} + + return EventSourceResponse(generator()) # SSE streaming + + else: + response = OAIcompletions.chat_completions(to_dict(request_data), is_legacy=is_legacy) + return JSONResponse(response) + + +@app.get("/v1/models", dependencies=check_key) +@app.get("/v1/models/{model}", dependencies=check_key) +async def handle_models(request: Request): + path = request.url.path + is_list = request.url.path.split('?')[0].split('#')[0] == '/v1/models' + + if is_list: + response = OAImodels.list_dummy_models() + else: + model_name = path[len('/v1/models/'):] + response = OAImodels.model_info_dict(model_name) + + return JSONResponse(response) + + +@app.get('/v1/billing/usage', dependencies=check_key) +def handle_billing_usage(): + ''' + Ex. /v1/dashboard/billing/usage?start_date=2023-05-01&end_date=2023-05-31 + ''' + return JSONResponse(content={"total_usage": 0}) + + +@app.post('/v1/audio/transcriptions', dependencies=check_key) +async def handle_audio_transcription(request: Request): + r = sr.Recognizer() + + form = await request.form() + audio_file = await form["file"].read() + audio_data = AudioSegment.from_file(audio_file) + + # Convert AudioSegment to raw data + raw_data = audio_data.raw_data + + # Create AudioData object + audio_data = sr.AudioData(raw_data, audio_data.frame_rate, audio_data.sample_width) + whipser_language = form.getvalue('language', None) + whipser_model = form.getvalue('model', 'tiny') # Use the model from the form data if it exists, otherwise default to tiny + + transcription = {"text": ""} + + try: + transcription["text"] = r.recognize_whisper(audio_data, language=whipser_language, model=whipser_model) + except sr.UnknownValueError: + print("Whisper could not understand audio") + transcription["text"] = "Whisper could not understand audio UnknownValueError" + except sr.RequestError as e: + print("Could not request results from Whisper", e) + transcription["text"] = "Whisper could not understand audio RequestError" + + return JSONResponse(content=transcription) + + +@app.post('/v1/images/generations', dependencies=check_key) +async def handle_image_generation(request: Request): + + if not os.environ.get('SD_WEBUI_URL', params.get('sd_webui_url', '')): + raise ServiceUnavailableError("Stable Diffusion not available. SD_WEBUI_URL not set.") + + body = await request.json() + prompt = body['prompt'] + size = body.get('size', '1024x1024') + response_format = body.get('response_format', 'url') # or b64_json + n = body.get('n', 1) # ignore the batch limits of max 10 + + response = await OAIimages.generations(prompt=prompt, size=size, response_format=response_format, n=n) + return JSONResponse(response) + + +@app.post("/v1/embeddings", response_model=EmbeddingsResponse, dependencies=check_key) +async def handle_embeddings(request: Request, request_data: EmbeddingsRequest): + input = request_data.input + if not input: + raise HTTPException(status_code=400, detail="Missing required argument input") + + if type(input) is str: + input = [input] + + response = OAIembeddings.embeddings(input, request_data.encoding_format) + return JSONResponse(response) + + +@app.post("/v1/moderations", dependencies=check_key) +async def handle_moderations(request: Request): + body = await request.json() + input = body["input"] + if not input: + raise HTTPException(status_code=400, detail="Missing required argument input") + + response = OAImoderations.moderations(input) + return JSONResponse(response) + + +@app.post("/v1/internal/encode", response_model=EncodeResponse, dependencies=check_key) +async def handle_token_encode(request_data: EncodeRequest): + response = token_encode(request_data.text) + return JSONResponse(response) + + +@app.post("/v1/internal/decode", response_model=DecodeResponse, dependencies=check_key) +async def handle_token_decode(request_data: DecodeRequest): + response = token_decode(request_data.tokens) + return JSONResponse(response) + + +@app.post("/v1/internal/token-count", response_model=TokenCountResponse, dependencies=check_key) +async def handle_token_count(request_data: EncodeRequest): + response = token_count(request_data.text) + return JSONResponse(response) + + +@app.post("/v1/internal/logits", response_model=LogitsResponse, dependencies=check_key) +async def handle_logits(request_data: LogitsRequest): + ''' + Given a prompt, returns the top 50 most likely logits as a dict. + The keys are the tokens, and the values are the probabilities. + ''' + response = OAIlogits._get_next_logits(to_dict(request_data)) + return JSONResponse(response) + + +@app.post("/v1/internal/stop-generation", dependencies=check_key) +async def handle_stop_generation(request: Request): + stop_everything_event() + return JSONResponse(content="OK") + + +@app.get("/v1/internal/model/info", response_model=ModelInfoResponse, dependencies=check_key) +async def handle_model_info(): + payload = OAImodels.get_current_model_info() + return JSONResponse(content=payload) + + +@app.get("/v1/internal/model/list", response_model=ModelListResponse, dependencies=check_admin_key) +async def handle_list_models(): + payload = OAImodels.list_models() + return JSONResponse(content=payload) + + +@app.post("/v1/internal/model/load", dependencies=check_admin_key) +async def handle_load_model(request_data: LoadModelRequest): + ''' + This endpoint is experimental and may change in the future. + + The "args" parameter can be used to modify flags like "--load-in-4bit" + or "--n-gpu-layers" before loading a model. Example: + + ``` + "args": { + "load_in_4bit": true, + "n_gpu_layers": 12 + } + ``` + + Note that those settings will remain after loading the model. So you + may need to change them back to load a second model. + + The "settings" parameter is also a dict but with keys for the + shared.settings object. It can be used to modify the default instruction + template like this: + + ``` + "settings": { + "instruction_template": "Alpaca" + } + ``` + ''' + + try: + OAImodels._load_model(to_dict(request_data)) + return JSONResponse(content="OK") + except: + traceback.print_exc() + return HTTPException(status_code=400, detail="Failed to load the model.") + + +@app.post("/v1/internal/model/unload", dependencies=check_admin_key) +async def handle_unload_model(): + unload_model() + + +@app.get("/v1/internal/lora/list", response_model=LoraListResponse, dependencies=check_admin_key) +async def handle_list_loras(): + response = OAImodels.list_loras() + return JSONResponse(content=response) + + +@app.post("/v1/internal/lora/load", dependencies=check_admin_key) +async def handle_load_loras(request_data: LoadLorasRequest): + try: + OAImodels.load_loras(request_data.lora_names) + return JSONResponse(content="OK") + except: + traceback.print_exc() + return HTTPException(status_code=400, detail="Failed to apply the LoRA(s).") + + +@app.post("/v1/internal/lora/unload", dependencies=check_admin_key) +async def handle_unload_loras(): + OAImodels.unload_all_loras() + return JSONResponse(content="OK") + + +def run_server(): + server_addr = '0.0.0.0' if shared.args.listen else '127.0.0.1' + port = int(os.environ.get('OPENEDAI_PORT', shared.args.api_port)) + + ssl_certfile = os.environ.get('OPENEDAI_CERT_PATH', shared.args.ssl_certfile) + ssl_keyfile = os.environ.get('OPENEDAI_KEY_PATH', shared.args.ssl_keyfile) + + if shared.args.public_api: + def on_start(public_url: str): + logger.info(f'OpenAI-compatible API URL:\n\n{public_url}\n') + + _start_cloudflared(port, shared.args.public_api_id, max_attempts=3, on_start=on_start) + else: + if ssl_keyfile and ssl_certfile: + logger.info(f'OpenAI-compatible API URL:\n\nhttps://{server_addr}:{port}\n') + else: + logger.info(f'OpenAI-compatible API URL:\n\nhttp://{server_addr}:{port}\n') + + if shared.args.api_key: + if not shared.args.admin_key: + shared.args.admin_key = shared.args.api_key + + logger.info(f'OpenAI API key:\n\n{shared.args.api_key}\n') + + if shared.args.admin_key and shared.args.admin_key != shared.args.api_key: + logger.info(f'OpenAI API admin key (for loading/unloading models):\n\n{shared.args.admin_key}\n') + + logging.getLogger("uvicorn.error").propagate = False + uvicorn.run(app, host=server_addr, port=port, ssl_certfile=ssl_certfile, ssl_keyfile=ssl_keyfile) + + +def setup(): + if shared.args.nowebui: + run_server() + else: + Thread(target=run_server, daemon=True).start() diff --git a/extensions/openai/tokens.py b/extensions/openai/tokens.py new file mode 100644 index 0000000000000000000000000000000000000000..9e92d3620775cb04bf2a9ce71747a51f323b4cc2 --- /dev/null +++ b/extensions/openai/tokens.py @@ -0,0 +1,26 @@ +from modules.text_generation import decode, encode + + +def token_count(prompt): + tokens = encode(prompt)[0] + return { + 'length': len(tokens) + } + + +def token_encode(input): + tokens = encode(input)[0] + if tokens.__class__.__name__ in ['Tensor', 'ndarray']: + tokens = tokens.tolist() + + return { + 'tokens': tokens, + 'length': len(tokens), + } + + +def token_decode(tokens): + output = decode(tokens) + return { + 'text': output + } diff --git a/extensions/openai/typing.py b/extensions/openai/typing.py new file mode 100644 index 0000000000000000000000000000000000000000..3a212dd9c2e651570fc90a8fc5b540800496e175 --- /dev/null +++ b/extensions/openai/typing.py @@ -0,0 +1,203 @@ +import json +import time +from typing import Dict, List + +from pydantic import BaseModel, Field + + +class GenerationOptions(BaseModel): + preset: str | None = Field(default=None, description="The name of a file under text-generation-webui/presets (without the .yaml extension). The sampling parameters that get overwritten by this option are the keys in the default_preset() function in modules/presets.py.") + min_p: float = 0 + top_k: int = 0 + repetition_penalty: float = 1 + repetition_penalty_range: int = 1024 + typical_p: float = 1 + tfs: float = 1 + top_a: float = 0 + epsilon_cutoff: float = 0 + eta_cutoff: float = 0 + guidance_scale: float = 1 + negative_prompt: str = '' + penalty_alpha: float = 0 + mirostat_mode: int = 0 + mirostat_tau: float = 5 + mirostat_eta: float = 0.1 + temperature_last: bool = False + do_sample: bool = True + seed: int = -1 + encoder_repetition_penalty: float = 1 + no_repeat_ngram_size: int = 0 + min_length: int = 0 + num_beams: int = 1 + length_penalty: float = 1 + early_stopping: bool = False + truncation_length: int = 0 + max_tokens_second: int = 0 + custom_token_bans: str = "" + auto_max_new_tokens: bool = False + ban_eos_token: bool = False + add_bos_token: bool = True + skip_special_tokens: bool = True + grammar_string: str = "" + + +class CompletionRequestParams(BaseModel): + model: str | None = Field(default=None, description="Unused parameter. To change the model, use the /v1/internal/model/load endpoint.") + prompt: str | List[str] + best_of: int | None = Field(default=1, description="Unused parameter.") + echo: bool | None = False + frequency_penalty: float | None = 0 + logit_bias: dict | None = None + logprobs: int | None = None + max_tokens: int | None = 16 + n: int | None = Field(default=1, description="Unused parameter.") + presence_penalty: float | None = 0 + stop: str | List[str] | None = None + stream: bool | None = False + suffix: str | None = None + temperature: float | None = 1 + top_p: float | None = 1 + user: str | None = Field(default=None, description="Unused parameter.") + + +class CompletionRequest(GenerationOptions, CompletionRequestParams): + pass + + +class CompletionResponse(BaseModel): + id: str + choices: List[dict] + created: int = int(time.time()) + model: str + object: str = "text_completion" + usage: dict + + +class ChatCompletionRequestParams(BaseModel): + messages: List[dict] + model: str | None = Field(default=None, description="Unused parameter. To change the model, use the /v1/internal/model/load endpoint.") + frequency_penalty: float | None = 0 + function_call: str | dict | None = Field(default=None, description="Unused parameter.") + functions: List[dict] | None = Field(default=None, description="Unused parameter.") + logit_bias: dict | None = None + max_tokens: int | None = None + n: int | None = Field(default=1, description="Unused parameter.") + presence_penalty: float | None = 0 + stop: str | List[str] | None = None + stream: bool | None = False + temperature: float | None = 1 + top_p: float | None = 1 + user: str | None = Field(default=None, description="Unused parameter.") + + mode: str = Field(default='instruct', description="Valid options: instruct, chat, chat-instruct.") + + instruction_template: str | None = Field(default=None, description="An instruction template defined under text-generation-webui/instruction-templates. If not set, the correct template will be automatically obtained from the model metadata.") + instruction_template_str: str | None = Field(default=None, description="A Jinja2 instruction template. If set, will take precedence over everything else.") + + character: str | None = Field(default=None, description="A character defined under text-generation-webui/characters. If not set, the default \"Assistant\" character will be used.") + name1: str | None = Field(default=None, description="Your name (the user). By default, it's \"You\".") + name2: str | None = Field(default=None, description="Overwrites the value set by character.") + context: str | None = Field(default=None, description="Overwrites the value set by character.") + greeting: str | None = Field(default=None, description="Overwrites the value set by character.") + chat_template_str: str | None = Field(default=None, description="Jinja2 template for chat.") + + chat_instruct_command: str | None = None + + continue_: bool = Field(default=False, description="Makes the last bot message in the history be continued instead of starting a new message.") + + +class ChatCompletionRequest(GenerationOptions, ChatCompletionRequestParams): + pass + + +class ChatCompletionResponse(BaseModel): + id: str + choices: List[dict] + created: int = int(time.time()) + model: str + object: str = "chat.completion" + usage: dict + + +class EmbeddingsRequest(BaseModel): + input: str | List[str] | List[int] | List[List[int]] + model: str | None = Field(default=None, description="Unused parameter. To change the model, set the OPENEDAI_EMBEDDING_MODEL and OPENEDAI_EMBEDDING_DEVICE environment variables before starting the server.") + encoding_format: str = Field(default="float", description="Can be float or base64.") + user: str | None = Field(default=None, description="Unused parameter.") + + +class EmbeddingsResponse(BaseModel): + index: int + embedding: List[float] + object: str = "embedding" + + +class EncodeRequest(BaseModel): + text: str + + +class EncodeResponse(BaseModel): + tokens: List[int] + length: int + + +class DecodeRequest(BaseModel): + tokens: List[int] + + +class DecodeResponse(BaseModel): + text: str + + +class TokenCountResponse(BaseModel): + length: int + + +class LogitsRequestParams(BaseModel): + prompt: str + use_samplers: bool = False + top_logits: int | None = 50 + frequency_penalty: float | None = 0 + max_tokens: int | None = 16 + presence_penalty: float | None = 0 + temperature: float | None = 1 + top_p: float | None = 1 + + +class LogitsRequest(GenerationOptions, LogitsRequestParams): + pass + + +class LogitsResponse(BaseModel): + logits: Dict[str, float] + + +class ModelInfoResponse(BaseModel): + model_name: str + lora_names: List[str] + + +class ModelListResponse(BaseModel): + model_names: List[str] + + +class LoadModelRequest(BaseModel): + model_name: str + args: dict | None = None + settings: dict | None = None + + +class LoraListResponse(BaseModel): + lora_names: List[str] + + +class LoadLorasRequest(BaseModel): + lora_names: List[str] + + +def to_json(obj): + return json.dumps(obj.__dict__, indent=4) + + +def to_dict(obj): + return obj.__dict__ diff --git a/extensions/openai/utils.py b/extensions/openai/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2b4147690e707b590ff087874dac3ff00fdbf927 --- /dev/null +++ b/extensions/openai/utils.py @@ -0,0 +1,54 @@ +import base64 +import os +import time +import traceback +from typing import Callable, Optional + +import numpy as np + + +def float_list_to_base64(float_array: np.ndarray) -> str: + # Convert the list to a float32 array that the OpenAPI client expects + # float_array = np.array(float_list, dtype="float32") + + # Get raw bytes + bytes_array = float_array.tobytes() + + # Encode bytes into base64 + encoded_bytes = base64.b64encode(bytes_array) + + # Turn raw base64 encoded bytes into ASCII + ascii_string = encoded_bytes.decode('ascii') + return ascii_string + + +def debug_msg(*args, **kwargs): + from extensions.openai.script import params + if os.environ.get("OPENEDAI_DEBUG", params.get('debug', 0)): + print(*args, **kwargs) + + +def _start_cloudflared(port: int, tunnel_id: str, max_attempts: int = 3, on_start: Optional[Callable[[str], None]] = None): + try: + from flask_cloudflared import _run_cloudflared + except ImportError: + print('You should install flask_cloudflared manually') + raise Exception( + 'flask_cloudflared not installed. Make sure you installed the requirements.txt for this extension.') + + for _ in range(max_attempts): + try: + if tunnel_id is not None: + public_url = _run_cloudflared(port, port + 1, tunnel_id=tunnel_id) + else: + public_url = _run_cloudflared(port, port + 1) + + if on_start: + on_start(public_url) + + return + except Exception: + traceback.print_exc() + time.sleep(3) + + raise Exception('Could not start cloudflared.') diff --git a/extensions/perplexity_colors/script.py b/extensions/perplexity_colors/script.py new file mode 100644 index 0000000000000000000000000000000000000000..2a986ac40b4194a5751015241d82046ce95cbca2 --- /dev/null +++ b/extensions/perplexity_colors/script.py @@ -0,0 +1,309 @@ +import time + +import gradio +import numpy as np +import torch +from transformers import LogitsProcessor + +from modules import html_generator, shared + +params = { + 'active': True, + 'color_by_perplexity': False, + 'color_by_probability': False, + 'ppl_scale': 15.0, # No slider for this right now, because I don't think it really needs to be changed. Very large perplexity scores don't show up often. + 'probability_dropdown': False, + 'verbose': False # For debugging mostly +} + + +class PerplexityLogits(LogitsProcessor): + def __init__(self, verbose=False): + self.generated_token_ids = [] + self.selected_probs = [] + self.top_token_ids_list = [] + self.top_probs_list = [] + self.perplexities_list = [] + self.last_probs = None + self.verbose = verbose + + def __call__(self, input_ids, scores): + # t0 = time.time() + probs = torch.softmax(scores, dim=-1, dtype=torch.float) + log_probs = torch.nan_to_num(torch.log(probs)) # Note: This is to convert log(0) nan to 0, but probs*log_probs makes this 0 not affect the perplexity. + entropy = -torch.sum(probs * log_probs) + entropy = entropy.cpu().numpy() + perplexity = round(float(np.exp(entropy)), 4) + self.perplexities_list.append(perplexity) + last_token_id = int(input_ids[0][-1].cpu().numpy().item()) + # Store the generated tokens (not sure why this isn't accessible in the output endpoint!) + self.generated_token_ids.append(last_token_id) + # Get last probability, and add to the list if it wasn't there + if len(self.selected_probs) > 0: + # Is the selected token in the top tokens? + if self.verbose: + print('Probs: Token after', shared.tokenizer.decode(last_token_id)) + print('Probs:', [shared.tokenizer.decode(token_id) for token_id in self.top_token_ids_list[-1][0]]) + print('Probs:', [round(float(prob), 4) for prob in self.top_probs_list[-1][0]]) + if last_token_id in self.top_token_ids_list[-1][0]: + idx = self.top_token_ids_list[-1][0].index(last_token_id) + self.selected_probs.append(self.top_probs_list[-1][0][idx]) + else: + self.top_token_ids_list[-1][0].append(last_token_id) + last_prob = round(float(self.last_probs[last_token_id]), 4) + self.top_probs_list[-1][0].append(last_prob) + self.selected_probs.append(last_prob) + else: + self.selected_probs.append(1.0) # Placeholder for the last token of the prompt + + if self.verbose: + pplbar = "-" + if not np.isnan(perplexity): + pplbar = "*" * round(perplexity) + print(f"PPL: Token after {shared.tokenizer.decode(last_token_id)}\t{perplexity:.2f}\t{pplbar}") + + # Get top 5 probabilities + top_tokens_and_probs = torch.topk(probs, 5) + top_probs = top_tokens_and_probs.values.cpu().numpy().astype(float).tolist() + top_token_ids = top_tokens_and_probs.indices.cpu().numpy().astype(int).tolist() + + self.top_token_ids_list.append(top_token_ids) + self.top_probs_list.append(top_probs) + + probs = probs.cpu().numpy().flatten() + self.last_probs = probs # Need to keep this as a reference for top probs + + # t1 = time.time() + # print(f"PPL Processor: {(t1-t0):.3f} s") + # About 1 ms, though occasionally up to around 100 ms, not sure why... + # Doesn't actually modify the logits! + return scores + + +# Stores the perplexity and top probabilities +ppl_logits_processor = None + + +def logits_processor_modifier(logits_processor_list, input_ids): + global ppl_logits_processor + if params['active']: + ppl_logits_processor = PerplexityLogits(verbose=params['verbose']) + logits_processor_list.append(ppl_logits_processor) + + +def output_modifier(text): + global ppl_logits_processor + # t0 = time.time() + + if not params['active']: + return text + + # TODO: It's probably more efficient to do this above rather than modifying all these lists + # Remove last element of perplexities_list, top_token_ids_list, top_tokens_list, top_probs_list since everything is off by one because this extension runs before generation + perplexities = ppl_logits_processor.perplexities_list[:-1] + top_token_ids_list = ppl_logits_processor.top_token_ids_list[:-1] + top_tokens_list = [[shared.tokenizer.decode(token_id) for token_id in top_token_ids[0]] for top_token_ids in top_token_ids_list] + top_probs_list = ppl_logits_processor.top_probs_list[:-1] + # Remove first element of generated_token_ids, generated_tokens, selected_probs because they are for the last token of the prompt + gen_token_ids = ppl_logits_processor.generated_token_ids[1:] + gen_tokens = [shared.tokenizer.decode(token_id) for token_id in gen_token_ids] + sel_probs = ppl_logits_processor.selected_probs[1:] + + end_part = '' if params['probability_dropdown'] else '' # Helps with finding the index after replacing part of the text. + + i = 0 + for token, prob, ppl, top_tokens, top_probs in zip(gen_tokens, sel_probs, perplexities, top_tokens_list, top_probs_list): + color = 'ffffff' + if params['color_by_probability'] and params['color_by_perplexity']: + color = probability_perplexity_color_scale(prob, ppl) + elif params['color_by_perplexity']: + color = perplexity_color_scale(ppl) + elif params['color_by_probability']: + color = probability_color_scale(prob) + if token in text[i:]: + if params['probability_dropdown']: + text = text[:i] + text[i:].replace(token, add_dropdown_html(token, color, top_tokens, top_probs[0], ppl), 1) + else: + text = text[:i] + text[i:].replace(token, add_color_html(token, color), 1) + i += text[i:].find(end_part) + len(end_part) + + # Use full perplexity list for calculating the average here. + print('Average perplexity:', round(np.mean(ppl_logits_processor.perplexities_list[:-1]), 4)) + # t1 = time.time() + # print(f"Modifier: {(t1-t0):.3f} s") + # About 50 ms + return text + + +def probability_color_scale(prob): + ''' + Green-yellow-red color scale + ''' + + rv = 0 + gv = 0 + if prob <= 0.5: + rv = 'ff' + gv = hex(int(255 * prob * 2))[2:] + if len(gv) < 2: + gv = '0' * (2 - len(gv)) + gv + else: + rv = hex(int(255 - 255 * (prob - 0.5) * 2))[2:] + gv = 'ff' + if len(rv) < 2: + rv = '0' * (2 - len(rv)) + rv + + return rv + gv + '00' + + +def perplexity_color_scale(ppl): + ''' + Red component only, white for 0 perplexity (sorry if you're not in dark mode) + ''' + value = hex(max(int(255.0 - params['ppl_scale'] * (float(ppl) - 1.0)), 0))[2:] + if len(value) < 2: + value = '0' * (2 - len(value)) + value + + return 'ff' + value + value + + +def probability_perplexity_color_scale(prob, ppl): + ''' + Green-yellow-red for probability and blue component for perplexity + ''' + + rv = 0 + gv = 0 + bv = hex(min(max(int(params['ppl_scale'] * (float(ppl) - 1.0)), 0), 255))[2:] + if len(bv) < 2: + bv = '0' * (2 - len(bv)) + bv + + if prob <= 0.5: + rv = 'ff' + gv = hex(int(255 * prob * 2))[2:] + if len(gv) < 2: + gv = '0' * (2 - len(gv)) + gv + else: + rv = hex(int(255 - 255 * (prob - 0.5) * 2))[2:] + gv = 'ff' + if len(rv) < 2: + rv = '0' * (2 - len(rv)) + rv + + return rv + gv + bv + + +def add_color_html(token, color): + return f'{token}' + + +# TODO: Major issue: Applying this to too many tokens will cause a permanent slowdown in generation speed until the messages are removed from the history. +# I think the issue is from HTML elements taking up space in the visible history, and things like history deepcopy add latency proportional to the size of the history. +# Potential solution is maybe to modify the main generation code to send just the internal text and not the visible history, to avoid moving too much around. +# I wonder if we can also avoid using deepcopy here. +def add_dropdown_html(token, color, top_tokens, top_probs, perplexity=0): + html = f'
{token}
' + return html # About 750 characters per token... + + +def custom_css(): + return """ + .dropdown { + display: none; + position: absolute; + z-index: 50; + background-color: var(--block-background-fill); + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + width: max-content; + overflow: visible; + padding: 5px; + border-radius: 10px; + border: 1px solid var(--border-color-primary); + } + + .dropdown-content { + border: none; + z-index: 50; + } + + .dropdown-content tr.selected { + background-color: var(--block-label-background-fill); + } + + .dropdown-content td { + color: var(--body-text-color); + } + + .hoverable { + color: var(--body-text-color); + position: relative; + display: inline-block; + overflow: visible; + font-size: 15px; + line-height: 1.75; + margin: 0; + padding: 0; + } + + .hoverable:hover .dropdown { + display: block; + } + + pre { + white-space: pre-wrap; + } + + # TODO: This makes the hover menus extend outside the bounds of the chat area, which is good. + # However, it also makes the scrollbar disappear, which is bad. + # The scroll bar needs to still be present. So for now, we can't see dropdowns that extend past the edge of the chat area. + #.chat { + # overflow-y: auto; + #} + """ + + +# Monkeypatch applied to html_generator.py +# We simply don't render markdown into HTML. We wrap everything in
 tags to preserve whitespace
+# formatting. If you're coloring tokens by perplexity or probability, or especially if you're using
+# the probability dropdown, you probably care more about seeing the tokens the model actually outputted
+# rather than rendering ```code blocks``` or *italics*.
+def convert_to_markdown(string):
+    return '
' + string + '
' + + +html_generator.convert_to_markdown = convert_to_markdown + + +def ui(): + def update_active_check(x): + params.update({'active': x}) + + def update_color_by_ppl_check(x): + params.update({'color_by_perplexity': x}) + + def update_color_by_prob_check(x): + params.update({'color_by_probability': x}) + + def update_prob_dropdown_check(x): + params.update({'probability_dropdown': x}) + + active_check = gradio.Checkbox(value=True, label="Compute probabilities and perplexity scores", info="Activate this extension. Note that this extension currently does not work with exllama or llama.cpp.") + color_by_ppl_check = gradio.Checkbox(value=False, label="Color by perplexity", info="Higher perplexity is more red. If also showing probability, higher perplexity has more blue component.") + color_by_prob_check = gradio.Checkbox(value=False, label="Color by probability", info="Green-yellow-red linear scale, with 100% green, 50% yellow, 0% red.") + prob_dropdown_check = gradio.Checkbox(value=False, label="Probability dropdown", info="Hover over a token to show a dropdown of top token probabilities. Currently slightly buggy with whitespace between tokens.") + + active_check.change(update_active_check, active_check, None) + color_by_ppl_check.change(update_color_by_ppl_check, color_by_ppl_check, None) + color_by_prob_check.change(update_color_by_prob_check, color_by_prob_check, None) + prob_dropdown_check.change(update_prob_dropdown_check, prob_dropdown_check, None) diff --git a/extensions/sd_api_pictures/README.MD b/extensions/sd_api_pictures/README.MD new file mode 100644 index 0000000000000000000000000000000000000000..67c75e145ccc8301505d96d858da04713ad4337d --- /dev/null +++ b/extensions/sd_api_pictures/README.MD @@ -0,0 +1,90 @@ +## Description: +TL;DR: Lets the bot answer you with a picture! + +Stable Diffusion API pictures for TextGen, v.1.2.0 +An extension to [oobabooga's textgen-webui](https://github.com/oobabooga/text-generation-webui) allowing you to receive pics generated by [Automatic1111's SD-WebUI API](https://github.com/AUTOMATIC1111/stable-diffusion-webui) + +
+Interface overview + +![Interface](https://raw.githubusercontent.com/Brawlence/SD_api_pics/main/illust/Interface.jpg) + +
+ +Load it in the `--chat` mode with `--extension sd_api_pictures` alongside `send_pictures` +(it's not really required, but completes the picture, *pun intended*). + + +## History + +Consider the version included with [oobabooga's repository](https://github.com/oobabooga/text-generation-webui/tree/main/extensions/sd_api_pictures) to be STABLE, experimental developments and untested features are pushed in [Brawlence/SD_api_pics](https://github.com/Brawlence/SD_api_pics) + +Lastest change: +1.1.0 → 1.1.1 Fixed not having Auto1111's metadata in received images + +## Details + +The image generation is triggered: +- manually through the 'Force the picture response' button while in `Manual` or `Immersive/Interactive` modes OR +- automatically in `Immersive/Interactive` mode if the words `'send|main|message|me'` are followed by `'image|pic|picture|photo|snap|snapshot|selfie|meme'` in the user's prompt +- always on in `Picturebook/Adventure` mode (if not currently suppressed by 'Suppress the picture response') + +## Prerequisites + +One needs an available instance of Automatic1111's webui running with an `--api` flag. Ain't tested with a notebook / cloud hosted one but should be possible. +To run it locally in parallel on the same machine, specify custom `--listen-port` for either Auto1111's or ooba's webUIs. + +## Features overview +- Connection to API check (press enter in the address box) +- [VRAM management (model shuffling)](https://github.com/Brawlence/SD_api_pics/wiki/VRAM-management-feature) +- [Three different operation modes](https://github.com/Brawlence/SD_api_pics/wiki/Modes-of-operation) (manual, interactive, always-on) +- User-defined persistent settings via settings.json + +### Connection check + +Insert the Automatic1111's WebUI address and press Enter: +![API-check](https://raw.githubusercontent.com/Brawlence/SD_api_pics/main/illust/API-check.gif) +Green mark confirms the ability to communicate with Auto1111's API on this address. Red cross means something's not right (the ext won't work). + +### Persistents settings + +Create or modify the `settings.json` in the `text-generation-webui` root directory to override the defaults +present in script.py, ex: + +```json +{ + "sd_api_pictures-manage_VRAM": 1, + "sd_api_pictures-save_img": 1, + "sd_api_pictures-prompt_prefix": "(Masterpiece:1.1), detailed, intricate, colorful, (solo:1.1)", + "sd_api_pictures-sampler_name": "DPM++ 2M Karras" +} +``` + +will automatically set the `Manage VRAM` & `Keep original images` checkboxes and change the texts in `Prompt Prefix` and `Sampler name` on load. + +--- + +## Demonstrations: + +Those are examples of the version 1.0.0, but the core functionality is still the same + +
+Conversation 1 + +![EXA1](https://user-images.githubusercontent.com/42910943/224866564-939a3bcb-e7cf-4ac0-a33f-b3047b55054d.jpg) +![EXA2](https://user-images.githubusercontent.com/42910943/224866566-38394054-1320-45cf-9515-afa76d9d7745.jpg) +![EXA3](https://user-images.githubusercontent.com/42910943/224866568-10ea47b7-0bac-4269-9ec9-22c387a13b59.jpg) +![EXA4](https://user-images.githubusercontent.com/42910943/224866569-326121ad-1ea1-4874-9f6b-4bca7930a263.jpg) + + +
+ +
+Conversation 2 + +![Hist1](https://user-images.githubusercontent.com/42910943/224865517-c6966b58-bc4d-4353-aab9-6eb97778d7bf.jpg) +![Hist2](https://user-images.githubusercontent.com/42910943/224865527-b2fe7c2e-0da5-4c2e-b705-42e233b07084.jpg) +![Hist3](https://user-images.githubusercontent.com/42910943/224865535-a38d94e7-8975-4a46-a655-1ae1de41f85d.jpg) + +
+ diff --git a/extensions/sd_api_pictures/script.py b/extensions/sd_api_pictures/script.py new file mode 100644 index 0000000000000000000000000000000000000000..a16575cdf10a8714e23e7d54cd0940150ce9a20c --- /dev/null +++ b/extensions/sd_api_pictures/script.py @@ -0,0 +1,386 @@ +import base64 +import io +import re +import time +from datetime import date +from pathlib import Path + +import gradio as gr +import requests +import torch +from PIL import Image + +from modules import shared +from modules.models import reload_model, unload_model +from modules.ui import create_refresh_button + +torch._C._jit_set_profiling_mode(False) + +# parameters which can be customized in settings.json of webui +params = { + 'address': 'http://127.0.0.1:7860', + 'mode': 0, # modes of operation: 0 (Manual only), 1 (Immersive/Interactive - looks for words to trigger), 2 (Picturebook Adventure - Always on) + 'manage_VRAM': False, + 'save_img': False, + 'SD_model': 'NeverEndingDream', # not used right now + 'prompt_prefix': '(Masterpiece:1.1), detailed, intricate, colorful', + 'negative_prompt': '(worst quality, low quality:1.3)', + 'width': 512, + 'height': 512, + 'denoising_strength': 0.61, + 'restore_faces': False, + 'enable_hr': False, + 'hr_upscaler': 'ESRGAN_4x', + 'hr_scale': '1.0', + 'seed': -1, + 'sampler_name': 'DPM++ 2M Karras', + 'steps': 32, + 'cfg_scale': 7, + 'textgen_prefix': 'Please provide a detailed and vivid description of [subject]', + 'sd_checkpoint': ' ', + 'checkpoint_list': [" "] +} + + +def give_VRAM_priority(actor): + global shared, params + + if actor == 'SD': + unload_model() + print("Requesting Auto1111 to re-load last checkpoint used...") + response = requests.post(url=f'{params["address"]}/sdapi/v1/reload-checkpoint', json='') + response.raise_for_status() + + elif actor == 'LLM': + print("Requesting Auto1111 to vacate VRAM...") + response = requests.post(url=f'{params["address"]}/sdapi/v1/unload-checkpoint', json='') + response.raise_for_status() + reload_model() + + elif actor == 'set': + print("VRAM mangement activated -- requesting Auto1111 to vacate VRAM...") + response = requests.post(url=f'{params["address"]}/sdapi/v1/unload-checkpoint', json='') + response.raise_for_status() + + elif actor == 'reset': + print("VRAM mangement deactivated -- requesting Auto1111 to reload checkpoint") + response = requests.post(url=f'{params["address"]}/sdapi/v1/reload-checkpoint', json='') + response.raise_for_status() + + else: + raise RuntimeError(f'Managing VRAM: "{actor}" is not a known state!') + + response.raise_for_status() + del response + + +if params['manage_VRAM']: + give_VRAM_priority('set') + +SD_models = ['NeverEndingDream'] # TODO: get with http://{address}}/sdapi/v1/sd-models and allow user to select + +picture_response = False # specifies if the next model response should appear as a picture + + +def remove_surrounded_chars(string): + # this expression matches to 'as few symbols as possible (0 upwards) between any asterisks' OR + # 'as few symbols as possible (0 upwards) between an asterisk and the end of the string' + return re.sub('\*[^\*]*?(\*|$)', '', string) + + +def triggers_are_in(string): + string = remove_surrounded_chars(string) + # regex searches for send|main|message|me (at the end of the word) followed by + # a whole word of image|pic|picture|photo|snap|snapshot|selfie|meme(s), + # (?aims) are regex parser flags + return bool(re.search('(?aims)(send|mail|message|me)\\b.+?\\b(image|pic(ture)?|photo|snap(shot)?|selfie|meme)s?\\b', string)) + + +def state_modifier(state): + if picture_response: + state['stream'] = False + + return state + + +def input_modifier(string): + """ + This function is applied to your text inputs before + they are fed into the model. + """ + + global params + + if not params['mode'] == 1: # if not in immersive/interactive mode, do nothing + return string + + if triggers_are_in(string): # if we're in it, check for trigger words + toggle_generation(True) + string = string.lower() + if "of" in string: + subject = string.split('of', 1)[1] # subdivide the string once by the first 'of' instance and get what's coming after it + string = params['textgen_prefix'].replace("[subject]", subject) + else: + string = params['textgen_prefix'].replace("[subject]", "your appearance, your surroundings and what you are doing right now") + + return string + +# Get and save the Stable Diffusion-generated picture +def get_SD_pictures(description, character): + + global params + + if params['manage_VRAM']: + give_VRAM_priority('SD') + + description = re.sub('', ' ', description) + description = f"({description}:1)" + + payload = { + "prompt": params['prompt_prefix'] + description, + "seed": params['seed'], + "sampler_name": params['sampler_name'], + "enable_hr": params['enable_hr'], + "hr_scale": params['hr_scale'], + "hr_upscaler": params['hr_upscaler'], + "denoising_strength": params['denoising_strength'], + "steps": params['steps'], + "cfg_scale": params['cfg_scale'], + "width": params['width'], + "height": params['height'], + "restore_faces": params['restore_faces'], + "override_settings_restore_afterwards": True, + "negative_prompt": params['negative_prompt'] + } + + print(f'Prompting the image generator via the API on {params["address"]}...') + response = requests.post(url=f'{params["address"]}/sdapi/v1/txt2img', json=payload) + response.raise_for_status() + r = response.json() + + visible_result = "" + for img_str in r['images']: + if params['save_img']: + img_data = base64.b64decode(img_str) + + variadic = f'{date.today().strftime("%Y_%m_%d")}/{character}_{int(time.time())}' + output_file = Path(f'extensions/sd_api_pictures/outputs/{variadic}.png') + output_file.parent.mkdir(parents=True, exist_ok=True) + + with open(output_file.as_posix(), 'wb') as f: + f.write(img_data) + + visible_result = visible_result + f'{description}\n' + else: + image = Image.open(io.BytesIO(base64.b64decode(img_str.split(",", 1)[0]))) + # lower the resolution of received images for the chat, otherwise the log size gets out of control quickly with all the base64 values in visible history + image.thumbnail((300, 300)) + buffered = io.BytesIO() + image.save(buffered, format="JPEG") + buffered.seek(0) + image_bytes = buffered.getvalue() + img_str = "data:image/jpeg;base64," + base64.b64encode(image_bytes).decode() + visible_result = visible_result + f'{description}\n' + + if params['manage_VRAM']: + give_VRAM_priority('LLM') + + return visible_result + +# TODO: how do I make the UI history ignore the resulting pictures (I don't want HTML to appear in history) +# and replace it with 'text' for the purposes of logging? +def output_modifier(string, state): + """ + This function is applied to the model outputs. + """ + + global picture_response, params + + if not picture_response: + return string + + string = remove_surrounded_chars(string) + string = string.replace('"', '') + string = string.replace('“', '') + string = string.replace('\n', ' ') + string = string.strip() + + if string == '': + string = 'no viable description in reply, try regenerating' + return string + + text = "" + if (params['mode'] < 2): + toggle_generation(False) + text = f'*Sends a picture which portrays: “{string}”*' + else: + text = string + + string = get_SD_pictures(string, state['character_menu']) + "\n" + text + + return string + + +def bot_prefix_modifier(string): + """ + This function is only applied in chat mode. It modifies + the prefix text for the Bot and can be used to bias its + behavior. + """ + + return string + + +def toggle_generation(*args): + global picture_response, shared + + if not args: + picture_response = not picture_response + else: + picture_response = args[0] + + shared.processing_message = "*Is sending a picture...*" if picture_response else "*Is typing...*" + + +def filter_address(address): + address = address.strip() + # address = re.sub('http(s)?:\/\/|\/$','',address) # remove starting http:// OR https:// OR trailing slash + address = re.sub('\/$', '', address) # remove trailing /s + if not address.startswith('http'): + address = 'http://' + address + return address + + +def SD_api_address_update(address): + global params + + msg = "✔️ SD API is found on:" + address = filter_address(address) + params.update({"address": address}) + try: + response = requests.get(url=f'{params["address"]}/sdapi/v1/sd-models') + response.raise_for_status() + # r = response.json() + except: + msg = "❌ No SD API endpoint on:" + + return gr.Textbox.update(label=msg) + + +def custom_css(): + path_to_css = Path(__file__).parent.resolve() / 'style.css' + return open(path_to_css, 'r').read() + + +def get_checkpoints(): + global params + + try: + models = requests.get(url=f'{params["address"]}/sdapi/v1/sd-models') + options = requests.get(url=f'{params["address"]}/sdapi/v1/options') + options_json = options.json() + params['sd_checkpoint'] = options_json['sd_model_checkpoint'] + params['checkpoint_list'] = [result["title"] for result in models.json()] + except: + params['sd_checkpoint'] = "" + params['checkpoint_list'] = [] + + return gr.update(choices=params['checkpoint_list'], value=params['sd_checkpoint']) + + +def load_checkpoint(checkpoint): + payload = { + "sd_model_checkpoint": checkpoint + } + + try: + requests.post(url=f'{params["address"]}/sdapi/v1/options', json=payload) + except: + pass + + +def get_samplers(): + try: + response = requests.get(url=f'{params["address"]}/sdapi/v1/samplers') + response.raise_for_status() + samplers = [x["name"] for x in response.json()] + except: + samplers = [] + + return samplers + + +def ui(): + + # Gradio elements + # gr.Markdown('### Stable Diffusion API Pictures') # Currently the name of extension is shown as the title + with gr.Accordion("Parameters", open=True, elem_classes="SDAP"): + with gr.Row(): + address = gr.Textbox(placeholder=params['address'], value=params['address'], label='Auto1111\'s WebUI address') + modes_list = ["Manual", "Immersive/Interactive", "Picturebook/Adventure"] + mode = gr.Dropdown(modes_list, value=modes_list[params['mode']], label="Mode of operation", type="index") + with gr.Column(scale=1, min_width=300): + manage_VRAM = gr.Checkbox(value=params['manage_VRAM'], label='Manage VRAM') + save_img = gr.Checkbox(value=params['save_img'], label='Keep original images and use them in chat') + + force_pic = gr.Button("Force the picture response") + suppr_pic = gr.Button("Suppress the picture response") + with gr.Row(): + checkpoint = gr.Dropdown(params['checkpoint_list'], value=params['sd_checkpoint'], label="Checkpoint", type="value") + update_checkpoints = gr.Button("Get list of checkpoints") + + with gr.Accordion("Generation parameters", open=False): + prompt_prefix = gr.Textbox(placeholder=params['prompt_prefix'], value=params['prompt_prefix'], label='Prompt Prefix (best used to describe the look of the character)') + textgen_prefix = gr.Textbox(placeholder=params['textgen_prefix'], value=params['textgen_prefix'], label='textgen prefix (type [subject] where the subject should be placed)') + negative_prompt = gr.Textbox(placeholder=params['negative_prompt'], value=params['negative_prompt'], label='Negative Prompt') + with gr.Row(): + with gr.Column(): + width = gr.Slider(64, 2048, value=params['width'], step=64, label='Width') + height = gr.Slider(64, 2048, value=params['height'], step=64, label='Height') + with gr.Column(variant="compact", elem_id="sampler_col"): + with gr.Row(elem_id="sampler_row"): + sampler_name = gr.Dropdown(value=params['sampler_name'], allow_custom_value=True, label='Sampling method', elem_id="sampler_box") + create_refresh_button(sampler_name, lambda: None, lambda: {'choices': get_samplers()}, 'refresh-button') + steps = gr.Slider(1, 150, value=params['steps'], step=1, label="Sampling steps", elem_id="steps_box") + with gr.Row(): + seed = gr.Number(label="Seed", value=params['seed'], elem_id="seed_box") + cfg_scale = gr.Number(label="CFG Scale", value=params['cfg_scale'], elem_id="cfg_box") + with gr.Column() as hr_options: + restore_faces = gr.Checkbox(value=params['restore_faces'], label='Restore faces') + enable_hr = gr.Checkbox(value=params['enable_hr'], label='Hires. fix') + with gr.Row(visible=params['enable_hr'], elem_classes="hires_opts") as hr_options: + hr_scale = gr.Slider(1, 4, value=params['hr_scale'], step=0.1, label='Upscale by') + denoising_strength = gr.Slider(0, 1, value=params['denoising_strength'], step=0.01, label='Denoising strength') + hr_upscaler = gr.Textbox(placeholder=params['hr_upscaler'], value=params['hr_upscaler'], label='Upscaler') + + # Event functions to update the parameters in the backend + address.change(lambda x: params.update({"address": filter_address(x)}), address, None) + mode.select(lambda x: params.update({"mode": x}), mode, None) + mode.select(lambda x: toggle_generation(x > 1), inputs=mode, outputs=None) + manage_VRAM.change(lambda x: params.update({"manage_VRAM": x}), manage_VRAM, None) + manage_VRAM.change(lambda x: give_VRAM_priority('set' if x else 'reset'), inputs=manage_VRAM, outputs=None) + save_img.change(lambda x: params.update({"save_img": x}), save_img, None) + + address.submit(fn=SD_api_address_update, inputs=address, outputs=address) + prompt_prefix.change(lambda x: params.update({"prompt_prefix": x}), prompt_prefix, None) + textgen_prefix.change(lambda x: params.update({"textgen_prefix": x}), textgen_prefix, None) + negative_prompt.change(lambda x: params.update({"negative_prompt": x}), negative_prompt, None) + width.change(lambda x: params.update({"width": x}), width, None) + height.change(lambda x: params.update({"height": x}), height, None) + hr_scale.change(lambda x: params.update({"hr_scale": x}), hr_scale, None) + denoising_strength.change(lambda x: params.update({"denoising_strength": x}), denoising_strength, None) + restore_faces.change(lambda x: params.update({"restore_faces": x}), restore_faces, None) + hr_upscaler.change(lambda x: params.update({"hr_upscaler": x}), hr_upscaler, None) + enable_hr.change(lambda x: params.update({"enable_hr": x}), enable_hr, None) + enable_hr.change(lambda x: hr_options.update(visible=params["enable_hr"]), enable_hr, hr_options) + update_checkpoints.click(get_checkpoints, None, checkpoint) + checkpoint.change(lambda x: params.update({"sd_checkpoint": x}), checkpoint, None) + checkpoint.change(load_checkpoint, checkpoint, None) + + sampler_name.change(lambda x: params.update({"sampler_name": x}), sampler_name, None) + steps.change(lambda x: params.update({"steps": x}), steps, None) + seed.change(lambda x: params.update({"seed": x}), seed, None) + cfg_scale.change(lambda x: params.update({"cfg_scale": x}), cfg_scale, None) + + force_pic.click(lambda x: toggle_generation(True), inputs=force_pic, outputs=None) + suppr_pic.click(lambda x: toggle_generation(False), inputs=suppr_pic, outputs=None) diff --git a/extensions/sd_api_pictures/style.css b/extensions/sd_api_pictures/style.css new file mode 100644 index 0000000000000000000000000000000000000000..6f4994616a1d4ca52f3a8245f963ce0b7ebbb0d7 --- /dev/null +++ b/extensions/sd_api_pictures/style.css @@ -0,0 +1,52 @@ +/* Align the elements for SD_api_picture extension */ +.SDAP #sampler_box { + padding-top: var(--spacing-sm); + padding-bottom: var(--spacing-sm); + border: 0; +} + +.SDAP #steps_box { + border-radius: 0 0 var(--block-radius) var(--block-radius); +} + +.SDAP #sampler_col { + gap: 0; + padding: 0; + background-color: transparent; +} + +.SDAP #sampler_row { + border-bottom: 0; + box-shadow: var(--block-shadow); + border-width: var(--block-border-width); + border-color: var(--block-border-color); + border-radius: var(--block-radius) var(--block-radius) 0 0; + background: var(--block-background-fill); + gap: 0; +} + +.SDAP #sampler_row .refresh-button { + margin-bottom: var(--spacing-sm); + margin-right: var(--spacing-lg); +} + +.SDAP #seed_box, +.SDAP #cfg_box { + padding-top: var(--spacing-md); +} + +.SDAP #sampler_box span, +.SDAP #seed_box span, +.SDAP #cfg_box span, +.SDAP #steps_box span { + margin-bottom: var(--spacing-sm); +} + +.SDAP svg.dropdown-arrow { + flex-shrink: 0 !important; + margin: 0px !important; +} + +.SDAP .hires_opts input[type="number"] { + width: 6em !important; +} diff --git a/extensions/send_pictures/script.py b/extensions/send_pictures/script.py new file mode 100644 index 0000000000000000000000000000000000000000..f8e6c969271e1dc3d383cefce74774ad505882cd --- /dev/null +++ b/extensions/send_pictures/script.py @@ -0,0 +1,58 @@ +import base64 +from io import BytesIO + +import gradio as gr +import torch +from transformers import BlipForConditionalGeneration, BlipProcessor + +from modules import chat, shared, ui_chat +from modules.ui import gather_interface_values +from modules.utils import gradio + +input_hijack = { + 'state': False, + 'value': ["", ""] +} + +processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base") +model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base", torch_dtype=torch.float32).to("cpu") + + +def chat_input_modifier(text, visible_text, state): + global input_hijack + if input_hijack['state']: + input_hijack['state'] = False + return input_hijack['value'] + else: + return text, visible_text + + +def caption_image(raw_image): + inputs = processor(raw_image.convert('RGB'), return_tensors="pt").to("cpu", torch.float32) + out = model.generate(**inputs, max_new_tokens=100) + return processor.decode(out[0], skip_special_tokens=True) + + +def generate_chat_picture(picture, name1, name2): + text = f'*{name1} sends {name2} a picture that contains the following: “{caption_image(picture)}”*' + # lower the resolution of sent images for the chat, otherwise the log size gets out of control quickly with all the base64 values in visible history + picture.thumbnail((300, 300)) + buffer = BytesIO() + picture.save(buffer, format="JPEG") + img_str = base64.b64encode(buffer.getvalue()).decode('utf-8') + visible_text = f'{text}' + return text, visible_text + + +def ui(): + picture_select = gr.Image(label='Send a picture', type='pil') + + # Prepare the input hijack, update the interface values, call the generation function, and clear the picture + picture_select.upload( + lambda picture, name1, name2: input_hijack.update({ + "state": True, + "value": generate_chat_picture(picture, name1, name2) + }), [picture_select, shared.gradio['name1'], shared.gradio['name2']], None).then( + gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.generate_chat_reply_wrapper, gradio(ui_chat.inputs), gradio('display', 'history'), show_progress=False).then( + lambda: None, None, picture_select, show_progress=False) diff --git a/extensions/silero_tts/harvard_sentences.txt b/extensions/silero_tts/harvard_sentences.txt new file mode 100644 index 0000000000000000000000000000000000000000..958d7f3cb28d8e2ea215ee416068b2f672d9e9d1 --- /dev/null +++ b/extensions/silero_tts/harvard_sentences.txt @@ -0,0 +1,720 @@ +The birch canoe slid on the smooth planks. +Glue the sheet to the dark blue background. +It's easy to tell the depth of a well. +These days a chicken leg is a rare dish. +Rice is often served in round bowls. +The juice of lemons makes fine punch. +The box was thrown beside the parked truck. +The hogs were fed chopped corn and garbage. +Four hours of steady work faced us. +A large size in stockings is hard to sell. +The boy was there when the sun rose. +A rod is used to catch pink salmon. +The source of the huge river is the clear spring. +Kick the ball straight and follow through. +Help the woman get back to her feet. +A pot of tea helps to pass the evening. +Smoky fires lack flame and heat. +The soft cushion broke the man's fall. +The salt breeze came across from the sea. +The girl at the booth sold fifty bonds. +The small pup gnawed a hole in the sock. +The fish twisted and turned on the bent hook. +Press the pants and sew a button on the vest. +The swan dive was far short of perfect. +The beauty of the view stunned the young boy. +Two blue fish swam in the tank. +Her purse was full of useless trash. +The colt reared and threw the tall rider. +It snowed, rained, and hailed the same morning. +Read verse out loud for pleasure. +Hoist the load to your left shoulder. +Take the winding path to reach the lake. +Note closely the size of the gas tank. +Wipe the grease off his dirty face. +Mend the coat before you go out. +The wrist was badly strained and hung limp. +The stray cat gave birth to kittens. +The young girl gave no clear response. +The meal was cooked before the bell rang. +What joy there is in living. +A king ruled the state in the early days. +The ship was torn apart on the sharp reef. +Sickness kept him home the third week. +The wide road shimmered in the hot sun. +The lazy cow lay in the cool grass. +Lift the square stone over the fence. +The rope will bind the seven books at once. +Hop over the fence and plunge in. +The friendly gang left the drug store. +Mesh wire keeps chicks inside. +The frosty air passed through the coat. +The crooked maze failed to fool the mouse. +Adding fast leads to wrong sums. +The show was a flop from the very start. +A saw is a tool used for making boards. +The wagon moved on well oiled wheels. +March the soldiers past the next hill. +A cup of sugar makes sweet fudge. +Place a rosebush near the porch steps. +Both lost their lives in the raging storm. +We talked of the side show in the circus. +Use a pencil to write the first draft. +He ran half way to the hardware store. +The clock struck to mark the third period. +A small creek cut across the field. +Cars and busses stalled in snow drifts. +The set of china hit the floor with a crash. +This is a grand season for hikes on the road. +The dune rose from the edge of the water. +Those words were the cue for the actor to leave. +A yacht slid around the point into the bay. +The two met while playing on the sand. +The ink stain dried on the finished page. +The walled town was seized without a fight. +The lease ran out in sixteen weeks. +A tame squirrel makes a nice pet. +The horn of the car woke the sleeping cop. +The heart beat strongly and with firm strokes. +The pearl was worn in a thin silver ring. +The fruit peel was cut in thick slices. +The Navy attacked the big task force. +See the cat glaring at the scared mouse. +There are more than two factors here. +The hat brim was wide and too droopy. +The lawyer tried to lose his case. +The grass curled around the fence post. +Cut the pie into large parts. +Men strive but seldom get rich. +Always close the barn door tight. +He lay prone and hardly moved a limb. +The slush lay deep along the street. +A wisp of cloud hung in the blue air. +A pound of sugar costs more than eggs. +The fin was sharp and cut the clear water. +The play seems dull and quite stupid. +Bail the boat to stop it from sinking. +The term ended in late June that year. +A tusk is used to make costly gifts. +Ten pins were set in order. +The bill was paid every third week. +Oak is strong and also gives shade. +Cats and dogs each hate the other. +The pipe began to rust while new. +Open the crate but don't break the glass. +Add the sum to the product of these three. +Thieves who rob friends deserve jail. +The ripe taste of cheese improves with age. +Act on these orders with great speed. +The hog crawled under the high fence. +Move the vat over the hot fire. +The bark of the pine tree was shiny and dark. +Leaves turn brown and yellow in the fall. +The pennant waved when the wind blew. +Split the log with a quick, sharp blow. +Burn peat after the logs give out. +He ordered peach pie with ice cream. +Weave the carpet on the right hand side. +Hemp is a weed found in parts of the tropics. +A lame back kept his score low. +We find joy in the simplest things. +Type out three lists of orders. +The harder he tried the less he got done. +The boss ran the show with a watchful eye. +The cup cracked and spilled its contents. +Paste can cleanse the most dirty brass. +The slang word for raw whiskey is booze. +It caught its hind paw in a rusty trap. +The wharf could be seen at the farther shore. +Feel the heat of the weak dying flame. +The tiny girl took off her hat. +A cramp is no small danger on a swim. +He said the same phrase thirty times. +Pluck the bright rose without leaves. +Two plus seven is less than ten. +The glow deepened in the eyes of the sweet girl. +Bring your problems to the wise chief. +Write a fond note to the friend you cherish. +Clothes and lodging are free to new men. +We frown when events take a bad turn. +Port is a strong wine with a smoky taste. +The young kid jumped the rusty gate. +Guess the results from the first scores. +A salt pickle tastes fine with ham. +The just claim got the right verdict. +These thistles bend in a high wind. +Pure bred poodles have curls. +The tree top waved in a graceful way. +The spot on the blotter was made by green ink. +Mud was spattered on the front of his white shirt. +The cigar burned a hole in the desk top. +The empty flask stood on the tin tray. +A speedy man can beat this track mark. +He broke a new shoelace that day. +The coffee stand is too high for the couch. +The urge to write short stories is rare. +The pencils have all been used. +The pirates seized the crew of the lost ship. +We tried to replace the coin but failed. +She sewed the torn coat quite neatly. +The sofa cushion is red and of light weight. +The jacket hung on the back of the wide chair. +At that high level the air is pure. +Drop the two when you add the figures. +A filing case is now hard to buy. +An abrupt start does not win the prize. +Wood is best for making toys and blocks. +The office paint was a dull, sad tan. +He knew the skill of the great young actress. +A rag will soak up spilled water. +A shower of dirt fell from the hot pipes. +Steam hissed from the broken valve. +The child almost hurt the small dog. +There was a sound of dry leaves outside. +The sky that morning was clear and bright blue. +Torn scraps littered the stone floor. +Sunday is the best part of the week. +The doctor cured him with these pills. +The new girl was fired today at noon. +They felt gay when the ship arrived in port. +Add the store's account to the last cent. +Acid burns holes in wool cloth. +Fairy tales should be fun to write. +Eight miles of woodland burned to waste. +The third act was dull and tired the players. +A young child should not suffer fright. +Add the column and put the sum here. +We admire and love a good cook. +There the flood mark is ten inches. +He carved a head from the round block of marble. +She has a smart way of wearing clothes. +The fruit of a fig tree is apple-shaped. +Corn cobs can be used to kindle a fire. +Where were they when the noise started. +The paper box is full of thumb tacks. +Sell your gift to a buyer at a good gain. +The tongs lay beside the ice pail. +The petals fall with the next puff of wind. +Bring your best compass to the third class. +They could laugh although they were sad. +Farmers came in to thresh the oat crop. +The brown house was on fire to the attic. +The lure is used to catch trout and flounder. +Float the soap on top of the bath water. +A blue crane is a tall wading bird. +A fresh start will work such wonders. +The club rented the rink for the fifth night. +After the dance, they went straight home. +The hostess taught the new maid to serve. +He wrote his last novel there at the inn. +Even the worst will beat his low score. +The cement had dried when he moved it. +The loss of the second ship was hard to take. +The fly made its way along the wall. +Do that with a wooden stick. +Live wires should be kept covered. +The large house had hot water taps. +It is hard to erase blue or red ink. +Write at once or you may forget it. +The doorknob was made of bright clean brass. +The wreck occurred by the bank on Main Street. +A pencil with black lead writes best. +Coax a young calf to drink from a bucket. +Schools for ladies teach charm and grace. +The lamp shone with a steady green flame. +They took the axe and the saw to the forest. +The ancient coin was quite dull and worn. +The shaky barn fell with a loud crash. +Jazz and swing fans like fast music. +Rake the rubbish up and then burn it. +Slash the gold cloth into fine ribbons. +Try to have the court decide the case. +They are pushed back each time they attack. +He broke his ties with groups of former friends. +They floated on the raft to sun their white backs. +The map had an X that meant nothing. +Whitings are small fish caught in nets. +Some ads serve to cheat buyers. +Jerk the rope and the bell rings weakly. +A waxed floor makes us lose balance. +Madam, this is the best brand of corn. +On the islands the sea breeze is soft and mild. +The play began as soon as we sat down. +This will lead the world to more sound and fury. +Add salt before you fry the egg. +The rush for funds reached its peak Tuesday. +The birch looked stark white and lonesome. +The box is held by a bright red snapper. +To make pure ice, you freeze water. +The first worm gets snapped early. +Jump the fence and hurry up the bank. +Yell and clap as the curtain slides back. +They are men who walk the middle of the road. +Both brothers wear the same size. +In some form or other we need fun. +The prince ordered his head chopped off. +The houses are built of red clay bricks. +Ducks fly north but lack a compass. +Fruit flavors are used in fizz drinks. +These pills do less good than others. +Canned pears lack full flavor. +The dark pot hung in the front closet. +Carry the pail to the wall and spill it there. +The train brought our hero to the big town. +We are sure that one war is enough. +Gray paint stretched for miles around. +The rude laugh filled the empty room. +High seats are best for football fans. +Tea served from the brown jug is tasty. +A dash of pepper spoils beef stew. +A zestful food is the hot-cross bun. +The horse trotted around the field at a brisk pace. +Find the twin who stole the pearl necklace. +Cut the cord that binds the box tightly. +The red tape bound the smuggled food. +Look in the corner to find the tan shirt. +The cold drizzle will halt the bond drive. +Nine men were hired to dig the ruins. +The junk yard had a mouldy smell. +The flint sputtered and lit a pine torch. +Soak the cloth and drown the sharp odor. +The shelves were bare of both jam or crackers. +A joy to every child is the swan boat. +All sat frozen and watched the screen. +A cloud of dust stung his tender eyes. +To reach the end he needs much courage. +Shape the clay gently into block form. +A ridge on a smooth surface is a bump or flaw. +Hedge apples may stain your hands green. +Quench your thirst, then eat the crackers. +Tight curls get limp on rainy days. +The mute muffled the high tones of the horn. +The gold ring fits only a pierced ear. +The old pan was covered with hard fudge. +Watch the log float in the wide river. +The node on the stalk of wheat grew daily. +The heap of fallen leaves was set on fire. +Write fast if you want to finish early. +His shirt was clean but one button was gone. +The barrel of beer was a brew of malt and hops. +Tin cans are absent from store shelves. +Slide the box into that empty space. +The plant grew large and green in the window. +The beam dropped down on the workmen's head. +Pink clouds floated with the breeze. +She danced like a swan, tall and graceful. +The tube was blown and the tire flat and useless. +It is late morning on the old wall clock. +Let's all join as we sing the last chorus. +The last switch cannot be turned off. +The fight will end in just six minutes. +The store walls were lined with colored frocks. +The peace league met to discuss their plans. +The rise to fame of a person takes luck. +Paper is scarce, so write with much care. +The quick fox jumped on the sleeping cat. +The nozzle of the fire hose was bright brass. +Screw the round cap on as tight as needed. +Time brings us many changes. +The purple tie was ten years old. +Men think and plan and sometimes act. +Fill the ink jar with sticky glue. +He smoke a big pipe with strong contents. +We need grain to keep our mules healthy. +Pack the records in a neat thin case. +The crunch of feet in the snow was the only sound. +The copper bowl shone in the sun's rays. +Boards will warp unless kept dry. +The plush chair leaned against the wall. +Glass will clink when struck by metal. +Bathe and relax in the cool green grass. +Nine rows of soldiers stood in line. +The beach is dry and shallow at low tide. +The idea is to sew both edges straight. +The kitten chased the dog down the street. +Pages bound in cloth make a book. +Try to trace the fine lines of the painting. +Women form less than half of the group. +The zones merge in the central part of town. +A gem in the rough needs work to polish. +Code is used when secrets are sent. +Most of the news is easy for us to hear. +He used the lathe to make brass objects. +The vane on top of the pole revolved in the wind. +Mince pie is a dish served to children. +The clan gathered on each dull night. +Let it burn, it gives us warmth and comfort. +A castle built from sand fails to endure. +A child's wit saved the day for us. +Tack the strip of carpet to the worn floor. +Next Tuesday we must vote. +Pour the stew from the pot into the plate. +Each penny shone like new. +The man went to the woods to gather sticks. +The dirt piles were lines along the road. +The logs fell and tumbled into the clear stream. +Just hoist it up and take it away. +A ripe plum is fit for a king's palate. +Our plans right now are hazy. +Brass rings are sold by these natives. +It takes a good trap to capture a bear. +Feed the white mouse some flower seeds. +The thaw came early and freed the stream. +He took the lead and kept it the whole distance. +The key you designed will fit the lock. +Plead to the council to free the poor thief. +Better hash is made of rare beef. +This plank was made for walking on. +The lake sparkled in the red hot sun. +He crawled with care along the ledge. +Tend the sheep while the dog wanders. +It takes a lot of help to finish these. +Mark the spot with a sign painted red. +Take two shares as a fair profit. +The fur of cats goes by many names. +North winds bring colds and fevers. +He asks no person to vouch for him. +Go now and come here later. +A sash of gold silk will trim her dress. +Soap can wash most dirt away. +That move means the game is over. +He wrote down a long list of items. +A siege will crack the strong defense. +Grape juice and water mix well. +Roads are paved with sticky tar. +Fake stones shine but cost little. +The drip of the rain made a pleasant sound. +Smoke poured out of every crack. +Serve the hot rum to the tired heroes. +Much of the story makes good sense. +The sun came up to light the eastern sky. +Heave the line over the port side. +A lathe cuts and trims any wood. +It's a dense crowd in two distinct ways. +His hip struck the knee of the next player. +The stale smell of old beer lingers. +The desk was firm on the shaky floor. +It takes heat to bring out the odor. +Beef is scarcer than some lamb. +Raise the sail and steer the ship northward. +A cone costs five cents on Mondays. +A pod is what peas always grow in. +Jerk the dart from the cork target. +No cement will hold hard wood. +We now have a new base for shipping. +A list of names is carved around the base. +The sheep were led home by a dog. +Three for a dime, the young peddler cried. +The sense of smell is better than that of touch. +No hardship seemed to keep him sad. +Grace makes up for lack of beauty. +Nudge gently but wake her now. +The news struck doubt into restless minds. +Once we stood beside the shore. +A chink in the wall allowed a draft to blow. +Fasten two pins on each side. +A cold dip restores health and zest. +He takes the oath of office each March. +The sand drifts over the sill of the old house. +The point of the steel pen was bent and twisted. +There is a lag between thought and act. +Seed is needed to plant the spring corn. +Draw the chart with heavy black lines. +The boy owed his pal thirty cents. +The chap slipped into the crowd and was lost. +Hats are worn to tea and not to dinner. +The ramp led up to the wide highway. +Beat the dust from the rug onto the lawn. +Say it slowly but make it ring clear. +The straw nest housed five robins. +Screen the porch with woven straw mats. +This horse will nose his way to the finish. +The dry wax protects the deep scratch. +He picked up the dice for a second roll. +These coins will be needed to pay his debt. +The nag pulled the frail cart along. +Twist the valve and release hot steam. +The vamp of the shoe had a gold buckle. +The smell of burned rags itches my nose. +New pants lack cuffs and pockets. +The marsh will freeze when cold enough. +They slice the sausage thin with a knife. +The bloom of the rose lasts a few days. +A gray mare walked before the colt. +Breakfast buns are fine with a hot drink. +Bottles hold four kinds of rum. +The man wore a feather in his felt hat. +He wheeled the bike past the winding road. +Drop the ashes on the worn old rug. +The desk and both chairs were painted tan. +Throw out the used paper cup and plate. +A clean neck means a neat collar. +The couch cover and hall drapes were blue. +The stems of the tall glasses cracked and broke. +The wall phone rang loud and often. +The clothes dried on a thin wooden rack. +Turn on the lantern which gives us light. +The cleat sank deeply into the soft turf. +The bills were mailed promptly on the tenth of the month. +To have is better than to wait and hope. +The price is fair for a good antique clock. +The music played on while they talked. +Dispense with a vest on a day like this. +The bunch of grapes was pressed into wine. +He sent the figs, but kept the ripe cherries. +The hinge on the door creaked with old age. +The screen before the fire kept in the sparks. +Fly by night, and you waste little time. +Thick glasses helped him read the print. +Birth and death mark the limits of life. +The chair looked strong but had no bottom. +The kite flew wildly in the high wind. +A fur muff is stylish once more. +The tin box held priceless stones. +We need an end of all such matter. +The case was puzzling to the old and wise. +The bright lanterns were gay on the dark lawn. +We don't get much money but we have fun. +The youth drove with zest, but little skill. +Five years he lived with a shaggy dog. +A fence cuts through the corner lot. +The way to save money is not to spend much. +Shut the hatch before the waves push it in. +The odor of spring makes young hearts jump. +Crack the walnut with your sharp side teeth. +He offered proof in the form of a large chart. +Send the stuff in a thick paper bag. +A quart of milk is water for the most part. +They told wild tales to frighten him. +The three story house was built of stone. +In the rear of the ground floor was a large passage. +A man in a blue sweater sat at the desk. +Oats are a food eaten by horse and man. +Their eyelids droop for want of sleep. +A sip of tea revives his tired friend. +There are many ways to do these things. +Tuck the sheet under the edge of the mat. +A force equal to that would move the earth. +We like to see clear weather. +The work of the tailor is seen on each side. +Take a chance and win a china doll. +Shake the dust from your shoes, stranger. +She was kind to sick old people. +The square wooden crate was packed to be shipped. +The dusty bench stood by the stone wall. +We dress to suit the weather of most days. +Smile when you say nasty words. +A bowl of rice is free with chicken stew. +The water in this well is a source of good health. +Take shelter in this tent, but keep still. +That guy is the writer of a few banned books. +The little tales they tell are false. +The door was barred, locked, and bolted as well. +Ripe pears are fit for a queen's table. +A big wet stain was on the round carpet. +The kite dipped and swayed, but stayed aloft. +The pleasant hours fly by much too soon. +The room was crowded with a wild mob. +This strong arm shall shield your honor. +She blushed when he gave her a white orchid. +The beetle droned in the hot June sun. +Press the pedal with your left foot. +Neat plans fail without luck. +The black trunk fell from the landing. +The bank pressed for payment of the debt. +The theft of the pearl pin was kept secret. +Shake hands with this friendly child. +The vast space stretched into the far distance. +A rich farm is rare in this sandy waste. +His wide grin earned many friends. +Flax makes a fine brand of paper. +Hurdle the pit with the aid of a long pole. +A strong bid may scare your partner stiff. +Even a just cause needs power to win. +Peep under the tent and see the clowns. +The leaf drifts along with a slow spin. +Cheap clothes are flashy but don't last. +A thing of small note can cause despair. +Flood the mails with requests for this book. +A thick coat of black paint covered all. +The pencil was cut to be sharp at both ends. +Those last words were a strong statement. +He wrote his name boldly at the top of the sheet. +Dill pickles are sour but taste fine. +Down that road is the way to the grain farmer. +Either mud or dust are found at all times. +The best method is to fix it in place with clips. +If you mumble your speech will be lost. +At night the alarm roused him from a deep sleep. +Read just what the meter says. +Fill your pack with bright trinkets for the poor. +The small red neon lamp went out. +Clams are small, round, soft, and tasty. +The fan whirled its round blades softly. +The line where the edges join was clean. +Breathe deep and smell the piny air. +It matters not if he reads these words or those. +A brown leather bag hung from its strap. +A toad and a frog are hard to tell apart. +A white silk jacket goes with any shoes. +A break in the dam almost caused a flood. +Paint the sockets in the wall dull green. +The child crawled into the dense grass. +Bribes fail where honest men work. +Trample the spark, else the flames will spread. +The hilt of the sword was carved with fine designs. +A round hole was drilled through the thin board. +Footprints showed the path he took up the beach. +She was waiting at my front lawn. +A vent near the edge brought in fresh air. +Prod the old mule with a crooked stick. +It is a band of steel three inches wide. +The pipe ran almost the length of the ditch. +It was hidden from sight by a mass of leaves and shrubs. +The weight of the package was seen on the high scale. +Wake and rise, and step into the green outdoors. +The green light in the brown box flickered. +The brass tube circled the high wall. +The lobes of her ears were pierced to hold rings. +Hold the hammer near the end to drive the nail. +Next Sunday is the twelfth of the month. +Every word and phrase he speaks is true. +He put his last cartridge into the gun and fired. +They took their kids from the public school. +Drive the screw straight into the wood. +Keep the hatch tight and the watch constant. +Sever the twine with a quick snip of the knife. +Paper will dry out when wet. +Slide the catch back and open the desk. +Help the weak to preserve their strength. +A sullen smile gets few friends. +Stop whistling and watch the boys march. +Jerk the cord, and out tumbles the gold. +Slide the tray across the glass top. +The cloud moved in a stately way and was gone. +Light maple makes for a swell room. +Set the piece here and say nothing. +Dull stories make her laugh. +A stiff cord will do to fasten your shoe. +Get the trust fund to the bank early. +Choose between the high road and the low. +A plea for funds seems to come again. +He lent his coat to the tall gaunt stranger. +There is a strong chance it will happen once more. +The duke left the park in a silver coach. +Greet the new guests and leave quickly. +When the frost has come it is time for turkey. +Sweet words work better than fierce. +A thin stripe runs down the middle. +A six comes up more often than a ten. +Lush fern grow on the lofty rocks. +The ram scared the school children off. +The team with the best timing looks good. +The farmer swapped his horse for a brown ox. +Sit on the perch and tell the others what to do. +A steep trail is painful for our feet. +The early phase of life moves fast. +Green moss grows on the northern side. +Tea in thin china has a sweet taste. +Pitch the straw through the door of the stable. +The latch on the back gate needed a nail. +The goose was brought straight from the old market. +The sink is the thing in which we pile dishes. +A whiff of it will cure the most stubborn cold. +The facts don't always show who is right. +She flaps her cape as she parades the street. +The loss of the cruiser was a blow to the fleet. +Loop the braid to the left and then over. +Plead with the lawyer to drop the lost cause. +Calves thrive on tender spring grass. +Post no bills on this office wall. +Tear a thin sheet from the yellow pad. +A cruise in warm waters in a sleek yacht is fun. +A streak of color ran down the left edge. +It was done before the boy could see it. +Crouch before you jump or miss the mark. +Pack the kits and don't forget the salt. +The square peg will settle in the round hole. +Fine soap saves tender skin. +Poached eggs and tea must suffice. +Bad nerves are jangled by a door slam. +Ship maps are different from those for planes. +Dimes showered down from all sides. +They sang the same tunes at each party. +The sky in the west is tinged with orange red. +The pods of peas ferment in bare fields. +The horse balked and threw the tall rider. +The hitch between the horse and cart broke. +Pile the coal high in the shed corner. +A gold vase is both rare and costly. +The knife was hung inside its bright sheath. +The rarest spice comes from the far East. +The roof should be tilted at a sharp slant. +A smatter of French is worse than none. +The mule trod the treadmill day and night. +The aim of the contest is to raise a great fund. +To send it now in large amounts is bad. +There is a fine hard tang in salty air. +Cod is the main business of the north shore. +The slab was hewn from heavy blocks of slate. +Dunk the stale biscuits into strong drink. +Hang tinsel from both branches. +Cap the jar with a tight brass cover. +The poor boy missed the boat again. +Be sure to set the lamp firmly in the hole. +Pick a card and slip it under the pack. +A round mat will cover the dull spot. +The first part of the plan needs changing. +A good book informs of what we ought to know. +The mail comes in three batches per day. +You cannot brew tea in a cold pot. +Dots of light betrayed the black cat. +Put the chart on the mantel and tack it down. +The night shift men rate extra pay. +The red paper brightened the dim stage. +See the player scoot to third base. +Slide the bill between the two leaves. +Many hands help get the job done. +We don't like to admit our small faults. +No doubt about the way the wind blows. +Dig deep in the earth for pirate's gold. +The steady drip is worse than a drenching rain. +A flat pack takes less luggage space. +Green ice frosted the punch bowl. +A stuffed chair slipped from the moving van. +The stitch will serve but needs to be shortened. +A thin book fits in the side pocket. +The gloss on top made it unfit to read. +The hail pattered on the burnt brown grass. +Seven seals were stamped on great sheets. +Our troops are set to strike heavy blows. +The store was jammed before the sale could start. +It was a bad error on the part of the new judge. +One step more and the board will collapse. +Take the match and strike it against your shoe. +The pot boiled, but the contents failed to jell. +The baby puts his right foot in his mouth. +The bombs left most of the town in ruins. +Stop and stare at the hard working man. +The streets are narrow and full of sharp turns. +The pup jerked the leash as he saw a feline shape. +Open your book to the first page. +Fish evade the net and swim off. +Dip the pail once and let it settle. +Will you please answer that phone. +The big red apple fell to the ground. +The curtain rose and the show was on. +The young prince became heir to the throne. +He sent the boy on a short errand. +Leave now and you will arrive on time. +The corner store was robbed last night. +A gold ring will please most any girl. +The long journey home took a year. +She saw a cat in the neighbor's house. +A pink shell was found on the sandy beach. +Small children came to see him. +The grass and bushes were wet with dew. +The blind man counted his old coins. +A severe storm tore down the barn. +She called his name many times. +When you hear the bell, come quickly. \ No newline at end of file diff --git a/extensions/silero_tts/languages.json b/extensions/silero_tts/languages.json new file mode 100644 index 0000000000000000000000000000000000000000..69c68df523fa68a72960cd141f8adeb43189b923 --- /dev/null +++ b/extensions/silero_tts/languages.json @@ -0,0 +1,176 @@ +{ + "English": { + "lang_id": "en", + "voices": ["en_99", "en_45", "en_18", "en_117", "en_49", "en_51", "en_68", "en_0", "en_26", "en_56", "en_74", "en_5", "en_38", "en_53", "en_21", "en_37", "en_107", "en_10", "en_82", "en_16", "en_41", "en_12", "en_67", "en_61", "en_14", "en_11", "en_39", "en_52", "en_24", "en_97", "en_28", "en_72", "en_94", "en_36", "en_4", "en_43", "en_88", "en_25", "en_65", "en_6", "en_44", "en_75", "en_91", "en_60", "en_109", "en_85", "en_101", "en_108", "en_50", "en_96", "en_64", "en_92", "en_76", "en_33", "en_116", "en_48", "en_98", "en_86", "en_62", "en_54", "en_95", "en_55", "en_111", "en_3", "en_83", "en_8", "en_47", "en_59", "en_1", "en_2", "en_7", "en_9", "en_13", "en_15", "en_17", "en_19", "en_20", "en_22", "en_23", "en_27", "en_29", "en_30", "en_31", "en_32", "en_34", "en_35", "en_40", "en_42", "en_46", "en_57", "en_58", "en_63", "en_66", "en_69", "en_70", "en_71", "en_73", "en_77", "en_78", "en_79", "en_80", "en_81", "en_84", "en_87", "en_89", "en_90", "en_93", "en_100", "en_102", "en_103", "en_104", "en_105", "en_106", "en_110", "en_112", "en_113", "en_114", "en_115"], + "default_voice": "en_56", + "model_id": "v3_en" + }, + "Spanish": { + "lang_id": "es", + "voices": ["es_0", "es_1", "es_2"], + "default_voice": "es_0", + "model_id": "v3_es" + }, + "French": { + "lang_id": "fr", + "voices": ["fr_0", "fr_1", "fr_2", "fr_3", "fr_4", "fr_5"], + "default_voice": "fr_0", + "model_id": "v3_fr" + }, + "German": { + "lang_id": "de", + "voices": ["bernd_ungerer", "eva_k", "friedrich", "hokuspokus", "karlsson"], + "default_voice": "eva_k", + "model_id": "v3_de" + }, + "Russian": { + "lang_id": "ru", + "voices": ["aidar", "baya", "kseniya", "xenia"], + "default_voice": "aidar", + "model_id": "ru_v3" + }, + "Tatar": { + "lang_id": "tt", + "voices": ["dilyara"], + "default_voice": "dilyara", + "model_id": "v3_tt" + }, + "Ukranian": { + "lang_id": "ua", + "voices": ["mykyta"], + "default_voice": "mykyta", + "model_id": "v3_ua" + }, + "Uzbek": { + "lang_id": "uz", + "voices": ["dilnavoz"], + "default_voice": "dilnavoz", + "model_id": "v3_uz" + }, + "English (India)": { + "lang_id": "en", + "voices": ["tamil_female", "bengali_female", "malayalam_male", "manipuri_female", "assamese_female", "gujarati_male", "telugu_male", "kannada_male", "hindi_female", "rajasthani_female", "kannada_female", "bengali_male", "tamil_male", "gujarati_female", "assamese_male"], + "default_voice": "hindi_female", + "model_id": "v3_en_indic" + }, + "Avar": { + "lang_id": "cyrillic", + "voices": ["b_ava"], + "default_voice": "b_ava", + "model_id": "v4_cyrillic" + }, + "Bashkir": { + "lang_id": "cyrillic", + "voices": ["b_bashkir"], + "default_voice": "b_bashkir", + "model_id": "v4_cyrillic" + }, + "Bulgarian": { + "lang_id": "cyrillic", + "voices": ["b_bulb", "b_bulc"], + "default_voice": "b_bulb", + "model_id": "v4_cyrillic" + }, + "Chechen": { + "lang_id": "cyrillic", + "voices": ["cv_ekaterina", "b_cv"], + "default_voice": "b_che", + "model_id": "v4_cyrillic" + }, + "Chuvash": { + "lang_id": "cyrillic", + "voices": ["b_che"], + "default_voice": "b_che", + "model_id": "v4_cyrillic" + }, + "Erzya": { + "lang_id": "cyrillic", + "voices": ["b_myv"], + "default_voice": "b_myv", + "model_id": "v4_cyrillic" + }, + "Kalmyk": { + "lang_id": "cyrillic", + "voices": ["b_kalmyk"], + "default_voice": "b_kalmyk", + "model_id": "v4_cyrillic" + }, + "Karachay-Balkar": { + "lang_id": "cyrillic", + "voices": ["b_krc"], + "default_voice": "b_krc", + "model_id": "v4_cyrillic" + }, + "Kazakh": { + "lang_id": "cyrillic", + "voices": ["kz_F1", "kz_F2", "kz_F3", "kz_M1", "kz_M1"], + "default_voice": "kz_F1", + "model_id": "v4_cyrillic" + }, + "Khakas": { + "lang_id": "cyrillic", + "voices": ["b_kjh"], + "default_voice": "b_kjh", + "model_id": "v4_cyrillic" + }, + "Komi-Ziryan": { + "lang_id": "cyrillic", + "voices": ["b_kpv"], + "default_voice": "b_kpv", + "model_id": "v4_cyrillic" + }, + "Lezghian": { + "lang_id": "cyrillic", + "voices": ["b_lez"], + "default_voice": "b_lez", + "model_id": "v4_cyrillic" + }, + "Mari": { + "lang_id": "cyrillic", + "voices": ["b_mhr"], + "default_voice": "b_mhr", + "model_id": "v4_cyrillic" + }, + "Mari High": { + "lang_id": "cyrillic", + "voices": ["b_mrj"], + "default_voice": "b_mrj", + "model_id": "v4_cyrillic" + }, + "Nogai": { + "lang_id": "cyrillic", + "voices": ["b_nog"], + "default_voice": "b_nog", + "model_id": "v4_cyrillic" + }, + "Ossetic": { + "lang_id": "cyrillic", + "voices": ["b_oss"], + "default_voice": "b_nog", + "model_id": "v4_cyrillic" + }, + "Tuvinian": { + "lang_id": "cyrillic", + "voices": ["b_tyv"], + "default_voice": "b_tyv", + "model_id": "v4_cyrillic" + }, + "Udmurt": { + "lang_id": "cyrillic", + "voices": ["b_udm"], + "default_voice": "b_udm", + "model_id": "v4_cyrillic" + }, + "Yakut": { + "lang_id": "cyrillic", + "voices": ["b_sah"], + "default_voice": "b_sah", + "model_id": "v4_cyrillic" + }, + "Kalmyk": { + "lang_id": "cyrillic", + "voices": ["kalmyk_delghir", "kalmyk_erdni"], + "default_voice": "kalmyk_delghir", + "model_id": "v4_cyrillic" + } +} diff --git a/extensions/silero_tts/outputs/outputs-will-be-saved-here.txt b/extensions/silero_tts/outputs/outputs-will-be-saved-here.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/extensions/silero_tts/requirements.txt b/extensions/silero_tts/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..1017bf0d7accb9930872ededd8a4bc077d393958 --- /dev/null +++ b/extensions/silero_tts/requirements.txt @@ -0,0 +1,5 @@ +ipython +num2words +omegaconf +pydub +PyYAML diff --git a/extensions/silero_tts/script.py b/extensions/silero_tts/script.py new file mode 100644 index 0000000000000000000000000000000000000000..234338dda16c83a797ce1b451d51c38260c0ef23 --- /dev/null +++ b/extensions/silero_tts/script.py @@ -0,0 +1,240 @@ +import html +import json +import random +import time +from pathlib import Path + +import gradio as gr +import torch + +from extensions.silero_tts import tts_preprocessor +from modules import chat, shared, ui_chat +from modules.utils import gradio + +torch._C._jit_set_profiling_mode(False) + + +params = { + 'activate': True, + 'speaker': 'en_56', + 'language': 'English', + 'model_id': 'v3_en', + 'sample_rate': 48000, + 'device': 'cpu', + 'show_text': False, + 'autoplay': True, + 'voice_pitch': 'medium', + 'voice_speed': 'medium', + 'local_cache_path': '' # User can override the default cache path to something other via settings.json +} + +current_params = params.copy() + +with open(Path("extensions/silero_tts/languages.json"), encoding='utf8') as f: + languages = json.load(f) + +voice_pitches = ['x-low', 'low', 'medium', 'high', 'x-high'] +voice_speeds = ['x-slow', 'slow', 'medium', 'fast', 'x-fast'] + +# Used for making text xml compatible, needed for voice pitch and speed control +table = str.maketrans({ + "<": "<", + ">": ">", + "&": "&", + "'": "'", + '"': """, +}) + + +def xmlesc(txt): + return txt.translate(table) + + +def load_model(): + torch_cache_path = torch.hub.get_dir() if params['local_cache_path'] == '' else params['local_cache_path'] + model_path = torch_cache_path + "/snakers4_silero-models_master/src/silero/model/" + params['model_id'] + ".pt" + if Path(model_path).is_file(): + print(f'\nUsing Silero TTS cached checkpoint found at {torch_cache_path}') + model, example_text = torch.hub.load(repo_or_dir=torch_cache_path + '/snakers4_silero-models_master/', model='silero_tts', language=languages[params['language']]["lang_id"], speaker=params['model_id'], source='local', path=model_path, force_reload=True) + else: + print(f'\nSilero TTS cache not found at {torch_cache_path}. Attempting to download...') + model, example_text = torch.hub.load(repo_or_dir='snakers4/silero-models', model='silero_tts', language=languages[params['language']]["lang_id"], speaker=params['model_id']) + model.to(params['device']) + return model + + +def remove_tts_from_history(history): + for i, entry in enumerate(history['internal']): + history['visible'][i] = [history['visible'][i][0], entry[1]] + + return history + + +def toggle_text_in_history(history): + for i, entry in enumerate(history['visible']): + visible_reply = entry[1] + if visible_reply.startswith('')[0]}\n\n{reply}"] + else: + history['visible'][i] = [history['visible'][i][0], f"{visible_reply.split('')[0]}"] + + return history + + +def state_modifier(state): + if not params['activate']: + return state + + state['stream'] = False + return state + + +def input_modifier(string, state): + if not params['activate']: + return string + + shared.processing_message = "*Is recording a voice message...*" + return string + + +def history_modifier(history): + # Remove autoplay from the last reply + if len(history['internal']) > 0: + history['visible'][-1] = [ + history['visible'][-1][0], + history['visible'][-1][1].replace('controls autoplay>', 'controls>') + ] + + return history + + +def output_modifier(string, state): + global model, current_params, streaming_state + + for i in params: + if params[i] != current_params[i]: + model = load_model() + current_params = params.copy() + break + + if not params['activate']: + return string + + original_string = string + + string = tts_preprocessor.preprocess(html.unescape(string)) + + if string == '': + string = '*Empty reply, try regenerating*' + else: + output_file = Path(f'extensions/silero_tts/outputs/{state["character_menu"]}_{int(time.time())}.wav') + prosody = ''.format(params['voice_speed'], params['voice_pitch']) + silero_input = f'{prosody}{xmlesc(string)}' + model.save_wav(ssml_text=silero_input, speaker=params['speaker'], sample_rate=int(params['sample_rate']), audio_path=str(output_file)) + + autoplay = 'autoplay' if params['autoplay'] else '' + string = f'' + if params['show_text']: + string += f'\n\n{original_string}' + + shared.processing_message = "*Is typing...*" + return string + + +def setup(): + global model + model = load_model() + + +def random_sentence(): + with open(Path("extensions/silero_tts/harvard_sentences.txt")) as f: + return random.choice(list(f)) + + +def voice_preview(string): + global model, current_params, streaming_state + + for i in params: + if params[i] != current_params[i]: + model = load_model() + current_params = params.copy() + break + + string = tts_preprocessor.preprocess(string or random_sentence()) + + output_file = Path('extensions/silero_tts/outputs/voice_preview.wav') + prosody = f"" + silero_input = f'{prosody}{xmlesc(string)}' + model.save_wav(ssml_text=silero_input, speaker=params['speaker'], sample_rate=int(params['sample_rate']), audio_path=str(output_file)) + + return f'' + + +def language_change(lang): + global params + params.update({"language": lang, "speaker": languages[lang]["default_voice"], "model_id": languages[lang]["model_id"]}) + return gr.update(choices=languages[lang]["voices"], value=languages[lang]["default_voice"]) + + +def custom_css(): + path_to_css = Path(__file__).parent.resolve() / 'style.css' + return open(path_to_css, 'r').read() + + +def ui(): + # Gradio elements + with gr.Accordion("Silero TTS"): + with gr.Row(): + activate = gr.Checkbox(value=params['activate'], label='Activate TTS') + autoplay = gr.Checkbox(value=params['autoplay'], label='Play TTS automatically') + + show_text = gr.Checkbox(value=params['show_text'], label='Show message text under audio player') + + with gr.Row(): + language = gr.Dropdown(value=params['language'], choices=sorted(languages.keys()), label='Language') + voice = gr.Dropdown(value=params['speaker'], choices=languages[params['language']]["voices"], label='TTS voice') + with gr.Row(): + v_pitch = gr.Dropdown(value=params['voice_pitch'], choices=voice_pitches, label='Voice pitch') + v_speed = gr.Dropdown(value=params['voice_speed'], choices=voice_speeds, label='Voice speed') + + with gr.Row(): + preview_text = gr.Text(show_label=False, placeholder="Preview text", elem_id="silero_preview_text") + preview_play = gr.Button("Preview") + preview_audio = gr.HTML(visible=False) + + with gr.Row(): + convert = gr.Button('Permanently replace audios with the message texts') + convert_cancel = gr.Button('Cancel', visible=False) + convert_confirm = gr.Button('Confirm (cannot be undone)', variant="stop", visible=False) + + # Convert history with confirmation + convert_arr = [convert_confirm, convert, convert_cancel] + convert.click(lambda: [gr.update(visible=True), gr.update(visible=False), gr.update(visible=True)], None, convert_arr) + convert_confirm.click( + lambda: [gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)], None, convert_arr).then( + remove_tts_from_history, gradio('history'), gradio('history')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None).then( + chat.redraw_html, gradio(ui_chat.reload_arr), gradio('display')) + + convert_cancel.click(lambda: [gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)], None, convert_arr) + + # Toggle message text in history + show_text.change( + lambda x: params.update({"show_text": x}), show_text, None).then( + toggle_text_in_history, gradio('history'), gradio('history')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None).then( + chat.redraw_html, gradio(ui_chat.reload_arr), gradio('display')) + + # Event functions to update the parameters in the backend + activate.change(lambda x: params.update({"activate": x}), activate, None) + autoplay.change(lambda x: params.update({"autoplay": x}), autoplay, None) + language.change(language_change, language, voice, show_progress=False) + voice.change(lambda x: params.update({"speaker": x}), voice, None) + v_pitch.change(lambda x: params.update({"voice_pitch": x}), v_pitch, None) + v_speed.change(lambda x: params.update({"voice_speed": x}), v_speed, None) + + # Play preview + preview_text.submit(voice_preview, preview_text, preview_audio) + preview_play.click(voice_preview, preview_text, preview_audio) diff --git a/extensions/silero_tts/style.css b/extensions/silero_tts/style.css new file mode 100644 index 0000000000000000000000000000000000000000..2ab7aefbbfca19982414f13a76dfdd4324793903 --- /dev/null +++ b/extensions/silero_tts/style.css @@ -0,0 +1,8 @@ +.SDAP .hires_opts input[type="number"] { + width: 6em !important; +} + +/* silero_tts preview */ +.form:has(> #silero_preview_text) { + min-width: 75% +} diff --git a/extensions/silero_tts/test_tts.py b/extensions/silero_tts/test_tts.py new file mode 100644 index 0000000000000000000000000000000000000000..ebc2c102a9ef29f21141429232f957421989cdd4 --- /dev/null +++ b/extensions/silero_tts/test_tts.py @@ -0,0 +1,81 @@ +import time +from pathlib import Path + +import torch +import tts_preprocessor + +torch._C._jit_set_profiling_mode(False) + + +params = { + 'activate': True, + 'speaker': 'en_49', + 'language': 'en', + 'model_id': 'v3_en', + 'sample_rate': 48000, + 'device': 'cpu', + 'show_text': True, + 'autoplay': True, + 'voice_pitch': 'medium', + 'voice_speed': 'medium', +} + +current_params = params.copy() +voices_by_gender = ['en_99', 'en_45', 'en_18', 'en_117', 'en_49', 'en_51', 'en_68', 'en_0', 'en_26', 'en_56', 'en_74', 'en_5', 'en_38', 'en_53', 'en_21', 'en_37', 'en_107', 'en_10', 'en_82', 'en_16', 'en_41', 'en_12', 'en_67', 'en_61', 'en_14', 'en_11', 'en_39', 'en_52', 'en_24', 'en_97', 'en_28', 'en_72', 'en_94', 'en_36', 'en_4', 'en_43', 'en_88', 'en_25', 'en_65', 'en_6', 'en_44', 'en_75', 'en_91', 'en_60', 'en_109', 'en_85', 'en_101', 'en_108', 'en_50', 'en_96', 'en_64', 'en_92', 'en_76', 'en_33', 'en_116', 'en_48', 'en_98', 'en_86', 'en_62', 'en_54', 'en_95', 'en_55', 'en_111', 'en_3', 'en_83', 'en_8', 'en_47', 'en_59', 'en_1', 'en_2', 'en_7', 'en_9', 'en_13', 'en_15', 'en_17', 'en_19', 'en_20', 'en_22', 'en_23', 'en_27', 'en_29', 'en_30', 'en_31', 'en_32', 'en_34', 'en_35', 'en_40', 'en_42', 'en_46', 'en_57', 'en_58', 'en_63', 'en_66', 'en_69', 'en_70', 'en_71', 'en_73', 'en_77', 'en_78', 'en_79', 'en_80', 'en_81', 'en_84', 'en_87', 'en_89', 'en_90', 'en_93', 'en_100', 'en_102', 'en_103', 'en_104', 'en_105', 'en_106', 'en_110', 'en_112', 'en_113', 'en_114', 'en_115'] +voice_pitches = ['x-low', 'low', 'medium', 'high', 'x-high'] +voice_speeds = ['x-slow', 'slow', 'medium', 'fast', 'x-fast'] + +# Used for making text xml compatible, needed for voice pitch and speed control +table = str.maketrans({ + "<": "<", + ">": ">", + "&": "&", + "'": "'", + '"': """, +}) + + +def xmlesc(txt): + return txt.translate(table) + + +def load_model(): + model, example_text = torch.hub.load(repo_or_dir='snakers4/silero-models', model='silero_tts', language=params['language'], speaker=params['model_id']) + model.to(params['device']) + return model + + +model = load_model() + + +def output_modifier(string): + """ + This function is applied to the model outputs. + """ + + global model, current_params + + original_string = string + string = tts_preprocessor.preprocess(string) + processed_string = string + + if string == '': + string = '*Empty reply, try regenerating*' + else: + output_file = Path(f'extensions/silero_tts/outputs/test_{int(time.time())}.wav') + prosody = ''.format(params['voice_speed'], params['voice_pitch']) + silero_input = f'{prosody}{xmlesc(string)}' + model.save_wav(ssml_text=silero_input, speaker=params['speaker'], sample_rate=int(params['sample_rate']), audio_path=str(output_file)) + + autoplay = 'autoplay' if params['autoplay'] else '' + string = f'' + + if params['show_text']: + string += f'\n\n{original_string}\n\nProcessed:\n{processed_string}' + + print(string) + + +if __name__ == '__main__': + import sys + output_modifier(sys.argv[1]) diff --git a/extensions/silero_tts/tts_preprocessor.py b/extensions/silero_tts/tts_preprocessor.py new file mode 100644 index 0000000000000000000000000000000000000000..daefdcbda6c9b20a87c6f3d84d2a759c2c51289c --- /dev/null +++ b/extensions/silero_tts/tts_preprocessor.py @@ -0,0 +1,200 @@ +import re + +from num2words import num2words + +punctuation = r'[\s,.?!/)\'\]>]' +alphabet_map = { + "A": " Ei ", + "B": " Bee ", + "C": " See ", + "D": " Dee ", + "E": " Eee ", + "F": " Eff ", + "G": " Jee ", + "H": " Eich ", + "I": " Eye ", + "J": " Jay ", + "K": " Kay ", + "L": " El ", + "M": " Emm ", + "N": " Enn ", + "O": " Ohh ", + "P": " Pee ", + "Q": " Queue ", + "R": " Are ", + "S": " Ess ", + "T": " Tee ", + "U": " You ", + "V": " Vee ", + "W": " Double You ", + "X": " Ex ", + "Y": " Why ", + "Z": " Zed " # Zed is weird, as I (da3dsoul) am American, but most of the voice models sound British, so it matches +} + + +def preprocess(string): + # the order for some of these matter + # For example, you need to remove the commas in numbers before expanding them + string = remove_surrounded_chars(string) + string = string.replace('"', '') + string = string.replace('\u201D', '').replace('\u201C', '') # right and left quote + string = string.replace('\u201F', '') # italic looking quote + string = string.replace('\n', ' ') + string = convert_num_locale(string) + string = replace_negative(string) + string = replace_roman(string) + string = hyphen_range_to(string) + string = num_to_words(string) + + # TODO Try to use a ML predictor to expand abbreviations. It's hard, dependent on context, and whether to actually + # try to say the abbreviation or spell it out as I've done below is not agreed upon + + # For now, expand abbreviations to pronunciations + # replace_abbreviations adds a lot of unnecessary whitespace to ensure separation + string = replace_abbreviations(string) + string = replace_lowercase_abbreviations(string) + + # cleanup whitespaces + # remove whitespace before punctuation + string = re.sub(rf'\s+({punctuation})', r'\1', string) + string = string.strip() + # compact whitespace + string = ' '.join(string.split()) + + return string + + +def remove_surrounded_chars(string): + # first this expression will check if there is a string nested exclusively between a alt= + # and a style= string. This would correspond to only a the alt text of an embedded image + # If it matches it will only keep that part as the string, and rend it for further processing + # Afterwards this expression matches to 'as few symbols as possible (0 upwards) between any + # asterisks' OR' as few symbols as possible (0 upwards) between an asterisk and the end of the string' + if re.search(r'(?<=alt=)(.*)(?=style=)', string, re.DOTALL): + m = re.search(r'(?<=alt=)(.*)(?=style=)', string, re.DOTALL) + string = m.group(0) + return re.sub(r'\*[^*]*?(\*|$)', '', string) + + +def convert_num_locale(text): + # This detects locale and converts it to American without comma separators + pattern = re.compile(r'(?:\s|^)\d{1,3}(?:\.\d{3})+(,\d+)(?:\s|$)') + result = text + while True: + match = pattern.search(result) + if match is None: + break + + start = match.start() + end = match.end() + result = result[0:start] + result[start:end].replace('.', '').replace(',', '.') + result[end:len(result)] + + # removes comma separators from existing American numbers + pattern = re.compile(r'(\d),(\d)') + result = pattern.sub(r'\1\2', result) + + return result + + +def replace_negative(string): + # handles situations like -5. -5 would become negative 5, which would then be expanded to negative five + return re.sub(rf'(\s)(-)(\d+)({punctuation})', r'\1negative \3\4', string) + + +def replace_roman(string): + # find a string of roman numerals. + # Only 2 or more, to avoid capturing I and single character abbreviations, like names + pattern = re.compile(rf'\s[IVXLCDM]{{2,}}{punctuation}') + result = string + while True: + match = pattern.search(result) + if match is None: + break + + start = match.start() + end = match.end() + result = result[0:start + 1] + str(roman_to_int(result[start + 1:end - 1])) + result[end - 1:len(result)] + + return result + + +def roman_to_int(s): + rom_val = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000} + int_val = 0 + for i in range(len(s)): + if i > 0 and rom_val[s[i]] > rom_val[s[i - 1]]: + int_val += rom_val[s[i]] - 2 * rom_val[s[i - 1]] + else: + int_val += rom_val[s[i]] + return int_val + + +def hyphen_range_to(text): + pattern = re.compile(r'(\d+)[-–](\d+)') + result = pattern.sub(lambda x: x.group(1) + ' to ' + x.group(2), text) + return result + + +def num_to_words(text): + # 1000 or 10.23 + pattern = re.compile(r'\d+\.\d+|\d+') + result = pattern.sub(lambda x: num2words(float(x.group())), text) + return result + + +def replace_abbreviations(string): + # abbreviations 1 to 4 characters long. It will get things like A and I, but those are pronounced with their letter + pattern = re.compile(rf'(^|[\s(.\'\[<])([A-Z]{{1,4}})({punctuation}|$)') + result = string + while True: + match = pattern.search(result) + if match is None: + break + + start = match.start() + end = match.end() + result = result[0:start] + replace_abbreviation(result[start:end]) + result[end:len(result)] + + return result + + +def replace_lowercase_abbreviations(string): + # abbreviations 1 to 4 characters long, separated by dots i.e. e.g. + pattern = re.compile(rf'(^|[\s(.\'\[<])(([a-z]\.){{1,4}})({punctuation}|$)') + result = string + while True: + match = pattern.search(result) + if match is None: + break + + start = match.start() + end = match.end() + result = result[0:start] + replace_abbreviation(result[start:end].upper()) + result[end:len(result)] + + return result + + +def replace_abbreviation(string): + result = "" + for char in string: + result += match_mapping(char) + + return result + + +def match_mapping(char): + for mapping in alphabet_map.keys(): + if char == mapping: + return alphabet_map[char] + + return char + + +def __main__(args): + print(preprocess(args[1])) + + +if __name__ == "__main__": + import sys + __main__(sys.argv) diff --git a/extensions/superbooga/chromadb.py b/extensions/superbooga/chromadb.py new file mode 100644 index 0000000000000000000000000000000000000000..1fb7a71848a8c99ab29b90c49902b545a1595f03 --- /dev/null +++ b/extensions/superbooga/chromadb.py @@ -0,0 +1,125 @@ +import chromadb +import posthog +import torch +from chromadb.config import Settings +from sentence_transformers import SentenceTransformer + +from modules.logging_colors import logger + +logger.info('Intercepting all calls to posthog :)') +posthog.capture = lambda *args, **kwargs: None + + +class Collecter(): + def __init__(self): + pass + + def add(self, texts: list[str]): + pass + + def get(self, search_strings: list[str], n_results: int) -> list[str]: + pass + + def clear(self): + pass + + +class Embedder(): + def __init__(self): + pass + + def embed(self, text: str) -> list[torch.Tensor]: + pass + + +class ChromaCollector(Collecter): + def __init__(self, embedder: Embedder): + super().__init__() + self.chroma_client = chromadb.Client(Settings(anonymized_telemetry=False)) + self.embedder = embedder + self.collection = self.chroma_client.create_collection(name="context", embedding_function=embedder.embed) + self.ids = [] + + def add(self, texts: list[str]): + if len(texts) == 0: + return + + self.ids = [f"id{i}" for i in range(len(texts))] + self.collection.add(documents=texts, ids=self.ids) + + def get_documents_ids_distances(self, search_strings: list[str], n_results: int): + n_results = min(len(self.ids), n_results) + if n_results == 0: + return [], [], [] + + result = self.collection.query(query_texts=search_strings, n_results=n_results, include=['documents', 'distances']) + documents = result['documents'][0] + ids = list(map(lambda x: int(x[2:]), result['ids'][0])) + distances = result['distances'][0] + return documents, ids, distances + + # Get chunks by similarity + def get(self, search_strings: list[str], n_results: int) -> list[str]: + documents, _, _ = self.get_documents_ids_distances(search_strings, n_results) + return documents + + # Get ids by similarity + def get_ids(self, search_strings: list[str], n_results: int) -> list[str]: + _, ids, _ = self.get_documents_ids_distances(search_strings, n_results) + return ids + + # Get chunks by similarity and then sort by insertion order + def get_sorted(self, search_strings: list[str], n_results: int) -> list[str]: + documents, ids, _ = self.get_documents_ids_distances(search_strings, n_results) + return [x for _, x in sorted(zip(ids, documents))] + + # Multiply distance by factor within [0, time_weight] where more recent is lower + def apply_time_weight_to_distances(self, ids: list[int], distances: list[float], time_weight: float = 1.0) -> list[float]: + if len(self.ids) <= 1: + return distances.copy() + + return [distance * (1 - _id / (len(self.ids) - 1) * time_weight) for _id, distance in zip(ids, distances)] + + # Get ids by similarity and then sort by insertion order + def get_ids_sorted(self, search_strings: list[str], n_results: int, n_initial: int = None, time_weight: float = 1.0) -> list[str]: + do_time_weight = time_weight > 0 + if not (do_time_weight and n_initial is not None): + n_initial = n_results + elif n_initial == -1: + n_initial = len(self.ids) + + if n_initial < n_results: + raise ValueError(f"n_initial {n_initial} should be >= n_results {n_results}") + + _, ids, distances = self.get_documents_ids_distances(search_strings, n_initial) + if do_time_weight: + distances_w = self.apply_time_weight_to_distances(ids, distances, time_weight=time_weight) + results = zip(ids, distances, distances_w) + results = sorted(results, key=lambda x: x[2])[:n_results] + results = sorted(results, key=lambda x: x[0]) + ids = [x[0] for x in results] + + return sorted(ids) + + def clear(self): + self.collection.delete(ids=self.ids) + self.ids = [] + + +class SentenceTransformerEmbedder(Embedder): + def __init__(self) -> None: + self.model = SentenceTransformer("sentence-transformers/all-mpnet-base-v2") + self.embed = self.model.encode + + +def make_collector(): + global embedder + return ChromaCollector(embedder) + + +def add_chunks_to_collector(chunks, collector): + collector.clear() + collector.add(chunks) + + +embedder = SentenceTransformerEmbedder() diff --git a/extensions/superbooga/download_urls.py b/extensions/superbooga/download_urls.py new file mode 100644 index 0000000000000000000000000000000000000000..424a98857600dc54caf9cdea92b513d9116d6808 --- /dev/null +++ b/extensions/superbooga/download_urls.py @@ -0,0 +1,35 @@ +import concurrent.futures + +import requests + + +def download_single(url): + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' + } + response = requests.get(url, headers=headers, timeout=5) + if response.status_code == 200: + return response.content + else: + raise Exception("Failed to download URL") + + +def download_urls(urls, threads=1): + with concurrent.futures.ThreadPoolExecutor(max_workers=threads) as executor: + futures = [] + for url in urls: + future = executor.submit(download_single, url) + futures.append(future) + + results = [] + i = 0 + for future in concurrent.futures.as_completed(futures): + try: + result = future.result() + results.append(result) + i += 1 + yield f"{i}/{len(urls)}", results + except Exception: + pass + + yield "Done", results diff --git a/extensions/superbooga/requirements.txt b/extensions/superbooga/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..73a60078cfc523cde88d52d97bd44d099d751f7e --- /dev/null +++ b/extensions/superbooga/requirements.txt @@ -0,0 +1,6 @@ +beautifulsoup4==4.12.2 +chromadb==0.3.18 +pandas==2.0.3 +posthog==2.4.2 +sentence_transformers==2.2.2 +lxml diff --git a/extensions/superbooga/script.py b/extensions/superbooga/script.py new file mode 100644 index 0000000000000000000000000000000000000000..06fe8ad3d33c50fe7f5ad2d0123a0dde4695a291 --- /dev/null +++ b/extensions/superbooga/script.py @@ -0,0 +1,260 @@ +import re +import textwrap + +import gradio as gr +from bs4 import BeautifulSoup + +from modules import chat +from modules.logging_colors import logger + +from .chromadb import add_chunks_to_collector, make_collector +from .download_urls import download_urls + +params = { + 'chunk_count': 5, + 'chunk_count_initial': 10, + 'time_weight': 0, + 'chunk_length': 700, + 'chunk_separator': '', + 'strong_cleanup': False, + 'threads': 4, +} + +collector = make_collector() +chat_collector = make_collector() + + +def feed_data_into_collector(corpus, chunk_len, chunk_sep): + global collector + + # Defining variables + chunk_len = int(chunk_len) + chunk_sep = chunk_sep.replace(r'\n', '\n') + cumulative = '' + + # Breaking the data into chunks and adding those to the db + cumulative += "Breaking the input dataset...\n\n" + yield cumulative + if chunk_sep: + data_chunks = corpus.split(chunk_sep) + data_chunks = [[data_chunk[i:i + chunk_len] for i in range(0, len(data_chunk), chunk_len)] for data_chunk in data_chunks] + data_chunks = [x for y in data_chunks for x in y] + else: + data_chunks = [corpus[i:i + chunk_len] for i in range(0, len(corpus), chunk_len)] + + cumulative += f"{len(data_chunks)} chunks have been found.\n\nAdding the chunks to the database...\n\n" + yield cumulative + add_chunks_to_collector(data_chunks, collector) + cumulative += "Done." + yield cumulative + + +def feed_file_into_collector(file, chunk_len, chunk_sep): + yield 'Reading the input dataset...\n\n' + text = file.decode('utf-8') + for i in feed_data_into_collector(text, chunk_len, chunk_sep): + yield i + + +def feed_url_into_collector(urls, chunk_len, chunk_sep, strong_cleanup, threads): + all_text = '' + cumulative = '' + + urls = urls.strip().split('\n') + cumulative += f'Loading {len(urls)} URLs with {threads} threads...\n\n' + yield cumulative + for update, contents in download_urls(urls, threads=threads): + yield cumulative + update + + cumulative += 'Processing the HTML sources...' + yield cumulative + for content in contents: + soup = BeautifulSoup(content, features="lxml") + for script in soup(["script", "style"]): + script.extract() + + strings = soup.stripped_strings + if strong_cleanup: + strings = [s for s in strings if re.search("[A-Za-z] ", s)] + + text = '\n'.join([s.strip() for s in strings]) + all_text += text + + for i in feed_data_into_collector(all_text, chunk_len, chunk_sep): + yield i + + +def apply_settings(chunk_count, chunk_count_initial, time_weight): + global params + params['chunk_count'] = int(chunk_count) + params['chunk_count_initial'] = int(chunk_count_initial) + params['time_weight'] = time_weight + settings_to_display = {k: params[k] for k in params if k in ['chunk_count', 'chunk_count_initial', 'time_weight']} + yield f"The following settings are now active: {str(settings_to_display)}" + + +def custom_generate_chat_prompt(user_input, state, **kwargs): + global chat_collector + + # get history as being modified when using regenerate. + history = kwargs['history'] + + if state['mode'] == 'instruct': + results = collector.get_sorted(user_input, n_results=params['chunk_count']) + additional_context = '\nYour reply should be based on the context below:\n\n' + '\n'.join(results) + user_input += additional_context + else: + + def make_single_exchange(id_): + output = '' + output += f"{state['name1']}: {history['internal'][id_][0]}\n" + output += f"{state['name2']}: {history['internal'][id_][1]}\n" + return output + + if len(history['internal']) > params['chunk_count'] and user_input != '': + chunks = [] + hist_size = len(history['internal']) + for i in range(hist_size - 1): + chunks.append(make_single_exchange(i)) + + add_chunks_to_collector(chunks, chat_collector) + query = '\n'.join(history['internal'][-1] + [user_input]) + try: + best_ids = chat_collector.get_ids_sorted(query, n_results=params['chunk_count'], n_initial=params['chunk_count_initial'], time_weight=params['time_weight']) + additional_context = '\n' + for id_ in best_ids: + if history['internal'][id_][0] != '<|BEGIN-VISIBLE-CHAT|>': + additional_context += make_single_exchange(id_) + + logger.warning(f'Adding the following new context:\n{additional_context}') + state['context'] = state['context'].strip() + '\n' + additional_context + kwargs['history'] = { + 'internal': [history['internal'][i] for i in range(hist_size) if i not in best_ids], + 'visible': '' + } + except RuntimeError: + logger.error("Couldn't query the database, moving on...") + + return chat.generate_chat_prompt(user_input, state, **kwargs) + + +def remove_special_tokens(string): + pattern = r'(<\|begin-user-input\|>|<\|end-user-input\|>|<\|injection-point\|>)' + return re.sub(pattern, '', string) + + +def input_modifier(string, state, is_chat=False): + if is_chat: + return string + + # Find the user input + pattern = re.compile(r"<\|begin-user-input\|>(.*?)<\|end-user-input\|>", re.DOTALL) + match = re.search(pattern, string) + if match: + user_input = match.group(1).strip() + + # Get the most similar chunks + results = collector.get_sorted(user_input, n_results=params['chunk_count']) + + # Make the injection + string = string.replace('<|injection-point|>', '\n'.join(results)) + + return remove_special_tokens(string) + + +def ui(): + with gr.Accordion("Click for more information...", open=False): + gr.Markdown(textwrap.dedent(""" + + ## About + + This extension takes a dataset as input, breaks it into chunks, and adds the result to a local/offline Chroma database. + + The database is then queried during inference time to get the excerpts that are closest to your input. The idea is to create an arbitrarily large pseudo context. + + The core methodology was developed and contributed by kaiokendev, who is working on improvements to the method in this repository: https://github.com/kaiokendev/superbig + + ## Data input + + Start by entering some data in the interface below and then clicking on "Load data". + + Each time you load some new data, the old chunks are discarded. + + ## Chat mode + + #### Instruct + + On each turn, the chunks will be compared to your current input and the most relevant matches will be appended to the input in the following format: + + ``` + Consider the excerpts below as additional context: + ... + ``` + + The injection doesn't make it into the chat history. It is only used in the current generation. + + #### Regular chat + + The chunks from the external data sources are ignored, and the chroma database is built based on the chat history instead. The most relevant past exchanges relative to the present input are added to the context string. This way, the extension acts as a long term memory. + + ## Notebook/default modes + + Your question must be manually specified between `<|begin-user-input|>` and `<|end-user-input|>` tags, and the injection point must be specified with `<|injection-point|>`. + + The special tokens mentioned above (`<|begin-user-input|>`, `<|end-user-input|>`, and `<|injection-point|>`) are removed in the background before the text generation begins. + + Here is an example in Vicuna 1.1 format: + + ``` + A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. + + USER: + + <|begin-user-input|> + What datasets are mentioned in the text below? + <|end-user-input|> + + <|injection-point|> + + ASSISTANT: + ``` + + ⚠️ For best results, make sure to remove the spaces and new line characters after `ASSISTANT:`. + + *This extension is currently experimental and under development.* + + """)) + + with gr.Row(): + with gr.Column(min_width=600): + with gr.Tab("Text input"): + data_input = gr.Textbox(lines=20, label='Input data') + update_data = gr.Button('Load data') + + with gr.Tab("URL input"): + url_input = gr.Textbox(lines=10, label='Input URLs', info='Enter one or more URLs separated by newline characters.') + strong_cleanup = gr.Checkbox(value=params['strong_cleanup'], label='Strong cleanup', info='Only keeps html elements that look like long-form text.') + threads = gr.Number(value=params['threads'], label='Threads', info='The number of threads to use while downloading the URLs.', precision=0) + update_url = gr.Button('Load data') + + with gr.Tab("File input"): + file_input = gr.File(label='Input file', type='binary') + update_file = gr.Button('Load data') + + with gr.Tab("Generation settings"): + chunk_count = gr.Number(value=params['chunk_count'], label='Chunk count', info='The number of closest-matching chunks to include in the prompt.') + gr.Markdown('Time weighting (optional, used in to make recently added chunks more likely to appear)') + time_weight = gr.Slider(0, 1, value=params['time_weight'], label='Time weight', info='Defines the strength of the time weighting. 0 = no time weighting.') + chunk_count_initial = gr.Number(value=params['chunk_count_initial'], label='Initial chunk count', info='The number of closest-matching chunks retrieved for time weight reordering in chat mode. This should be >= chunk count. -1 = All chunks are retrieved. Only used if time_weight > 0.') + + update_settings = gr.Button('Apply changes') + + chunk_len = gr.Number(value=params['chunk_length'], label='Chunk length', info='In characters, not tokens. This value is used when you click on "Load data".') + chunk_sep = gr.Textbox(value=params['chunk_separator'], label='Chunk separator', info='Used to manually split chunks. Manually split chunks longer than chunk length are split again. This value is used when you click on "Load data".') + with gr.Column(): + last_updated = gr.Markdown() + + update_data.click(feed_data_into_collector, [data_input, chunk_len, chunk_sep], last_updated, show_progress=False) + update_url.click(feed_url_into_collector, [url_input, chunk_len, chunk_sep, strong_cleanup, threads], last_updated, show_progress=False) + update_file.click(feed_file_into_collector, [file_input, chunk_len, chunk_sep], last_updated, show_progress=False) + update_settings.click(apply_settings, [chunk_count, chunk_count_initial, time_weight], last_updated, show_progress=False) diff --git a/extensions/superboogav2/README.md b/extensions/superboogav2/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d25b3a5eb96a92bcbc78e008b1ef7826bad43c3e --- /dev/null +++ b/extensions/superboogav2/README.md @@ -0,0 +1,5 @@ +# superboogav2 + +For a description, please see the comments in this Pull Request: + +https://github.com/oobabooga/text-generation-webui/pull/3272 diff --git a/extensions/superboogav2/api.py b/extensions/superboogav2/api.py new file mode 100644 index 0000000000000000000000000000000000000000..993e2b7d6d99bf3c5b8c79e82d54b592bdf76f21 --- /dev/null +++ b/extensions/superboogav2/api.py @@ -0,0 +1,207 @@ +""" +This module is responsible for the VectorDB API. It currently supports: +* DELETE api/v1/clear + - Clears the whole DB. +* POST api/v1/add + - Add some corpus to the DB. You can also specify metadata to be added alongside it. +* POST api/v1/delete + - Delete specific records with given metadata. +* POST api/v1/get + - Get results from chromaDB. +""" + +import json +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from urllib.parse import urlparse, parse_qs +from threading import Thread + +from modules import shared +from modules.logging_colors import logger + +from .chromadb import ChromaCollector +from .data_processor import process_and_add_to_collector + +import extensions.superboogav2.parameters as parameters + + +class CustomThreadingHTTPServer(ThreadingHTTPServer): + def __init__(self, server_address, RequestHandlerClass, collector: ChromaCollector, bind_and_activate=True): + self.collector = collector + super().__init__(server_address, RequestHandlerClass, bind_and_activate) + + def finish_request(self, request, client_address): + self.RequestHandlerClass(request, client_address, self, self.collector) + + +class Handler(BaseHTTPRequestHandler): + def __init__(self, request, client_address, server, collector: ChromaCollector): + self.collector = collector + super().__init__(request, client_address, server) + + + def _send_412_error(self, message): + self.send_response(412) + self.send_header("Content-type", "application/json") + self.end_headers() + response = json.dumps({"error": message}) + self.wfile.write(response.encode('utf-8')) + + + def _send_404_error(self): + self.send_response(404) + self.send_header("Content-type", "application/json") + self.end_headers() + response = json.dumps({"error": "Resource not found"}) + self.wfile.write(response.encode('utf-8')) + + + def _send_400_error(self, error_message: str): + self.send_response(400) + self.send_header("Content-type", "application/json") + self.end_headers() + response = json.dumps({"error": error_message}) + self.wfile.write(response.encode('utf-8')) + + + def _send_200_response(self, message: str): + self.send_response(200) + self.send_header("Content-type", "application/json") + self.end_headers() + + if isinstance(message, str): + response = json.dumps({"message": message}) + else: + response = json.dumps(message) + + self.wfile.write(response.encode('utf-8')) + + + def _handle_get(self, search_strings: list[str], n_results: int, max_token_count: int, sort_param: str): + if sort_param == parameters.SORT_DISTANCE: + results = self.collector.get_sorted_by_dist(search_strings, n_results, max_token_count) + elif sort_param == parameters.SORT_ID: + results = self.collector.get_sorted_by_id(search_strings, n_results, max_token_count) + else: # Default is dist + results = self.collector.get_sorted_by_dist(search_strings, n_results, max_token_count) + + return { + "results": results + } + + + def do_GET(self): + self._send_404_error() + + + def do_POST(self): + try: + content_length = int(self.headers['Content-Length']) + body = json.loads(self.rfile.read(content_length).decode('utf-8')) + + parsed_path = urlparse(self.path) + path = parsed_path.path + query_params = parse_qs(parsed_path.query) + + if path in ['/api/v1/add', '/api/add']: + corpus = body.get('corpus') + if corpus is None: + self._send_412_error("Missing parameter 'corpus'") + return + + clear_before_adding = body.get('clear_before_adding', False) + metadata = body.get('metadata') + process_and_add_to_collector(corpus, self.collector, clear_before_adding, metadata) + self._send_200_response("Data successfully added") + + elif path in ['/api/v1/delete', '/api/delete']: + metadata = body.get('metadata') + if corpus is None: + self._send_412_error("Missing parameter 'metadata'") + return + + self.collector.delete(ids_to_delete=None, where=metadata) + self._send_200_response("Data successfully deleted") + + elif path in ['/api/v1/get', '/api/get']: + search_strings = body.get('search_strings') + if search_strings is None: + self._send_412_error("Missing parameter 'search_strings'") + return + + n_results = body.get('n_results') + if n_results is None: + n_results = parameters.get_chunk_count() + + max_token_count = body.get('max_token_count') + if max_token_count is None: + max_token_count = parameters.get_max_token_count() + + sort_param = query_params.get('sort', ['distance'])[0] + + results = self._handle_get(search_strings, n_results, max_token_count, sort_param) + self._send_200_response(results) + + else: + self._send_404_error() + except Exception as e: + self._send_400_error(str(e)) + + + def do_DELETE(self): + try: + parsed_path = urlparse(self.path) + path = parsed_path.path + query_params = parse_qs(parsed_path.query) + + if path in ['/api/v1/clear', '/api/clear']: + self.collector.clear() + self._send_200_response("Data successfully cleared") + else: + self._send_404_error() + except Exception as e: + self._send_400_error(str(e)) + + + def do_OPTIONS(self): + self.send_response(200) + self.end_headers() + + + def end_headers(self): + self.send_header('Access-Control-Allow-Origin', '*') + self.send_header('Access-Control-Allow-Methods', '*') + self.send_header('Access-Control-Allow-Headers', '*') + self.send_header('Cache-Control', 'no-store, no-cache, must-revalidate') + super().end_headers() + + +class APIManager: + def __init__(self, collector: ChromaCollector): + self.server = None + self.collector = collector + self.is_running = False + + def start_server(self, port: int): + if self.server is not None: + print("Server already running.") + return + + address = '0.0.0.0' if shared.args.listen else '127.0.0.1' + self.server = CustomThreadingHTTPServer((address, port), Handler, self.collector) + + logger.info(f'Starting chromaDB API at http://{address}:{port}/api') + + Thread(target=self.server.serve_forever, daemon=True).start() + + self.is_running = True + + def stop_server(self): + if self.server is not None: + logger.info(f'Stopping chromaDB API.') + self.server.shutdown() + self.server.server_close() + self.server = None + self.is_running = False + + def is_server_running(self): + return self.is_running \ No newline at end of file diff --git a/extensions/superboogav2/benchmark.py b/extensions/superboogav2/benchmark.py new file mode 100644 index 0000000000000000000000000000000000000000..46475a088b0eca137f641935d58dbf4b8d50ed29 --- /dev/null +++ b/extensions/superboogav2/benchmark.py @@ -0,0 +1,72 @@ +""" +This module implements a benchmark function to evaluate the performance of the embedding pipeline. It expects a configuration JSON file. It must have questions and expected retrieved text. +For each question, it's essential to have variants of that question. Language is fluid and each person might have their own spin on how they may ask it. + +At the end, it will save the results inside a benchmark_{sysdate}.txt file in the main directory. + +The benchmark function will return the score as an integer. +""" +import datetime +import json +import os + +from pathlib import Path + +from .data_processor import process_and_add_to_collector, preprocess_text +from .parameters import get_chunk_count, get_max_token_count +from .utils import create_metadata_source + +def benchmark(config_path, collector): + # Get the current system date + sysdate = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + filename = f"benchmark_{sysdate}.txt" + + # Open the log file in append mode + with open(filename, 'a') as log: + with open(config_path, 'r') as f: + data = json.load(f) + + total_points = 0 + max_points = 0 + + for item in data: + filepath = item["text"] + corpus = "" + + # Check if the file exists + if os.path.isfile(Path(filepath)): + # Open the file and read its content + with open(Path(filepath), 'r') as file: + corpus = file.read() + process_and_add_to_collector(corpus, collector, True, create_metadata_source('benchmark')) + else: + raise f'Cannot find specified file {filepath}.' + + for question_group in item["questions"]: + question_variants = question_group["question_variants"] + criteria = question_group["criteria"] + + for q in question_variants: + max_points += len(criteria) + processed_text = preprocess_text(q) + + # Get the most similar chunks + results = collector.get_sorted_by_dist(processed_text, n_results=get_chunk_count(), max_token_count=get_max_token_count()) + + points = 0 + + for c in criteria: + for p in results: + if c in p: + points += 1 + total_points += 1 + break + + info = f"The question '{q}' scored {points}/{len(criteria)} points." + print(info, file=log) + + print('\n---\n', file=log) + + print(f'##Total points:\n\n{total_points}/{max_points}', file=log) + + return total_points, max_points \ No newline at end of file diff --git a/extensions/superboogav2/benchmark_texts/aircraft_lease.txt b/extensions/superboogav2/benchmark_texts/aircraft_lease.txt new file mode 100644 index 0000000000000000000000000000000000000000..3d7e35b02e58d07f9c379aaf5175c909598f77ec --- /dev/null +++ b/extensions/superboogav2/benchmark_texts/aircraft_lease.txt @@ -0,0 +1,9471 @@ + +EX-10.72 +55 +a2069410zex-10_72.txt +EXHIBIT 10.72 + + + + Exhibit 10.72 + + COUNTERPART NO. 2 + + +=============================================================================== + + + AIRCRAFT LEASE AGREEMENT + dated as of November 29, 1995 + + between + + WILMINGTON TRUST COMPANY, not in its + individual capacity but solely as Trustee + f/b/o ITOCHU AirLease (Europe) Limited and + Marubeni Airleasing (U.K.) Limited, + + Lessor + + and + + ALOHA AIRLINES, INC., + + Lessee + + One Boeing 737-25A Aircraft + +=============================================================================== + + THIS LEASE HAS BEEN EXECUTED IN MULTIPLE COUNTERPARTS, OF WHICH THERE IS ONE + COUNTERPART DESIGNATED AS "COUNTERPART NO. 1 - CHATTEL PAPER ORIGINAL" AND ALL + OTHER COUNTERPARTS SHALL BE DESIGNATED WITH NUMBERS OTHER THAN 1. TO THE EXTENT + THAT THIS LEASE CONSTITUTES CHATTEL PAPER UNDER THE UNIFORM COMMERCIAL CODE, AS + IN EFFECT IN ANY APPLICABLE JURISDICTION, NO SECURITY INTEREST MAY BE CREATED + OR PERFECTED BY POSSESSION OF ANY COUNTERPART OF THIS LEASE OTHER THAN SAID + COUNTERPART NO. 1. + + + + + + COUNTERPART NO. 7 + + + + +================================================================================ + + + AIRCRAFT LEASE AGREEMENT + dated as of November 29, 1995 + + + between + + WILMINGTON TRUST COMPANY, not in its + individual capacity but solely as Trustee + f/b/o ITOCHU AirLease (Europe) Limited and + Marubeni Airleasing (U.K.) Limited, + + Lessor + + and + + ALOHA AIRLINES, INC., + + Lessee + + + One Boeing 737-25A Aircraft + +================================================================================ + + + THIS LEASE HAS BEEN EXECUTED IN MULTIPLE COUNTERPARTS, OF WHICH THERE IS ONE + COUNTERPART DESIGNATED AS "COUNTERPART NO. 1 - CHATTEL PAPER ORIGINAL" AND ALL + OTHER COUNTERPARTS SHALL BE DESIGNATED WITH NUMBERS OTHER THAN 1. TO THE EXTENT + THAT THIS LEASE CONSTITUTES CHATTEL PAPER UNDER THE UNIFORM COMMERCIAL CODE, AS + IN EFFECT IN ANY APPLICABLE JURISDICTION, NO SECURITY INTEREST MAY BE CREATED + OR PERFECTED BY POSSESSION OF ANY COUNTERPART OF THIS LEASE OTHER THAN SAID + COUNTERPART NO. 1. + + + + + Table of Contents + ----------------- + +
+ Page + ---- + + Section 1. Definitions . . . . . . . . . . . . . . . 1 + + Section 2. Lease and Conditions . . . . . . . . . . . 9 + + Section 3. Delivery and Acceptance; Term . . . . . . 14 + + Section 4. Rent . . . . . . . . . . . . . . . . . . 15 + + Section S. Representations and Warranties . . . . . 17 + + Section 6. Possession and Use; Registration . . . . 24 + + Section 7. Information . . . . . . . . . . . . . . . 33 + + Section 8. Covenants of Lessee . . . . . . . . . . . 35 + + Section 9. Replacement of Parts; Alterations, + Modifications and Additions . . . . . . . 37 + + Section 10. General Tax Indemnity . . . . . . . . . . 40 + + Section 11. Casualty Occurrences . . . . . . . . . . . 47 + + Section 12. Insurance . . . . . . . . . . . . . . . . 51 + + Section 13. Indemnification . . . . . . . . . . . . . . 56 + + Section 14. Liens . . . . . . . . . . . . . . . . . . 58 + + Section 15. Perfection of Title and Further + Assurances . . . . . . . . . . . . . . . 59 + + Section 16. Return of Aircraft and Records . . . . . . 60 + + Section 17. Events of Default . . . . . . . . . . . . 67 + + Section 18. Remedies . . . . . . . . . . . . . . . . 69 + + Section 19. Alienation . . . . . . . . . . . . . . . 73 + + Section 20. Miscellaneous . . . . . . . . . . . . . . 75 + + Section 21. Security Deposit . . . . . . . . . . . . . 81 +
+ + -i- + + + + + + EXHIBITS + + Exhibit A - Schedule and Description of Aircraft + + Exhibit B-1 - Aircraft Documents on the Delivery Date + + Exhibit B-2 - Aircraft Documents on the Return Occasion + + Exhibit C-1 - Financial Information + + Exhibit C-2 - Definitions and Values + + Exhibit D - Lease Supplement + + Exhibit E - Return Condition Requirements + + Exhibit F - Lessee's Counsel Opinion + + Exhibit G - Approved Insurance Broker Report + + Exhibit H - Insurance Special Provisions + + Exhibit I - Form of Redelivery Acknowledgment + + EXHIBIT J - Monthly Aircraft Utilization and + Status Report + + EXHIBIT K - List of Documents to Be Supplied Annually + + + + -ii- + + + + + RECORDED + + Federal Aviation Administration + + Date 1-25-96 Time 3:38 PM + ---------- ---------- + Conveyance Number II004730 + ------------ + By /s/ Donna Jennings + ------------------------------- + Conveyances Examiner + + + AIRCRAFT LEASE AGREEMENT + + + THIS AIRCRAFT LEASE AGREEMENT, dated as of November 29, 1995 + (the "Lease") , between (1) WILMINGTON TRUST COMPANY, not in its individual + capacity but solely as Trustee f/b/o ITOCHU AirLease (Europe) Limited and + Marubeni Airleasing (U.K.) Limited (Wilmington Trust Company, in such capacity, + is herein called "Lessor") , and (2) Aloha Airlines, Inc., a corporation + organized under the laws of Hawaii (herein called "Lessee"). + + WHEREAS, Lessee desires to lease from Lessor and Lessor is + willing to lease to Lessee the aircraft described herein upon and subject to + the terms and conditions of this Lease; + + NOW, THEREFORE, In consideration of the mutual promises, + covenants, terms and conditions contained herein, Lessor and Lessee agree as + follows: + + Section 1. DEFINITIONS. + + The following terms shall have the following respective +meanings for all purposes of this Lease Agreement (such meanings to be equally +applicable to both the singular and plural forms of the terms defined): + + AFFILIATE shall mean, with respect to any Person, any other + Person directly or indirectly controlling, controlled by or under common + control with such Person. + + AIRCRAFT shall mean the Airframe together with (i) the + Engines, whether or not installed on the Aircraft, (ii) all Parts, (iii) spare + parts or ancillary equipment or devices' furnished with the Aircraft under this + Lease, (iv) all Aircraft Documents, and (v) all substitutions, replacements and + renewals of any and all thereof. + + AIRCRAFT DOCUMENTS shall mean, as applicable, the items + identified on Exhibit B-1 hereto provided to Lessee on the Delivery Date and + Exhibit B-2 hereto provided to Lessor on the Return Occasion, all of which + shall be maintained in the English language. + + AIRCRAFT MAINTENANCE MANUAL shall mean the aircraft + maintenance manual which constitutes part of the Maintenance Program. + + + + + + AIRFRAME shall mean (a) the aircraft described on Exhibit A, + but not including any Engine installed thereon, and (b) any and all Parts so + long as the same shall be incorporated or installed on or attached to the + Airframe, or so long as title thereto shall remain vested in Lessor in + accordance with the terms of Section 9, after removal from the Airframe. + + APPROVED INSURANCE BROKER shall mean any reputable insurance + broker of internationally recognized responsibility and standing specializing + in aircraft insurance. + + APPROVED INSURER shall mean any reputable insurance company or + insurance broker of internationally recognized responsibility and standing + specializing in aircraft insurance. + + APU shall mean the auxiliary power unit. + + BASIC RENT shall mean the rent for the Aircraft specified on + Exhibit C-1 and payable throughout the Term for the Aircraft pursuant to + Section 4(a). + + BASIC RENT PAYMENT DATE shall have the meaning set forth in +Exhibit C-1 hereto. + + BUSINESS DAY shall mean any day other than a Saturday, Sunday + or other day on which banking institutions in Delaware, Hawaii, New York, + London or Dublin are authorized or required by law to be closed. + + C CHECK is defined in the Maintenance Program and equivalent + to a "C" Check as defined in Boeing's "B737-200 Maintenance Planning Data" Doc. + D6-17594. A "C" Check is currently performed at 3,000 Flight Hour intervals. + + CASUALTY OCCURRENCE shall mean any of the following events + with respect to the Aircraft, Airframe or any Engine: (a) loss of such property + or its use due to theft or disappearance for a period in excess of sixty (60) + consecutive days, or any destruction, damage beyond economic repair or + rendition of such property permanently unfit for normal use by Lessee for any + reason whatsoever; (b) any damage to such property which results in an + insurance settlement with respect to such property on the basis of a total loss + or on the basis of a compromised or constructive total loss, (c) the + condemnation, confiscation, appropriation or seizure of title, or requisition + of title to such property; (d) the appropriation or seizure of the use of such + property by or on the authority of any Governmental Entity or purported + Governmental Entity, which in any such case shall have resulted in the loss of + possession thereof + + + -2- + + + + + + by Lessee for a period in excess of one hundred eighty (180) consecutive days + (or for such shorter period ending on the date which is seven (7) days from the + date of receipt of an insurance settlement with respect to such property on the + basis of a total loss); or (e) prohibition under any applicable Law of the use + of the Aircraft for commercial transportation of passengers for a period of six + (6) months. + + CASUALTY VALUE shall mean the value as specified on Exhibit + C-1 hereto. + + CERTIFIED AIR CARRIER shall mean a United States "air carrier" + within the meaning of Section 40102(a)(2) of the Federal Aviation Act engaged + in regularly scheduled air transportation of passengers who is a "citizen of + the United States" within the meaning of Section 40102(a)(15) of the Federal + Aviation Act holding a certificate of public convenience and necessity issued + by the FAA pursuant to the Federal Aviation Act or by a similar authority under + legislation hereafter enacted. + + CLAIMS shall have the meaning set forth in Section 13. + + CODE shall mean the United States Internal Revenue Code of + 1986, as amended, and any successor thereto, as interpreted by the rules and + regulations issued thereunder, in each case as in effect from time to time. + + COMMONLY CONTROLLED PERSON shall mean any trade or business, + whether or not incorporated, which is at any relevant time a member of the same + controlled group of corporations (within the meaning of Section 414(b) of the + Code) or affiliated service group (within the meaning of Section 414(m) or (o) + of the Code) as, or under common control (within the meaning of Section 414(c) + of the Code) with, Lessee. + + CYCLE shall mean a cycle commencing each time the wheels of + the Airframe (or any other airframe on which an Engine or Part is installed, + but only insofar as the calculation of Cycles is required with reference to the + relevant Engine or Part) leave the ground on take-off and finishing when the + wheels of such Airframe (or any other airframe on which such Engine or Part is + installed) touch the ground in landing. + + D CHECK is defined in the Maintenance Program and is + equivalent to a "D Check" or "heavy structural inspection" as defined in + "Boeing's B737-200 Maintenance Planning Data" Doc. D6-17594. A "D" Check is + currently performed at 12,000 Flight Hour intervals. + + + -3- + + + + + + DEFAULT shall mean an Event of Default or event which would + constitute an Event of Default but for the lapse of time or the giving of + notice or both. + + DELIVERY DATE shall mean the date on which the Aircraft is + delivered to and accepted by Lessee for purposes of this Lease. + + DELIVERY LOCATION shall mean the location specified on Exhibit + C-2 hereto for the delivery of the Aircraft by Lessor to Lessee. + + DETAILED SPECIFICATIONS means the detailed specifications + number D6-32410-181 Revision C dated December 1, 1987 relating to the Aircraft + to be provided to Lessor on or before the Effective Date. + + DOLLARS shall mean lawful currency of the United States of +America. + + ENGINE shall mean any engine installed on or furnished with + the Aircraft on the Delivery Date, such engine being identified as to + manufacturer and type on Exhibit A hereto and which will be further identified + as to manufacturer serial number in the Lease Supplement, and any Replacement + Engine which may from time to time be substituted therefor pursuant to Section + 11; together in each case with any and all Parts incorporated or installed in + or attached thereto or any and all Parts removed therefrom so long as title + thereto remains vested in Lessor in accordance with the terms of Section 9 + after removal from such engine. Except as otherwise set forth herein, at such + time as a Replacement Engine shall be so substituted, such replaced engine + shall cease to be an Engine hereunder. The term "Engines" means, as of any date + of determination, all Engines then leased hereunder. + + EQUIPMENT shall mean the Airframe, each Engine and the +Aircraft Documents. + + ERISA shall mean the Employee Retirement Income Security Act + of 1974, as amended, and any successor statute thereto, as interpreted by the + rules and regulations thereunder, all as the same may be in effect from time to + time. + + ESTIMATED DELIVERY DATE shall mean the date specified on + Exhibit C-2 hereto, which the. parties anticipate to be the Delivery Date. + + EVENT OF DEFAULT shall have the meaning specified in any one +or more clauses in Section 17. + + + -4- + + + + + + EXPIRATION DATE shall mean the date specified in the Lease +Supplement for expiration of the Term. + + FAA shall mean the Federal Aviation Administration of the + United States Department of Transportation or any successor. + + FEDERAL AVIATION ACT shall mean Subtitle VII, Part A of Title + 49 of the United States Code, as amended. + + FINAL INSPECTION shall have the meaning set forth in Section +16(b). + + FLIGHT HOUR shall mean each hour and any fractional portion + of an hour which elapses from the time the wheels of the Airframe (or any other + airframe on which an Engine or Part is installed, but only insofar as the + calculation of Flight Hours is required with reference to the relevant Engine + or Part) leave the ground on take-off to the time when the wheels of such + Airframe (or any other airframe on which such Engine or Part is installed) + touch the ground on landing. + + GOVERNMENTAL ENTITY shall mean any federal, state, municipal +or other governmental department, commission, board, bureau, court, legislature, +agency, instrumentality or authority, domestic or foreign. + + INDEMNITEE shall mean Wilmington Trust Company in its + individual capacity, Lessor, each Beneficiary, each Lender and, in each case + their respective Affiliates, officers, directors, shareholders, agents and + employees and their respective successors and assigns. + + ITEM means the Aircraft or Airframe or any Engine in each + case including Parts constituting a part of any thereof. + + LAW shall mean and include (i) any statute, decree, + constitution, regulation, order, judgment or other directive of any + Governmental Entity; (ii) any treaty, pact, compact or other agreement to which + any Governmental Entity is a signatory or party; (iii) any judicial or + administrative interpretation or application of any Law described in (i) or + (ii) above; and (iv) any amendment or revision of any Law described in (i), + (ii) or (iii) above. + + LEASE SUPPLEMENT shall mean the Lease Supplement, + substantially in the form of Exhibit D hereto, entered into between Lessor and + Lessee. + + LENDER shall mean each Person who now or hereafter makes a +loan to the Lessor or any Beneficiary or otherwise + + + -5- + + + + + + finances the Beneficiaries' interest in the Aircraft and for whose benefit + Lessor grants a security interest in the Aircraft and the Lease. + + LESSOR'S LIENS shall mean Liens arising as a result of (i) + claims against Lessor or any Beneficiary not related to the transactions + contemplated by this Lease; or (ii) acts of Lessor or any Beneficiary, not + contemplated and expressly permitted under this Lease; or (iii) Taxes imposed + against Lessor which are not indemnified against by Lessee pursuant to Section + 10; or (iv) claims against Lessor arising out of the voluntary transfer by + Lessor of all or any part of its interests in the Aircraft or this Lease, other + than a transfer pursuant to Section 11 or 18 hereof. + + LIBOR shall mean the offered rate (rounded up to the nearest + 1/32 of one percent) for deposits in Dollars for six-month periods which appear + on the Telerate Page 3750 as of 11:00 a.m., London time, on the day that is two + (2) Business Days preceding that date for which LIBOR is being determined. If + at least two (2) such offered rates appear on the Telerate Page 3750, the rate + will be the arithmetic mean of such offered rates (rounded up to the nearest + 1/32 of one percent). + + LIEN shall mean any mortgage, pledge, lien, charge, + encumbrance, lease, exercise of rights, security interest or claim. + + MAINTENANCE PROGRAM shall mean an FAA approved maintenance + program as in effect from time to time for the Aircraft encompassing scheduled + maintenance, condition monitored maintenance and on-condition maintenance of + the Airframe, Engines and components of the Aircraft in accordance with the + Manufacturer's maintenance planning document. Upon request by Lessor or any + Beneficiary a copy of such Maintenance Program shall be made available to + Lessor or such Beneficiary. + + MORTGAGE CONVENTION shall mean the Convention for the + International Recognition of Rights in Aircraft, signed (ad referendum) at + Geneva, Switzerland, on June 19, 1948, and amended from time to time, but + excluding the terms of any adhesion thereto or ratification thereof containing + reservations to which the United States of America does not accede. + + OPERATIVE DOCUMENTS shall mean this Lease, the Lease + Supplement, the Trust Agreement and the Supplemental Agreement. + + PARTS shall mean all appliances, components, parts, +instruments, appurtenances, accessories, furnishings + + + -6- + + + + + + and other equipment of whatever nature (other than complete Engines or + engines), which may now or from time to time be incorporated or installed in or + attached to the Airframe or any Engine. Except as otherwise set forth herein, + at such time as a replacement part shall be substituted for a Part in + accordance with Section 9 hereof, the Part so removed shall cease to be a Part + hereunder. + + PBGC shall mean the Pension Benefit Guaranty Corporation + established pursuant to Subtitle A of Part IV of ERISA, and any successor + thereof. + + PERSON shall mean and include any individual person, + corporation, partnership, limited liability company, firm, joint stock company, + joint venture, trust, estate, unincorporated organization, association or + Governmental Entity. + + PLAN shall mean any employee pension benefit plan (as defined + in Section 3(2) of ERISA) maintained or contributed to at any time, or required + to be contributed to, by Lessee or any Commonly Controlled Person. + + REMOVABLE PART shall have the meaning set forth in Section + 9(b). + + RENT shall mean Basic Rent and Supplemental Rent, +collectively. + + REPLACEMENT ENGINE shall mean an engine of the same + manufacturer and model and having not less than equivalent value, utility, + modification and remaining warranty status as the Engine it is intended to + replace under Section 11(b) hereof, or, at Lessee's option, an engine of the + same manufacturer as such Engine but of an improved model, and otherwise of not + less than equivalent value and utility and suitable for installation and use on + the Airframe without impairing the value or utility of the Airframe. + + RETURN OCCASION shall mean the event that occurs when + possession of the Aircraft is returned from Lessee to Lessor at the end of the + Term of this Lease or upon Lessor taking possession pursuant to Section 18. + + SUPPLEMENTAL RENT shall mean any and all amounts, liabilities + and obligations (other than Basic Rent) which Lessee assumes or agrees to pay + hereunder, including without limitation (i) any payment of Casualty Value; (ii) + any payment of indemnity required by Sections 10 or 13 hereof; and (iii) to the + extent permitted by applicable Law, interest at the Overdue Rate (all + computations of interest at the Overdue Rate under this Lease to be made on the + basis + + + -7- + + + + + + of a 360-day year for the actual number of days elapsed) calculated on any + Rent not paid when due hereunder until the same is paid. + + TAXES shall mean any and all sales, use, business, gross + income, personal property, transfer, fuel, leasing, occupational, value added, + excess profits, excise, gross receipts, franchise, stamp, income, levies, + imposts, withholdings or other taxes or duties of any nature whatsoever now or + hereafter imposed, levied, collected, withheld or assessed, together with any + penalties, fines, charges or interest thereon. + + TELERATE PAGE 3750 shall mean the display page so designed on + the Dow Jones Telerate Service (or such other page as may replace that page on + that service, or such other service as may be nominated as the information + vendor, for the purpose of displaying comparable rates). + + TERM shall mean the term of this Lease specified in the Lease +Supplement hereto. + + WET LEASE shall mean any arrangement whereby Lessee agrees to + operate the Aircraft under a contractual arrangement with a third party + pursuant to which no rights to any aircraft specifically identified by serial + number or registration number are granted to such third party and pursuant to + which the Aircraft (i) remains at all times under the sole and complete + operational control of Lessee, (ii) shall be operated solely by cockpit crew + employed by Lessee possessing all current certificates and licenses required by + applicable Laws and (iii) shall be maintained by Lessee in accordance with all + the provisions of the Lease including, but not limited to, Sections 6(d) and 12 + (it being understood and agreed by Lessor and Lessee that any Wet Lease shall, + by its terms, be in all cases subject and subordinate to this Lease). + + The terms SECURITY DEPOSIT, SECURITY DEPOSIT ADIUSTMENT and + SECURITY LETTER OF CREDIT shall have the meanings set forth in Exhibit C-1 + hereto. + + The terms ASSIGNMENT AGREEMENT, ASSIGNMENT AGREEMENT N685MA, + BENEFICIARY, BENEFICIARY'S ADDRESS, DEDUCTIBLE AMOUNT, DELIVERY LOCATION, + ENGINE MANUFACTURER, ESTIMATED DELIVERY DATE, LAST BASIC RENT PAYMENT DATE, + LEASE IDENTIFICATION, LESSEE'S ADDRESS, LESSOR'S ADDRESS, MANUFACTURER, OTHER + LEASE, OVERDUE RATE, PAYMENT LOCATIONS, PERMITTED JURISDICTION, PERMITTED + SUBLESSEES, PUBLIC LIABILITY AND PROPERTY DAMAGE INSURANCE, RETURN LOCATION, + SUPPLEMENTAL AGREEMENT, TRUST AGREEMENT and TRUSTEE shall have the meanings set + forth on Exhibit C-2 hereto. + + + -8- + + + + + + Section 2. LEASE AND CONDITIONS. + + (a) Lessor hereby agrees to lease the Aircraft to Lessee, and + Lessee hereby agrees to lease the Aircraft from Lessor, on the terms and + conditions of this Lease, as supplemented by the Lease Supplement. + + (b) Lessor's obligation to lease the Aircraft hereunder to + Lessee shall be subject to the satisfaction of the following conditions + precedent, in each case subject to the reasonable satisfaction of Lessor and + each Beneficiary: + + (i) the absence of any Default hereunder; + + (ii) the absence of any material adverse change in + Lessee's financial condition or in Lessee's ability to carry on its + business from September 30, 1995 to the Delivery Date; + + (iii) the absence of any default or event of default by + Lessee under any aircraft lease or obligation for the payment of borrowed + money to which the Lessee is a party; + + (iv) no action or proceeding shall be pending nor shall + any governmental action be threatened before any court or governmental + agency of competent jurisdiction, nor shall any order, judgment or decree + have been issued or proposed to be issued by any court or governmental + agency, to set aside, restrain, enjoin or prevent the completion and + consummation of this Lease or any other Operative Documents or the + transactions contemplated hereby or thereby; + + (v) receipt of every consent, approval or authorization + of, and the giving of every notice to, any third party that is required in + order to execute and deliver this Lease and to perform the transactions + contemplated hereby and each such consent, approval or authorization shall + be valid and effective and shall not have been revoked; + + (vi) receipt of the approval of the Board of Directors of + each Beneficiary and any other Affiliate of each Beneficiary as such + Beneficiary, in its sole discretion, deems necessary; + + (vii) receipt by Lessor and each Beneficiary of the + following documents on or before the Delivery Date, all of which shall be + reasonably satisfactory in form and substance to Lessor and each + Beneficiary: + + + -9- + + + + + (1) a Lease Supplement in the form of Exhibit D, duly + authorized, executed and delivered by Lessee, and effective as of the + Delivery Date of the Aircraft; + + (2) a certified copy of the resolutions of the Board + of Directors of Lessee evidencing due authority of Lessee for the + execution, delivery and performance of this Lease, the Lease + Supplement and all other documents related hereto or thereto, + together with an incumbency certificate as to the person or persons + authorized to execute and deliver such documents on behalf of Lessee; + + (3) a favorable opinion of Lessee's counsel, dated + the Delivery Date, substantially in the form as set forth on Exhibit + F hereto and of special aviation counsel, dated the Delivery Date, in + form and scope acceptable to Lessor and the Beneficiaries; + + (4) a certificate signed by a duly authorized officer + of Lessee, dated the Delivery Date, stating that: (i) the + representations and warranties contained' in Section 5(d) hereof are + true and accurate on and as of such date as though made on and as of + such time; (ii) no event has occurred and is continuing, or would + result from the lease of the Aircraft, which constitutes a Default; + and (iii) since September 30, 1995 there has not occurred any + material adverse change in Lessee's financial condition or in + Lessee's ability to carry on its business; + + (5) an opinion or report, dated the Delivery Date, + signed by an Approved Insurance Broker or Approved Insurer as to the + due compliance with the insurance provisions of Section 12 hereof + with respect to the Aircraft, substantially in the form as set forth + on Exhibit G hereto; + + (6) certificates of an Approved Insurance Broker + evidencing the insurance as required by Section 12 hereof + + + -10- + + + + + + together with such special provisions as set forth on Exhibit H + hereto; + + (7) certified copies of all necessary consents from + any Governmental Entities or such other Persons as to the + transactions contemplated by this Lease; + + (8) such financial information concerning Lessee and + other documents and matters incidental to any of the foregoing as + Lessor or any Beneficiary may reasonably request; and + + (9) a duly executed original of the Security Letter + of Credit. + + (vii) the Lease, the Lease Supplement, an application for + registration of the Aircraft on AC Form 8050-1 in the name of the + Trustee, the Trust Agreement, and the affidavit of citizenship of the + Trustee shall have been duly filed for recordation (or shall be in the + process of being so fully filed for recordation) with the FAA pursuant to + the Federal Aviation Act and precautionary UCC filings with respect to + the Lease shall have been duly executed and delivered and shall have been + duly filed in Hawaii and all places in which such filings are necessary + or advisable to establish and perfect Trustee's right, title and interest + in the Equipment. + + (c) Lessee's obligation to lease the Aircraft hereunder from + Lessor shall be conditional upon (i) the receipt by Lessee of a certified copy + of the resolutions of the Board of Directors of Lessor evidencing due authority + of Lessor for the execution, delivery and performance of the Trust Agreement + and this Lease and all other documents related thereto, together with an + incumbency certificate as to the person or persons authorized to execute and + deliver such documents on behalf of Lessor, (ii) the receipt by Lessee of + certification by Lessor to the effect that Lessor's representations and + warranties herein are true as at the Delivery Date, and (iii) the continued + effectiveness of the registration of the Aircraft with the FAA. + + (d) Lessee's obligation to lease the Aircraft hereunder from +Lessor shall also be conditioned upon the Aircraft being delivered to Lessee in +the following condition: + + (1) The Aircraft shall be airworthy and in good + operating condition + + + -11- + + + + + with all of the Aircraft equipment, components and systems; + + (2) The Aircraft shall be clean; + + (3) The Aircraft shall meet the requirements for + airworthiness certification by the FAA; + + (4) A borescope of the Engines and the inspection of + the APU in accordance with the Manufacturer's or APU manufacturer's + recommendation shall have been performed at the direction of Lessee + but under the control and at the cost of the Beneficiaries, and any + discrepancies discovered in connection therewith shall have been + corrected; + + (5) Lessor shall, in cooperation with the + Beneficiaries, retain a flight crew at competitive market rates to + conduct a functional check flight, not to exceed two hours (the + "Acceptance Flight"), to demonstrate the airworthiness of the + Aircraft and proper functioning of all systems and components. At + all times during such Acceptance Flight, the flight crew shall be + under the direction of the Beneficiaries and the Beneficiaries shall + be in command of the Aircraft. The Acceptance Flight shall be + conducted after the conclusion of Lessee's ground inspection and + technical acceptance of the Aircraft on the Delivery Date, PROVIDED, + HOWEVER, that such technical inspection shall be subject to the + satisfactory completion of the Acceptance Flight, as provided below. + If, during the Acceptance Flight, no discrepancy or malfunction is + detected with respect to the airworthiness or operational nature of + the Aircraft by normal airline standards, then (i) the delivery of + the Aircraft from Lessor to Lessee hereunder shall occur, the + Aircraft shall be accepted by Lessee hereunder whilst the Aircraft + is located at the Delivery Location, and Lessee shall execute and + deliver the Lease Supplement, (ii) the Aircraft shall continue en + route to a location selected by Lessee (the "Ferry Location"), under + the operational control of Lessee from the time of such delivery and + acceptance (the Acceptance Flight shall terminate at the time of + such delivery and acceptance, and that portion of the flight from + the Delivery Location to the Ferry Location is herein called the + "Ferry Flight"), and (iii) Lessee shall bear the costs of the flight + crew, fuel and other costs + + + -12- + + + + + + relating to the Ferry Flight and shall reimburse the Beneficiaries + therefor promptly following receipt of the Beneficiaries, invoice + therefor, PROVIDED, HOWEVER, that, if any discrepancy or malfunction + is detected with respect to the airworthiness during the Acceptance + Flight, then, at Lessee's option after consultation with Lessor, + either (A) the Aircraft shall be delivered to and accepted by Lessee + at the Delivery Location and shall be ferried to the Ferry Location, + as provided in clauses (i), (ii) and (iii) above, where Lessee shall + remedy such discrepancy or malfunction at the cost (without mark up) + of the Beneficiaries (provided that such subsequent repair or + maintenance work shall not affect Lessee's acceptance of the + Aircraft hereunder), or (B) the Aircraft shall return to the + Beneficiaries' storage and maintenance facility where such + discrepancy or malfunction shall be corrected at the Beneficiaries' + expense, in which case the Delivery Date shall be postponed to such + date as the Beneficiaries shall advise, subject to the second + paragraph of Section 3(c) below. Any discrepancy or malfunction + detected of an airworthiness nature shall be corrected by Lessee or + the Beneficiaries in accordance with clause (A) or (B) above, as + applicable, at Beneficiaries, expense. If during the Acceptance + Flight a discrepancy or malfunction is detected with respect to the + operational nature of the Aircraft by normal airline standards but + no discrepancy or malfunction is detected with respect to the + airworthiness of the Aircraft, then the Aircraft shall be delivered + to and accepted by Lessee at the Delivery Location as provided in + clause (A) above, and Lessee shall remedy such discrepancy or + malfunction at the cost (without mark up) of the Beneficiaries. + + In anticipation of the occurrence of the Delivery Date, the + Beneficiaries retained a flight crew to conduct the Acceptance + Flight and will incur costs relating to such retention. In + connection therewith, Lessee agrees to reimburse the Beneficiaries, + promptly following Lessee's receipt of an invoice therefor, for + one-half of the costs incurred by the Beneficiaries in connection + with retaining such flight crew for the Acceptance Flight, which + costs relate to the period commencing on and including November 29, + 1995 and ending on the day immediately preceding the Delivery Date. + + + -13- + + + + + + + Section 3. Delivery and Acceptance; Term. + + (a) DELIVERY. It is anticipated that the Aircraft will become + available for delivery on or about the Estimated Delivery Date set forth on + Exhibit C-2. + + (b) PLACE OF DELIVERY AND ACCEPTANCE. The Aircraft shall be + delivered to Lessee at the Delivery Location set forth on Exhibit C-2. + + (c) FORCE MAJEURE. Notwithstanding any other provision +hereof to the contrary, Lessor shall not have any obligation to lease the +Aircraft to Lessee on account of its or Beneficiaries, inability to deliver the +Aircraft if such inability or delay results from (i) loss or destruction of the +Aircraft or any substantial part of the Aircraft or damage to the Aircraft for +any reason whatsoever, including but not limited to, the negligence of the +Beneficiaries or (ii) any other cause occurring without the negligence of the +Beneficiaries and beyond the reasonable control of the Beneficiaries (after use +of reasonable diligence), including but not limited to war, warlike operations, +acts of government or governmental priorities, insurrections or riots, strikes +or labor troubles causing cessation, slow down or interruption of work, riots, +fire, floods, explosions, earthquakes, accidents, epidemics or quarantine +restrictions, mechanical failure, inability for any reason to obtain materials, +accessories, equipment or parts, delays in transportation or any act of God or +a public enemy. + + In the event that delivery of the Equipment is delayed for a + period in excess of 60 days beyond the Estimated Delivery Date (because of the + occurrence of an event described in clause (i) or (ii) above) Lessee or Lessor + shall have the right to terminate this Lease upon written notice to the other + and neither Lessee nor Lessor shall have any further obligations to the other + hereunder except that Lessor or the Beneficiaries shall return the Security + Deposit to Lessee subject to and in accordance with Section 21(a) hereof. + + (d) ACCEPTANCE OF AIRCRAFT. The Aircraft to be leased + hereunder shall be delivered to Lessee "AS IS, WHERE IS" and SUBJECT TO EACH + AND EVERY DISCLAIMER OF WARRANTY AND REPRESENTATION AS SET FORTH IN SECTION + 5(a) HEREOF. Representatives of Lessee shall inspect the Aircraft on or prior + to the Estimated Delivery Date to verify that the Aircraft is in the condition + required by Section 2(d). In the event the Aircraft does not fulfill all of the + conditions set forth in Section 2(d) and if Lessee does not accept delivery of + the Aircraft with discrepancies to be corrected pursuant to Section 2(d)(5), + then Lessor shall have (A) with respect to any matter which affects the + + -14- + + + + + + airworthiness of the Aircraft, fifteen (15) days within which to cure any + deficiency in the Aircraft, without cost to Lessee, and (B) with respect to any + other matter, sixty (60) days within which to cure any deficiency with the + Aircraft, without cost to Lessee; Lessee shall then reinspect the Aircraft and + if the Aircraft is then in compliance with the conditions set forth in Section + 2(d), Lessee shall accept delivery of the Aircraft. In no event shall Lessor or + the Beneficiaries have the right pursuant to the foregoing paragraph (c) or + this paragraph (d) or both to extend the Delivery Date beyond the date that is + sixty (60) days after the Estimated Delivery Date. Upon acceptance of the + Aircraft Lessee shall thereupon indicate and confirm its acceptance of the + Aircraft by delivery to Lessor of a Lease Supplement, dated the Delivery Date, + in the form set forth as Exhibit D hereto. + + The execution by Lessee of the Lease Supplement shall + constitute Lessee's acknowledgment that the Aircraft is in the condition + required hereby on the Delivery Date and Lessee's absolute, unconditional and + irrevocable acceptance of the Aircraft hereunder for all purposes of this + Lease. + + (e) TERM OF LEASE. The Term of this Lease shall commence on + the Delivery Date and shall continue for 96 months until the Expiration Date + set forth in the Lease Supplement, subject to earlier termination by Lessor or + a Beneficiary following the occurrence of an Event of Default, as hereinafter + provided or pursuant to paragraph 2(ii) of the Supplemental Agreement. + + Section 4. RENT. + + (a) RENT. Lessee covenants and agrees to pay to Lessor, or +its assigns, the following as Rent: + + (i) BASIC RENT: The Basic Rent as set forth on Exhibit C-1 +hereto throughout the Term hereof, payable in consecutive installments in +advance on each Basic Rent Payment Date. + + (ii) SUPPLEMENTAL RENT: Any and all Supplemental Rent as and +when the same becomes due. + + (b) PLACE AND METHOD OF PAYMENT. All Basic Rent and + Supplemental Rent and other amounts payable under this Lease shall be paid on + the due date in immediately available funds in Dollars by wire transfer, at + the Payment Locations specified on Exhibit C-2 hereto, or at such other + location as Lessor shall designate in writing. Any Rent due on a day other than + a Business Day (in New York, Dublin, London and Honolulu only) shall be due on + the next preceding Business Day. + + -15- + + + + + + (c) PROHIBITION AGAINST SETOFF, COUNTERCLAIM, ETC. This Lease + is a net lease. Subject to Section 20(f), Lessee's obligation to pay all Rent + hereunder shall be absolute and unconditional and shall not be affected or + reduced by any circumstance, including, without limitation, (i) any setoff, + counterclaim, recoupment, defense or other right which Lessee may have against + Lessor, any Beneficiary, the Manufacturer, the Engine Manufacturer, any seller + of or person providing services with respect to the Aircraft or any other + Person, for any reason whatsoever; (ii) any defect in the title, airworthiness + or eligibility for registration under applicable Law, or any condition, design, + operation or fitness for use of, or any damage to or loss or destruction of, + the Aircraft, or any interruption or cessation in the use or possession thereof + by Lessee for any reason whatsoever, whether arising out of or related to an + act or omission of Lessee, or any other Person; (iii) any Liens with respect to + the Aircraft; (iv) the invalidity or unenforceability or lack of due + authorization or other infirmity of this Lease or any absence of right, power + or authority of Lessor or Lessee to enter into this Lease; (v) any insolvency, + bankruptcy, reorganization or similar proceedings by or against Lessor or + Lessee; (vi) any other circumstance or happening of any nature whatsoever, + similar to any of the foregoing; or (vii) any Taxes (other Taxes to which + Lessee's indemnity does not extend pursuant to the provisions of Section 10); + it being the express intention of Lessor and Lessee that all Rent payable + hereunder shall be payable in all events, unless the obligation to pay the same + shall be terminated pursuant to the express provisions of this Lease. Nothing + in this paragraph (c) shall constitute a waiver by Lessee of any right or claim + that Lessee may separately assert against Lessor or any Beneficiary. + + Lessee hereby waives, to the extent permitted by applicable + Law, any and all rights which it may now have or which at any time hereafter + may be conferred upon it, by Law or otherwise, to terminate this Lease or any + obligation imposed upon Lessee hereunder or in relation hereto. + + If for any reason whatsoever this Lease shall be terminated + in whole or in part by operation of law (other than termination under any + bankruptcy laws as now or hereafter in effect), Lessee nonetheless agrees to + pay to Lessor amounts equal to the Rent payments hereunder at the time such + payments would have become due and payable in accordance with the terms hereof + had this Lease not been terminated so long as Lessee is able to use, possess + and quietly enjoy the Aircraft, and so long as such payments are made and all + other terms and conditions hereof are complied + + -16- + + + + + +with by Lessor and Lessee, Lessor and Lessee will deem this Lease to remain in +full force and effect. + + Section 5. REPRESENTATIONS AND WARRANTIES. + + (a) WARRANTIES AND DISCLAIMER OF WARRANTIES. + + LESSOR AND EACH BENEFICIARY HAVE NOT AND SHALL NOT BE DEEMED +TO HAVE MADE (WHETHER BY VIRTUE OF HAVING LEASED THE AIRCRAFT UNDER THIS LEASE, +OR HAVING ACQUIRED THE AIRCRAFT, OR HAVING DONE OR FAILED TO DO ANY ACT, OR +HAVING ACQUIRED OR FAILED TO ACQUIRE ANY STATUS UNDER OR IN RELATION TO THIS +LEASE OR OTHERWISE), AND LESSOR AND EACH BENEFICIARY HEREBY SPECIFICALLY +DISCLAIM, ANY REPRESENTATION OR WARRANTY, EXPRESS OR IMPLIED, AS TO THE TITLE +(EXCEPT AS HEREINBELOW PROVIDED), AIRWORTHINESS, CONDITION, DESIGN, OPERATION, +MERCHANTABILITY, FREEDOM FROM CLAIMS OF INFRINGEMENT OR THE LIKE, OR FITNESS +FOR USE FOR A PARTICULAR PURPOSE OF THE AIRCRAFT, OR AS TO THE QUALITY OF THE +MATERIAL OR WORKMANSHIP OF THE AIRCRAFT, THE ABSENCE THEREFROM OF LATENT OR +OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE, OR AS TO ANY OTHER REPRESENTATION +OR WARRANTY WHATSOEVER, EXPRESS OR IMPLIED (INCLUDING ANY IMPLIED WARRANTY +ARISING FROM A COURSE OF PERFORMANCE OR DEALING OR USAGE OF TRADE), WITH +RESPECT TO THE AIRCRAFT; AND LESSEE HEREBY WAIVES, RELEASES, RENOUNCES AND +DISCLAIMS EXPECTATION OF OR RELIANCE UPON ANY SUCH. WARRANTY OR WARRANTIES. +LESSOR AND EACH BENEFICIARY SHALL NOT HAVE ANY RESPONSIBILITY OR LIABILITY TO +LESSEE OR ANY OTHER PERSON, WHETHER ARISING IN CONTRACT OR TORT OUT OF ANY +NEGLIGENCE OR STRICT LIABILITY OF LESSOR OR SUCH BENEFICIARY OR OTHERWISE, FOR +(i) ANY LIABILITY, LOSS OR DAMAGE CAUSED OR ALLEGED TO BE CAUSED DIRECTLY OR +INDIRECTLY BY THE AIRCRAFT OR ANY ENGINE OR BY ANY INADEQUACY THEREOF OR +DEFICIENCY OR DEFECT THEREIN OR BY ANY OTHER CIRCUMSTANCE IN CONNECTION +THEREWITH, (ii) THE USE, OPERATION OR PERFORMANCE OF THE AIRCRAFT OR ANY RISKS +RELATING THERETO, (iii) ANY INTERRUPTION OF SERVICE, LOSS OF BUSINESS OR +ANTICIPATED PROFITS OR CONSEQUENTIAL DAMAGES OR (iv) THE DELIVERY, OPERATION, +SERVICING, MAINTENANCE, REPAIR, IMPROVEMENT OR REPLACEMENT OF THE AIRCRAFT. THE +WARRANTIES AND REPRESENTATIONS SET FORTH IN THIS SECTION ARE EXCLUSIVE AND IN +LIEU OF ALL OTHER REPRESENTATIONS OR WARRANTIES WHATSOEVER, EXPRESS OR IMPLIED, +AND LESSOR AND EACH BENEFICIARY SHALL NOT BE DEEMED TO HAVE MADE BY OTHER +WARRANTIES, EXCEPT THAT EACH BENEFICIARY MAKES THE REPRESENTATIONS AND +WARRANTIES CONTAINED IN THE SUPPLEMENTAL AGREEMENT AND: + + (b) LESSOR REPRESENTATIONS AND WARRANTIES. + + Lessor hereby makes the following representations and +warranties: + + -17- + + + + + + (i) the Aircraft is duly registered with the FAA in the name + of Lessor and, on the Delivery Date, Lessor shall be the FAA-registered + owner of the Aircraft and the Aircraft shall be free and clear of any and + all Lessor Liens attributable to it other than the interests of the + Beneficiaries under the Trust Agreement; + + (ii) Lessor is a banking corporation duly organized and + validly existing and in good standing under the laws of Delaware, and has + the corporate power and authority to carry on its business as presently + conducted and to perform its obligations under this Lease; + + (iii) the making and performance by Lessor of this Lease and + any other Operative Document to which Lessor is a party have been duly + authorized by all necessary corporate action on the part of Lessor and + will not violate any provision of any law, governmental rule or + regulation of the State of Delaware or of the United States of America + governing the banking and trust powers of Lessor or its Certificate of + Incorporation or By-Laws; + + (iv) this Lease has been duly entered into and delivered by + Lessor, and this Lease does, and each other Operative Document when + executed and delivered by Lessor hereunder will, constitute legal, valid + and binding obligations of Lessor, enforceable in accordance with their + respective terms except as may be limited by bankruptcy, insolvency, + reorganization, moratorium or other similar laws affecting the + enforcement of creditors, rights generally, and, to the extent that + certain remedies require or may require enforcement by a court of equity, + by such principles of equity (regardless of whether such enforceability + is considered in a proceeding in equity or at law) as a court having + jurisdiction may impose and by laws which may affect some of such + remedies but which do not make available remedies inadequate for the + substantial realization of the benefits provided herein; + + (v) neither the execution and delivery by Lessor of this + Lease and any other Operative Document to which it is a party nor the + performance by it of any of its obligations hereunder or thereunder, nor + the compliance by it with the terms and conditions hereof or thereof, + will violate, conflict with or result in any breach of any terms, + conditions or provisions of, or provisions of, or + + + -18- + + + + + + constitute a default under, any law of the State of Delaware or the + United States of America governing the banking and trust powers of Lessor + or court judgment or decree applicable to it or pursuant to which it was + organized or any agreement or instrument to which it is a party or by + which it or any of its property is bound, or result in the creation or + imposition of any Lessor's Lien attributable to it on the Aircraft other + than as provided for in this Lease (such representation being made in + reliance upon and subject to the accuracy of the representation and + warranty contained in the last sentence of Section 5(d)(xvi)); + + (vi) neither the execution and delivery nor the performance + by Lessor of this Lease and any Operative Document to which Lessor is a + party requires any consent or approval of, giving of notice to, + registration with, or taking of any other action in respect of any + governmental authority or agency in the State of Delaware; + + (vii) no registration, recording, filing or notarization of + this Lease in the State of Delaware and no other action by Lessor is + necessary to be taken in the State of Delaware to ensure the validity or + enforceability of the obligations of Lessor or the rights of Lessee + hereunder; + + (viii) there are no pending or, to the knowledge of Lessor, + threatened actions or proceedings before any court, governmental or + administrative agency or arbitral body which actions or proceedings could + have a material and adverse effect on Lessor's ability to perform its + obligations under this Lease or any other Operative Document to which it + is a party; + + (ix) Lessor shall obtain, make and maintain in full force and + effect, promptly renew from time to time and comply with the terms of all + consents, permissions, licenses, authorizations, approvals, registrations + and filings which may from time to time be required in the State of + Delaware in order to enable it to perform its obligations hereunder or + for the enforceability or admissibility in evidence hereof; and + + (x) Lessor is a "citizen of the United States" within the + meaning of Section 40102(a)(15) of the Federal Aviation Act. + + -19- + + + + + + (c) MANUFACTURERS' WARRANTIES. So long as no Default and no + Event of Default shall have occurred and be continuing and so long as the Term + shall remain in effect, Lessee may exercise for the account of Lessor such + rights as Lessor may have under any warranty, express or implied, with respect + to the Aircraft made by the Manufacturer or the Engine Manufacturer, to the + extent that the same may be assigned or otherwise made available to Lessee; + provided, however, that upon an Event of Default all such rights shall + immediately revert to Lessor including all claims thereunder whether or not + perfected, and such reversion shall occur at the earlier of (A) written notice + from Lessor to Lessee to such effect, and (B) the expiration or any termination + of the Term. Lessor agrees to execute and deliver such further documents and + instruments and to do such further acts, deeds, matters or things (at Lessee's + expense) as may be necessary to enable Lessee to obtain whatever warranty + service furnished for the Aircraft or the Engines by the Manufacturer or the + Engine Manufacturer, respectively, as is available to the Lessor. + + (d) LESSEE'S REPRESENTATIONS AND WARRANTIES. Lessee hereby + makes the following representations and warranties, which representations and + warranties shall survive the execution and delivery of this Lease and the + delivery of the Aircraft: + + (i) Lessee is a corporation duly organized and existing under + the Laws of the State of Hawaii and has the corporate power and authority + to carry on its business as presently conducted and to perform its + obligations under this Lease; + + (ii) this Lease has been duly authorized by all necessary + corporate action on the part of Lessee and does not require any approval + of stockholders of Lessee (or if such approval is required, such approval + has been obtained), and neither the execution and delivery hereof nor the + consummation of the transactions contemplated hereby nor compliance by + Lessee with any of the terms and provisions hereof will contravene any + Law applicable to Lessee or the corporate charter or by-laws of Lessee-or + result in any breach of, or constitute any default under, or result in + the creation of any Lien upon any property of Lessee under, any credit + agreement or instrument, or other agreement or-instrument to which Lessee + is a party or by which Lessee or its properties or assets are bound or + affected; + + (iii) Lessee has received every consent, approval or + authorization of, and has given every + + -20- + + + + + + notice to, each Governmental Entity having jurisdiction with respect to + the execution, delivery or performance of this Lease that is required for + Lessee to execute and deliver this Lease and to perform the transactions + contemplated hereby and each such consent, approval or authorization is + valid and effective and has not been revoked; + + (iv) this Lease has been duly executed and delivered by + Lessee, and the Lease does, and the Lease Supplement when executed and + delivered by Lessee will, constitute legal, valid and binding obligations + of Lessee, enforceable in accordance with their respective terms, except + as enforcement thereof may be limited by applicable bankruptcy, + insolvency, reorganization, moratorium or other similar laws affecting + the enforcement of creditors, rights generally, and, to the extent that + certain remedies require or may require enforcement by a court of equity, + by such principles of equity (regardless of whether such enforceability + is considered in a proceeding in equity or at law) as a court having + jurisdiction may impose and by Laws which may affect some of such + remedies but which do not make the available remedies inadequate for the + substantial realization of the benefits provided herein; + + (v) there are no suits or proceedings (other than those + heretofore disclosed in writing to each Beneficiary) pending or, to the + knowledge of Lessee, threatened in any court or before any regulatory + commission, board or other administrative governmental agency against or + affecting Lessee which might have a materially adverse effect on the + current business or financial condition of Lessee; + + (vi) Lessee has filed or caused to be filed all tax returns + which are required to be filed by it, and has paid or caused to be paid + all Taxes shown to be due or payable on said returns or on any assessment + received by Lessee, except to the extent being contested in good faith by + appropriate proceedings, and for the payment of which adequate reserves + have been provided; + + (vii) except for the filing for recordation of the FAA Bills + of Sale, an application for registration of the Aircraft on AC Form + 8050-1 in the name of the Lessor, the Trust Agreement, the affidavit of + citizenship of the Lessor and this Lease and the Lease Supplement with + the FAA, the + + -21- + + + + + + filing with the Hawaii Bureau of Conveyances, Hawaii of precautionary UCC + financing statements and continuation statements at periodic intervals + with respect to the Aircraft and the placing on the Aircraft and on each + Engine of the plates containing the legends referred to in Section 6(f) + hereof, no further filing or recording of this Lease or of any other + document and no further under the Laws of any Governmental Entity in + order to (A) fully protect and establish Lessor's title to, interest in + and property rights with respect to the Aircraft as against Lessee or + any third party or (B) ensure the validity, effectiveness and enforce + ability of this Lease; + + (viii) Lessee is not in default in the performance of any of + its obligations (a) for the payment of indebtedness for borrowed money or + of any interest or premium thereon or (b) for the payment of rent under + any lease or agreement to lease real, personal or mixed property; + + (ix) the Maintenance Program for the Aircraft complies with + all FAA requirements; + + (x) the consolidated financial statements of Aloha Airgroup, + Inc. (including Lessee), including the balance sheets and audited + statements of income and retained earnings of Lessee, for the preceding + two fiscal years and for the period ending September 30, 1995, copies of + which have been furnished to Lessor, are prepared in accordance with + generally accepted accounting principles, and present fairly the + financial position and operations of Lessee, and subsequent to the + conclusion of the last such period, there has been no material adverse + change in such position or operations; + + (xi) there are no withholding or other Taxes to be deducted + from any payment to be made by Lessee under this Lease (other Taxes to + which Lessee's indemnity does not extend pursuant to the provisions of + Section 10); + + (xii) Lessee is a Certified Air Carrier and holds all + licenses, certificates, permits and franchises from the appropriate + agencies of the United States of America and/or all other governmental + authorities having jurisdiction which are necessary to authorize the + Lessee to engage in air transport and to carry on its business as + + -22- + + + + + + presently conducted and to be conducted with the Aircraft; + + (xiii) Lessee is a "citizen of the United States" as defined + in Section 40102(a)(15) of the Federal Aviation Act; + + (xiv) Lessor is entitled to the benefits of Section 1110 of + Title 11 of the united States Code with respect to the Aircraft and the + Engines; + + (xv) Lessee's chief executive office (as such term is defined + in Article 9 of the Uniform Commercial Code) and the place where it keeps + its corporate records concerning the Aircraft, all its interest in, to + and under any Operative Document and its contracts relating thereto, are + located in Honolulu, Hawaii; + + (xvi) Neither Lessee nor any Person who was at such time a + Commonly Controlled Person has terminated any Plan or withdrawn from any + multiemployer plan (as defined in Section 4001(a)(3) of ERISA) in a + manner which has or could reasonably be expected to result in any + liability under Title IV of ERISA, and no event or condition has occurred + or exists as a result of which any such liability could reasonably be + expected to be incurred. No Plan maintained or contributed to (or + required to be contributed to) by Lessee or any Person who was at such + time a Commonly Controlled Person has incurred an "accumulated funding + deficiency" (as defined in Section 302 of ERISA). No Lien imposed under + the Code or ERISA on the assets of Lessee or any Commonly Controlled + Person exists or is reasonably likely to arise on account of any Plan. No + prohibited transaction (as defined in Section 406 of ERISA or Section + 4975 of the Code) has occurred which has subjected or could subject + Lessee or any Commonly Controlled Person to any liability under Section + 502(i) of ERISA or Section 4975 of the Code. The execution and delivery + by Lessee of this Lease and the consummation of the transactions + contemplated hereby will not constitute a prohibited transaction within + the meaning of Section 406 of ERISA or Section 4975 of the Code; and + + (xvii) No part of the Rent or other payments made by Lessee + under the Operative Documents will be made with the assets of any plan + (or its related trust) as defined in Section 4975(e) of the Code or of + any employee benefit plan (or its + + -23- + + + + + + related trust) as defined in Section 3(3) of ERISA. + + Section 6. POSSESSION AND USE; REGISTRATION. + + (a) POSSESSION. + + (i) SUBLEASE, ASSIGNMENT AND TRANSFER. Without the prior + written consent of Lessor and each Beneficiary, Lessee will not assign this + Lease or sublet, transfer or relinquish possession of the Aircraft, Airframe or + any Engine or install any Engine or permit any Engine to be installed on any + airframe other than the Airframe or under any circumstances permit the + Aircraft, Airframe or any Engine to be used by any other Person for any purpose + whatsoever, provided that so long as (A) no Default or Event of Default shall + have occurred and be continuing, (B) the action to be taken shall not affect + the registration of the Aircraft with the FAA and (C) all necessary approvals + of each Governmental Entity having jurisdiction over the Aircraft have been + obtained, then Lessee, without the prior written consent of Lessor and each + Beneficiary, may: + + (1) subject any Engine to normal interchange or pooling + agreements or similar arrangements in each case customary in the airline + industry and entered into in the ordinary course of its business with + Permitted Sublessees or an air carrier approved by Lessor and each + Beneficiary or an FAA licensed engine overhaul agency, provided that + Lessee shall give the Beneficiaries 30 days' prior notice thereof + (together with a copy of the applicable pooling or interchange + agreement); and provided further, however, that: (A) no such agreement or + arrangement results in or requires the transfer of title to such Engine; + or (B) if Lessor's title to such Engine shall be divested under any such + agreement or arrangement, such divestiture shall be deemed to be a + Casualty occurrence with respect to such Engine and Lessee shall comply + with Section 11(b) hereof in respect thereof; + + (2) deliver possession of the Aircraft, the Airframe or any + Engines to the manufacturer thereof for testing or other similar purposes + or to any organization for service, repair, maintenance, testing or + overhaul work on the Aircraft, Airframe or Engine or any Part thereof or + for alterations or modifications in or additions to the Aircraft, + Airframe or Engine to the extent required or permitted by the terms of + Section 9 hereof; + + -24- + + + + + + (3) install an Engine on an airframe (other than the + Airframe) owned by Lessee free and clear of all Liens except: (A) those + of the type permitted under Section 14 hereof and those which apply only + to the engines (other than Engines), appliances, parts, instruments, + appurtenances, accessories, furnishings and other equipment (other than + Parts) installed on such airframe (but not to the airframe as an + entirety); and (B) the rights of the participants under normal + interchange agreements which are customary in the airline industry and do + not contemplate, permit, result in or require the transfer of title to + theairframe, engines or parts installed thereon; + + (4) install an Engine on an airframe leased to Lessee or + owned by Lessee subject to a conditional sale or other security + agreement, provided, that: (A) such airframe is free and clear of all + Liens except the rights of the parties to the lease or conditional sale + or other security agreement covering such airframe and except Liens of + the type permitted by clauses (A) and (B) of Section 6(a)(i)(3), and the + Lien of any mortgage which either by its terms does not apply to the + Engine or which effectively provides that each Engine leased to Lessee + hereby shall not become subject to the Lien thereof or to any rights of + any party thereunder other than Lessee (with respect to Lessee's rights + expressly granted hereunder), notwithstanding the installation of such + Engine on any airframe subject to the Lien of such mortgage, unless and + until Lessee shall become the owner of such Engine and Lessor shall have + no further interest therein, all pursuant to the express terms of this + Lease (as evidenced by a written instrument signed by Lessor); and (B) + there shall be in effect a written agreement of the lessor or secured + party of such airframe (which may be the lease or conditional sale or + other security agreement covering such airframe) substantially similar + in effect to the agreement of Lessor in Section 6(b) below whereby such + lessor or secured party effectively and expressly agrees that neither it + nor its successors or assigns will acquire or claim any right, title or + interest in any Engine by reason of such Engine being installed on such + airframe at any time while such Engine is subject to this Lease, and a + copy of such agreement shall be provided to Lessor or any Beneficiary + upon its request; + + -25- + + + + + + (5) sublease the Airframe and the Engines or the engines then + installed on the Airframe or any Engine to any Permitted Sublessee; + PROVIDED, that such Permitted Sublessee shall not (i) have consented to + the appointment of a receiver, trustee or liquidator or admitted in + writing its inability to pay its debts generally as they become due or + filed a voluntary petition in bankruptcy or a voluntary petition seeking + reorganization in a proceeding under any bankruptcy laws, (ii) have had + an involuntary order, judgment or decree entered against such Permitted + Sublessee by any court appointing a receiver, trustee or liquidator for + such Permitted Sublessee or (iii) be in default under any lease or + financing agreement to which such Permitted Sublessee is a party; and + + (6) enter into a Wet Lease for the Aircraft in the ordinary + course of its business for a term or terms (including any renewal terms + or extensions) that do not extend beyond the Term. + + (ii) CERTAIN LIMITATIONS ON TRANSFERS. With respect to any + assignment, sublet, transfer or relinquishment of possession pursuant to + Section 6(a)(i) (other than a transfer of an Engine which is deemed a Casualty + Occurrence) or any other assignment, sublet or transfer of possession consented + to in writing by Lessor and the Beneficiary: + + (1) Lessee shall remain primarily liable hereunder for the + performance of all of the terms of this Lease to the same extent as if + such transfer had not occurred, and no sublease or other relinquishment + of possession of the Equipment shall in any way discharge or diminish any + of Lessee's obligations to Lessor under this Lease or any of Lessor's + rights hereunder and such rights shall continue as if such sublease or + transfer had not occurred; + + (2) the term of any sublease (including, without limitation, + any option of the sublessee to renew or extend the sublease), interchange + or pooling arrangement shall not continue beyond the end of the Term; + + (3) any sublease permitted by this Section 6 shall in + addition expressly provide that (v) such sublease is subject and + subordinate to all of the terms of this Lease and all rights of Lessor + under this Lease, including without limitation Lessor's + + -26- + + + + + + rights to repossession pursuant to Section 18 and to void such Permitted + Sublessee's right to possession upon such repossession, shall apply, (w) + such Permitted Sublessee consents to the security assignment by Lessee to + Lessor of all of Lessee's right, title and interest in such sublease for + purposes of securing Lessee's obligations hereunder and that Permitted + Sublessee, upon receipt of a written notice from Lessor that an Event of + Default has occurred and is continuing, will make all payments under such + sublease to, and, if this Lease has been declared in default pursuant to + Section 18 hereof, will return the Equipment only to, Lessor, or as + directed by Lessor, for so long as such Event of Default shall continue, + (x) the maintenance, operation and insurance provisions of such sublease + shall be substantially the same as the provisions of this Lease (whether + by requiring such obligations to be performed by such Permitted + Sublessee, by Lessee or by both), (y) the Aircraft shall not be operated + or used other than as provided in this Lease, and (z) the Lessor may void + or terminate such sublease following an Event of Default hereunder but + only during the period as such Event of Default shall continue; + + (4) prior to the commencement of any sublease to a Permitted + Sublessee, Lessee shall give Lessor and each Beneficiary no less than 10 + days written notice of the proposed sublease of the Airframe or Engine, + as the case may be, which notice shall include the identity of the + Permitted Sublessee, the term and rental rate of the sublease and a copy + of such sublease; PROVIDED, HOWEVER, that Lessee shall use its reasonable + efforts to give such notice earlier than such 10 days if practicable + under the circumstances and to advise Lessor and the Beneficiaries at any + time at which Lessee commences substantial discussions or negotiations + with any Permitted Sublessee with respect to the potential sublease of + the Aircraft; + + (5) any sublease shall-expressly prohibit any assignment or + further sublease of the Aircraft or any assignment of the rights under + such sublease; + + (6) any Wet Lease shall have a term that does not exceed + beyond the end of the Term; and + + (7) the Person with which and for which any Wet Lease is + entered into shall be an airline that is a + + -27- + + + + + + resident of, is domiciled in, and maintains its principal base of + operations in, a Permitted Jurisdiction. + + Prior to entering into any sublease of the Airframe and any Engine or engine or + any Engine to a Permitted Sublessee, Lessee shall (A) execute and deliver to + Lessor and each Beneficiary an assignment of and grant of a security interest + in all of Lessee's right, title and interest in such sublease, which assignment + shall be in form and substance reasonably satisfactory to Lessor and each + Beneficiary, contain the consent to such assignment of such Permitted + Sublessee, and be recordable under the Federal Aviation Act and shall be + executed, delivered and filed with the FAA for recordation at Lessee's expense + on or before commencement of such sublease (provided that such assignment may + specify that Lessor may not exercise any of the rights or remedies of the + Lessee under such sublease including, without limitation, any right to receive + rentals under such sublease or to interfere with the rights of the Lessee to + grant waivers or consents under, or to amend the provisions of, any such + sublease) unless, and only so long as, an Event of Default hereunder shall have + occurred and be continuing, and (B) execute and deliver to Lessor an + appropriately completed Uniform Commercial Code financing statement, for filing + in Hawaii and each other applicable jurisdiction, evidencing the assignment by + Lessee to Lessor of such sublease. In connection with such a sublease of the + Aircraft, Lessee shall provide to Lessor and each Beneficiary, at Lessee's or + Permitted Sublessee's expense and on or before commencement of such sublease, a + legal opinion from counsel to the Permitted Sublessee in form and substance + reasonably satisfactory to Lessor and each Beneficiary, as to the due execution + and delivery and enforceability of such sublease and assignment of sublease and + as to such other matters as Lessor or such Beneficiary may reasonably request. + Lessee agrees that any such security assignment granted to the Lessor may be + assigned to the Lender, if any, it being understood that such assignment shall + be consistent and not contravene the foregoing provisions. Any monies received + by Lessor or Lender pursuant to the exercise of its rights under the assignment + of any sublease shall be held by Lessor or the Lender as additional security + for the performance by Lessee of its obligations under this Lease and, to the + extent not applied against amounts due and owing by Lessee hereunder and the + exercise of remedies hereunder, shall be returned to Lessee at such time as no + Event of Default shall be continuing. All costs and expenses (including + reasonable legal fees and expenses) incurred by Lessor, Lender or any + Beneficiary in connection with any sublease or the assignment thereof shall be + borne by Lessee and reimbursed by Lessee upon demand. + + -28- + + + + + + (b) RECIPROCAL RECOGNITION OF RIGHTS. In the event Lessee + shall have received from the lessor or secured party of any airframe leased to + Lessee or owned by Lessee subject to a conditional sale or other security + agreement a written agreement complying with clause (B) of Section 6(a)(i)(4) + hereof (which agreement may be contained in the lease, conditional sale + agreement or security agreement relating to such airframe), and such lease or + conditional sale or other security agreement covering such airframe also covers + an engine or engines owned by the lessor under such lease or subject to a + security interest in favor of the secured party under such conditional sale or + other security agreement, Lessor hereby agrees for the benefit of such lessor + or secured party that Lessor will not acquire or claim, as against such lessor + or secured party, any right, title or interest in any such engine as the result + of such engine being installed on the Airframe at any time while such engine is + subject to such lease or conditional sale or other security agreement and owned + by such lessor or subject to a security interest in favor of such secured + party. Lessor also hereby agrees for the benefit of the mortgagee under any + mortgage complying with clause (A) of Section 6(a)(i)(4) hereof, relating to + installation of an Engine on an airframe leased to Lessee, that Lessor will not + acquire or claim, as against such mortgagee, any right, title or interest in + any engine subject to the Lien of such mortgage as the result of such engine + being installed on the Airframe at any time while such engine is subject to the + Lien of such mortgage. + + (c) LAWFUL INSURED OPERATIONS. Lessee will not permit the + Aircraft to be maintained, used or operated in violation of any Law of any + Governmental Entity, or in violation of any airworthiness certificate, or + license or registration issued by any such authority, or contrary to the + Manufacturer's or Engine Manufacturer's operating manuals or instructions for + the Aircraft or the Engines. In the event that any such Law requires alteration + of the Aircraft, then, subject to Section 1 of the Supplemental Agreement, + Lessee shall comply therewith at its sole expense and shall maintain the same + in proper condition for operation under such Laws. Lessee agrees not to operate + the Aircraft, or permit the Aircraft to be operated, (i) unless the Aircraft is + covered by insurance as required by the provisions hereof or (ii) contrary to + the terms of such insurance. Lessee also agrees not to operate or locate the + Aircraft or suffer or permit the Aircraft to be operated or located in any area + excluded from coverage by any insurance policy issued pursuant to the + requirements of this Lease. + + (d) MAINTENANCE. Lessee, at its own cost and expense, shall, + or shall cause a maintenance contract center that is FAA certified for the + contracted maintenance of the + + -29- + + + + + + Aircraft and located in the united States of America or Canada, to: + + (i) service, repair, maintain, overhaul and test, or cause + the same to be done to, each Item leased hereunder (A) so as to keep such + Item in the same condition as when delivered to Lessee hereunder, fair + wear and tear excepted, and in good operating condition, (B) so as to + keep the Aircraft in the condition necessary to enable the airworthiness + certification of the Aircraft to be maintained in good standing at all + times under all applicable FAA rules and regulations, (C) so as to meet + the standards observed by Lessee with respect to aircraft of similar type + owned or leased by Lessee and operated on similar routes, and in a manner + which does not adversely discriminate against the Aircraft compared to + similar aircraft operated by Lessee and in a similar manner and with care + as that undertaken by the majority of airlines based in the United States + of America which operate Boeing 737-200ADV aircraft (it being understood + that the obligations hereby imposed upon Lessee by reference to the + manner and care undertaken by other airlines is not intended to supersede + Lessee's obligations herein with respect to the specific and express + terms of this Lease), (D) in strict compliance with Lesseel's + FAA-approved Maintenance Program applicable to the Aircraft (including + the corrosion prevention control program (CPCP/D6-38528) and aging + aircraft program (D6-38505 revision H as applicable per airworthiness + directive or per effectivity)), a true and complete copy of which shall + be delivered by Lessee to the Lessor which Maintenance Program shall be + in substantial conformance with the Manufacturer's recommended + maintenance planning document; + + (ii) maintain all records, logs and other materials required + by the FAA or the Maintenance Program in respect of the Aircraft with all + such records, logs and other material being maintained in the English + language; + + (iii) promptly furnish to Lessor or each Beneficiary such + information, in English, as may be required to enable Lessor or such + Beneficiary to file any reports required to be filed by such Lessor or + Beneficiary with any governmental authority concerning the Aircraft; + + -30- + + + + + + (iv) incorporate into the Aircraft all manufacturer mandatory + requirements, orders, "alert" and, to the extent scheduled for a majority + of Lessee's other owned or leased aircraft of the same model, + "recommended" service bulletins issued by the manufacturers and vendors + of the Items (so far as such manufacturers and vendors issue such service + bulletins) which become due for compliance during the Term without + waiver, exception, deferment or carryover and, in addition, all other + service bulletins that Lessee adopts during the Term for a majority of + other aircraft of the same model in Lessee's fleet; + + (v) carry out, on each Item, all applicable regulatory + regulations, mandatory requirements, orders and airworthiness directives + which the FAA may from time to time issue and which become due during or + within three months following the expiration of the Term (or within six + months following the expiration of the Term if requested by the + Beneficiaries at Beneficiaries' cost; however, the Term will not be + deemed extended solely as a result of the additional work to terminate + the airworthiness directives due after three months after the expiration + of the Term and requested by the Beneficiaries) with respect to such + Item, without waiver, exception, deferment or carryover beyond the + expiration of the Term (except as expressly set forth in the Supplemental + Agreement); provided that any inspections and terminating action required + by such regulatory regulations, mandatory requirements, orders and + airworthiness directives to be performed by a particular date shall be + performed by such date; + + (vi) maintain, service, repair and overhaul the Airframe and + all Engines to comply with all warranty requirements; + + (vii) except when required by maintenance or expressly + permitted by Section 6(a) above, equip the Airframe at all times with two + Engines; + + (viii) make available to Lessor upon its reasonable request + during the Term, one or more persons with sufficient technical knowledge + to assist the Lessor or each Beneficiary in its examination of such + materials and documents relating to the maintenance and condition of the + Aircraft as the Lessor or each Beneficiary shall from time to time + reasonably request; and + + -31- + + + + + + (ix) without prejudice to Lessee's obligations to repair the + Aircraft pursuant to the terms hereof, if any damage occurs to the + Aircraft which results in the need for repairs where the costs of such + repairs are expected to exceed US$500,000, Lessee shall promptly notify + Lessor and each Beneficiary of the details of the repairs required and + shall furnish them with a workscope relating thereto, and Lessee shall + comply with any reasonable direction of Lessor or each Beneficiary as to + the conduct of the repairs to the Aircraft; PROVIDED, HOWEVER, that the + Beneficiaries shall review such workscope and inform Lessee of any + comments thereon or objections thereto within three Business Days after + their receipt thereof; PROVIDED FURTHER, HOWEVER, that Lessee shall be + permitted to use a maintenance contractor to perform its obligations + pursuant to this Section 6(d) so long as such maintenance contractor is a + repair facility approved by the FAA for the contracted repair of the + Aircraft which is located in the United States of America or Canada, or + other facility acceptable to the Lessor and each Beneficiary. + + (e) REGISTRATION. So long as no Event of Default shall have + occurred and be continuing, Lessor shall cause the Aircraft to be duly + registered in the name of Lessor with the FAA under the Federal Aviation Act as + at the Delivery Date, shall take such actions as are reasonably appropriate (so + long as such actions pose no material burden or risk to Lessor or the + Beneficiaries) to maintain such registration during the Term, and shall not + take any action to interfere with or cancel such registration; provided that, + after the Delivery Date, Lessee shall monitor and, to the extent not relating + to the U.S. citizenship of the Beneficiaries, maintain such registration; + PROVIDED, FURTHER, HOWEVER, that (i) if Lessor shall at any time cease to be a + "citizen of the United States" (as defined in the Federal Aviation Act) and if + such requirement shall then be necessary to maintain such registration, then + the Beneficiaries shall take such action as shall be reasonable and appropriate + to maintain such registration (including by appointing a successor trustee + under the Trust Agreement or establishing a voting trust covering the + Aircraft), (ii) Lessee and Lessor shall cooperate reasonably and in good faith + to maintain such registration, and (iii) Lessee shall, at Lessee's expense, + be responsible for the filing and registration of the Lease (as supplemented by + the Lease Supplement) and for maintaining such registration throughout the + Term. + + -32- + + + + + + + + (f) INSIGNIA. Upon delivery of the Aircraft, Lessee agrees to + promptly place the Lease Identification in the cockpit in a prominent location + and to place the Lease Identification on each Engine. Lessee agrees to make + such reasonable changes to the Lease Identification as Lessor may request from + time to time. + + Section 7. INFORMATION. + + During the term of this Lease, Lessee agrees to furnish + Lessor and each Beneficiary the following: + + (i) within sixty (60) days following the end of each quarter + of Lessee's fiscal year, except the last such quarter of such year, an + unaudited consolidated balance sheet of Aloha Airgroup, Inc. (including + Lessee) prepared as of the close of each quarterly period, together with + the related unaudited profit and loss statement for such period; + + (ii) within one hundred twenty (120) days or such longer + period as reasonably justified after the close of each fiscal year of + Lessee, an audited consolidated balance sheet, profit and loss statement + and statement of stockholders' equity of Aloha Airgroup, Inc. (prepared + on a consolidated basis including Lessee), as of the close of such fiscal + year, reported on by Lessee's independent certified accountants of + recognized standing; + + (iii) within one hundred twenty (120) days after the close of + each fiscal year of Lessee, a certificate signed by a duly authorized + officer of Lessee, stating (a) that such officer is familiar with the + relevant terms of this Lease and has made a review of Lessee's compliance + herewith during the preceding fiscal year and (b) that no event has + occurred which constitutes a Default, or, if such an event has occurred, + the nature thereof and action Lessee has taken or is taking to cure the + same; + + (iv) from time to time upon request, Lessee will at no cost + to Lessor or each Beneficiary provide Lessor or each Beneficiary + certified true and complete copies in the English language of the + Maintenance Program; provided that Lessor or such Beneficiary shall + maintain the confidentiality thereof and shall not disclose the contents + thereof to any Person, except as permitted by Section 20(k) and except to + the extent necessary + + -33- + + + + + + to bridge the Aircraft from the Maintenance Program to the maintenance of + a subsequent lessee or buyer of the Aircraft or as required by the Law of + a jurisdiction in which the Aircraft will be based, operated or + registered; + + (v) Lessee will use its reasonable efforts to provide the + Beneficiaries on or before the fifth day of each calendar month + commencing with the next calendar month of the Delivery Date, and shall + in any event provide to the Beneficiaries upon request of a Beneficiary, + with a properly completed Monthly Aircraft Utilization and Status Report + in the Form of Exhibit J hereto for the preceding calendar month + operation of the aircraft; + + (vi) Lessee will use its reasonable efforts to provide the + Beneficiaries, on or before the 15th day of January of each year + (commencing with January 1996), and shall in any event provide Lessor and + the Beneficiaries upon request of a Beneficiary in English, the + information and documentation for the preceding calendar year as listed + in Exhibit K hereto; PROVIDED, HOWEVER, that if (i) a Default or an Event + of Default shall have occurred and be continuing or (ii) Lessee's + financial condition changes adversely from its financial condition at the + time of the Delivery Date, then, upon notice and a request from Lessor or + a Beneficiary, Lessee shall provide such information on a quarterly basis + on the 15th day of each January, April, July and October, commencing with + the first of such dates to follow the date of such notice. + + (vii) Lessee will use its reasonable efforts to provide the + Beneficiaries, within forty-five (45) days prior to the scheduled + performance of a block C or D check on the Aircraft, and shall in any + event provide Lessor and the Beneficiaries upon request of a Beneficiary + with written notice of the time and location of such scheduled block C or + D check; and + + (viii) from time to time such other information regarding the + business, operations or the financial condition of Lessee as the Lessor + or any Beneficiary may from time to time reasonably request, including + reports from time to time as to location, condition, use, operation, + maintenance and insuring of the Aircraft and the Engines + + -34- + + + + + + (including total time spent in the air and time between overhauls). + + Lessee shall permit Lessor, each Beneficiary and their + respective designees on at least seven (7) days' prior written notice to visit + and inspect the Aircraft, its condition, use and operation and the records + maintained in connection therewith during normal business hours; PROVIDED, + HOWEVER, that this shall not unreasonably interfere with Lessee's quiet use and + enjoyment of the Aircraft PROVIDED FURTHER, HOWEVER, that Lessor or the + Beneficiaries may conduct such visit and inspection at any time and with or + without notice if an Event of Default has occurred and is continuing. Lessor + and each Beneficiary shall have no duty to make any such inspection and shall + not incur any liability or obligation by reason of not making any such + inspection. Lessor's or any Beneficiary's failure to object to any condition + or procedure observed or observable in the course of an inspection hereunder + shall not be deemed to waive or modify any of the terms of this Lease with + respect to such condition or procedure. If such inspection is carried out + during a C Check or D Check, then Lessee will open any areas of the Aircraft + upon reasonable request of Lessor or a Beneficiary; PROVIDED, HOWEVER, that, + with respect to any C Check (other than the last C Check to occur prior to the + Return Occasion) the areas to be opened will be limited to those areas that are + in the zones of the Aircraft in which Lessee or its maintenance contractor are + working; provided further, however, that, with respect to the last C Check to + occur prior to the Return Occasion, Lessee will open any areas of the Aircraft + upon the reasonable request of Lessor or a Beneficiary. + + Section 8. COVENANTS OF LESSEE. + + Lessee covenants and agrees that: + + (i) MAINTENANCE OF CORPORATE EXISTENCE. Except as provided in + Section 8(iv) below, during the term of this Lease, Lessee will preserve and + maintain its corporate existence. Lessee shall also preserve and maintain its + rights, privileges, licenses and franchises in all jurisdictions where the + failure to do so would have a materially adversely effect upon the Lessee's + ability to meet its obligations under this Lease and the other Operative + Documents. + + (ii) MAINTENANCE OF STATUS. Lessee is, and shall remain so long + as it shall be Lessee under this Lease, duly qualified to operate the Aircraft + under applicable Law. + + (iii) PAYMENT OF TAXES. Lessee will pay or cause to be paid all + taxes, assessments and governmental charges + + -35- + + + + + + or levies imposed upon it, or upon its income or profits, or upon any property + belonging to it, prior to the date on which penalties attached thereto and + prior to the date on which any lawful claim, if not paid, would become a Lien + upon any of the material property of Lessee. + + (iv) CONSOLIDATION, MERGER, ETC. Without the prior written + consent of Lessor and each Beneficiary, Lessee shall not consolidate with, + merge with or merge into any other Person or convey, transfer or lease + substantially all of its assets as an entirety to any other Person unless, upon + and after giving effect to such transaction, (A) the surviving entity has at + least the same net worth and gross assets as the Lessee immediately prior to + such transaction, such surviving entity is Certified Air Carrier and a "citizen + of the United States" as defined in Section 101(16) of the Federal Aviation + Act, (C) Lessor shall continue to be entitled to the benefits of Section 1110 + of the United States Bankruptcy Code, as in effect from time to time, and (D) + each of the Operative Documents shall continue in full force and effect and + shall constitute the legally binding and enforceable obligation of such + surviving entity. + + (v) PLACE OF BUSINESS. Lessee will notify Lessor in writing + prior to any change of its principal place of business or chief executive + office. + + (vi) NOTICE OF DEFAULT. Promptly after a responsible officer of + Lessee obtains knowledge of an event or circumstance that such officer knows + constitutes a Default hereunder, Lessee shall notify Lessor in writing of such + Default. + + (vii) GOVERNMENTAL CONSENTS. Lessee undertakes to maintain in + full force and effect all governmental consents, licenses, authorizations, + approvals, declarations, filings and registrations obtained or effected in + connection with this Lease (other than those relating to the perfection of a + Lender's interest herein and subject to Section 5(b)(i) and Section 6; + provided, however, if so requested by a Beneficiary, Lessee shall cooperate + with the Beneficiary, at Beneficiary's cost, to perfect the interest of the + Lender) and every document or instrument contemplated hereby (including without + limitation foreign exchange and transfer permits regarding Dollar amounts due + hereunder and thereunder) and to take all such additional action as may be + proper or advisable in connection herewith or therewith. Lessee further + undertakes to obtain or effect any new or additional governmental consents, + licenses, authorizations, approvals, declarations, filings or registrations as + may become necessary for the performance of any of the terms and conditions of + this Lease or any other document or instrument contemplated hereby; PROVIDED, + HOWEVER, that Lessee shall + + -36- + + + + + + not be required to effect or maintain any governmental consent, authorization + or license that is required by a governmental authority in Delaware, Japan, + Ireland, New York or the United Kingdom unless required in connection with the + conduct of Lessee's business, the operation or maintenance by Lessee of the + Aircraft or the performance of Lessee's other obligations under this Lease. + + (viii) SUSPENSION, CESSATION, ETC. Lessee shall not (i) voluntarily + suspend all or substantially all of its certificated operations; or (ii) + voluntarily or involuntarily permit to be revoked, canceled or otherwise + terminated all or substantially all of the franchises, concessions, permits, + rights or privileges required for the conduct of business and operations of + Lessee or the free and continued use and exercise thereof. + + (ix) CERTIFIED AIR CARRIER. Lessee shall at all times remain a +Certified Air Carrier. + + Section 9. REPLACEMENT OF PARTS; ALTERATIONS, MODIFICATIONS + AND ADDITIONS. + + (a) REPLACEMENT OF PARTS. Lessee, at its own cost and + expense, will promptly replace all Parts which may from time to time become + worn out, lost, stolen, destroyed, seized, confiscated, damaged beyond repair + or permanently rendered unfit for use for any reason whatsoever. In addition, + in the ordinary course of maintenance, service, repair, overhaul or testing, + Lessee may at its own cost and expense cause to be removed any Parts, whether + or not worn out, destroyed, damaged beyond repair or permanently rendered unfit + for use, provided that Lessee shall replace at its own cost and expense such + Parts as promptly as practicable. All replacement Parts shall be free and clear + of all Liens, other than Liens permitted by Section 14 hereof, shall be in at + least the same modification status and service bulletin accomplishment status, + shall be fully interchangeable as to form, fit and function, shall have been + overhauled or repaired and inspected by an agency acceptable to the FAA and + shall be in as good an operating condition as, and have a utility at least + equal to and a value and remaining warranty reasonably approximating, the Parts + replaced (assuming such replaced Parts were in the condition and repair in + which they were required to be maintained by the terms hereof) and all + historical records since new or last overhaul relating to such Parts (and all + historical records since manufacture with respect to Engines, Landing Gears, + the APU and all life limited parts installed on any Engine, Landing Gear or + APU) shall be maintained by Lessee. + + -37- + + + + + + All Parts owned by Lessor which are at any time removed from + the Aircraft shall remain the property of Lessor and subject to this Lease, no + matter where located, until such time as such Parts shall be replaced by Parts + which have been incorporated or installed in or attached to the Aircraft and + which meet the requirements for replacement Parts specified above. Immediately + upon any replacement Part becoming incorporated or installed in or attached to + the Aircraft as above provided, (i) title to the removed Part shall thereupon + vest in Lessee, free and clear of all rights of Lessor, (ii) title to such + replacement Part shall thereupon vest solely in Lessor and (iii) such + replacement Part shall become subject to this Lease and be deemed a Part for + all purposes hereof to the same extent as the Part which it has replaced. + + (b) ALTERATIONS, MODIFICATIONS AND ADDITIONS. Lessee, at its + own expense, shall make such alterations and modifications and additions to the + Aircraft as may be required from time to time to meet the applicable standards + of the FAA or to comply with any Law, or, if performed by Lessee with respect + to a majority of its 737 fleet, any bulletin of the manufacturer of the + Aircraft, Engines or Parts. In addition, Lessee, at its own expense, may from + time to time make alterations and modifications in and additions to the + Aircraft, provided no such alteration, modification or addition diminishes the + remaining warranty, value or utility, or impairs the condition or + airworthiness, of the Aircraft. Title to all Parts incorporated or installed in + or attached or added to the Aircraft as the result of such alteration, + modification or addition shall vest immediately in Lessor and become subject to + this Lease, without the necessity for any further act of transfer, document or + notice. Notwithstanding the foregoing sentence of this Section 9(b), Lessor + agrees that so long as no Event of Default shall have occurred and be + continuing, Lessee may, at such time during the Term, remove any Part of the + Aircraft without replacement, provided that (i) such Part is in addition to, + and not in replacement or substitution for, any Part originally incorporated or + installed in or attached to the Aircraft at the time of delivery thereof + hereunder or any Part in replacement of, or substitution for, any such + originally incorporated or installed or attached Part, (ii) such Part is not + required to be incorporated or installed in or attached or added to the + Aircraft pursuant to the terms of this Section 9 and (iii) such Part can be + removed from the Aircraft without diminishing or impairing the value, utility, + condition, cosmetic appearance or airworthiness which the Aircraft would have + had at such time had such alteration, modification or addition not occurred. + Upon the removal by Lessee of any such Part as provided in the preceding + sentence, title thereto shall, without further act, vest in Lessee and such + Part shall no longer be deemed part + + -38- + + + + + + of the Aircraft (such a part is herein called a "Removable Part"). Lessee, at + its sole expense, shall repair any damage to the Aircraft resulting from any + such removal. Any Part not removed by Lessee as above provided prior to the + return of the Aircraft to Lessor hereunder whether pursuant to Section 16, + Section 18 or otherwise shall remain the property of Lessor. If any Removable + Part is (i) owned by any third party and leased to Lessee, (ii) sold to Lessee + subject to a conditional sales contract or other security interest or (iii) + leased to Lessee pursuant to a lease which is subject to a security interest in + favor of any third party, then Lessor will not acquire or claim, as against + such lessor, conditional vendor or secured party, any right, title or interest + in any such Removable Part as the result of such Removable Part being installed + in the Aircraft; provided, however, (a) that Lessor's inability to so acquire + or claim is subject to the express condition that such lessor, conditional + vendor or secured party shall not acquire or claim, as against Lessor, any + right, title or interest in the Aircraft, or any Part other than its interest + in such Removable Part by reason of such Removable Part being installed + thereon, and (b) that all of Lessee's right, title and interest in and to any + Removable Part not removed by Lessee within sixty (60) days after an Event of + Default shall, at such time, automatically become the property of Lessor and be + subject to this Lease. + + In addition, with the prior written consent of the + Beneficiaries, Lessee may, at its own expense, substitute or replace any Part + that is originally installed on the Aircraft on the Delivery Date with another + Part provided that (i) no such substitution or replacement diminishes the + remaining warranty, value or utility, or impairs the condition or + airworthiness, of the Aircraft, (ii) title to all Parts incorporated or + installed in or attached or added to the Aircraft as the result of such + substitution or replacement shall vest immediately in Lessor free and clear of + Liens, other than those permitted by Section 14, and become subject to this + Lease, without the necessity for any further act of transfer, document or + notice, (iii) such substituted or replacement Parts can be removed from the + Aircraft without diminishing or impairing the value, utility, condition, + cosmetic appearance or airworthiness which the Aircraft would have had at such + time had such substitution or replacement not occurred, (iv) Lessee, at its + sole expense, shall repair any damage to the Aircraft resulting from any such + removal, and (v) nothing herein shall diminish or alter any of Lessee's + obligations under Section 16 or Exhibit E hereof to return the Aircraft on the + Return Occasion with all Parts (or substitution or replacement Parts of the + same make and model) that were originally installed on the Aircraft in the + condition required thereby (and including within this clause (v) + + -39- + + + + + + Lessee's obligation by the Return Occasion to re-install any Part for which a + substitution or replacement Part was installed on the Aircraft pursuant to this + paragraph). + + In no event shall Lessor bear any liability or cost for any + alteration, modification or addition to, or for any grounding or suspension of + certification of, the Aircraft, or for any loss of revenue arising therefrom. + Lessee shall make no material alterations, modifications or additions to the + Aircraft (such as removal of seats, galleys, lavatories, major avionics + equipment or the like) that would affect the marketability of the Aircraft + without Lessor's and each Beneficiary's prior written consent. if Lessor and + each Beneficiary grant such consent, title to such removed Parts shall remain + with Lessor and Lessor and the Beneficiaries may request Lessee to reinstall + such Parts prior to termination of this Lease. If Lessor or Beneficiaries + request Lessee to reinstall such Parts, title to the Parts removed shall vest + in Lessee. All costs associated with such removal and reinstallation shall be + borne by Lessee. + + Section 10. GENERAL TAX INDEMNITY. + + (a) CERTAIN UNITED STATES TAXES. Lessee shall indemnify and + hold each Indemnitee harmless from and against all United States Withholding + Taxes (as defined herein) and United States Transportation Taxes (as defined + herein) which are imposed on such Indemnitee after the date hereof as a result + of a Tax Law Change (as defined herein). All payments required to be made by + Lessee under this Lease or any other Operative Document to any Indemnitee shall + be made free and clear of, and without deduction for or on account of, any such + United States Withholding Taxes or United States Transportation Taxes. If any + such United States Withholding Taxes or United States Transportation Taxes are + required to be withheld or deducted from any such payments, Lessee shall (i) + within the period for payment permitted by applicable law pay to the + appropriate Governmental Entity or taxing authority the full amount of such + United States Withholding Taxes or United States Transportation Taxes (and any + such additional United States Withholding Taxes or United States Transportation + Taxes in respect of the payment required under clause (ii) hereof) and make + such reports and filings in connection therewith in the manner required by + applicable Law, and (ii) pay to the relevant Indemnitee an additional amount + which (after deduction of all Taxes of any nature incurred by reason of the + payment or receipt of such additional amount) will be sufficient to yield to + the relevant Indemnitee the full amount which would have been received by it + had no deduction or withholding been made. Lessor will, and will cause each + Indemnitee to, provide Lessee with such forms or certificates as may from time + to + + -40- + + + + + + time be requested by Lessee (and required by applicable law) in order to + establish an exemption from (or reduced rate of) any such United States + Withholding Taxes or United States Transportation Taxes. As used herein, (x) + the term "TAX LAW CHANGE" means any change after the date hereof in the Code or + any treaty or other international agreement to which the United States is a + party, any proposed, final or temporary regulations thereunder, or the judicial + or official administrative interpretation of any of the foregoing; (y) the term + "UNITED STATES TRANSPORTATION TAXES" means the Taxes described in Section 887 + of the Code or any successor to such Section; and (z) the term "UNITED STATES + WITHHOLDING TAXES" means Taxes imposed by the United States and which are + collected by withholding at source, or deduction from, any payments by Lessee + hereunder. Notwithstanding the foregoing, Lessee shall have no responsibility + for, and shall be entitled to withhold and deduct from payments hereunder or + any other Operative Documents, any such United States Withholding Taxes or + United States Transportation Taxes: + + (A) which are imposed by reason of a voluntary transfer or + other disposition by the relevant Indemnitee of the Aircraft or this + Lease or any interest in either thereof (but not including any transfer + or disposition which occurs pursuant to the exercise of remedies arising + out of an Event of Default) or which exceed the amount of such United + States Withholding Taxes or United States Transportation Taxes which + would have been imposed had there not been such a transfer or + disposition; + + (B) which are imposed on an Indemnitee by reason of a failure + by such Indemnitee to comply with its obligations set forth in the second + preceding sentence of this Section 10(a) or as a direct result of the + breach by such Indemnitee of this Lease or the gross negligence or + willful misconduct of such Indemnitee; + + (C) which are imposed solely as a direct result of events or + circumstances occurring or arising after return of the Aircraft to Lessor + in accordance with this Lease and the performance by Lessee of all of its + obligations hereunder; or + + (D) which the relevant Indemnitee is entitled to utilize as a + credit against or in reduction of its liability, if any, for Taxes + imposed by the United States for which Lessee is not responsible under + Section 10(b) hereof. + + (b) GENERAL TAX INDEMNITY. In addition, and whether or not + any of the transactions contemplated by any of the Operative Documents + are consummated, except as set + + -41- + + + + + + forth in Section 10(c), Lessee agrees for the express benefit of each + Indemnitee to pay promptly when due, and to indemnify and hold harmless such + Indemnitee from, all Taxes (whether imposed upon such Indemnitee, the Aircraft, + the Airframe, the Engines, this Lease or any other Operative Document or + otherwise), by any Governmental Entity or taxing authority in the United States + of America or any other country or any taxing authority or political + subdivision thereof or therein or by any international taxing authority, upon + or with respect to, based upon or measured by any of the following: + + (i) (x) the Aircraft, the Airframe, any Engine or any Part thereof, or + interest therein, this Lease or any of the other Operative Documents, (y) the + importation, exportation, condition, manufacture, purchase (under the + Operative Documents or otherwise), ownership, delivery, redelivery, + nondelivery, acceptance, rejection, assignment, possession, repossession, + return, use, performance, operation, control, settlement of any insurance or + other claim, sale, mortgaging, pledging, financing, leasing, subleasing, liens, + rental, retirement, abandonment, registration, preparation, installation, + modification, repair, testing, maintenance, replacement, transportation, + storage, location, condition, registration, reregistration, deregistration, + sale, transfer of title or other application or disposition of the Aircraft, + the Airframe, any Engine or any Part thereof or (z) the rentals, receipts or + earnings arising therefrom (including without limitation the Rent) and any + other amounts paid or payable with respect thereto or under any Operative + Document, or + + (ii) the Lease or the other Operative Documents, or + + (iii) otherwise with respect to or in connection with the transactions + contemplated by the Lease and the other Operative Documents. + + (c) EXCEPTIONS TO INDEMNITY. The indemnity provided for in + Section 10(b) does not extend to any of the following Taxes: + + (i) Taxes imposed on any Indemnitee in any jurisdiction in which such + Indemnitee is subject to such Taxes solely as a result of transactions or + activities unrelated to the transactions or activities contemplated by the + Operative Documents; + + -42- + + + + + + (ii) Taxes imposed on an Indemnitee as a result of a voluntary + transfer or other disposition of the Aircraft or this Lease or any interest in + either thereof by the Lessor or such Indemnitee unless such transfer or + disposition occurs pursuant to the exercise of remedies arising out of an Event + of Default (provided that Lessor and such Indemnitee shall in such event + consider in good faith any reasonable request by Lessee concerning an + appropriate jurisdiction in which such sale, transfer or disposition shall be + made); + + (iii) Taxes attributable solely to events or circumstances occurring + or arising after return of the Aircraft to Lessor in accordance with this Lease + and the performance by Lessee of all of its obligations hereunder; + + (iv) Taxes on an Indemnitee resulting solely as a direct result of the + breach of this Lease, gross negligence or willful misconduct of such + Indemnitee; + + (v) Taxes which (A) are United States federal income Taxes (other than + United States Withholding Taxes or United States Transportation Taxes) or any + value added, consumption or similar Taxes which are imposed in lieu of or in + replacement of United States federal income Taxes to which the relevant + Indemnitee was theretofore subject or (B) are Taxes on, based on, or measured + by the net income of an Indemnitee and are imposed by any Governmental Entity + (other than the United States) or taxing authority thereof (or any Taxes which + are expressly imposed by such Governmental Entity or taxing authority in lieu + of Taxes on, based on, or measured by net income) except to the extent that + such Taxes are imposed by reason of the use or operation of the Aircraft, the + presence of Lessee or the making of payments by Lessee from, such jurisdiction; + PROVIDED, HOWEVER, that this exclusion shall not apply to Taxes which are, or + are in the nature of, sales, use, excise and similar Taxes; + + (vi) Taxes (other than Taxes described in Section 10(c)(v)) which are + imposed in any taxing jurisdiction except to the extent that (A) such Taxes are + imposed solely by reason of the use or operation of the Aircraft, the presence + of Lessee or the making of payments by Lessee from, such jurisdiction ("Use + Jurisdiction Taxes") and (B) such Use Jurisdiction Taxes exceed in the + aggregate the amount of Taxes which would have been payable in such + jurisdiction in the absence therein of the use or operation of the Aircraft, + the presence of Lessee or the making of payments by Lessee from, such + jurisdiction; + + -43- + + + + + + (vii) Taxes arising out of, with respect to, based on or measured by + the granting by any Indemnitee of a security interest in the Aircraft or any + portion thereof or the value or principal amount of any debt created by any + Indemnitee; or + + (viii) Taxes for which the relevant Indemnitee has expressly assumed + responsibility under this Lease or any other Operative Document. + + (d) AFTER TAX BASIS. The amount which Lessee is required to + pay or indemnify against with respect to any amounts required to be paid or + indemnified against under this Section 10 or Section 13 shall include an + additional amount necessary to hold the recipient of the payment or indemnity + harmless on an after-tax basis from all Taxes (whether or not such taxes are + excluded under Section 10(a) or 10(c)), required to be paid by such recipient + with respect to such payment or indemnity, so as to restore the recipient on an + after-tax basis to the same position such recipient would have been in had such + amounts not been incurred or payable, after giving credit to Lessee for any + savings by such recipient in respect to any such Taxes by reason of deductions, + credits, allocations, or allowances in respect of the payment or accrual of the + amount indemnified against, including, without limitation, amounts described in + Section 10(a), Section 10(b) and/or this Section 10(d). All determinations as + to the amount and timing of realization of such tax savings shall be made by + the relevant Indemnitee in its sole good faith discretion, it being understood + that (i) Lessee shall have no right to examine or inspect any tax returns or + reports of such Indemnitee or any documents or records relating thereto, and + that (ii) a failure by the relevant Indemnitee to comply with its obligations + under this Section 10(d) shall not excuse Lessee from the performance of its + obligations under this Section 10 or Section 13. + + (e) TIMING OF PAYMENT. Any amount due and payable to the + relevant Indemnitee pursuant to this Section 10 will be paid within 10 days + after receipt of a written demand therefor from such Indemnitee accompanied by + a written statement describing in reasonable detail the basis for such + indemnity and the computation of the amount so payable; PROVIDED, HOWEVER, that + such amount need not be paid by Lessee prior to the later of (i) five days + prior to the date the applicable Tax is payable to the appropriate Governmental + Entity or taxing authority or (ii) in the case of amounts which are being + contested by Lessee in good faith or by Lessor pursuant to Section 10(f), the + date such contest is finally resolved. If requested in writing by Lessee, and + at Lessee's sole cost and expense, any calculations by an Indemnitee of any + amount due and payable + + -44- + + + + + + hereunder shall be subject to review and verification by a firm of independent + certified public accounts of internationally recognized stature selected by + such Indemnitee and reasonably acceptable to Lessee (such approval not to be + unreasonably withheld or delayed). Such Indemnitee shall make available to such + accounting firm such information as shall be necessary for purposes of such + review and verification (but such information shall be held by such accounting + firm in strictest confidence and shall not in any event be disclosed or made + available to Lessee). If the result of such review is that Lessee was liable + for a smaller amount, the excess payment shall be returned by such Indemnitee + forthwith. + + (f) TAX CONTESTS. (i) If written claim is made against an + Indemnitee for, or any Indemnitee acquires actual knowledge of a claim relating + to, Taxes with respect to which Lessee is or may be liable for a payment or + indemnity hereunder, such Indemnitee will, and Lessor shall cause such + Indemnitee to, promptly give Lessee notice in writing of such claim or Tax; + PROVIDED, HOWEVER, that such Indemnitee's failure to give notice will not + relieve Lessee of its obligations hereunder, except as to Taxes and expenses + which would have been avoidable in the absence of, and penalties resulting + from, such Indemnitee's failure to give such notice. So long as (i) a contest + of such Taxes does not involve any danger of the sale, forfeiture or loss of + the Aircraft or any interest therein, (ii) Lessee has provided Lessor with an + opinion of independent tax counsel acceptable to such Indemnitee that a + meritorious basis exists for contesting such claim and (iii) Lessee has made + adequate reserves for such Taxes or, if required by the relevant Indemnitee, an + adequate bond has been posted by Lessee, then the Indemnitee at Lessee's + written request will in good faith, with due diligence and at Lessee's sole + cost and expense, contest (or, upon Lessee's written request, permit Lessee to + contest in the name of the Indemnitee) the validity, applicability or amount of + such Taxes. If such contest is to be initiated by the payment of, and the + claiming of a refund for, any Taxes, Lessee shall advance to the relevant + Indemnitee sufficient funds (on an interest-free basis) to make such payments + and shall have agreed to indemnify such Indemnitee for any tax consequences + resulting from such advance of funds. Although the relevant Indemnitee may + consult in good faith with Lessee concerning the conduct of any contest, such + Indemnitee shall control the conduct of all proceedings relating to any such + contest which is brought by or on behalf of such Indemnitee. Any contest + initiated hereunder may be settled or discontinued by the relevant Indemnitee + at any time provided that such Indemnitee shall have waived any right to + indemnification for the Taxes being contested. Notwithstanding the foregoing, + if (x) a claim relates solely to Taxes for which + + -45- + + + + + + the Lessee has acknowledged in writing that it is liable under this Section 10, + (y) such claim can be severed and contested separately from all other claims + asserted against the relevant Indemnitee by the same taxing authority, and (z) + Lessee has made adequate reserves for the Taxes claimed or, if requested by + such Indemnitee, has posted an adequate bond for the payment of such Taxes, + then Lessee may, at its sole cost and expense, assume control of the contest of + such claim, provided that Lessee shall keep such Indemnitee fully informed as + to the conduct of all proceedings relating to such contest. + + (g) REFUNDS. Upon receipt by the relevant Indemnitee of a + refund of all or any part of any Taxes (including without limitation any + deductions or withholdings referred to in Section 10(a)) which Lessee has paid, + such Indemnitee will, and Lessor will cause such Indemnitee to, pay to Lessee + the net amount of such taxes refunded, together with any interest (and, to the + extent previously paid by Lessee, any attorneys' fees or other costs awarded as + a result of a contest pursuant to Section 10(f)) received by such Indemnitee + with respect thereto; PROVIDED, HOWEVER, that no amount shall be payable to the + Lessee under this Section 10(g) if a Default or an Event of Default shall have + occurred and be continuing or prior to the time that Lessee shall have paid to + the relevant Indemnitee all amounts then due and owing to such Indemnitee under + this Section 10. + + (h) COOPERATION IN FILING TAX RETURNS. In case any report or + return is required with respect to any Taxes which are subject to + indemnification by Lessee under this Section 10, Lessee will either make such + report or return in such manner as will show the respective interests of Lessor + and/or each relevant Indemnitee in the Aircraft, and send a copy of such report + or return to Lessor and such Indemnitee or will notify the Lessor or such + Indemnitee of such requirement, prepare such report or return in such manner as + shall be reasonably satisfactory to the Lessor or such Indemnitee, and present + such report or return to Lessor or such Indemnitee for execution and proper + filing. If actual notice is given by any taxing authority to an Indemnitee that + a report or return is required to be filed with respect to any such Taxes + referred to in this Section 10, the Indemnitee shall, and Lessor shall cause + the Indemnitee to, promptly notify Lessee of such required report or return. + Each Indemnitee agrees, and Lessor shall cause each Indemnitee, to respond to + any reasonable request of Lessee for information within the control of such + Indemnitee with respect to the filing of any such report or return, but Lessee + agrees to pay any reasonable costs, fees or other charges of independent + counsel or independent accountants incurred in connection with such response or + request. Lessee will cooperate with each Indemnitee in providing + + -46- + + + + + + information which may reasonably be required to fulfill such Indemnitee's tax + filing requirements and any audit information request arising from such filing. + Each Indemnitee shall, and Lessor shall cause each Indemnitee to, cooperate + with Lessee in providing information which may reasonably be required to + fulfill Lessee's tax filing requirements and any audit information request + arising from such filing. + + (i) TAX SAVINGS. If as a result of the payment or accrual of + Taxes paid or indemnified by the Lessee an Indemnitee shall realize and + recognize any savings with respect to Taxes, such Indemnitee shall promptly + notify the Lessee that it has realized and recognized such savings and shall + pay to the Lessee within thirty (30) days of the realization of such savings an + amount equal to (i) the net reduction in Taxes realized and recognized by such + Indemnitee and (ii) the amount of any further net reduction in taxes realized + and recognized under such tax laws as a result of payments pursuant to this + sentence; PROVIDED, HOWEVER, that no amount shall be payable to the Lessee + under this Section 10(i) if a Default or an Event of Default shall have + occurred and be continuing or prior to the time that Lessee shall have paid to + the relevant Indemnitee all amounts then due and owing to such Indemnitee under + this Section 10 and that a subsequent disallowance of any such tax savings + shall be subject to indemnity hereunder without regard to any exclusions set + forth in this Section 10. All determinations as to the amount and timing of + realization of such tax savings shall be made by the relevant Indemnitee in its + sole good faith discretion, it being understood that (i) Lessee shall have no + right to examine or inspect any tax returns or reports of such Indemnitee + or any documents or records relating thereto, and that (ii) a failure by the + relevant Indemnitee to comply with its obligations under this Section 10(i) + shall not excuse Lessee from the performance of its obligations under this + Section 10. + + (j) REVERSE INDEMNITY. If Lessee shall be required to pay any + amount attributable to Taxes of any Indemnitee for which Lessee is not + responsible under this Section 10, such Indemnitee shall reimburse Lessee for + the amount of any such excess payment within 5 days after demand therefor. + + Section 11. CASUALTY OCCURRENCES. + + (a) CASUALTY OCCURRENCE WITH RESPECT TO THE AIRFRAME. + Promptly (and in any event within seven (7) days) after a Casualty Occurrence + with respect to the Airframe and any Engine then installed thereon, Lessee + shall give Lessor and each Beneficiary written notice of such occurrence. On + the thirtieth (30th) day (or earlier if the insurance or + + -47- + + + + + + other proceeds have been paid earlier) after the date of the Casualty + Occurrence, Lessee shall pay to Lessor in immediately available funds the + sum of (A) the Casualty Value of the Aircraft less an amount equal to the + daily equivalent of Basic Rent (computed on the basis of a 365-day year) + for each day during the period commencing the day after the payment of + Casualty Value and extending to the day before the Basic Rent Payment Date + immediately succeeding the date of payment of such Casualty Value and (B) + all other Rent, other than amounts paid pursuant to clause (A), then due + and payable. Upon such payment (i) the obligation of Lessee to make further + payments of Basic Rent hereunder shall terminate, (ii) the Term shall + terminate with respect to the Aircraft and (iii) Lessor will transfer to + Lessee or applicable insurer, free and clear of Lessor's Liens and all other + Liens arising by or through Lessor, any Beneficiary or any Lender but + otherwise without recourse or warranty, all of Lessor's right, title and + interest, if any, in and to the Airframe and Engines (if any) suffering the + Casualty Occurrence, as well as all of Lessor's right, title and interest in + and to any Engine constituting part of the Aircraft but not installed + thereon at the time of the Casualty Occurrence; provided, however, that + there shall be excluded from such transfer any and all claims against any + Persons which arose prior to the date of such transfer, including without + limitation any and all claims against any Persons who may have been + responsible, in whole or in part, for the events giving rise to such + Casualty Occurrence. + + (b) CASUALTY OCCURRENCE WITH RESPECT TO AN ENGINE. Upon a + Casualty Occurrence with respect to an Engine only, Lessee shall give Lessor + and each Beneficiary prompt written notice thereof and shall, within forty-five + (45) days after such occurrence, convey to Lessor, as replacement for the + Engine suffering a Casualty Occurrence, title to a Replacement Engine; + PROVIDED, HOWEVER, that such 45-day period shall be extended to 180 days after + the occurrence of such Casualty Occurrence if Lessee shall, prior to the end of + such 45-day period, have delivered to Lessor or the Beneficiaries all proceeds + of the insurance payable with respect to such damaged Engine and the amount of + such proceeds is at least equal to the replacement value thereof (as determined + reasonably and in good faith by the Beneficiaries). Each Replacement Engine + shall be (i) free of all Liens, (ii) in as good an operating condition as the + Engine being replaced, assuming the Engine being replaced was in the condition + and repair required by the terms hereof immediately prior to the Casualty + Occurrence, and (iii) in a condition (including as to the status of all logs, + records and technical documents) acceptable to the Beneficiaries in their sole + discretion, as evidenced by their written acknowledgement thereof. Prior to or + at the time of any such conveyance, Lessee, at its own expense, will promptly + + -48- + + + + + + (i) furnish Lessor with a full warranty bill of sale, in form and substance + reasonably satisfactory to Lessor and each Beneficiary, with respect to such + Replacement Engine; (ii) cause a supplement hereto, in form and substance + reasonably satisfactory to Lessor and each Beneficiary, subjecting such + Replacement Engine to this Lease, to be duly executed by Lessee, and recorded + pursuant to applicable Law; (iii) furnish Lessor and each Beneficiary with such + evidence of title to such Replacement Engine and of compliance with the + insurance provisions of Section 12 hereof with respect to such Replacement + Engine as Lessor or such Beneficiary may reasonably request; (iv) if reasonably + requested by Lessor or any Beneficiary, furnish Lessor with an opinion of + Lessee's counsel to the effect that title to such Replacement Engine has been + duly conveyed to Lessor and each Beneficiary, and that such Replacement Engine + is duly leased hereunder; (vi) furnish a certificate signed by a duly + authorized financial officer or executive of Lessee certifying that, upon + consummation of such replacement, no Default will exist hereunder; (vii) + furnish Lessor and each Beneficiary with such documents (including but not + limited to all technical documents) as Lessor or such Beneficiary may + reasonably request in connection with the consummation of the transactions + contemplated by this Section 11(b), in each case in form and substance + satisfactory to Lessor and such Beneficiary; and (viii) furnish such financing + statement covering the Replacement Engine as may be requested by Lessor or any + Beneficiary. Upon full compliance by Lessee with the terms of this Section + 11(b), Lessor will transfer to Lessee all of Lessor's right, title and interest + in the Engine which suffered the Casualty Occurrence free and clear of Lessor's + Liens and all other Liens arising by or through Lessor, any Beneficiary or any + Lender. For all purposes hereof, each such Replacement Engine shall be deemed + part of the property leased hereunder, shall be deemed an "Engine" as defined + herein and shall be deemed part of the Aircraft. No Casualty Occurrence covered + by this Section 11(b) shall result in any reduction in Rent. + + (c) APPLICATION OF PROCEEDS AND PAYMENTS. Any payments + received at any time by Lessor or by Lessee from any insurer under any policy + of insurance (other than liability insurance) shall be applied in the manner + specified in Section 12(d), 12(e) or 12(f) hereof as applicable. Subject to + Section 11(f) hereof, any payments received at any time by Lessor or Lessee + from any Governmental Entity or other Person with respect to a Casualty + Occurrence will be applied as follows: + + (i) unless clause (ii) below is applicable, so much of such + payments as shall not exceed the Casualty Value required to be paid by + Lessee + + -49- + + + + + + pursuant to Section 11(a) of this Lease shall be paid to Lessor in + reduction of Lessee's obligation to pay such Casualty Value if not + already paid by Lessee or, if already paid by Lessee (unless a Default + shall have occurred and be continuing), shall be applied by Lessor to + reimburse Lessee for its payment of such Casualty Value and the balance + of such payment, if any, remaining thereafter (if such payment is + received with respect to insurance other than liability insurance) + (unless a Default shall have occurred and be continuing) shall be paid + over to, or retained by, Lessee, except to the extent any such amount + is specifically allocable to an interest of Lessor; or + + (ii) if such payments are received as a result of a Casualty + Occurrence with respect to an Engine which is being replaced pursuant + to Section 11(b), unless a Default shall have occurred and be + continuing (and except as otherwise contemplated by Section 11(b) if + the 45-day period specified for the replacement thereof is to be + extended to 180 days, as therein provided), all such payments shall be + paid over to, or retained by, Lessee if Lessee shall have fully + performed or, concurrently therewith has fully performed, the terms of + Section 11(b) and of Section 15 hereof with respect to the Casualty + Occurrence for which such payments are made. + + (d) REQUISITION FOR USE BY GOVERNMENT WITH RESPECT TO THE + AIRCRAFT. In the event of the requisition for use by a Governmental Entity of + the Airframe or any Engine (other than a requisition constituting a Casualty + Occurrence), all Lessee's obligations under this Lease with respect to the + Airframe or Engine shall continue to the same extent as if such requisition had + not occurred. All payments received by Lessor or Lessee from the Governmental + Entity for the use of the Airframe or Engine during the Term therefor shall be + paid over to, or retained by, Lessee if no Default shall have occurred and be + continuing; and all payments received by Lessor or Lessee from the Governmental + Entity for the use of such item after the Term therefor shall be paid over to, + or retained by, Lessor. + + (e) OTHER DISPOSITIONS. Any amounts not payable to or + retainable by Lessee pursuant to this Section 11 or Section 12 hereof because a + Default shall have occurred and be continuing shall be held by Lessor and shall + be paid over to Lessee when such Default shall cease to be continuing, except + that if Lessor shall have theretofore declared this Lease to be in default + pursuant to Section 18 hereof, such amounts shall be retained by Lessor and + disposed of in + + -50- + + + + + + accordance with the provisions thereof, with any balance remaining to be paid + to Lessee. + + (f) APPLICATION IN DEFAULT. Any amount referred to in clause + (i) or (ii) of Section 11(c) which is otherwise payable to Lessee shall not be + paid to Lessee, or, if it has been previously paid to Lessee, and not yet + applied by Lessee as permitted or required hereunder shall be delivered from + Lessee to Lessor if at the time of such payment a Default shall have occurred + and be continuing. In such case, all such amounts shall be paid to and held by + Lessor as security for the obligations of Lessee or, at the option of Lessor, + applied by Lessor toward payment of any of Lessee's obligations at the time due + hereunder, as Lessor may elect. At such time as there shall not be continuing + any such Default, all such amounts at the time held by Lessor in excess of the + amount, if any, which Lessor has elected for application as provided above + shall be paid to Lessee. + + Section 12. INSURANCE. + + (a) PUBLIC LIABILITY AND PROPERTY DAMAGE INSURANCE. Lessee + will carry and maintain in effect, at its own expense, with Approved Insurers, + comprehensive public liability insurance (including, without limitation, + contractual liability and passenger legal liability) and property damage + insurance with respect to the Aircraft of the type usual and customary by + commercial scheduled airline standards for airline carriers operating similar + aircraft and providing for no less coverage than is carried by Lessee on + similar aircraft in its fleet. Such insurance shall be in an amount not less + than the amount applicable to similar passenger aircraft and engines which + comprise Lessee's fleet, and in any event not less than the amount under + "Public Liability and Property Damage Insurance" as set forth on Exhibit C-2 + hereto Lessee shall not discriminate against the Aircraft in providing such + insurance. + + (b) INSURANCE AGAINST LOSS OR DAMAGE. Lessee, at its own + expense, will maintain in effect with Approved Insurers "all-risk" ground and + flight aircraft hull insurance (which shall include, but not be limited to, + comprehensive war risk and allied perils, hijacking, a disappearance clause and + coverage against strikes, riots, commotions or labor disturbances, malicious + acts or acts of sabotage and unlawful seizure (including confiscation, arrest, + nationalization, seizure, restraint, detention, appropriation, requisition or + destruction thereat, by or under authority of any Governmental Entity), or + wrongful exercise of control of the Aircraft in flight by a person on board the + Aircraft acting without the consent of Lessee) covering the Aircraft and "all + risk" coverage insurance with + + -51- + + + + + + respect to Engines and Parts while not installed on the Aircraft or an + aircraft, which in each case is at least as broad as coverage maintained by + passenger airlines similarly situated to Lessee and operating similar aircraft + and engines which comprise Lessee's fleet (it being understood that the + obligations hereby imposed upon Lessee by reference to coverage maintained by + other airlines is not intended to result in an increase in the definition of + Casualty Value). Such insurance shall be for an amount not less than the + Casualty Value for the Aircraft and, where "all-risk" hull and war risk are + insured separately, shall, in relation to the applicable policies, incorporate + a 50/50 clause based on AVS 103, between the underwriters. Such insurance may + include provisions for deductibles in an amount usual and customary by + commercial scheduled airline standards for airline carriers operating similar + aircraft provided that (i) the amount of such deductibles must be no greater + than the lowest deductible amount applying to any B737-25A aircraft in Lessee's + fleet and (ii) in no event shall the amount of such deductibles exceed the + amount under "Deductible Amount" set forth on Exhibit C-2 hereto. + + (c) REQUIRED POLICY DESIGNATIONS AND PROVISIONS. Each and any + policy of insurance obtained and maintained pursuant to this Section, and each + and any policy obtained in substitution or replacement for any such policies, + shall: (i) designate Lessor as owner of the Aircraft covered thereby, and shall + designate Lessor (in its individual capacity and as Owner Trustee), each + Beneficiary and their assigns as additional insureds (and, with respect to each + policy of insurance obtained and maintained pursuant to Section 12(b) hereof, + Beneficiaries as loss payee), as their interests may appear warranted each as + to itself no operational interest (but without imposing upon Lessor, any + Beneficiary or their assigns, any obligation to pay any premiums for any such + policies); (ii) expressly provide that, in respect of the interests of Lessor, + each Beneficiary and their assigns, in such policies, the insurance shall not + be invalidated by any action or omission of Lessee, and shall insure Lessor, + such Beneficiary and their assigns, regardless of any breach or violation of + any warranty, declaration or condition contained in such policies by Lessee; + (iii) provide that if such insurance is canceled by the Approved Insurers for + any reason whatsoever, or is adversely changed in any way with respect to the + interests of Lessor, any Beneficiary or their assigns, or if such insurance is + allowed to lapse for nonpayment of premium, such cancellation, adverse change + or lapse shall not be effective as to Lessor, such Beneficiary and their + assigns, for thirty (30) days (seven (7) days or such lesser period as may be + applicable in the case of any war risks or allied perils coverage) after + receipt by Lessor and such Beneficiary of written notice by such insurer or + insurers to + + -52- + + + + + + Lessor and such Beneficiary of such prospective cancellation, change or lapse, + (iv) include coverage for the territorial limits of any country in which the + Aircraft may at any time be located; (v) provide that, as against Lessor, each + Beneficiary and their assigns, the insurer waives any rights of set-off, + counterclaim or any other deduction, whether by attachment or otherwise, and + waives any rights it may have to be subrogated to any right of any insured + against Lessor, such Beneficiary or their assigns, with respect to the Aircraft + to the same extent that Lessee has waived its rights of subrogation by the + terms of its agreements to indemnify any such party pursuant to this Lease; and + (vi) provide that (a) unless Lessor or any Beneficiary shall provide written + notice to the Approved Insurers that an Event of Default shall have occurred + and be continuing, any payment in respect of any damage or loss not in excess + of $500,000 shall be payable directly to the Lessee or its order; PROVIDED, + that Lessor and each Beneficiary shall be given prompt written notice of any + payment in respect of any damage or loss to the Aircraft in excess of $150,000 + and (b) any payment in respect of any damage or loss in excess of $500,000 (or + all proceeds whether or not in excess of $500,000 if an Event of Default shall + have occurred and be continuing), shall be payable directly to the + Beneficiaries or their assignees as loss payees, for the account of all + interests. Each such liability policy shall be primary without right of + contribution from any other insurance which may be carried by Lessor, any + Beneficiary or their assigns, and shall expressly provide that all of the + provisions thereof shall operate in the same manner as if there were a separate + policy covering each insured, provided that such provisions shall not operate + to increase the insurer's limit of liability. + + Lessee shall have the right to carry insurance in reasonable + excess of the amounts required hereunder and the proceeds of such excess + insurance shall be payable to Lessee; PROVIDED that any such excess insurance + shall not prejudice the insurance required to be maintained by Lessee hereunder + and Lessee shall, upon request of a Beneficiary, notify the Beneficiaries of + the nature and amount of such excess insurance. Similarly, Lessor and each + Beneficiary shall have the right to carry additional and separate insurance for + its own benefit at its own expense, without, however, thereby limiting Lessee's + obligations under this Section 12. + + (d) APPLICATION OF INSURANCE PROCEEDS FOR A CASUALTY + OCCURRENCE. It is agreed that insurance payments which arise from any policy of + insurance carried by Lessee and received as the result of the occurrence of a + Casualty Occurrence shall be applied as follows: + + -53- + + + + + + (i) if such payments are received with respect to a Casualty + Occurrence relating to the Airframe and Engines or engines installed on + the Airframe, so much of such payments as shall not exceed the amounts + due under Section 11(a) hereof shall be paid to Lessor for immediate + application toward sums owed by Lessee, and the balance to Lessee; and + + (ii) if such payments are received with respect to a Casualty + Occurrence relating to an Engine under circumstances contemplated by + Section 11(b) hereof, such payment shall be paid over to Lessee, + provided that Lessee shall have fully performed or, concurrently + therewith, fully performs the terms of Section 11(b) hereof. + + (e) APPLICATION OF INSURANCE PROCEEDS FOR OTHER THAN A +CASUALTY OCCURRENCE. As between Lessor and Lessee all insurance payments in +excess of $500,000 that are received by Lessor or the Beneficiaries under +policies required to be maintained by Lessee pursuant to Section 12(b) as a +result of any property damage or loss to the Airframe or any Engine not +constituting a Casualty Occurrence, or to any Part will be held by Lessor or +the Beneficiaries until Lessee furnishes Lessor with satisfactory evidence +that the repairs or replacement property Lessee is required to perform or +obtain in accordance with the terms of Section 9 of this Lease have been made +or obtained by Lessee or, to the extent necessary to enable Lessee to make +required progress payments in accordance with the workscope relating to the +repair of the Aircraft, Lessor or the Beneficiaries shall make such interim +progress payments upon receipt of copies of appropriate invoices or other +evidence of the completion of the related work or the purchasing of related +materials in accordance with the terms of such workscope or the related +repair contract. Upon receipt of such evidence of repair or replacement, +Lessor shall pay Lessee the amount of the insurance payment received with +respect to such loss less the amount of any progress payments made to Lessee +pursuant to this Section 12(e). + + (f) APPLICATION IN DEFAULT. Any amount referred to in +Section 12(d)(i) or (ii) or Section 12(e) which is otherwise payable to +Lessee shall not be paid to Lessee, or, if it has been previously paid to +Lessee, shall be delivered by Lessee to Lessor, if at the time of such +payment, an Event of Default shall have occurred and be continuing. In either +case, all such amounts shall be held by Lessor as security for the +obligations of Lessee or, at the option of Lessor, applied by Lessor toward +payment of any of Lessee's obligations at the time due hereunder. At such +time as + + + -54- + + + +there shall not be continuing any such Event of Default, all such amounts at +the time held by Lessor in excess of the amount, if any, which Lessor has +elected for application as provided above shall be paid to Lessee. + + (g) CERTIFICATES OF INSURANCE. On or before the Delivery +Date, and thereafter on each renewal by Lessee of the insurance required +hereby, but not less often than annually, Lessee will furnish to Lessor and +each Beneficiary a certificate executed and delivered by an Approved Insurance +Broker who is authorized by an Approved Insurer, appointed by Lessee, +describing in reasonable detail insurance carried on the Aircraft and +certifying that the insurance then maintained on the Aircraft complies with +Section 12 of this Lease. Lessee will cause such Approved Insurance Broker who +is authorized by an Approved Insurer to agree to advise Lessor and each +Beneficiary in writing at least thirty (30) days (seven (7) days or such lesser +period as may be applicable in the case of any war risk and allied perils +coverage) prior to the termination or cancellation by the underwriters for any +reason (including, without limitation, failure to pay the premium therefor) of +any such insurance. Lessee further agrees to cause such Approved Insurance +Broker (i) to advise Lessor and each Beneficiary in writing (x) as soon as such +Approved Insurance Broker has knowledge that any insurance coverage carried and +maintained on the Aircraft pursuant to this Section 12 will not be renewed or +available upon expiration of the then existing insurance and (y) not later than +seven (7) days prior to the expiration of the then existing insurance if Lessee +has not given notice renewal instructions to the Approved Insurance Broker, and +(ii) to deliver directly to Lessor and each Beneficiary the certificate of +insurance described above in this paragraph (g) upon such renewal. + + (h) Any insurance described above shall be placed and +maintained throughout the Term in the London, Tokyo, United States, French or +German aviation insurance markets with Approved Insurers, and Lessee's +obligations under this Section 12 shall not be terminated or diminished in any +respect for any reason, including any subleasing of the Aircraft; PROVIDED, +HOWEVER, that if, in connection with any sublease of the Aircraft permitted +hereby, the Permitted Sublessee is required by law to place or maintain some or +any part of the insurance required hereby in an aviation insurance market other +than the London, Tokyo, United States, French or German aviation insurance +market, then Lessee shall cause such Permitted Sublessee to place and maintain +in the London, Tokyo or United States aviation insurance market re-insurance +policies fully covering such insurance, and any such re-insurance policy shall +contain a "cut through" clause in form, scope and substance reasonably +satisfactory to Lessor and each Beneficiary. In the event + + + -55- + + + +of any sublease of the Aircraft, Lessee shall cause to be delivered to Lessor +and to each Beneficiary at least five Business Days prior to the commencement +of such sublease, appropriate certificates of insurance and re-insurance +complying with the requirements of CLAUSE (g) above. + + (i) Notwithstanding anything in this Section 12 to the +contrary, during the period of any CRAF activation contemplated in Section +11(d) of this Lease, Lessor will accept the indemnification by the full faith +and credit of the United States government in lieu of the insurance coverage +required by this Section 12; provided, however, that (i) such indemnification +by the United States government shall provide coverage against the same risks +and on the terms as the risks and terms required by Section 12, (ii) such +indemnification shall be in amounts that are not less than the insurance +coverage contemplated in this Section 12, and (iii) Lessee shall not subject +the Aircraft to the CRAF program without the Beneficiaries, prior written +consent. + + Section 13. INDEMNIFICATION. + + Subject only to the limitations described in the last +paragraph of this Section 13, Lessee agrees to indemnify, reimburse, hold +harmless, protect and defend each Indemnitee for, from and against any and all +claims, damages, losses, liabilities, demands, suits, judgments, causes of +action, legal proceedings, whether civil or criminal, penalties, fines and +other sanctions, and any reasonable attorney's fees and other reasonable costs +and expenses in connection herewith or therewith, including any of the +foregoing arising or imposed with or without Lessor's or Beneficiaries' fault +or negligence (whether passive or active) or under the doctrine of strict +liability (any and all of which are hereafter referred to as "Claims") which in +any way may result from, pertain to or arise in any manner out of, or are in +any manner related to (i) the Aircraft or any this Lease or Operative Documents +or any document executed in connection herewith, or the breach of any +representation, warranty or agreement made by Lessee hereunder or under any +other such document, or (ii) the condition, manufacture, re-delivery, lease, +acceptance, rejection, possession, return, disposition, storage, maintenance, +use or operation of the Aircraft either in the air or on the ground, or (iii) +any defect in the Aircraft (whether or not discovered or discoverable by Lessee +or Lessor or any Beneficiary) arising from the material or any articles used +therein or from the design, testing or use thereof or from any maintenance, +service, repair, overhaul or testing of the Aircraft, whether or not the +Aircraft is in the possession of Lessee, and regardless of where the Aircraft +may then be located, or (iv) any transaction, + + + -56- + + + +approval or document contemplated by this Lease, Operative Documents or given +or entered into in connection herewith; provided, however, that Lessee shall be +subrogated to all rights and remedies which Lessor may have against the +Manufacturer of the Aircraft and its subcontractors or any other party as to +any such Claims, but only to the extent that Lessee satisfies its +indemnification to the Indemnitees with respect to such Claims. Nothing herein +shall require Lessee to indemnify any Indemnitee in respect of any Claim to the +extent the facts or circumstances that form the basis for such Claim arose or +existed prior to the Delivery Date, unless such Claim or any losses, costs +(including attorneys, fees or expenses) or damages arise or are increased as a +result of a breach by Lessee of its agreements herein or otherwise relate to +such a breach (including the breach of any obligation to remedy a fact or +circumstance that arose or existed prior to the Delivery Date). In the event +Lessee is required to indemnify any Indemnitee hereunder, Lessee shall, upon +demand, pay to such Indemnitee an amount which, after deduction of all Taxes +and like charges required to be paid by such Indemnitee in respect of such +payment, is equal to the amount of the indemnification required; provided, +however, that Lessee shall not be required to pay or discharge any Claim +brought by a third party so long as the validity or the amount thereof shall be +diligently contested in good faith and on reasonable grounds by Lessee, at no +cost or expense to Lessor. + + Subject to Lessee's rights under Section 20(f), Lessee hereby +waives, and releases each Indemnitee from, any Claims (whether existing now or +hereafter arising) for or on account of or arising or in any way connected with +injury to or death of personnel of Lessee or loss or damage to property of +Lessee or the loss of use of any property which may result from or arise in any +manner out of or in relation to the ownership, leasing, condition, use or +operation of the Aircraft, either in the air or on the ground, or which may be +caused by any defect in the Aircraft from the material or any article used +therein or from the design or testing thereof, or use thereof, or from any +maintenance, service, repair, overhaul or testing of the Aircraft regardless of +when such defect may be discovered, whether or not the Aircraft is at the time +in the possession of Lessee, and regardless of the location of the Aircraft at +any such time. + + The indemnities contained in this Section 13 shall continue +in full force and effect notwithstanding the expiration or other termination of +this Lease and are expressly made for the benefit of and shall be enforceable +by each Indemnitee; PROVIDED, that, unless an Event of Default shall have +occurred and be continuing, Lessee shall not be obligated to pay any indemnity +pursuant to this + + + -57- + + + +Section 13 with respect to any amount to the extent that such amount arises out +of or is measured by acts, failures to act, events or periods of time (or any +combination of the foregoing) that occur after the Aircraft has been +redelivered to Lessor pursuant to and in accordance with Section 16 hereof +(under circumstances not involving a repossession pursuant to Section 18 +hereof) and is no longer subject to this Lease and all obligations of the +Lessee under this Lease have been discharged (other than obligations which by +their express terms survive the expiration of the Term of this Lease) unless +any such act or event shall itself result from or be attributable to an act or +omission of Lessee which occurred prior to the redelivery of the Aircraft and +the discharge of Lessee's obligations under the Lease. + + Notwithstanding the foregoing provisions of this Section 13, +Lessee shall not be obligated to make any payment by way of indemnity to any +Indemnitee in respect of any Claims to the extent such Claims result from the +willful misconduct or gross negligence of such Indemnitee or to the extent +relating solely to the breach or misrepresentation of Lessor or a Beneficiary +under an Operative Document. + + Section 14. LIENS. + + Lessee shall not directly or indirectly create, incur, +assume or suffer to exist any Lien on or with respect to the Aircraft or +Engines, title thereto or any interest therein, except (i) the respective +rights of Lessor and Lessee as herein provided; (ii) Lessor's Liens or any +other Lien arising by or through Lessor, a Beneficiary or a Lender with +respect to the Aircraft or Engines; (iii) Liens for Taxes either not yet due +or being contested in accordance with Section 10 hereof, so long as adequate +reserves are maintained with respect to such Liens and so long as the +Aircraft or such Engine is not in danger of being lost, sold, confiscated, +forfeited or seized as a result of any such Lien or contest; and (iv) +inchoate materialmen's, mechanics', workmen's, repairmen's, employees' or +other like Liens arising in the ordinary course of business, which either are +not due and owing or are being contested in good faith by Lessee so long as +the Aircraft or such Engine is not in danger of being lost, sold, +confiscated, forfeited or seized as a result of any such Lien or contest. +Lessee shall promptly, at its own expense, take such action as may be +necessary to duly discharge any Lien (except for the Liens referred to in +clauses (i), (ii), (iii) and (iv) of this Section 14) if the same shall arise +at any time with respect to the Aircraft or any Engine (including any Part). + + + -58- + + + + Section 15. PERFECTION OF TITLE AND FURTHER ASSURANCES. + + If at any time, any filing or recording is reasonably +necessary to protect the interests of Lessor or the Beneficiaries, Lessee, upon +request by Lessor or any Beneficiary, shall cause this Lease and any and all +additional instruments which shall be executed pursuant to the terms hereof, to +be kept, filed and recorded and to be re-executed, re-filed and re-recorded in +the appropriate office or offices pursuant to applicable Laws, to perfect, +protect and preserve the rights and interests of Lessor hereunder and in the +Aircraft. At the reasonable request of Lessor or any Beneficiary, Lessee shall +furnish to Lessor and each Beneficiary an opinion of counsel or other evidence +satisfactory to Lessor of each such filing or re-filing and recordation or +re-recordation. All costs (including attorneys' fees and expenses) relating to +effecting and maintaining the registration of this Lease, including the Lease +Supplement, or any related document, shall be borne and paid by Lessee. All +costs (including attorneys' fees and expenses) relating to effecting and +maintaining the registration of the Aircraft with the FAA shall be borne and +paid by Lessor or the Beneficiaries, provided that Lessee shall cooperate with +Lessor and the Beneficiaries in connection therewith as provided above and bear +the cost of changing the registration number of the Aircraft. + + Without limiting the foregoing, Lessee shall do or cause +to be done, at Lessee's cost and expense, any and all acts and things which +may be required under the terms of the Mortgage Convention to perfect and +preserve the title and interest of Lessor in the Aircraft within the +jurisdiction of any signatory which has ratified the Mortgage Convention if +such jurisdiction is in the territory in which Lessee intends to operate the +Aircraft, as Lessor or any Beneficiary may reasonably request. Lessee shall +also do or cause to be done, at its own expense, any and all acts and things +which may be required of an aircraft operator under the terms of any other +Law involving any jurisdiction in which Lessee intends to operate, or any and +all acts and things which Lessor or any Beneficiary may reasonably request, +to perfect and preserve Lessor's ownership rights regarding the Aircraft +within any such jurisdiction. + + In addition, Lessee will promptly and duly execute and +deliver to Lessor such further documents and assurances and take such further +actions as it may from time to time reasonably request in order to more +effectively carry out the intent and purpose of this Lease and to establish +and protect the rights and remedies created or intended to be created in +favor of Lessor hereunder, including, without limitation, if reasonably +requested by Lessor at the expense + + + -59- + + + +of Lessee, the execution and delivery or supplements or amendments hereto in +recordable form, subjecting to this Lease any Replacement Engine and the +recording or filing of counterparts thereof, in accordance with the Laws of any +appropriate jurisdiction. + + Section 16. RETURN OF AIRCRAFT AND RECORDS. + + (a) RETURN. + + (i) On the Return Occasion, Lessee will, unless Casualty + Occurrence has occurred, at its expense, redeliver the + Aircraft to Lessor at the Return Location in a condition + complying with the requirements of Exhibit E and this + Section 16: + + (A) free and clear of all Liens (other than Lessor's Liens + or any Lien arising by or through Lessor, any Beneficiary + or any Lender); + + (B) having the benefits of any indemnities and warranties + which have been assigned to and are held by Lessee + relating to the Aircraft assigned to Lessor; + + (C) duly registered in the name of Lessor with the FAA; + + (D) unless otherwise agreed by the Beneficiaries in a + condition so as to ensure the Aircraft has either a + current, valid and existing certification of + airworthiness for airline operation or (at the + Beneficiaries, election) an export certificate of + airworthiness, in either case, issued by the FAA; and + + (E) if specified by the Beneficiaries, Lessee shall cooperate + with Lessor to ensure that the Aircraft is deregistered + from the FAA; + + provided that Lessee complies with the foregoing and with all + of its obligations under this Lease, Lessor shall technically + accept redelivery of the Aircraft from Lessee at Lessee's + maintenance facilities in Honolulu, Hawaii before the + commencement of any storage period (it being understood that + if during the ferry flight to the Return Location any defect + or non-compliance which was purportedly corrected in connection + with the Final Inspection shall reoccur, Lessee shall be + responsible for rectifying such defect or non-compliance); + PROVIDED, HOWEVER, that if a C Check shall be performed in + connection with the Return + + + -60- + + + Occasion, then such technical inspection and acceptance shall + occur at the location of the facility in the United States of + America or Canada approved by FAA for C Check of 737-200 + aircraft at which such C Check is performed. + + (ii) In the event that Lessee does not return the Aircraft to + Lessor on the specified date of expiration or earlier + termination of this Lease, for any cause (other than due + to the fault of Lessor, any Beneficiary or the Lender), + then the obligations of Lessee under this Lease shall + continue and such continued use shall not be considered a + renewal of the terms of this Lease or a waiver of any + right of Lessor hereunder and Lessor may terminate + Lessee's right as to the Aircraft on written notice to + Lessee and Lessee shall fully indemnify Lessor, the + Lender and each other Indemnitee on demand against all + losses, liabilities, actions, proceedings, costs and + expenses thereby suffered or incurred by Lessor, the + Lender or any other Indemnitee. During such continued + use, damages in an amount equal to Basic Rent (as + provided below) shall continue to be paid by Lessee to + Lessor, and the performance of other obligations of + Lessee to Lessor shall continue hereunder. Basic Rent + shall be pro-rated on a daily basis for each day until + the Aircraft is actually delivered to Lessor, and all + other terms and conditions of this Lease shall remain in + full force and effect. Payment shall be made promptly + upon presentation of Lessor's invoice and any failure to + pay shall constitute a default of Lessee. + + (b) FINAL INSPECTION. At least 10 days prior to redelivery of the +Aircraft, Lessee will take the Aircraft out of service and make the Aircraft +and all Aircraft Documents available to Lessor and the Beneficiaries for +inspection at Lessee's facilities in Honolulu, Hawaii (or at the location of +the facility in the United States of America or Canada approved by FAA for +the C Check of 737-200 aircraft at which the C Check shall be performed, as +provided in Section 16(a)(i) above, if applicable) (the "Final Inspection") +in order to verify that the condition of the Aircraft complies with this +Lease, and Lessor's and the Beneficiaries, representatives shall use their +reasonable efforts to cause their representatives to commence such compliance +verification as promptly as practicable at or following the beginning of such +10-day period. Lessee agrees, at the Beneficiaries, request, to furnish due +evidence that all service, maintenance, repairs, overhauls and modifications +required under this Lease have been duly + + + -61- + + + +performed. Lessee shall make available to Lessor and the Beneficiaries at +Lessee's principal maintenance base, not less than fifteen (15) Business Days +prior to commencement of the Final Inspection, such documentation regarding the +condition, use, maintenance, operation and history of the Aircraft during the +Term, as requested by the Beneficiaries in order to enable Lessor and the +Beneficiaries to verify that the condition of the Aircraft complies with this +Lease. To the fullest extent possible, the Final Inspection shall be carried +out during the C Check referred to in paragraph 2(a) of Exhibit E. The Final +Inspection will consist of and be long enough to permit Lessor and the +Beneficiaries to: + + (i) generally review, test (as observer) and inspect the + Aircraft to Lessor's and the Beneficiaries, satisfaction + (which will include the opening of any areas of the + Aircraft if Lessor or the Beneficiaries reasonably + believe, based on prior inspections or other evidence, + that the opening of such areas would reveal that the + Aircraft does not completely comply with the requirements + of Exhibit E and this Section 16), to satisfy Lessor and + the Beneficiaries that the Aircraft completely complies + with the requirements of Exhibit E and this Section 16; + + (ii) inspect the Aircraft Documents; + + (iii) inspect the un-installed Parts; + + (iv) observe a two hour demonstration flight (with up to four + of Lessor's or the Beneficiaries' representatives as + on-board observers); + + (v) inspect the Engines, including, without limitation (i) by + observing a performance test in accordance with limits set + forth in the engine section of the Aircraft Maintenance + Manual and (ii) by performing a full and complete + borescope inspection of (a) the low pressure and high + pressure compressors and (b) turbine area; and + + (vi) inspect the APU, including, without limitation (i) an APU + condition run (as observer) and (ii) by a full and + complete borescope inspection. + +The actions contemplated by the foregoing clauses (i) through (iv) shall be +performed at Lessee's expense; provided that, unless an Event of Default +shall have + + + -62- + + + +occurred or any inspection carried out under the foregoing clauses (i) +through (iv) reveals discrepancies which require a further inspection, Lessee +shall not be required to bear the travel and lodging expenses of Lessor's or +the Beneficiaries, representatives. + + (c) NON-COMPLIANCE. To the extent that, at the time of Final +Inspection, the condition of the Aircraft does not comply with this Lease, +Lessee will at the Beneficiaries, option: + + (i) immediately rectify the non-compliance and, to the + extent the non-compliance extends beyond the Return + Occasion, the Term will be automatically extended + (including the obligation to pay Rent as referred to + in Section 16(a)(ii)) and this Lease will remain in + force until the non-compliance has been rectified; or + + (ii) redeliver the Aircraft to Lessor and pay to Lessor + such amount as is mutually agreed to put the Aircraft + into the condition required by this Lease. Lessor + shall make all reasonable efforts to minimize such + costs. + + (d) REDELIVERY. If applicable, upon redelivery Lessee will +provide to Lessor and the Beneficiaries all documents (other than those as may +be required to be supplied by Lessor or the Beneficiaries) necessary to export +the Aircraft from the United States (including, without limitation, a valid and +subsisting export license, if applicable, for the Aircraft) and required in +relation to the deregistration of the Aircraft with the FAA. + + In the event that Beneficiaries request Lessee to secure an +export license (a) such request must be made upon sufficient notice in order to +grant Lessee adequate time to procure such export license, (b) Lessor will +render such timely assistance as is reasonably necessary, and (c) this may be +requested in relation to the Return Occasion or subsequent to the Return +Occasion. + + (e) ACKNOWLEDGEMENT. Upon return of the Aircraft in +accordance with the terms of this Lease, Lessor shall execute and deliver a +Redelivery Acknowledgement in the form of Exhibit I hereto to Lessee. + + (f) MAINTENANCE PROGRAM. + + (i) Prior to the Return Occasion (unless the Aircraft has + suffered a Casualty Occurrence) and upon Lessor's or a + Beneficiary's request, + + + -63- + + + + Lessee will provide Lessor or such Beneficiary or its + agent, in either case at Lessee's cost, reasonable + access to the Maintenance Program and the Aircraft + Documents in order to facilitate the Aircraft's + integration into any subsequent operator's fleet. + + (ii) Lessee will, if requested by Lessor or a Beneficiary + to do so, upon return of the Aircraft deliver to + Lessor or the Beneficiaries a certified true, current + and complete copy of the Maintenance Program in + English. Lessor and the Beneficiaries agree that they + will not disclose the contents of the Maintenance + Program to any person or entity except to the extent + necessary to monitor Lessee's compliance with this + Lease and/or to bridge the maintenance program for the + Aircraft from the Maintenance Program to another + maintenance program after the Return occasion. + + (g) FUEL. The amount of fuel in the Aircraft shall be no less +than the amount of fuel upon Delivery Date. If requested by Lessor, Lessee will +fuel the Aircraft in excess of the required amount by the preceding sentence at +the Return Location, and Lessor will pay for the fuel exceeding such +requirement on board the Aircraft on the Return Occasion at the direct cost +paid by Lessee (without mark-up). + + (h) STORAGE. If the Final Inspection is carried out in +Honolulu, Hawaii and a Beneficiary requests in writing then Lessee shall, at +Lessee's cost and expense during the first sixty (60) days and thereafter +Lessor's cost and expense, provide Lessor with, or assist Lessor in procuring, +storage facilities for the Aircraft for up to one hundred twenty (120) days. +Such storage shall be at Lessee's maintenance base or if such maintenance base +will be eventually unable to perform the required maintenance, any other +location agreed between Lessor and Lessee which base or location is capable of +performing any required maintenance on the Aircraft. With respect to the +Aircraft while in storage, Lessee will maintain, or procure the maintenance +of, an amount of fuel in each tank as required in accordance with the storage +procedures at the storage location and as set forth herein. Lessee agrees, +during such storage period, to perform, or procure the performance of, such +maintenance required to maintain the airworthiness of the Aircraft (i) in +accordance with the storage procedures prescribed by the Manufacturer or +Lessee's Maintenance Program and (ii) in a condition required to be + + + -64- + + + +maintained at redelivery pursuant to the terms of Section 16(a). Risk of loss +or damage to the Aircraft shall pass to Lessor at the commencement of storage, +but Lessee will carry insurance, with Lessor and each Beneficiary named as an +additional insured, on the Aircraft during such storage period as though the +Aircraft were to remain in Lessee's fleet in accordance with the provisions of +Section 12, except that Lessee shall not be required to maintain "all risks" +flight insurance during such storage period but shall maintain insurance +policies that cover the Aircraft in storage and test flights of the Aircraft on +an hourly basis (as typically available and maintained under similar +circumstances involving the storage and maintenance of aircraft). All amounts +hereunder relating to storage, insurance and maintenance work for the first 60 +days of such storage period shall be for the account of Lessee and thereafter, +shall be for the account of Lessor. Incremental costs incurred by Lessee after +the first 60 days of storage which would not have been incurred had such +storage period not exceeded 60 days shall be reimbursed by Lessor. Lessee +further agrees to perform, or procure the performance of, at Lessor's cost, any +other maintenance that Lessor may reasonably request. If, following the storage +of the Aircraft in Hawaii, the Beneficiaries ferry the Aircraft to a location +designated by the Beneficiaries in the Western Continental United States (the +"Designated Location"), Lessee will reimburse the Beneficiaries for the cost of +the ferry flight of the Aircraft from the storage location in Hawaii to such +Designated Location. If the Aircraft is ferried to a location other than in the +Western Continental United States, other than following a Default or an Event +of Default, then (i) the Beneficiaries will bear any additional ferry flight +costs and expenses incurred that are beyond the costs and expenses that would +have been incurred if the Aircraft were ferried to a location in the Western +Continental United States, and (ii) Lessee will bear the ferry flight costs and +expenses that are equivalent to the ferrying of the Aircraft to a location in +the Western Continental United States and shall pay such amount to Lessor or +the Beneficiaries upon demand by Lessor or the Beneficiaries therefor. + + (i) MAINTENANCE FOR RE-REGISTRATION. Lessee, at Lessee's +cost, will, upon written notice from a Beneficiary not less than sixty (60) +days prior to a Return Occasion, carry out such extra maintenance, repair or +modification as may be required to enable the Aircraft to be in a condition +to ensure that the Aircraft will meet and comply with (i) the requirements of +any other country selected by the Beneficiaries and (ii) all civil aviation +regulations, orders, rules and airworthiness directives of such country to +permit the immediate re-registration and securing of a certificate of +airworthiness in such country for the + + -65- + + + +Aircraft (provided such regulations, orders, rules and airworthiness directives +are no more restrictive than those of the FAA, and, so long as Lessee is +otherwise in compliance with this Section 16 and Exhibit E, the time required +to perform such extra maintenance shall not constitute an extension of the +Term). If the cost of such maintenance, repair or modification exceeds the cost +of the maintenance, repair or modification which Lessee would otherwise have +incurred to ensure the Aircraft shall be in condition to comply with the terms +of this Lease, Lessor shall promptly pay Lessee the difference between such +costs at actual cost (without mark-up) to Lessee. + + (j) ASSISTANCE FOR FUTURE LEASING/SALE. + + (i) Lessor or any Beneficiary may, from time to time + during the last year of the Term, wish to make the + Aircraft available for inspection to designated + representatives or technical teams evaluating the Aircraft + for use after the end of the Term. Lessor or any + Beneficiary agrees to give Lessee not less than five (5) + days, advance notice of such inspection and Lessee agrees + to co-operate fully with Lessor's or such Beneficiary's + requests in making the Aircraft and Aircraft Documents + available to such authorized technical team. Lessor agrees + to be responsible for its costs in connection with any + such inspection and that such request will be reasonable + and will be coordinated with Lessee so as not to + unreasonably interfere with the operation or maintenance + of the Aircraft or the conduct of Lessee's business + (unless an Event of Default shall have occurred and be + continuing); PROVIDED, HOWEVER, that, unless an Event of + Default shall have occurred and be continuing, no such + inspection shall result in the delay of a scheduled flight + of Lessee; + + (ii) Subject to prior coordination between the + Beneficiaries and Lessee, Lessee agrees that, during the + last year of the Term and following redelivery of the + Aircraft to Lessor, Lessee shall at any Beneficiary's + reasonable request and Lessee's cost make available to + Lessor and the Beneficiaries for such reasonable period as + the Beneficiaries may reasonably require technical and + engineering personnel qualified to provide the + Beneficiaries and any subsequent lessee or purchaser of + the Aircraft with such information as will enable any + subsequent lessee or purchaser of the Aircraft to be able + to bridge the Aircraft onto the maintenance program of + such subsequent lessee or purchaser. + + + -66- + + + + Section 17. EVENTS OF DEFAULT. + + Any one or more of the following occurrences or events shall +constitute an Event of Default: + + (a) Lessee shall fail to make any payment of Rent to Lessor +when due under this Lease and such payment shall be overdue for a period of +five (5) Business Days; + + (b) Lessee shall fail to obtain and maintain any insurance +required under the provisions of Section 12 hereof; or shall operate the +Aircraft outside of the scope of the insurance coverage maintained with respect +to the Aircraft; + + (c) Any representation or warranty made by Lessee herein or +in any document or certificate furnished to Lessor in connection herewith or +therewith or pursuant hereto is incorrect at the time given in any material +respect and such failure shall continue unremedied for a period of three (3) +Business Days after notice thereof has been given to Lessee hereunder or Lessee +otherwise has notice thereof; + + (d) Lessee shall fail to timely comply with the provisions of +Section 21 (Security Deposit) hereof; + + (e) Lessee shall directly or indirectly create, incur, assume +or suffer to exist any Lien on or with respect to the Aircraft or Engines, +title thereto or any interest therein, except as expressly permitted by Section +14; + + (f) Lessee shall at any time not be a Certified Air Carrier +holding all licenses, certificates, permits and franchises from the appropriate +agencies of the United States of America and all other governmental authorities +having jurisdiction over Lessee and its operations which are necessary to +authorize the Lessee to engage in air transport and to carry on its intra-state +passenger operations within Hawaii as presently conducted and in connection +with the operation of aircraft, including the Aircraft; or Lessee shall lose or +suffer a suspension of its United States air carrier license or certificate +under Part 121 of the FAA Regulations or certificate under Chapter 411 of +Subtitle VII, Part A of Title 49 of the United States Code, as amended; + + (g) Lessee shall fail to perform or observe in any material +respect any other covenant, condition or agreement to be performed or observed +by it pursuant to this Lease and such failure shall continue for a period of +thirty (30) days after the earlier to occur of (1) Lessee's attaining or having +knowledge thereof and (2) written notice thereof is given to Lessee; + + (h) Lessee consents to the appointment of a receiver, +trustee or liquidator of itself or of a + + + -67- + + + +substantial part of its property, or Lessee admits in writing its inability to +pay its debts generally as they come due or makes a general assignment for the +benefit of creditors, or Lessee files a voluntary petition in bankruptcy or a +voluntary petition seeking reorganization in a proceeding under any bankruptcy +laws (as now or hereafter in effect), or an answer admitting the material +allegations of a petition filed against Lessee in any such proceeding, or +Lessee by voluntary petition, answer or consent seeks relief under the +provisions of any bankruptcy or other similar law providing for the +reorganization or winding-up of corporations, or provides for an agreement, +composition, extension or adjustment with its creditors; + + (i) An order, judgment or decree is entered by any court, +with or without the consent of Lessee, appointing a receiver, trustee or +liquidator for Lessee or of all or any substantial part of its property (save +for the purposes of an amalgamation, merger or reconstruction not involving +insolvency), or all or any substantial part of the property of Lessee is +sequestered, and any such order, judgment or decree of appointment or +sequestration remains in effect, undismissed, unstayed or unvacated for a +period of sixty (60) days after the date of entry thereof; + + (j) A petition against Lessee in a proceeding under the +bankruptcy, insolvency or other similar Laws (as now or hereafter in effect) of +any Governmental Entity is filed and is not withdrawn or dismissed within sixty +(60) days thereafter, or if, under the provisions of any Law providing for +reorganization or winding-up of corporations which may apply to Lessee, any +court of competent jurisdiction assumes jurisdiction over, or custody or +control of, Lessee or of all or any substantial part of its property and such +jurisdiction, custody or control remains in effect, unrelinquished, unstayed or +unterminated for a period of sixty (60) days; + + (k) (i) A final judgment for the payment of money not covered +by insurance in excess of $500,000, or (ii) final judgments for the payment of +money not covered by insurance in excess of $500,000 in the aggregate, shall be +rendered against Lessee and the same shall remain undischarged for a period of +ninety (90) days during which execution thereof shall not be effectively stayed +by agreement of the parties involved, stayed by court order or adequately +bonded; + + (1) Attachments or other Liens shall be issued or entered +against substantially all of the property of Lessee and shall remain +undischarged or unbonded for forty-five (45) days except for security interests +created in connection with monies borrowed or obligations agreed to by Lessee +in the ordinary course of its business; + + + -68- + + + + (m) Lessee shall default in the payment of any obligation for +the payment of borrowed money, for the deferred purchase price of property or +for the payment of rent or hire under any lease of aircraft when the same +becomes due, in any such case if the outstanding amount thereof (or, in the +case of a lease, if the aggregate rentals during the term thereof) exceeds +$500,000; or Lessee shall default in the performance of any other term, +agreement or condition contained in any material agreement or instrument under +or by which any such obligation having any unpaid balance of at least +$1,000,000 is created, evidenced or secured, if the effect of such default is +to cause such obligation to become due prior to its stated maturity; or Lessee +shall default in the payment when due of any other amount owed to Lessor or +each Beneficiary; + + (n) Lessee voluntarily suspends all or substantially all of +its operations or the franchises, concessions, permits, rights or privileges +required for the conduct of the business and operations of Lessee shall be +revoked, canceled or otherwise terminated or the free and continued use and +exercise thereof curtailed or prevented, and as a result of any of the +foregoing the predominant business activity of Lessee shall cease to be that of +a commercial airline; or + + (o) An "Event of Default" (as therein defined) shall have +occurred and be continuing under any Other Lease. + + Section 18. REMEDIES. + + Upon the occurrence of any Event of Default and any time +thereafter so long as the same shall be continuing, Lessor may, at its option +and without notice to Lessee, exercise one or more of the following remedies as +Lessor in its sole discretion shall elect, to the extent available and +permitted by, and subject to compliance with any mandatory requirements of, +applicable Law then in effect: + + (a) Demand that Lessee, and Lessee shall upon the written +demand of Lessor and at Lessee's expense, immediately return the Aircraft to +Lessor at any location in Hawaii or in the continental United States as +specified by Lessor or the Beneficiaries and in the manner specified in such +notice and in the condition specified in Section 16, in which event such return +shall not be delayed for purposes of complying with the return conditions +specified in Section 16 hereof (none of which conditions shall be deemed to +affect Lessor's possession of the Aircraft) or delayed for any other reason. +Notwithstanding the foregoing, at Lessor's option Lessee shall be required +thereafter to take such actions as would be required by the provisions of this +Lease if the Aircraft were being returned at the end of the Term hereof. In +addition, Lessor, at its option and to the extent permitted by applicable Law, +may enter upon the premises where all or any part of the Aircraft is located + + + -69- + + + +and take immediate possession of and, at Lessor's sole option, remove the same +(and/or any engine which is not an Engine but which is installed on the +Airframe, subject to the rights of the owner, lessor or secured party thereof) +by summary proceedings or otherwise, all without liability accruing to Lessor +or any Beneficiary for or by reason of such entry or taking of possession +whether for the restoration of damage to property, or otherwise, caused by such +entry or taking, provided that all actions of Lessor in this respect are +reasonable in the circumstances and excepting damages caused by gross +negligence or willful misconduct. + + (b) Sell at private or public sale, as Lessor may determine, +or hold, use, operate or lease to others the Aircraft as Lessor in its sole +discretion may determine, all free and clear of any rights of Lessee; PROVIDED, +HOWEVER, that nothing herein shall be construed as limiting any right of Lessor +or any Beneficiary to sell, lease, assign or otherwise dispose of all or any +part of the Aircraft under any circumstances (whether or not during the +existence or continuance of an Event of Default) during the Term, subject only +to Lessee's rights under SECTION 20(f). + + (c) Whether or not Lessor shall have exercised, or shall +thereafter at any time exercise, any of its rights under paragraph (a) or +paragraph (b) of this Section 18, Lessor, by thirty (30) days written notice to +Lessee specifying a payment date, may demand that Lessee pay to Lessor, and +Lessee shall pay to Lessor, on the payment date specified in such notice, as +liquidated damages for loss of bargain and not as a penalty (in lieu of the +Basic Rent due for the period commencing after the date specified for payment +in such notice), any unpaid Rent for the Aircraft (prorated in the case of +Basic Rent on a daily basis) to and including the payment date specified in +such Notice, plus the aggregate amount of all payments of Basic Rent for the +remainder of the Term, discounted periodically (equal to installment frequency) +to present worth at the interest rate of four percent (4%) per annum. + + (d) In the event Lessor, pursuant to Section 18(b) above, +shall have sold the Aircraft, then Lessor, in lieu of exercising its rights +under Section 18(c) above, may, if it shall so elect, demand that Lessee pay +Lessor, and Lessee shall pay to Lessor, as liquidated damages for loss of +bargain and not as a penalty (in lieu of the Basic Rent due for the period +commencing after such sale occurs), any unpaid Rent for the Aircraft due to and +including the date of sale, plus the amount by which the Appraised Value (as +hereafter defined) of the Aircraft, computed as of the date of such sale, +exceeds the net cash proceeds of such sale. As used herein, "Appraised Value" +means the fair market sales value of the Aircraft, as determined by an +internationally recognized aircraft appraiser selected by the Beneficiaries (i) +on the basis of either a physical inspection of the Aircraft or on the basis of +a "desk top" + + + -70- + + + +appraisal, as the Beneficiaries shall determine, (ii) on the assumption that +the Aircraft has been maintained in accordance with the requirements of this +Lease and is in the condition required by Section 16 and Exhibit E, whether or +not any such assumption is in fact the case, and (iii) at Lessee's cost and +expense. + + (e) De-register the Aircraft from the Aircraft Registry at +the FAA, and proceed to re-register the Aircraft with the FAA or any other +aircraft registry of any jurisdiction, in any case, in the name of Lessor, +either or both Beneficiaries or any other Person, as the Beneficiaries shall +determine. + + (f) In the event that Lessor, pursuant to Section 18(b) +above, shall, after having exercised reasonable efforts under the +circumstances, have re-let the Aircraft under a lease which extends at least to +the date upon which the Term for the Aircraft would have expired but for +Lessee's default, Lessor, in lieu of exercising its rights under Section 18(c) +above with respect to the Aircraft, may, if it shall so elect, demand that +Lessee pay Lessor, and Lessee shall pay Lessor, as liquidated damages for loss +of bargain and not as a penalty (in lieu of the Basic Rent for the Aircraft due +after the time of re-letting) any unpaid Rent for the Aircraft due up to the +date of re-letting, plus the amount, if any, by which the aggregate Basic Rent +for the Aircraft (such Basic Rent being computed on the assumption that the +Basic Rent as in effect on the date of such demand shall remain in effect at +all times thereafter), which would otherwise have become due over the Term, +discounted periodically (equal to installment frequency) to present worth as of +the date of re-letting at the interest rate of four percent (4%) per annum, +exceeds the aggregate basic rental payments to become due under the re-letting +from the date of such re-letting to the date upon with the Term for the +Aircraft would have expired but for Lessee's default, discounted periodically +(equal to installment frequency) to present worth as of the date of the +re-letting at the interest rate of four percent (4%) per annum. + + (g) Proceed by appropriate court action or actions, either at +law or in equity, to enforce performance by Lessee of the applicable covenants +of this Lease and to recover damages for the breach thereof and to rescind this +Lease. + + (h) Terminate Lessee's right to possession and use of the +Aircraft under this Lease by written notice (which notice shall be effective +upon dispatch) and repossess the Aircraft, whereupon, Lessee shall forthwith +deliver the Aircraft and all Aircraft Documents to Lessor or the Beneficiaries +at such location as Lessor or the Beneficiaries shall specify. + + + -71- + + + + (i) Seize or foreclose upon any collateral pledged to secure +the obligations of Lessee hereunder; liquidate, dispose of, and realize upon +any such collateral; and apply the proceeds thereof to the obligations of +Lessee hereunder, in any case, as Lessor shall determine. + + (j) Draw any amount available to be drawn under any Security +Deposit or the Security Letter of Credit, and to apply the proceeds thereof to +the obligations of Lessee hereunder, in any case, as Lessor shall determine. + + In addition to the foregoing, Lessee shall be liable for any +and all unpaid Rent during or after the exercise of any of the aforementioned +remedies, together with interest on such unpaid amounts at the Overdue Rate, +and until satisfaction of all of Lessee's obligations to Lessor hereunder and +for all reasonable legal fees and other reasonable costs and expenses incurred +by Lessor by reason of the occurrence of any Event of Default or the exercise +of Lessor's remedies with respect thereto, including all costs and expenses +incurred in connection with the return of the Aircraft in accordance with the +terms of Section 16 hereof or in placing the Aircraft in the condition and with +airworthiness certification as required by such Section. + + In effecting any repossession, each of Lessor and each +Beneficiary and its representatives and agents, to the extent permitted by law, +shall: (i) have the right to enter upon any premises where it reasonably +believes the Aircraft, the Airframe, an Engine or Part to be located and Lessee +shall cooperate in giving Lessor such access; (ii) not be liable, in conversion +or otherwise, for the taking of any personal property of Lessee which is in or +attached to the Aircraft, the Airframe, an Engine or Part which is repossessed; +provided, however, that Lessor shall return to Lessee all personal property of +Lessee or its passengers which were on the Aircraft at the time Lessor re-takes +possession of the Aircraft; (iii) not be liable or responsible, in any manner, +for any inadvertent damage or injury to any of Lessee's property in +repossessing and holding the Aircraft, the Airframe, an Engine or Part, except +for that caused by or in connection with Lessor's gross negligence or willful +acts; and (iv) have the right to maintain possession of and dispose of the +Aircraft, the Airframe an Engine or Part on any premises owned by Lessee or +under Lessee's control. + + If requested by Lessor, Lessee, at its sole expense, shall +assemble and make the Aircraft, the Airframe, an engine or Part available at a +place designated by Lessor in accordance with Section 16 hereof. Lessee hereby +agrees that, in the event of the return to or repossession by Lessor of the +Aircraft, the Airframe, an Engine or Part, any rights in any warranty (express +or implied) heretofore assigned to Lessee or otherwise held by Lessee shall +without further act, notice or writing be assigned or-reassigned to + + + -72- + + + +Lessor, if assignable. Lessee shall be liable to Lessor for all reasonable +expenses (including reasonable attorneys, fees and expenses), disbursements, +costs and fees incurred in (i) re-possessing, storing and shipping the +Aircraft, the Airframe, an Engine or Part and maintaining, repairing and +refurbishing the Aircraft, the Airframe, an Engine or Part to the condition +required by Section 16 hereof and (ii) preparing the Aircraft, the Airframe, an +Engine or Part for sale or lease, advertising the sale or lease of the +Aircraft, the Airframe, an Engine or Part and selling or releasing the +Aircraft, the Airframe, an Engine or Part. Lessor is hereby authorized and +instructed, at its option, to make reasonable expenditures which Lessor +considers advisable to repair, restore, store, insure or maintain the Aircraft, +the Airframe, an Engine or Part to the condition required by Section 16 hereof, +all at Lessee's sole expense. + + Lessee shall cooperate reasonably and in good faith with +Lessor and any Beneficiary in connection with the exercise by Lessor or either +Beneficiary of the rights and remedies provided hereby or at law upon and +following the occurrence of an Event of Default, including by executing and +delivering such instruments as Lessor or any Beneficiary shall reasonably +request. In furtherance of the foregoing, Lessee hereby constitutes and +appoints Lessor as the true and lawful agent and attorney-in-fact for Lessee +for purposes of executing and delivering any instrument that may be necessary +or appropriate in order to carry into effect any right or remedy of Lessor or +any Beneficiary hereunder upon and following the occurrence of an Event of +Default, including any consent to the de-registration of the Aircraft from the +FAA. Any such instrument signed pursuant to the foregoing appointment may be +signed in Lessee's name or in the name of Lessor. The foregoing appointment is +coupled with an interest and is irrevocable. + + No remedy referred to in this Section 18 is intended to be +exclusive, but, to the extent permissible hereunder or under applicable Law, +each shall be cumulative and in addition to any other remedy referred to above +or otherwise available to Lessor at Law or in equity; and the exercise or +beginning of exercise by Lessor of any one or more of such remedies shall not +preclude the simultaneous or later exercise by Lessor of any or all of such +other remedies. No express or implied waiver by Lessor of any Default shall in +any way be, or be construed to be, a waiver of any future or subsequent +Default. + + Section 19. ALIENATION. + + Lessor and each Beneficiary shall have the right at its sole +cost and expense to assign, sell, encumber or otherwise dispose of any interest +of Lessor or such Beneficiary in, to or under the Aircraft, the Trust Agreement +or this Lease and/or the proceeds hereof, subject to the rights of Lessee under +the provisions of this Lease, + + + -73- + + + +including by sale, transfer, pledge, assignment or other disposition to any +Lender or to any other Person (other than an air carrier engaged in the airline +business); PROVIDED, HOWEVER, that unless an Event of Default shall have +occurred and be continuing, neither Lessor nor any Beneficiary shall undertake +any action that (i) interferes with Lessee's rights under Section 20(f) hereof, +(ii) disqualifies the Aircraft for registry with the FAA, or (iii) results in +an increase in any liability of Lessee under Section 10, unless Lessor and each +Beneficiary agree to waive their rights to be indemnified for any such increase +in liability. To effect or facilitate any such sale, transfer, pledge, +assignment, or other disposition, Lessee agrees to provide, at Lessor's sole +cost and expense, such agreements, consents, conveyances or documents as may be +reasonably requested by Lessor or such Beneficiary, which shall include, +without limitation, a consent to such disposition executed by Lessee and in the +case of an assignment of the Lease (other than an assignment for security +purposes) an unrestricted release of Lessor from any obligations under this +Lease arising after the date of such assignment; PROVIDED, HOWEVER, that such +release shall not affect any liability of Lessor or such Beneficiary arising on +or before the date of such assignment. Lessee hereby agrees that it will not +assert against an assignee any Claim or defense which it may have against +Lessor or such Beneficiary; PROVIDED, HOWEVER, that any such Claim or defense +will survive such assignment and continue to be maintained against Lessor or +such Beneficiary. No assignment or transfer hereunder shall result in Lessee +being obligated to pay for the account of Lessor or such Beneficiary any +greater amount than it would otherwise be obligated to pay hereunder, including +without limitation any obligation of Lessee to pay amounts pursuant to Section +10. The agreements, covenants, obligations, and liabilities contained herein +including, but not limited to, all obligations to pay Rent and indemnify each +Indemnitee are made for the benefit of each Indemnitee and their respective +successors and assigns. In the event this Lease is assigned, or otherwise +disposed of by Lessor or either Beneficiary, any assignee, transferee or +mortgagee shall agree in writing with Lessee as a condition precedent thereto +to be bound by the provisions of this Lease and not to disturb or otherwise +interfere with the quiet enjoyment of Lessee of the Aircraft in accordance with +the terms of this Lease so long as no Event of Default shall have occurred and +be continuing. + + Lessee shall include each Lender or any Person to whom an +interest herein is assigned as an additional insured and loss payee in +accordance with the provisions of Section 12 hereof and indemnify such Lender +to the same extent Lessee has agreed to indemnify Lessor pursuant to Sections +10 and 13 hereof. No Lender or any Person to whom an interest herein is +assigned shall have any liability for the obligations of Lessor under any +provision of this Lease. + + + -74- + + + + + + + +Section 20. MISCELLANEOUS. + + (a) SEVERABILITY, AMENDMENT AND CONSTRUCTION. Any provision of this +Lease which is prohibited or unenforceable in any jurisdiction shall, as to +such jurisdiction, be ineffective to the extent of such prohibition or +unenforceability without invalidating the remaining provisions hereof; any +such prohibition or unenforceability in any jurisdiction shall not +invalidate or render unenforceable such provision in any other jurisdiction. +To the extent permitted by Law, Lessee hereby waives any provisions of Law +which renders any provisions hereof prohibited or unenforceable in any +respect. Lessee may not assign this Lease or its rights hereunder. This +Lease supersedes any prior or contemporaneous agreements, whether oral or in +writing, of the parties hereto and shall constitute the entire agreements of +the parties hereto. No term or provision of this Lease may be changed, +waived, discharged or terminated orally, but only by an instrument in +writing expressed to be a supplement or amendment to this Lease signed under +hand by an officer of the party against which the enforcement of the change, +waiver, discharge or termination is sought. This Lease shall constitute an +agreement of lease, and nothing herein shall be construed as conveying to +Lessee any right, title or interest in the Aircraft or any Engine or Part +except as a lessee only. The headings in this Lease are for convenience of +reference only and shall not define or limit any of the terms of provisions +hereof. Whenever required by the context hereof, the singular shall include +the plural and vice versa. Reference to this Lease shall mean this Lease as +amended or supplemented from time to time. + + (b) GOVERNING LAW; JURISDICTION. This Lease shall in all respects be +governed by, and construed in accordance with, the laws of the State of New +York, except that the provisions of Section 21(a) (Security Deposit) and +Section 21(b)(vi) shall be governed by the laws of the State of Delaware. + + A. Lessee and Lessor each hereby irrevocably and expressly submit to +the non-exclusive jurisdiction of the United States District Court for the +Southern District of New York and to the New York Supreme Court, New York +County for the purposes of any suit, action or proceeding arising out of +this Lease or the Operative Documents. Final judgment against Lessee or +Lessor in any such suit shall be conclusive, and may be enforced in any +other jurisdictions by suit on the judgment or as otherwise permitted by +applicable Law, a certified or true copy of which shall be conclusive +evidence of the fact and of the amount of any indebtedness or liability of +such party therein described; PROVIDED, HOWEVER, that Lessor or Lessee may +at its option bring suit, or institute other judicial proceedings against +the other party or any of its assets, in the courts of any + + -75- + + + + + +country or place where such party or such assets may be found. + + B. Each of Lessee and Lessor hereby irrevocably waives any objection +which it may now or hereafter have to the laying of venue of any suit, +action or proceeding brought in any court located in New York City, New York +and hereby further irrevocably waives any claim that any such suit, action +or proceeding brought in any such court has been brought in an inconvenient +forum. + + C. The foregoing submission to jurisdiction shall not be construed so +as to limit the right of either party to take proceedings against the other +in whatsoever jurisdictions shall to it seem fit nor shall the taking of +proceedings in any one or more jurisdictions preclude the taking of +proceedings in any other jurisdiction, whether concurrently or not. + + D. Lessee hereby irrevocably appoints CT Corporation System, Inc., 1633 +Broadway, New York, New York 10019, as Lessee's agent and attorney-in-fact +(the "Agent"), upon whom all service of summonses and other legal processes +may be made with respect to any action, suit or proceeding relating to this +Lease or any other Operative Document. The appointment of such Agent shall +be irrevocable, and if the Agent revokes such relationship, prior to the +effective date of such revocation, Lessee shall appoint a successor, which +successor shall be in accordance with the provisions hereof. Prior to such +change Lessee shall notify Lessor of such change of Agent. Lessee consents +and agrees that any service under or in connection with this Lease shall be +duly completed and served if mailed to Lessee at its address specified below +or to the Agent at the address specified above, in either case, by +registered or certified mail. + + (c) NOTICES. All notices required under the terms and provisions hereof +shall be in writing and any such notice shall become effective when +deposited in the mails, registered with proper postage for air mail prepaid, +or, if in the form of a telegram, telex or telecopy, when received, +addressed if to the Lessee, the Lessor or any Beneficiary at their +respective addresses set forth in Exhibit C-2 (or such other address as may +be designated by the Lessee, the Lessor or such Beneficiary to the others). + + (d) LESSOR'S RIGHT TO PERFORM FOR LESSEE. if Lessee fails to make any +payment of Supplemental Rent required to be made by it hereunder or fails to +perform or comply with any covenant, agreement or obligation contained +herein, Lessor or any Beneficiary shall have the right but not the obligation + to make such payment or conform or comply with such agreement, covenant or +obligation, and the amount of such payment and the amount of the reasonable +expenses of Lessor or such Beneficiary incurred in connection with such +payment or the performance thereof or compliance therewith, + + -76- + + + + + +together with interest thereon at the Overdue Rate, shall be payable by +Lessee to Lessor or such Beneficiary (as Supplemental Rent) upon demand. +Lessor agrees to notify Lessee in writing prior to making any payment under +this Section 20(d) (giving Lessee the opportunity to rectify the omission), +unless the Aircraft will be in danger of loss, sale, confiscation, +forfeiture or seizure should such payment not be made. The taking of any +such action by Lessor or any Beneficiary pursuant to this Subsection 20(d) +shall not constitute a waiver or release of any obligation of Lessee under +the Lease, nor a waiver of any Event of Default which may arise out of +Lessee's nonperformance of such obligation, nor an election or waiver by +Lessor of any remedy or right available to Lessor under or in relation to +this Lease. + + (e) COUNTER PARTS. This Lease may be executed simultaneously in two or +more counterparts, each of which shall be deemed an original, but all of +which together shall constitute one and the same instrument. To the extent, +if any, that this Lease constitutes chattel paper (as such term is defined in + the Uniform Commercial Code as in effect in any applicable jurisdiction) no +security interest in this Lease may be created through the transfer or +possession of any counterpart other than the counterpart which has been +marked "Counterpart No. 1 - Chattel Paper Original" on the cover page +thereof. + + (f) QUIET ENJOYMENT. Lessor covenants that so long as an Event of +Default shall not have occurred and be continuing, Lessee shall be entitled +to quiet use, possession and enjoyment of the Aircraft in accordance with +the terms of this Lease, without interference by Lessor or by any Person +lawfully claiming by or through Lessor. + + (g) BROKERS. Each party agrees to indemnify and hold the other harmless +from and against any and all claims, suits, damages, costs and expenses +(including, but not limited to, reasonable attorneys' fees) asserted by any +agent, broker or other third party for any commission or compensation of any +nature whatsoever based upon the lease of the Aircraft, if such claim, +damage, cost or expense arises out of any action or alleged action by the +indemnifying party, its employees or agents. + + (h) FUNDING INDEMNITY. Without prejudice to any other rights Lessor or +each Beneficiary may have under the terms of this Lease or any of the +Operative Documents or otherwise, + + (A) if Lessor or each Beneficiary (and/or any of Beneficiary's + Affiliates) enters into any Dollar based bank funding or + financing arrangement (including, without limitation, any swap, + hedge or similar arrangement, but excluding any currency swap or + currency hedge to which Lessee has not + + -77- + + + + + + consented) in connection with the fixing of the Basic Rent, + which is payable during the Term, and if the Aircraft shall not + be delivered to Lessee in accordance with the terms of this + Lease (other than by reason of the willful default of Lessor), + Lessee shall indemnify Lessor or each Beneficiary (and/or any of + Beneficiary's Affiliates) against, and shall pay on an after tax + basis to Lessor or each Beneficiary (and/or any of Beneficiary's + Affiliates) forthwith on demand, subject to the proviso set + forth below, all costs, fees (including, without limitation, + legal fees) expenses, obligations, liabilities and any other + amounts notified by the Beneficiaries to the Lessee (which + notification shall set out in reasonable detail the calculation + of the amounts claimed therein and such notification shall, in + the absence of manifest error, be conclusive) as having been + incurred, suffered or expended by Lessor or any Beneficiary + (and/or any of Beneficiary's Affiliates) or arising in connection + with the amendment, variation, rolling over, termination, + reconstitution, hedging, unwinding, covering or other adjustment + of any Dollar based bank funding or financing arrangement + (including, without limitation, any swap, hedge or similar + arrangement, but excluding any currency swap or currency hedge to + which Lessee has not consented) entered into or committed by + Lessor or any Beneficiary (and/or any of Beneficiary"s Affiliates) + for the purposes of the financing of the Aircraft and/or its + leasing to Lessee on the basis of the Basic Rent provided for + under this Lease; PROVIDED, HOWEVER, that if the interruption of + the Beneficiaries' funding results in a gain to the Beneficiaries + (net of Taxes or other charges incurred in connection therewith), + then, so long as no Default exists, the Beneficiaries shall remit + the amount of such gain (net of their costs relating to the + negotiation, preparation and execution of this Agreement and the + consummation of the transactions contemplated hereby) to Lessee; + + (B) if an Event of Default occurs and the Aircraft is not delivered + or is repossessed in accordance with the terms of this Agreement + or otherwise, or if the Term is terminated earlier than the + Expiration Date by any reason including but not limited to the + early termination of the Term referred in clause 2(ii)(B) of the + Supplemental Agreement or a Casualty Occurrence (if such Casualty + Occurrence is covered by the insurance required by Section 12), + then Lessee shall indemnify Lessor or each Beneficiary (and/or + Beneficiary's Affiliate) against and shall pay on + + -78- + + + + + + an after tax basis to Lessor (and/or Beneficiary's Affiliate) + forthwith on demand, subject as provided below, all reasonable + costs, fees (including, without limitation, legal fees), expenses + obligations, liabilities and other amounts notified by the + Beneficiaries to Lessee (which notification shall set out the + calculation of the amounts claimed therein and such notification + shall, in the absence of manifest error, be conclusive) as having + been incurred, suffered or expended in connection with the + amendment, variation, rolling over, termination, reconstitution, + hedging, unwinding, covering or other adjustment of any Dollar + based bank funding or financing arrangement (including, without + limitation, any swap, hedge or similar arrangement, but excluding + any currency swap or currency hedge to which Lessee has not + consented) entered into or committed by Lessor or each Beneficiary + (and/or any of Beneficiary's Affiliates) for the purposes of the + financing of the Aircraft by Lessor or each Beneficiary and/or its + leasing of the Aircraft to Lessee on the basis of the fixed Basic + Rent provided for under this Lease; + + PROVIDED THAT the provisions of (A) or (B) shall not impose or be + deemed to impose on Lessee any obligation for payment of any + amount representing the principal amount of any bank funding + or financing arrangement. + + (i) PAYMENTS IN U.S. DOLLARS. All amounts to be paid hereunder to +Lessor or Lessee shall be paid in Dollars, in immediately available funds. +Lessee acknowledges that the specification of Dollars in this transaction is +of the essence and that Dollars shall be the currency of account in any and +all events. The obligations of Lessee or Lessor hereunder, to Lessor or +Lessee, respectively, shall not be discharged by an amount paid in another +currency, whether pursuant to a judgment or otherwise, to the extent that the + amount so paid on prompt conversion to Dollars under normal banking +procedures does not yield the amount of Dollars owing to Lessor. In the +event that any payment by Lessee or Lessor, respectively, whether pursuant +to judgment or otherwise to Lessor or Lessee, respectively, upon conversion +does not yield such amount of Dollars, Lessor or Lessee, as the case may be, +shall have a separate cause of action against Lessee or Lessor, as the case +may be, for the additional amount necessary to yield the amount of Dollars +due and owing to Lessor or Lessee, as the case may be. + + (j) COSTS. Each party hereto shall bear its own costs in respect of the +preparation, negotiation and execution of this Lease, the Lease Supplement +and any document ancillary thereto; PROVIDED, HOWEVER, that Lessor shall bear + + -79- + + + + + +the costs and expenses incurred in connection with the registration of the +Aircraft with the FAA (including the legal fees and expenses of special FAA +counsel) and Lessee shall bear the costs and expenses incurred in connection +with the filing and registration of the Lease and any change in the FAA +registration number of the Aircraft requested by Lessee and approved by the +Beneficiaries (including, without limitation, the legal fees and expenses of +special FAA counsel). + + (k) CONFIDENTIALITY. Neither Lessor nor Lessee hereto shall, at any +time during the Term or after its termination or expiration, disclose to any +Person any information relating to the matters set forth in this Lease or +the business, financial or other affairs a confidential nature relating to +the other party which may, in the course of the transactions contemplated +hereby, have been disclosed or discovered, except that any such information +may be so disclosed (i) with the written authority of the other party +hereto, (ii) so far as may be necessary for the proper performance of its +obligations hereunder, including the filing of this Lease with the FAA, +(iii) to the extent required by law, ordered by a court of competent +jurisdiction or by the relevant Governmental Entity responsible for taxation +or any other applicable regulatory authority, (iv) to such party's auditors, +counsel or other professional advisers, (v) to any Affiliate of a +Beneficiary and (vi) to the extent required in connection with a public +offering of debt or equity securities by Lessee. The parties hereto shall +use all reasonable endeavors to prevent any such disclosure as aforesaid, +except that Lessor or any Beneficiary may provide any potential purchaser of +the Aircraft, any Lender or any potential assignee of this Lease or any of +the Operative Documents with such information that any such person shall +reasonably request of Lessor or such Beneficiary. + + (l) SECTION 1110. The parties agree that Lessor and the Beneficiaries +are entitled to the benefits and protections of Section 1110 of the U.S. +Bankruptcy Code ("Section 1110"), and Lessee shall take such actions and +effect such filings as may be necessary to enable Lessor and the +Beneficiaries to continue to be entitled to such benefits and protections at +all times from the date of the execution and delivery hereof until such time +as the Aircraft is returned to Lessor or the Beneficiaries in compliance +with the return conditions herein and this Lease is terminated. Lessee +acknowledges that this Section is of fundamental importance to the +transactions contemplated hereby and that neither Lessor nor the +Beneficiaries would have entered into this Lease but for the rights intended +to be conveyed to Lessor and the Beneficiaries by this Section and the +protection and benefits of Section 1110. + + (m) CONCERNING THE LESSOR. Wilmington Trust Company is entering into +this Lease solely in its capacity + + -80- + + + + + +as Trustee under the Trust Agreement and not in its individual capacity. As +such, Wilmington Trust Company shall not be liable for or on account of any +statements, representations, warranties, covenants or obligations stated to +be those of Lessor hereunder. + + (n) TRUE LEASE. THIS LEASE SHALL CONSTITUTE AN AGREEMENT OF LEASE AND +IS A TRUE OPERATING LEASE, AND NOTHING HEREIN SHALL BE CONSTRUED AS +CONVEYING TO LESSEE ANY RIGHT, TITLE, OR INTEREST IN THE AIRCRAFT OR ANY +ENGINE OR PART EXCEPT AS A LESSEE ONLY. WITHOUT LIMITING THE FOREGOING, +LESSEE WILL NOT FILE A TAX RETURN OR TAKE ANY OTHER ACTION WHICH IS +INCONSISTENT WITH THE FOREGOING. + + Section 21. SECURITY DEPOSIT. + + (a) SECURITY DEPOSIT. Lessor hereby acknowledges Beneficiaries' receipt +from Lessee of the Security Deposit subject to the Security Deposit +Adjustment. In the event that the transactions contemplated by this Lease +are not consummated (other than due to the fault of Lessee or the occurrence +of an Event of Default), Lessor shall cause the Beneficiary to refund the +Security Deposit (so long as no Default or Event of Default has occurred, +without deducting any costs incurred by any Beneficiary or Lessor in +connection with the proposed leasing of the Aircraft hereunder but after +deducting the break funding costs incurred by the Beneficiaries and specified + in Section 20(h), if any) to Lessee. The Security Deposit is received by +Lessor or the Beneficiaries as security for the timely and faithful +performance by Lessee of all of Lessee's obligations under this Lease, and +Lessee hereby grants Lessor a security interest therein and in all other +sums deposited under this Section 21(a). Lessee agrees to execute and file +with the appropriate Governmental Entities any and all documents necessary +or reasonably requested by Lessor or any Beneficiary to evidence and perfect +such security assignment in favor of Lessor. If Lessee fails to pay Rent +hereunder when due or to pay any other sums due or to perform any of the +other terms and provisions of this Lease or is otherwise in Default +hereunder, in addition to all other rights Lessor shall have under the New +York Uniform Commercial Code as a secured party, Lessor may use, apply or +retain all or any portion of the Security Deposit in partial payment for +sums due to Lessor by Lessee, to compensate Lessor for any sums it may in +its discretion advance as a result of a Default by Lessee or to apply toward +losses or expenses Lessor may suffer or incur as a result of Lessee's +Default hereunder. If Lessor uses or applies all or any portion of such +Security Deposit, such application shall not be deemed a cure of any +Defaults, and Lessee shall within five (5) days after written demand +therefor deposit with Lessor in cash an amount sufficient to restore the +Security Deposit to the aggregate amount of such Security Deposit prior to +Lessor's use or application and the failure of Lessee to do so shall be a +material breach of + + -81- + + + + + +this Lease by Lessee. Provided Lessee is not in Default under this Lease, +such Security Deposit, less any costs incurred by Lessor in connection with +the termination of the Lease or return of the Aircraft, shall be returned to +Lessee promptly after the Expiration Date and Lessee's return of the +Aircraft in compliance with Section 16 hereof. Lessee shall not be entitled +to any interest earned on the Security Deposit. + + (b) SECURITY LETTER OF CREDIT. + + (i) Lessee hereby agrees with Lessor that, subject to paragraph + (vi) below, Lessee shall deliver to Lessor (or if specified by + the Beneficiaries, the Beneficiaries) the duly executed Security + Letter of Credit for the amount specified in Exhibit C-1. + + (ii) The Security Letter of Credit shall remain in full force and + effect from the date hereof until the date that is three months + after the Expiration Date, provided that it may be renewable + annually so long as Lessor or the Beneficiaries may draw upon the + Security Letter of Credit at any time if the Security Letter of + Credit is not renewed on or before thirty (30) days prior to its + stated expiration or if Lessor or a Beneficiary receives a + termination notice from the issuing bank or institution. + + (iii) Lessor or the Beneficiaries may draw upon the Security Letter of + Credit upon the occurrence and during the continuation of an + Event of Default and apply the proceeds thereof in or towards the + satisfaction of any sum or obligation due to Lessor or any + Beneficiary by Lessee which either Lessee fails to pay on the + due date or, as the case may be, the date of demand or after any + applicable grace period permitted for the payment thereof and/or + under this Lease or any of the Operative Documents or to + compensate Lessor or any Beneficiary for any sum which it may in + its discretion advance or expend as a result of the failure of + Lessee to comply with any of its obligations under this Lease or + any of the Operative Documents or in respect of any Default or + Event of Default, in respect of any indemnity payments, in any + case by delivering to the issuing bank or institutions a notice + in accordance with the terms of the Security Letter of Credit. + No such drawing under the Security Letter of Credit shall operate + to relieve Lessee of any obligation hereunder or constitute the + satisfaction of any such obligation (except to the extent of the + proceeds of such payment actually received by Lessor and the + Beneficiaries). + + -82- + + + + + + (iv) Upon any such drawing by Lessor or a Beneficiary, Lessee shall + reimburse the issuing bank and or a Beneficiary otherwise take + such action as may be necessary in order to restore the amount + available for drawing under the Security Letter of Credit to the + amount of such Security Letter of Credit specified in Exhibit C-1 + promptly (and in any event within five Business Days) after such + Lessor's drawing and shall procure promptly that the issuing bank + or institutions forward a further letter of credit or guarantee + to Lessor evidencing that the amount has so been restored. + + (v) Provided that no Default, or Event of Default has occurred and is + continuing, Lessor shall return the Security Letter of Credit to + Lessee for cancellation promptly after the date upon which the + Aircraft is redelivered to Lessor in accordance with the terms of + this Lease. + + (vi) Notwithstanding the foregoing provisions of this Section 21(b), + Lessee may, on the Delivery Date, in lieu of the delivery to the + Beneficiaries of the Security Letter of Credit on the Delivery + Date, deposit with the Beneficiaries an amount in cash equal to + the amount of the Security Letter of Credit, as specified in + Exhibit C-1 (the "Security Letter of Credit Amount"). If Lessee + elects to make such deposit in lieu of the delivery of the + Security Letter of Credit, then Lessee shall effect such deposit + by wire transfer of funds to an account specified by one of the + Beneficiaries, and such Security Letter of Credit Amount shall + constitute part of the Security Deposit and shall be held by the + Beneficiaries as collateral security for the payment and + performance by the Lessee of its obligations hereunder and under + the other Operative Documents. The Beneficiaries shall have the + same rights, and shall be permitted to apply such Security Letter + of Credit Amount in the same manner, as is set forth in + Sections 18(i) and 21(a) above with respect to the Security + Deposit. Following the Delivery Date, Lessee shall have the + option of substituting the Security Letter of Credit described + above in this Section 21(b) in exchange for the Security Letter + of Credit Amount deposited with the Beneficiaries pursuant to + this clause (vi). To effect such substitution, Lessee shall + deliver the originally issued and executed Security Letter of + Credit (in the form and scope and in the amount required by + Exhibit C-1) to Lessor, and, promptly after Lessor's receipt + thereof, the Beneficiaries shall, so long as no Default or Event + of Default shall have occurred and be continuing, return the + Security Letter of + + -83- + + + + + + Credit Amount paid on the Delivery Date pursuant to this + clause (iv) to Lessee. If Lessee does not substitute the Security + Letter of Credit Amount with the Security Letter of Credit, so + long as no Default or Event of Default shall have occurred and be + continuing, the Security Letter of Credit Amount will be returned + to Lessee promptly after the return of the Aircraft pursuant to + Section 21(a). + + -84- + + + + + + IN WITNESS WHEREOF, Lessor and Lessee each have caused this Lease to be +duly executed by their authorized officers as of the day and year first +above written. + + + LESSOR: + + WILMINGTON TRUST COMPANY, not in its + individual capacity but solely as + Trustee f/b/o ITOCHU AirLease + (Europe) Limited and Marubeni + Airleasing (U.K.) + + + By: /s/ Myfanwy Phillips Bonilla + ---------------------------- + Name: Myfanwy Phillips Bonilla + Title: Assis. Vice President + + + + LESSEE: + + ALOHA AIRLINES, INC. + + + By: + ---------------------------- + Name: + Title: + + + By: + ---------------------------- + Name: + Title: + + + + + + + IN WITNESS WHEREOF, Lessor and Lessee each have caused this Lease to be +duly executed by their authorized officers as of the day and year first +above written. + + + LESSOR: + + WILMINGTON TRUST COMPANY, not in its + individual capacity but solely as + Trustee f/b/o ITOCHU AirLease + (Europe) Limited and Marubeni + Airleasing (U.K.) + + + By: + ---------------------------- + Name: + Title: + + + + LESSEE: + + ALOHA AIRLINES, INC. + + + By: /s/ James M. King + ---------------------------- + Name: James M. King + Title: Vice President - Planning + and Development + + + By: /s/ Owen Sekimura + ---------------------------- + Name: Owen Sekimura + Title: Staff Vice President - + Finance and Controller + + + -15- + + + + + + EXHIBIT A + to + AIRCRAFT LEASE AGREEMENT + + SCHEDULE AND DESCRIPTION OF AIRCRAFT + + +
+ U.S. + MODEL AND REGISTRATION MANUFACTURER'S +ITEM MANUFACTURER CONFIGURATION NUMBER SERIAL NUMBER +------------------------------------------------------------------------------------------------------------------- + + +Aircraft The Boeing Company 737-25A N685MA* 23791 + +Engines Pratt & Whitney JT8D-17A P709529 + + Pratt & Whitney JT8D-17A P709530 + +Auxiliary + Power Unit Garret GTCP85-129 P35274 + +Landing Gears + +Left Gear Menasco 65-46100-52 MC02895P1486 + +Right Gear Menasco 65-46100-52 MC02896P1486 + +Nose Gear BF Goodrich 65-46200-63 T01406P1486 + +
+ + +*To be changed to N819AL + + + + + + EXHIBIT B-1 + to + Aircraft Lease Agreement + + Aircraft Documents on the Delivery Date + + +
+ +BOX 1: MIDWAY RECORDS +----------------------------------------------------------------------- + +725ML C check 5/28/89 1 of 2, 2 OF 2 IS + MISSING +----------------------------------------------------------------------- +725ML Hrs / Cycles 1990 thru 4/30/91 1 of 1 +----------------------------------------------------------------------- +725ML Log Pages Dec 89 - Jan / Feb 91 +----------------------------------------------------------------------- +725ML Log Pages March 1991 +----------------------------------------------------------------------- +725ML Log Pages Jan / Feb 91 +----------------------------------------------------------------------- +725ML Log Pages Sept/Oct/Nov/Dec 90 +----------------------------------------------------------------------- +725ML Log Pages July/Aug 90 +----------------------------------------------------------------------- +725ML Log Pages April/May/June 90 +----------------------------------------------------------------------- +725ML Log Pages Feb/March 90 +----------------------------------------------------------------------- +725ML N Items Nov 90 / 1 of 1 +----------------------------------------------------------------------- +725ML Job Cards 89/90 (structural repair + for aft cargo). +----------------------------------------------------------------------- +725ML Special Inspection 1 of 1 +----------------------------------------------------------------------- +725ML Line, TS, B1, B2, B3, 1990/1991 + B4, B5. +----------------------------------------------------------------------- +725ML CC1 Non-Routines 1 of 1 +----------------------------------------------------------------------- +725ML Component Change Cardex files (copies) + Records +----------------------------------------------------------------------- +725ML Hrs / Cycles 1 book 88-89 +----------------------------------------------------------------------- +725ML C check 11/23/90 (4 books) +----------------------------------------------------------------------- + +
+ + +
+ +BOX 2: MARKAIR RECORDS +----------------------------------------------------------------------- + +N685MA ROUTINE MAINT. LOGS/JAN. 1993 thru SEPT. 1995 +----------------------------------------------------------------------- + +
+ + + + +
+ +BOX 3: MARKAIR RECORDS +----------------------------------------------------------------------- + +N685MA ROUTINE MAINT. LOGS/Jan. 1992 thru Dec. 1992 +----------------------------------------------------------------------- +N685MA ROUTINE MAINT. LOGS/Oct. 1 thru Oct. 31, 1995 +----------------------------------------------------------------------- +N685MA Midway Fire Block data +----------------------------------------------------------------------- +N685MA Aircraft Historical File +----------------------------------------------------------------------- +N685MA Certificates / Permits / Documents +----------------------------------------------------------------------- +N685MA Miscellaneous Brochure +----------------------------------------------------------------------- +N685MA Midway AD File +----------------------------------------------------------------------- +N685MA Fuel Quantity Data (Boeing D6-32037-1) +----------------------------------------------------------------------- +N685MA Detail Specification (737-25A-Rev. B) +----------------------------------------------------------------------- +N685MA Readiness Log +----------------------------------------------------------------------- +N685MA Deferred Maintenance Log +----------------------------------------------------------------------- +N685MA Junk Tags / 1992, 1993, 1994 +----------------------------------------------------------------------- +N685MA Markair General Policies and Procedures Manual +----------------------------------------------------------------------- + +
+ + + + + + EXHIBIT B-1 + to + Aircraft Lease Agreement + + Aircraft Documents on the Delivery Date + + + +
+ +BOX 4: MARKAIR RECORDS +----------------------------------------------------------------------- + +N685MA B2, Inspection Check 4/7 - 4/10/92 +----------------------------------------------------------------------- +N685MA B2, Inspection Check 7/1 - 7/22/92 +----------------------------------------------------------------------- +N685MA B3, Inspection Check 9/15-9/17/92 +----------------------------------------------------------------------- +N685MA B&C, Inspection Check 11/23/91-1/13/92 (2 BOOKS) +----------------------------------------------------------------------- +N685MA C, Inspection Check 1/22-25/93 +----------------------------------------------------------------------- +N685MA B1, Inspection Check 7/21-7/23/93 (2 BOOKS) +----------------------------------------------------------------------- +N685MA B2, Inspection Check 10/19-10/21/93 +----------------------------------------------------------------------- +N685MA B4, Inspection Check 4/17-4/22/93 +----------------------------------------------------------------------- +N685MA B1, Inspection Check 7/6-7/7/94 +----------------------------------------------------------------------- +N685MA B2, Inspection Check 9/22-9/23/94 +----------------------------------------------------------------------- +N685MA B3, Inspection Check 12/6-12/8/94 +----------------------------------------------------------------------- +N685MA B3, Inspection Check 1/4 - 1/5/94 +----------------------------------------------------------------------- +N685MA B4, Inspection Check 4/2/94 +----------------------------------------------------------------------- +N685MA C2, Inspection Check 4/12/94 - 4/22/94 (2 BOOKS) +----------------------------------------------------------------------- +N685MA C3, Inspection Check 4/25 - 5/8/95 (2 BOOKS) +----------------------------------------------------------------------- +N685MA B1, Inspection Check 7/22/95 +----------------------------------------------------------------------- +N685MA B4, Inspection Check 2/12/95 - 2/15/95 +----------------------------------------------------------------------- + +
+ + +
+ +BOX 5: MARKAIR RECORDS +----------------------------------------------------------------------- + +N685MA ESN: 709529 / GTC shop visit DTD 6/29/92 +----------------------------------------------------------------------- +N685MA ESN: 700520 / GTC shop visit DTD 2/17/93 +----------------------------------------------------------------------- +N685MA ESN: 709529 / Historical Records +----------------------------------------------------------------------- +N685MA ESN: 709529 / Engine AD Log +----------------------------------------------------------------------- +N685MA ESN: 709529 / C2 Disk Traceability +----------------------------------------------------------------------- +N685MA ESN: 709530 / Historical Records +----------------------------------------------------------------------- +N685MA ESN: 709530 / AD Log +----------------------------------------------------------------------- +N685MA ESN: 709530 / WO LR 9122 (4 ea) Aviall 7/20/90 +----------------------------------------------------------------------- +N685MA ESN: 709530 / WO# LR 0181 (4 ea) Aviall 6/92 +----------------------------------------------------------------------- +N685MA APU S/N P-35274 / Historical Records +----------------------------------------------------------------------- +N685MA APU S/N P-35274 / AD Log +----------------------------------------------------------------------- + +
+ + -2- + + + + + + EXHIBIT B-1 + to + Aircraft Lease Agreement + + Aircraft Documents on the Delivery Date + + + + +
+ +BOX 6: MARKAIR RECORDS +----------------------------------------------------------------------- + +N685MA Airframe AD Log +----------------------------------------------------------------------- +N685MA Appliance AD Log +----------------------------------------------------------------------- +N685MA MEA Logs +----------------------------------------------------------------------- +N685MA Master Flight Log +----------------------------------------------------------------------- +N685MA SB Log +----------------------------------------------------------------------- +N685MA Galley Installation +----------------------------------------------------------------------- +N685MA EO and Drawings +----------------------------------------------------------------------- +N685MA Galley Manuals and Certification +----------------------------------------------------------------------- +N685MA MEA'S +----------------------------------------------------------------------- +N685MA S.B.'s +----------------------------------------------------------------------- +N685MA Windshear TCAS & Mode S Installation Data +----------------------------------------------------------------------- +N685MA Fleet Campaign's +----------------------------------------------------------------------- +N685MA Structural Repairs +----------------------------------------------------------------------- +N685MA Landing Gear Records +----------------------------------------------------------------------- +N685MA Weight & Balance Data +----------------------------------------------------------------------- +N685MA Markair Kardex File (Parts Tags) +----------------------------------------------------------------------- + +
+ + + + + EXHIBIT B-2 + to + Aircraft Lease Agreement + ------------------------ + + AIRCRAFT DOCUMENTS ON THE RETURN OCCASION + ----------------------------------------- + + All the Aircraft Documents delivered on the Delivery Date or any other +date (including without limitation those listed in Exhibit B-1) shall be +returned to Lessor along with the following: + +A. Manuals (in U.S. units) to be delivered with aircraft, as required: + + 1. FAA Approved Airplane Flight Manual. + 2. Weight and balance control and loading manual with supplements. + 3. Operations Manual. + 4. Aircraft Maintenance Manual. + 5. DDPG including MEL. + +B. In addition, one copy of each of the following manuals will be delivered + on the return occasion. + + 1. Structural repair manual and supplements. + 2. Aircraft/engine/spare engine/APU Maintenance manual. + 3. Aircraft/engine/spare engine/APU illustrated parts catalog. + 4. Aircraft/engine/spare engine/APU wiring diagram, hook-up charts, wire + list and equipment list. + 5. Maintenance and inspection procedures manual. + 6. General Policies & Procedures Manual. + +C. Airworthiness Directives Documentation. In accordance with 14 C.F.R. + Part 121.380, Lessee shall deliver to Lessor on the return occasion all + records associated with compliance airworthiness directives ("A.D."): + + 1. A single, complete and current A.D. status list of the airframe, + appliance, engines, spare engines and APU Airworthiness Directives and + mandatory FAA regulation applicable to the Airframe, Engines, Spare + Engines and APU. This list shall be provided in a format acceptable to + buyer and shall include, but not limited to: + + a. A.D. number and revision number. + b. A.D. title. + c. Aircraft serial number, engine serial number and APU serial number. + d. Engineering documentation reference. + e. Manufacturers service bulletin references and cross-references, where + appropriate. + + + + + + f. Specifications of terminated or repetitive status. + g. Date of initial accomplishment. + h. Date of last maintenance accomplishment, if repetitive. + i. Name and serial number of the internal maintenance form used to + document accomplishment, if applicable. + j. Specification of means by which compliance was accomplished + (e.g., modified, repaired, inspected). + + The list shall be typed, certified and signed by an authorized quality +assurance representative of the Lessee. + + 2. Legible copies of the completion documents that accomplish each A.D. +If the A.D. is a repetitive inspection, documentation of the last +accomplishment is sufficient. These documents must have the date of +accomplishment, the signature of a certified mechanic and/or inspector and +the mechanic's/inspector's certificate number or the repair station number +of the mechanic accomplishing the work. The document must reference the A.D. +number and company authorization which covered the A.D. + + 3. Exemptions or deviations granted by the FAA (or equivalent) to Lessor +or Lessee, as the case may be, on A.D. compliance, including copy of +exemption request. + + 4. Items 2 or 3 will be provided in individual document packages for +each A.D. Each package will contain all documents relative to that +A.D./Aircraft combination. + +D. Engineering Documentation + + 1. A single, current list of airframe, engines, spare engines and APU + service bulletins, engineering orders, major repairs and supplemental + type certificates completed on the airframe, each engine, spare engine + or the APU including references to engineering documentation, shall be + provided with information similar to that described in item C.1 above. + + 2. A current copy of all engineering documentation related to aircraft + alterations and repair configuration changes. This shall include + documentation for work done by any previous owner or operator, the + manufacturer or any vendor. An index shall be provided. A current copy + of all repairs that require follow-up action. + + 3. Data package covering all non-manufacture/non-FAA approved repairs or + alterations, including the submittal to the FAA for an STC or Form 337, + if applicable. + + 4. All open engineering deviations or material review board (MRB) records + applicable to the airframe, engines, spare engines, APU's, parts, + components and piece parts. + + -2- + + + + + +E. Additional Documentation + + 1. Maintenance program document. + 2. Location map of emergency equipment, with description. + 3. Interior configuration drawings. + 4. Weight and balance current status. + 5. FAA Export Certificate of airworthiness, if applicable. + 6. FAA certification of all components. + 7. FAA import certificate of airworthiness for all non-U.S. spare parts. + 8. Complete set of maintenance operations specifications. + 9. Master aircraft flight log. + +F. Individual aircraft, engine and spare engine records + + 1. Major structural damage reports, if any. + 2. FAA Form 337, or equivalent, for major repair and alterations, if any. + 3. Engine/spare engine last shop visit report. + 4. Documentation and records concerning the last aircraft overhaul. + 5. Engine/spare engine trend monitoring data. + 6. Log books for last 12 months. + 7. List of open items, if any. + 8. Declaration for aircraft accident and major repairs, if any. + 9. Listing of aircraft, engine and spare engine components status by + P/N - S/N description position - TBO - TSI - TSO - total time. + 10. Engine or spare engine life limited parts status and history (certified). + 11. Engine or spare engine log book, if applicable. + 12. APU - same documentation as items F. 10 and 11 above. + 13. Delivery letter w/serial number, total time/total cycles, time to the + next inspection and the time to the inspection or removal of + engines/spare engines or components. + 14. All engines, spare engines and APU records, up to and including the + last major overhaul or heavy maintenance and shop visits. + 15. Manufacturers delivery document for engines, spare engine and APU. + 16. Last test cell run documents for engines, spare engines and APU. + 17. Borescope history for current installation for engines and spare + engine, if applicable. + 18. Aircraft readiness log (manufacturers). + 19. Component records - time controlled components historical records + w/installation and serviceability tags. + + -3- + + + + + + EXHIBIT C-1 + to + AIRCRAFT LEASE AGREEMENT + + FINANCIAL INFORMATION + +Basic Rent: The Basic Rent payable monthly in advance on + each of the Basic Rent Payment Dates shall be + $115,279.80 per month. + +Basic Rent Payment Date: The Delivery Date and the date in each + subsequent month that numerically corresponds + to the Delivery Date; PROVIDED, that if any + such subsequent month does not have a date + that numerically corresponds to the Delivery + Date, the last day of such month; PROVIDED, + FURTHER, that if such date is not a Business + Day, then the Basic Rent Payment Date shall + be the next preceding Business Day. + +Casualty Value: As at the Delivery Date and for the one year + period following the Delivery Date, the + Casualty Value shall be $14,000,000, and the + Casualty Value shall be reduced by $500,000 + effective on each anniversary thereof which + reduced Casualty Value shall remain effective + for the one year period following the date of + such reduction, as follows: + + +
+ DATE OF CASUALTY + REDUCTION VALUE + --------------- ----------- + + Delivery Date $14,000,000 + 1st anniversary 13,500,000 + 2nd anniversary 13,000,000 + 3rd anniversary 12,500,000 + 4th anniversary 12,000,000 + 5th anniversary 11,500,000 + 6th anniversary 11,000,000 + 7th anniversary 10,500,000 + and after +
+ +Security Deposit: Means a cash deposit in the amount of U.S. + $115,000 paid by Lessee to Lessor or the + Beneficiaries on November 10, 1995, together + with any increases in such amount pursuant + to Section 21(a) of the Lease and the + following definition of Security Deposit + Adjustment. + +Security Deposit Adjustment: The Security Deposit Adjustment Amount shall + be the amount, if any, by which the amount of + monthly Basic Rent specified above exceeds + the amount of the Security Deposit specified + above ($279.80), and an amount equal to such + difference shall be paid by Lessee to the + Beneficiaries on the Delivery Date for + application to the Security Deposit. + +Security Letter of Credit: Means an irrevocable letter of credit or + guarantee in the amount at all times the + greater of US$ 230,000 and an amount equal to + the aggregate of two (2) months Basic Rent + payments ($230,559.60), issued by an + institution and in form and substance + acceptable to Lessor and Beneficiary. + + + + + EXHIBIT C-2 + to + AIRCRAFT LEASE AGREEMENT + + DEFINITIONS AND VALUES + +Beneficiary: Means each of ITOCHU AirLease (Europe) + Limited and Marubeni Airleasing (U.K.) + Limited as beneficiary under the Trust + Agreement, together in each case with its + successors and permitted assigns under the + Trust Agreement. + +Beneficiary's Address: For ITOCHU AirLease (Europe) Limited: + + Itochu AirLease (Europe) + Limited + 1, Earlsfort Centre + Hatch Street + Dublin 2 + Ireland + + Fax: 353-1-661-3278 + Attention: Secretary + + with copy to: + + ITOCHU AirLease Corporation + NXB Aoyama Building 5 Fl., + 26-37 Minami-Aoyama 2-Chome, + Minato-Ku, + Tokyo, + Japan + + Telex: 2423154 TKAFCJ + Fax: (813) 3497 8145 + Attention: the President + + For Marubeni Airleasing (U.K.) + Limited: + + 120 Moorgate + London EC2M 6SS + United Kingdom + Telecopy No.: (44) 171-826-8835 + +Deductible Amount: $500,000 + +Delivery Location: such state in the continental United States + reasonably determined by the + + + + +Trustee: means Wilmington Trust Company, a Delaware + banking corporation, not in its individual + capacity but solely as trustee under the + Trust Agreement or any successor Trustee + thereunder. + + -6- + + + + + + COUNTERPART NO.____ + + EXHIBIT D + to + AIRCRAFT LEASE AGREEMENT + + LEASE SUPPLEMENT NO. 1 + + TO AIRCRAFT LEASE AGREEMENT + DATED AS OF NOVEMBER 29, 1995 + + LEASE SUPPLEMENT NO. 1, dated December 1, 1995, between +Wilmington Trust Company, not in its individual capacity but solely as Trustee +f/b/o ITOCHU AirLease (Europe) Limited and Marubeni Airleasing (U.K.) Limited +("Lessor"), and Aloha Airlines, Inc., a company organized under the laws of +Hawaii ("Lessee"). + + Lessor and Lessee have previously entered into that certain +Aircraft Lease Agreement dated as of November 29, 1995 (herein called the +"Lease" and the defined terms therein being hereinafter used with the same +meaning). The Lease provides for the execution and delivery from time to time +of a Lease Supplement substantially in the form hereof for the purpose of +leasing the aircraft described below under the Lease as and when delivered by +Lessor to Lessee in accordance with the terms thereof. + + The Lease relates to the Aircraft, Parts and Engines as more +precisely described below. A counterpart of the Lease is attached hereto and +this Lease Supplement and the Lease shall form one document. + + In consideration of the premises and other good and +sufficient consideration, Lessor and Lessee hereby agree as follows: + + 1. Lessor hereby delivers and leases to Lessee under the +Lease and Lessee hereby accepts and leases from Lessor under the Lease, that +certain Boeing Model B-737-25A commercial jet aircraft, Airframe and the two +Pratt & Whitney JT8D-17A Engines (each of which engines has 750 or more rated +takeoff horsepower or the equivalent of such horsepower) described in Schedule +1 attached hereto and made a part hereof (the "Delivered Aircraft"). The +status of the Aircraft and Engines upon delivery thereof to Lessee shall be as +described on Schedule 2 attached hereto and made a part hereof. + + 2. (A) The Delivery Date of the Delivered Aircraft is the +date of this Lease Supplement set forth in the opening paragraph hereof. + + (B) The time of the delivery and acceptance of the +Delivered Aircraft is ____:____ __. m., at which time the + + + + +Delivered Aircraft is located in the airspace over the State of Texas, United +States of America (such location is herein called the "Delivery Location"). + + 3. The Term for the Delivered Aircraft shall commence on the +Delivery Date and shall end on the Expiration Date, which shall be December 1, +2003. + + 4. The amount of Basic Rent for the Delivered Aircraft is +payable in advance on each Basic Rent Payment Date. + + 5. Lessee hereby confirms to Lessor that (i) the Delivered +Aircraft and each Engine installed thereon or belonging thereto have been duly +marked in accordance with the terms of Section 6(f) of the Lease, (ii) Lessee +has accepted the Delivered Aircraft for all purposes hereof and of the Lease +and (iii) Lessee has inspected the Delivered Aircraft and the Delivered +Aircraft satisfies the conditions set forth in the Lease. + + 6. Lessor represents that all of its representations and +warranties contained in the Lease are true and correct on the date hereof. + + 7. All of the terms and provisions of the Lease Agreement are +hereby incorporated by reference in the Lease Supplement to the same extent as +if fully set forth herein. + + 8. The Lease Supplement may be executed in any number of +counterparts, each of such counterparts, except as provided in Section 20 (e) +of the Lease, shall for all purposes be deemed to be an original and all such +counterparts shall together constitute but one and the same Lease Supplement. + +THIS LEASE SUPPLEMENT HAS BEEN EXECUTED IN MULTIPLE COUNTERPARTS, OF WHICH +THERE IS ONE COUNTERPART DESIGNATED AS "COUNTERPART NO. 1 - CHATTEL PAPER +ORIGINAL" AND ALL OTHER COUNTERPARTS SHALL BE DESIGNATED WITH NUMBERS OTHER +THAN 1. TO THE EXTENT THAT THIS LEASE SUPPLEMENT CONSTITUTES CHATTEL PAPER +UNDER THE UNIFORM COMMERCIAL CODE, AS IN EFFECT IN ANY APPLICABLE JURISDICTION, +NO SECURITY INTEREST MAY BE CREATED OR PERFECTED BY POSSESSION OF ANY +COUNTERPART OF THIS LEASE SUPPLEMENT OTHER THAN SAID COUNTERPART NO. 1. + + + -2- + + + + + IN WITNESS WHEREOF, Lessor and Lessee each have caused this +Lease Supplement to be duly executed by their authorized officers as of the +day and year first above written. + + LESSOR: + WILMINGTON TRUST COMPANY, not + in its individual capacity but + solely as Trustee + + By:__________________________________ + Name: + Title: + + LESSEE: + + ALOHA AIRLINES, INC. + + By:__________________________________ + Name: + Title: + + By:__________________________________ + Name: + Title: + + -3- + + + + + + SCHEDULE 1 + TO + LEASE SUPPLEMENT NO. 1 + + BOEING 737-25A + AIRFRAME + + +
+MANUFACTURER'S U.S. REGISTRATION +SERIAL NO. NUMBER TOTAL TIME* TOTAL CYCLES* +-------------- ----------------- ----------- ------------- + + +23791 N685MA 23,859 14,057 + (to be changed to + N819AL) + +
+ + INSTALLED PRATT & WHITNEY + ENGINES + +
+ +MODEL NO. SERIAL NO. TOTAL TIME* TOTAL CYCLES* +-------------- ----------------- ----------- ------------- + + + +JT8D-17A P709529 20,960 11,883 + +JT8D-17A P709530 22,100 12,908 + +
+ + INSTALLED + AUXILIARY POWER UNIT + + +
+ +MODEL NO. SERIAL NO. TOTAL TIME TOTAL CYCLES +-------------- ----------------- ----------- ------------- + +GTCP85-129 P35274 (TACH Reading) + +
+ + + + + + SCHEDULE 1 + TO + LEASE SUPPLEMENT NO. 1 (cont'd) + + B737 AVIONICS + COMPONENT INVENTORY + + + +
+ +ITEM PART NUMBER SERIAL NUMBER DESCRIPTION POSITION/QUANTITY + NO. + + + 1 622-4096-001 4581 PA Amp E&E 1 + 2 5140-1-112 339 Remote Electronics Unit E&E 1 + 3 622-8971-020 2119 TCAS T/R E&E 1 + 4 622-1181-001 14400 VHF T/R E&E 1 + 5 622-1396-001 5023 VHF T/R E&E 1 + 6 622-7878-200 5128/5165 ATC E&E 2 + 7 NA 13UO2 255AKWO022 Selcal E&E 1 + 8 622-2921-001 10076/10061 DME E&E 2 + 9 080-20325-01 4603/4613/4602 T/Rectifier E&E 3 + 10 2-301-3 4782 Batt Charger E&E 1 + 11 39B168-1-0 3276 Static Inverter E&E 1 + 12 65-52811-109 D00485 Landing Gear Acc Unit E&E 1 + 13 42-651-01 443 Anti-Skid E&E 1 + 14 65-52810-25 D01002 Air Condition Relay Unit E&E 1 + 15 65-73606-69 D01029 Eng Acc Unit E&E 1 + 16 65-52808-7 D00496 Compartment Overheat Unit E&E 1 + 17 65-52806-235 D00870 Misc Solid State Switch E&E 1 + 18 165-52807-26 D00449 Slat Position Switch Unit E&E 1 +
+ + + -2- + + + + + + +
+ +ITEM PART NUMBER SERIAL NUMBER DESCRIPTION POSITION/QUANTITY + NO. + + + 19 522-2996-011 2012 Marker Beacon E&E 1 + 20 777-1492-002 1582 ADF E&E 1 + 21 777-1492-004 4039 ADF E&E 1 + 22 965-0876-001 304 GPWS E&E 1 + 23 622-3890-003 1556 Radio Alt E&E 1 + 24 65-52801-31 D00446 APU Control Unit E&E 1 + 25 65-52809-15 D00306 Fire Detector Unit E&E 1 + 26 8TJ45-GAB X0062 34B3 Fuel Flow Power Supply E&E + 27 231-2 5556/6517 Window Heat Control E&E 4 + 28 4314/7490 E&E + 29 522-3949-001 3701 Monitor Comparator E&E 1 + 30 622-3257-001 5662/2275 ILS NAV RCVR E&E 2 + 31 172938-001 6620/6623 NAV SW Unit E&E 4 + 32 6630/6613 E&E + 33 HG48B13 P255/G1711 ADC E&E 2 + 34 4030952-906 88062826 Yaw Damper E&E 1 + 35 163356-88-01 0000528 Performance Data Comp E&E 1 + 36 548376-6 097C-9045 Cabin Temp Controller E&E 1 + 37 87093613 P43 Pressure Controller E&E 1 + 38 2588424-902 84053253 Rate of Turn E&E 1 + 39 101 812802UA/9118557A Compass Rack E&E 2 + 40 622-2500-004 2343/1298 Steering Comp E&E 2 +
+ + + + + + +
+ +ITEM PART NUMBER SERIAL NUMBER DESCRIPTION POSITION/QUANTITY + NO. + + 41 65-52805-317 D01011 Flight Inst Acc Unit E&E 1 + 42 172938-001 6624/6615 Switch Unit E&E 4 + 43 6595/2678 E&E + 44 2590650-901 05872772 Mach Trim Comp E&E 1 + 45 2588810-904 01851529 Pitch Computer E&E 1 + 46 2588812-902 06871639 Roll Computer E&E 1 + 47 65-52812-107 D00496 Auto Pilot Acc Unit E&E 1 + 48 457300-0430 3394 Omega RPU E&E 1 + 49 25582-003 8305313 Battery E&E 1 + 50 2587335-11 84054627 Vert Gyro E&E 1 + 51 2587335-11 8415034 Vert Gyro E&E 1 + 52 2587335-11 0034163 Vert Gyro E&E 1 + 53 2588302-4 0067044 Direction Gyro E&E 1 + 54 2588302-4 84056507 Direction Gyro E&E 1 +
+ + + + + + SCHEDULE 2 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status + ON THE DELIVERY DATE + +AIRFRAME HEAVIEST CHECK ("D" CHECK OR EQUIVALENT): + + + + + Interval: 28,000 (Hrs) + Time Remaining: 4,141 + +LANDING GEAR OVERHAUL: + + Interval: Main Gear 24,000 cycles + Nose Gear 24,000 cycles + + Time Remaining: Left Gear 9,943 cycles + Right Gear 9,943 cycles + Nose Gear 9,943 cycles + +ENGINES: + + Overhaul Interval: + Time Remaining (S/N P709529): + Time Remaining (S/N P709530): + + Hot Section Inspection: + + Interval: + Time Remaining (S/N P709529): + Time Remaining (S/N P709530): + +TIME REMAINING TO FIRST RESTRICTION: + + Engine S/N: P709529 + Hours: 9,040 + Cycles: 3,117 (C07) + Engine SIN: P709530 + Hours: 7,900 + Cycles: 2,092 (C07) + +
+ + + + + + + +AUXILIARY POWER UNIT: + + Hot Section Inspection: + + Interval: On Condition + Time Remaining: On Condition + + Time Remaining to Next Limited + or Scheduled Removal: On Condition + +
+ + -2- + + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + Effective date: 10/20/95 + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 21 +------ +Valve, Safety 720737-5 L-0001 14000H 13,817.6 3,977.2 +RH OH 7/3/92 +Valve, Safety 720737-5 830678 14000H 13,817.6 3,977.2 +LH OH 7/3/92 +Gasper Fan 21520-1 063 6000H 22,594.7 4,735 + OH 6/15/95 + +ATA 23 +------ +Recorder, 93A100-80 52428 72 Mo. 14, 623.2H 2 Yrs., 6 Mo. +Voice RPL +(Battery) + +ATA 24 +------ +APU Generator 976J498-1 YK13122 6000H 20,471 2,602H + HT 10/20/94 +Panel Bus 915F213-2 WE1347B 6000H 19,313.9 1,454H +Protection BC 6/11/94 +Gen. Cont. 948F458-1 NM4963 6000H 19,616.8H 1,757H + Unit BC 7/18/94 + APU +Gen. Cont. 948F458-1 PM5071 6000H 23,697H 5,838H + Unit BC 10/3/95 + Left +Gen. Cont. 948F458-1 XJ2186 6000H 21,639.9H 3,780.9H + Unit BC 2/18/95 + Right + +ATA 25 +------ +Life Vest KSE-35L8 527-691 24 Mo. 8/30/95 9 Mos. + Rt. Aft OH 23,304H +Life Vest AV-35 541-064 24 Mo. 2/95 14 Mos. + Co-pilot O H 21,530H +Slide, Evac D31354- 1112 24 Mo. 8/23/94 10 Mos. + Rt. Aft 425 OH 19,939.7H + +
+ + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 25 +------ +Slide, Evac D31354- 1613 24 Mo. 8/24/94 10 Mos. + Lt. Aft 433 OH 19, 949H +Slide, Evac 11611-143 123-1 24 Mo. 9/12/95 23 Mos. + Rt. Fwd OH 23,459H +Slide, Evac D31354- 0159 24 Mo. 2/15/95 7 Mos. + Lt. Fwd 403 OH 21,620H + +Escape Slide SEE NOTE (1) OF THE MARKAIR MAINTENANCE PROGRAM + Bottles (4) + +Life Vest KSE-35L8 50287 24 Mo. 3/17/95 9/96 + Obs OH 21,942H 8 Mos. +Life Vest KSE-35L8 12323 24 Mo. 8/1/95 7/97 + Capts OH 23,085H 22 Mos. +Life Vest KSE-35L8 527-691 24 Mo. 8/30/95 7/97 +Aft Right OH 23,304H 21 Mos. +Life Vest KSE-35L8 29358 24 Mo. 2/3/95 12/96 +Left Aft OH 21,474H 8 Mos. +Life Vest AC-2 535-380 24 Mo. 4/29/95 3/97 +Fwd FA OH 22,259H 17 Mos. +Life Vest KSE-35L8 541-064 24 Mo. 2/7/95 1/97 +Co-pilot OH 21,530.7 15 Mos. +Kit, Medical 017093 NHC1613 24 Mo. 11/28/94 11/96 + OH 20,844H 13 Mos. +PEE 4566M378 E9134322 120 Mo. 12/31/91 1/2000 +R/A Closet OH 60 Mos. +PEE 4566M378 E9134326 120 Mo. 12/31/91 1/2000 +L/A Closet OH 60 Mos. +PEE 4566M378 E9134942 120 Mo. 1/13/92 1/2000 +Aft Closet OH 60 Mos. +PEE 4566M378 E9134751 120 Mo. 12/22/91 1/2000 +Row 10 OH 60 Mos. +PEE 4566M378 E9548209 120 Mo. 6/9/95 5/2002 +Cockpit OH 70 Mos. + +
+ + -2- + + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 26 +------ +Cartridge, 30903828 AEN-1-3 72 Mos. 5/28/93 50 Mos. +Fire RPL +ext.: Rt. +Cartridge, 30903828 BTL23883B 120 Mos. 5/5/95 5/2005 +Fire 1 RPL +ext.: APU +Cartridge, 30903828 09015DI 72 Mos. 4/27/95 2/2001 +Fire RPL +ext.: Left +Fire Bottle 3307507 23883B1 WC/12 Mos 5/5/95 5/96 +APU HST/60 Mo 5/5/95 5/2000 +Fire Bottle 33600011 10124D1 WC/12 Mos 4/27/95 5/98 +Rt Eng. HST/60 Mo 5/14/93 4/98 +Fire Bottle 33600011 09015D1 WC/12 Mos 4/27/95 4/96 +Left Eng. HST/60 Mo 2/16/95 2/2000 +Fire Ext. 892480 672AC WC/12 Mos 5/1/95 5/96 +Aft HST/60 Mo 7/96 +Closet(H20) +Fire Ext. 898052 A-415392 WC/12 Mos 5/1/95 5/96 +Aft. (halon) HST/60 Mo 11/91 7/96 +Fire Ext. 898052 B-615379 WC/12 Mos 5/1/95 5/96 +Lt row HST/60 Mo 7/96 +10/halon +Fire Ext. 898052 V-343826 WC/12 Mos 4/26/95 5/99 +Fwd/(halon) HST/60 Mo +Fire Ext. 898052 E494480 WC/12 Mos 4/29/95 4/96 +cockpit/halon HST/60 Mo 5/99 +Fire Bottle, A800100-1 26-904 WC/12 Mos 4/13/94 Over Due +Lav. Aft HST/60 Mo +Fire bottle, A800100-1 26-906 WC/12 Mos 4/13/94 Over Due +Lav. Fwd HST/60 Mo + +
+ + -3- + + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 27 +------ +Jackscrew, 65-49970- KE00301 8000H 19,946H 3,787H +Stab. trim 17 OH 8/24/94 +Fuse assy 6213-4 219 22,400H 19,945H 18,487H +auto BC +brk/rudder +Transmission 65-50321- 0812 16000H 15,275H 7,416H +No 1 flap 5 OH +Transmission 65-50322- 0840 16000H 15,275H 7,416H +No 2 flap 12 OH +Transmission 65-50323- 0911 16000H 15,275H 7,416H +No 3 flap 5 OH +Transmission 65-50324- 0784 16000H 15,275H 7,416H +No 4 flap 3 OH +Transmission 65-50325- 50007 16000H 15,275H 7,416H +No 5 flap 5 OH +Transmission 65-50326- 62003 16000H 15,275H 7,416H +No 6 flap 6 OH +Transmission 65-50327- 72004 16000H 15,275H 7,416H +No 7 flap 14 OH +Transmission 65-50328- 82002 16000H 15,275H 7,416H +No 8 flap 7 OH +Gearbox assy 65-51510- 7417 16000H 15,275H 7,416H +Rt angle/Left 1 OH +Gearbox assy 65-51510- 1489 16000H 15,275H 7,416H +Rt angle/Rt 2 OH +Gearbox assy 65-51513- 4778 16000H 15,275H 7,416H +Flap dr./Left 1 OH +Gearbox assy 65-51513- 1877 16000H 15,275H 7,416H +Flap dr./Rt. 2 OH +Power Unit 65-63851- 7241 16000H 15,275H 7,416H +Flap dr GBX 7 OH + +
+ + + -4- + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 28 +------ +APU Fuel AV16EI209 H1842C 20000H 19,898H 16,025H +S/0 VLV D OH 8/19/94 +Left Fuel 61185 128 200001-1 19,876H 16,003H +S/0 VLV OH 8/16/94 +Right Fuel 61185 1813 20000H 20,015H 16,142H +S/0 VLV OH 8/31/94 +CF Fuel 61185 609 20000H 20,005H 16,146H +S/0 VLV OH 8/31/94 + +ATA 31 +------ +ULB Batteries 9804100- 7040 6 Yrs. 12 Mar 94 41 Mos. + GXUS RPL + +ATA 32 +------ +Fuse assy 6213-4 627 22,400H 19,917.7H 18,458H +Auto OH 8/21/94 +Brk/Rudder + +ATA 34 +------ +Altimeter, WL102AMS AG102 24 Mo. 12/20/94 14 Mo. +Stby 3 IN +Transponder TPR 720 5128 24 Mo. 4/27/95 18 Mo. +Mode S, Lt. IN +Transponder TPR 720 5165 24 Mo. 4/27/95 18 Mo. +Mode S, Rt. IN + +
+ + -5- + + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 35 +------ +02 Cylinder 801307-00 223879/ 36 Mo. 6/22/94 5/97 + 29668 HST 5/94 19 Mo. +Portable 02 5500A1A- 771X/3596 60 Mo. 5/11/92 3/96 + Cyl BF23A 4 HST 5 Mo. +Portable 02 5500A1A- 151843P/1 60 Mo. 12/21/93 1/97 + Cyl BF23A 3 HST 15 Mo. +Row 1 5454 +Portable 02 56002C1AF 55934DB/2 60 Mo. 10/5/95 2/2000 + Cyl 23AM 3832 HST 58 Mo. +Aft closet +Portable 02 5600-2ClA 74732DF/ 60 Mo. 1/12/93 1/98 + Cyl 41819 HST 26 Mo. +Cockpit + +02 Generators Varies 12 Yrs 22 Mo. +------------- ------ ------ ------ + 117003-17 12 Yrs 22 Mo. + 117.00-12 12 Yrs 22 Mo. + 803000-02 12 Yrs 22 Mo. + 117003-12 12 Yrs 22 Mo. + +
+ + + -6- + + + + + + SCHEDULE 4 + TO + LEASE SUPPLEMENT NO. 1 + + A/C N685MA + + R/H SIDE + + + +
+ +DESC. PART NUMBER SERIAL NUMBER MODEL NUMBER +----- ----------- ------------- ------------ + + 1. TRIPLE BURNS 86952102 310588 JB5.2-3-58 + 2. TRIPLE BURNS 86952024 310581 JB5.2-3-59 + 3. TRIPLE BURNS 86952022 310569 JB5.2-3-59 + 4. TRIPLE BURNS 86952022 310566 JB5.2-3-59 + 5. TRIPLE BURNS 86952022 310572 JB5.2-3-59 + 6. TRIPLE BURNS 86952022 310577 JB5.2-3-59 + 7. TRIPLE BURNS 86952022 310570 JB5.2-3-59 + 8. TRIPLE BURNS 86952022 310574 JB5.2-3-59 + 9. TRIPLE BURNS 86952022 310568 JB5.2-3-59 +10. TRIPLE BURNS 86952016 310562 JB5.2-3-58 +11. TRIPLE BURNS 86952022 310573 JB5.2-3-59 +12. TRIPLE BURNS 86952022 310579 JB5.2-3-59 +13. TRIPLE BURNS 86952022 310578 JB5.2-3-59 +14. TRIPLE BURNS 86952022 310571 JB5.2-3-59 +15. TRIPLE BURNS 86952022 310576 JB5.2-3-59 +16. TRIPLE BURNS 86952022 310564 JB5.2-3-59 +17. TRIPLE BURNS 86952022 310575 JB5.2-3-59 +18. TRIPLE BURNS 86952026 310582 JB5.2-3-59 +19. TRIPLE BURNS 86952014 310560 JB5.2-3-58 +20. DOUBLE BURNS 86953201 306409 JB5.2-2-39 + +
+ + -1- + + + + + + + A/C N685MA + + L/H SIDE + + +
+ +DESC. PART NUMBER SERIAL NUMBER MODEL NUMBER +----- ----------- ------------- ------------ + +1. TRIPLE BURNS 86952101 310587 JB5.2-3-58 +2. TRIPLE BURNS 86952007 310556 JB5.2-3-58 +3. TRIPLE BURNS 86952001 310548 JB5.2-3-59 +4. TRIPLE BURNS 86952001 310545 JB5.2-3-59 +5. TRIPLE BURNS 86952001 310541 JB5.2-3-59 +6. TRIPLE BURNS 86952001 310542 JB5.2-3-59 +7. TRIPLE BURNS 86952001 310539 JB5.2-3-59 +8. TRIPLE BURNS 86952001 310550 JB5.2-3-59 +9. TRIPLE BURNS 86952013 310559 JB5.2-3-58 +10. TRIPLE BURNS 86952015 310561 JB5.2-3-58 +11. TRIPLE BURNS 86952001 310544 JB5.2-3-59 +12. TRIPLE BURNS 86952003 310554 JB5.2-3-59 +13. TRIPLE BURNS 86952001 310547 JB5.2-3-59 +14. TRIPLE BURNS 86952001 310543 JB5.2-3-59 +15. TRIPLE BURNS 86952001 310553 JB5.2-3-59 +16. TRIPLE BURNS 86952001 310538 JB5.2-3-59 +17. TRIPLE BURNS 86952001 310538 JB5.2-3-59 +18. TRIPLE BURNS 86952001 310549 JB5.2-3-59 +19. TRIPLE BURNS 86952005 310555 JB5.2-3-59 +20. TRIPLE BURNS 86952017 310563 JB5.2-3-56 + +
+ + -2- + + + + + + +
+ + AUDITED THRU L/P 165891 10/20/95 + A/C TOTAL HOURS 23,859 + A/C TOTAL CYCLES 14,057 +INSTALLED ON N685MA POSITION 1 + HOURS CYCLES + LIMIT SINCE SINCE TOTAL TOTAL TIME REMAINING +ITEM POS PART NO S/N HOURS CYCLES NEW NEW HOURS CYCLES HOURS CYCLES + + + +ENGINE LEFT JT8D-17A P7095308 30,000 15,000 22,100 12,908 22,100 12,908 7,900 2,092 +HUB (DISK) C 01 817401G P78775 NO LIMIT 20,000 NO LIMIT 12,908 NO LIMIT 12,908 NO LIMIT 7,092 +DISK C 02 5002402-01 N87756 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 03 800803 N58289 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK (HUB) C 04 799504 P44646 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 05 745705 P93696 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 06 745706 P93306 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 07 774407 P81245 30,000 15,000 22,100 12,908 22,100 12,908 7,900 2,092 +DISK (HUB) C 08 5005808-01 N90080 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 09 701509 P97271 30,000 19,000 22,100 12,908 22,100 12,908 7,900 6,092 +DISK C 10 772510 P97761 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 11 772511 P03600 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 12 772512 P97578 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 13 5003613-01 P59603 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK (SHAFT) T 01 5003601-01 N36371 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK T 02 5003102-01 P03367 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK T 03 5003103-01 N64721 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK T 04 5003104-01 N52111 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +LPT (SHAFT) NO LIMIT 20,000 22,100 14,558 22,100 14,558 NO LIMIT 5,442 + +
+ + + + + +
+ + AUDITED THRU L/P 165891 10/20/95 + A/C TOTAL HOURS 23,859 + A/C TOTAL CYCLES 14,057 +INSTALLED ON N685MA POSITION 2 + HOURS CYCLES + LIMIT SINCE SINCE TOTAL TOTAL TIME REMAINING +ITEM POS PART NO S/N HOURS CYCLES NEW NEW HOURS CYCLES HOURS CYCLES + + + +ENGINE RIGHT JT8D-17A P7095308 NO LIMIT NO LIMIT 20,960 11,883 20,960 11,883 9,040 3,117 +HUB (DISK) C 01 817401 P23654 NO LIMIT 20,000 NO LIMIT 13,372 NO LIMIT 13,372 NO LIMIT 6,628 +DISK C 02 5002402-01C S56233 30,000 20,000 10,771 7,680 10,771 7,680 19,229 12,320 +DISK C 03 800803 P68371 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK (HUB) C 04 799504 N90833 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 05 745705 P93614 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 06 745706 P93230 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 07 774407 P81364 30,000 15,000 20,960 11,883 20,960 11,883 9,040 3,117 +DISK (HUB) C 08 5005808-01 P43608 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 09 701509 P97641 30,000 19,000 20,960 11,883 20,960 11,883 9,040 7,117 +DISK C 10 772510 P97278 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 11 772511 P03553 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 12 772512 P97219 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 13 5003613-01 P92918 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK T 01 5003601-01 N36374 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK T 02 5003102-01 M12012 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK T 03 5003103-01 N64611 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK T 04 5003104-01 N52069 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +LPT (SHAFT) NO LIMIT NO LIMIT + +
+ + + + + + +
+ + + AUDITED THRU L/P 165891 TOTAL A/C HOURS 23859 +INSTALLED ON: N685MA DATE 10/20/95 TOTAL A/C CYCLES 14057 + + +NLG ASSEMBLY 65-73762-5 T01406P1486 90,000 24,000 9,943 +SHOCK STRUT ASSY 65-46200-63 T01408P1486 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +OUTER CYLINDER ASSY 65-46210-25 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +OUTER CYLINDER 65-46211- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +STEERING PLATE, UPR 65-46210-27 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +STEERING PLATE, LWR (DRILLED) 65-46210-24 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +OUTER CYLINDER ASSY (DRILLED) 65-46215-14 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +METERING PIN ASSY 65-46200-54 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +METERING PIN 65-46219- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +SUPPORT TUBE, METERING PIN 65-46229- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +DRAIN TUBE 69-57991- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +SUPPORT TUBE, UPPER ORIFICE 69-73038-1 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +TUBE, ORIFICE SUPPORT 65-46226-9 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +STEM, ORIFICE SUPPORT 65C25707- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +GLAND NUT ASSY 65-46221-4 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +ORIFICE PLATE, UPPER 69-36622-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +TORSION LINK ASSY, UPPER 65-46202-9 JC-1917 90,000 24,000 08/28/92 14,378 7,445 23,971 6,612 9,481 65,028 17,388 +TORSION LINK ASSY, LOWER 65-46288-5 32-58 90,000 24,000 08/28/92 14,378 7,445 28,383 6,612 9,481 61,617 17,388 +STEERING COLLAR ASSY 65-46203-24 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, STEERING COLLAR 69-61383-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, STEERING COLLAR 69-61383- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +PIN, UPPER TORSION LINK 69-72698-1 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +PIN, LOWER TORSION LINK 69-72698-1 486-2 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, TORSION LINK APEX 69-35883-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +LOWER DRAG BRACE ASSY 65-46230-7 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +UPPER DRAG BRACE ASSY 65-80051-13 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +PIN, DRAG BRACE CENTER 69-35391- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, DRAG BRACE, CENTER NAS1110-68D 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +PIN, UPPER DRAG BRACE 69-35394-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +PIN, UPPER DRAG BRACE 66-35394-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, LOWER DRAG BRACE 69-35396-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +LOCK BRACE ASSY, AFT 65-46240-11 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +LOCK LINK ASSY, FWD 65-46242-11 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, NOSE GEAR LOCK JOINT NAS1105-52D 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +SHAFT, AFT LOCK MECHANISM 69-35385-1 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +TRUNNION PIN, LEFT HAND 69-35398-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +TRUNNION PIN, RIGHT HAND 69-41248- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 + +
+ + + + + + + +
+ + + AUDITED THRU L/P 165891 TOTAL A/C HOURS 23859 +INSTALLED ON: N685MA DATE 10/20/95 TOTAL A/C CYCLES 14057 + + +LEFT NLG ASSEMBLY 65-73761-87 MC026895P1488 100,000 24,000 9,943 +SHOCK STRUT ASSY 65-46100-52 MC028958P1488 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +OUTER CYLINDER ASSY 65-61740-10 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +INNER CYLINDER ASSY 65-46116-47 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ORIFICE SUPPORT TUBE ASSY 65-46159-7 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SUPPORT TUBE, ORIFICE 65-46160-7 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ORIFICE PLATE 69-38980-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +METERING PIN 65-46124-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +DRAIN TUBE 65-46156-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +GLAND NUT 69-39485-10 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK ASSY, LOWER 65-46102-22 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK ASSY, UPPER 65-87958-9 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UPPER DRAG STRUT ASSY 65-46103-11 1486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LOWER DRAG STRUT ASSY 65-60579-3 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UNIVERSAL ASSY, LWR SIDE 65-46108-7 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ACTUATOR BEAM ARM ASSY 65-46109-12 5104 100,000 24,000 12/16/91 12,391 5931 8,865 8,126 11,488 91,135 15,874 +TRUNNION PIN ASSY 65-46113-5 34ORGA 100,000 24,000 12/16/91 12,391 5931 66,508 8,126 11,488 31,492 15,874 +TEE BOLT ASSY, DRAG STRUT 65-46140-6 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TRUNNION LINK ASSY 65-63378-9 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK PIN, LOWER 69-72023-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK PIN, UPPER 69-72023-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, TEE FITTING ATTACHMENT 69-51833-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY.: LOWER DRAG STRUT 69-39473-9 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +FUSE BOLT ASSY, UPR DRAG 69-39476-6 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +NUT, TRUNNION PIN 69-41633-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UNIVERSAL ASSY, REACTION LINK 65-46107-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UPPER SIDE STRUT ASSY 65-46138-5 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LOWER SIDE STRUT ASSY 65-63397-9 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +REACTION LINK ASSY 65-46135-13 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LINK ASSY, UPPER DOWNLOCK 65-46138-16 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LINK ASSY, LOWER DOWNLOCK 65-46139-9 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SHAFT, SPRING SUPPORT 69-38999-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY, REACTION LINK 69-38148-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY, UPPER SIDE STRUT 69-68149-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY, SIDE STRUT 69-68150-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, DOWNLOCK LINK PIVOT 69-41628-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, DOWNLOCK 69-42193-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ASSY, UPPER DOWNLOCK 69-62779-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ACTUATOR BEAM ASSY 65-46108-3 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SUPPORT LINK ASSY 65-46112-22 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LINK ASSY, UPLOCK 65-63887-5 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BELLCRANK ASSY 65-63663-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +HOOK ASSY 65-46142-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SHAFT, UPLOCK SUPPORT 65-46146-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, REACTION LINK / UPLOCK 69-68148-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ACTUATOR BEAM, OUTBD 69-39464-4 352 100,000 24,000 12/16/91 12,891 5931 8,126 8,126 11,468 91,874 15,874 +BOLT ASSY, LOWER SIDE STRUT 69-68151-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +COLLAR, BELLCRANK RET, UPLOCK 69-51838-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +FUSE BOLT, FWD TRUNNION BRG 69-58854-3 486 (ORIG) 83,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ACTUATOR BEAM, INBRD BACB301J20CD43 685 100,000 24,000 12/14/91 12,891 5931 8,126 8,126 11,468 91,874 9,943 +BOLT, ACTUATOR ROD END BACB301J16CD48 685/1 100,000 24,000 12/14/91 12,891 5931 8,126 8,126 11,468 91,874 9,943 +BEARING ASSY, FWD TRUNNION 69-58871-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +NUT, AFT TRUNNION 65-84161-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 + +
+ + + + + +
+ + + AUDITED THRU L/P 165891 TOTAL A/C HOURS 23859 +INSTALLED ON: N685MA DATE 10/20/95 TOTAL A/C CYCLES 14057 + + +RIGHT NLG ASSEMBLY 65-73761-87 MC02665P1488 100,000 24,000 9,943 +SHOCK STRUT ASSY 65-46100-52 MC02896P1488 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +OUTER CYLINDER ASSY 65-61740-10 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +INNER CYLINDER ASSY 65-46116-47 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ORIFICE SUPPORT TUBE ASSY 65-46159-7 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SUPPORT TUBE, ORIFICE 65-46160-7 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ORIFICE PLATE 69-38980-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +METERING PIN 65-46124-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +DRAIN TUBE 65-46156-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +GLAND NUT 69-39485-10 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK ASSY, LOWER 65-46102-22 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK ASSY, UPPER 65-87958-9 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UPPER DRAG STRUT ASSY 65-46103-11 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LOWER DRAG STRUT ASSY 65-60579-3 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UNIVERSAL ASSY, LWR SIDE 65-46105-7 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ACTUATOR BEAM ARM ASSY 65-46109-12 1507 100,000 24,000 12/14/91 12,391 5931 34,655 8,126 11,488 65,345 15,874 +TRUNNION PIN ASSY 65-46113-16 32-118 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,488 91,674 15,874 +TEE BOLT ASSY, DRAG STRUT 65-46140-6 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TRUNNION LINK ASSY 65-63378-9 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK PIN, LOWER 69-72023-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK PIN, UPPER 69-72023-2 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, TEE FITTING ATTACHMENT 69-51833-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY.: LOWER DRAG STRUT 69-39473-3 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +FUSE BOLT ASSY, UPR DRAG 69-39476-6 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +NUT, TRUNNION PIN 69-41633-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UNIVERSAL ASSY, REACTION LINK 65-46107-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UPPER SIDE STRUT ASSY 65-46138-5 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LOWER SIDE STRUT ASSY 65-63397-9 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +REACTION LINK ASSY 65-46135-13 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LINK ASSY, UPPER DOWNLOCK 65-46138-16 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LINK ASSY, LOWER DOWNLOCK 65-46139-9 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SHAFT, SPRING SUPPORT 69-38999-3 685 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,468 91,874 15,874 +BOLT ASSY, REACTION LINK 69-38148-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY, UPPER SIDE STRUT 69-68149-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY, SIDE STRUT 69-68150-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, DOWNLOCK LINK PIVOT 69-41628-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, DOWNLOCK 69-42193-2 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ASSY, UPPER DOWNLOCK0 69-62779-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ACTUATOR BEAM ASSY 65-46108-3 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SUPPORT LINK ASSY 65-46112-22 HI-106 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,468 91,874 15,874 +LINK ASSY, UPLOCK 65-63887-5 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BELLCRANK ASSY 65-63663-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +HOOK ASSY 65-46142-2 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SHAFT, UPLOCK SUPPORT 65-46146-2 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, REACTION LINK / UPLOCK 69-68148-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ACTUATOR BEAM, OUTBD 69-39464-4 482 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,468 91,874 15,874 +BOLT ASSY, LOWER SIDE STRUT 69-68151-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +COLLAR, BELLCRANK RET, UPLOCK 69-51838-2 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +FUSE BOLT, FWD TRUNNION BRG 69-58854-3 486-2 (ORIG) 83,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ACTUATOR BEAM, INBRD BACB301J20CD43 685/2 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,468 91,874 15,874 +BOLT, ACTUATOR ROD END BACB301J16CD48 685 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,468 91,874 15,874 +BEARING ASSY, FWD TRUNNION 69-58871-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +NUT, AFT TRUNNION 65-84161-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 + +
+ + + + + + EXHIBIT E + to + AIRCRAFT LEASE AGREEMENT + + RETURN CONDITION REQUIREMENTS + +On the Return Occasion the Aircraft, subject to fair wear and tear generally, +will be in the following condition: + +1 GENERAL CONDITION + +The Aircraft shall: + + (a) be clean by United States commercial airline standards; + + (b) have installed the full complement of Engines, Parts and + other equipment, parts and accessories and loose equipment + + (i) which were installed on the Aircraft at the Delivery Date (or + any replacements thereof made in accordance with the terms of + this Lease); + + (ii) as would be required by this Lease to be installed on the + Aircraft if Lessee were to continue operating the same in + continued regular service; + + (iii) each operating within limits approved by the FAA and fully + functioning in accordance with its intended use; + + (iv) which are in a condition suitable to permit immediate + operation of the Aircraft in commercial service under the + FAA; and + + (v) be in strict compliance with the Maintenance Program, + including the corrosion prevention control program + (CPCP/D6-38528) and the aging aircraft program (D6-38505 as + applicable per the airworthiness directive or per + effectivity). + + (c) (i) have in existence a current, valid and existing FAA + certificate of airworthiness for airline operation or an FAA + export certificate of airworthiness, as elected by the + Beneficiaries in accordance with the terms of Section 16(d); + + (ii) comply with (A)(1), all the requirements of US FAR Part 36 + Appendix C (Stage II) noise compliance (without waiver, + restriction, deferment or exception) and (2) all the + requirements for operation under United States FAR Part 121 + or (B)(1) if requested by the Beneficiaries in order to + comply with the requirements of any other country selected by + the Beneficiaries which follows the FAA rules and regulations + contemplated by U.S. FAR Part 129, U.S. FAR + + + + + + Part 121 and U.S. FAR Part 36, Appendix C and (2) all civil + aviation regulations, orders, rules and airworthiness + directives of such country to permit the immediate + re-registration and securing of a certificate of + airworthiness in such country for the Aircraft (provided that + (i) such regulations, orders, rules and Airworthiness + Directives are no more restrictive than those of the FAA, and + (ii) to the extent the work, standards or requirements + required to comply with this clause (B) is beyond the work, + standards or requirements otherwise required by Section 16 or + this Exhibit E, such work, standards or requirements will be + performed pursuant to work orders and workscopes agreed upon + by Lessee and the Beneficiaries and at the Beneficiaries' + cost, and the Term will not be deemed extended as a result of + such additional work). If requested to do so by the + Beneficiaries, Lessee shall cooperate reasonably to comply + with all requirements for domestic and over-water operations + under U.S. FAR Part 129, provided that (i) the Beneficiaries + inform Lessee of such requirements, (ii) Lessee and the + Beneficiaries mutually agree upon the work required for such + compliance and (iii) the Beneficiaries bear the cost of such + compliance to the extent such compliance requires parts or + labor not otherwise required to be performed by Lessee + pursuant to Section 16 or this Exhibit E, and the Term will + not be deemed extended as a result of such additional work + solely to comply with the requirements for domestic and + over-water operations under U.S. FAR Part 129. + + (d) (i) comply with the Detailed Specifications except and to the + extent that such specifications have been altered as required + or permitted by this Lease; + + (ii) except as otherwise provided in the Lease or in the + Supplemental Agreement or as consented to by each + Beneficiary, shall be in substantially the same configuration + (including but not limited to, interior seating + configuration, galleys and lavatories) as when the Aircraft + was originally delivered to Lessee hereunder, save where + changes have been made which do not impair its marketability + or decrease its value, as determined by each Beneficiaries' + sole determination; + + (e) (i) have had carried out on the Aircraft the final + completion and termination of all open, deferred or + continued maintenance items, and shall have had completed, on + a terminating action basis, where terminating action is due + for compliance, all outstanding mandatory, required, ordered + and "earliest convenience" airworthiness directives issued by + the FAA and all mandatory, alert, earliest convenience and + recommended service bulletins (so long as the Manufacturer + issues such service bulletins) (insofar, in the case of + recommended service bulletins, as required by the + Beneficiaries after consultation with Lessee, in which case + any such recommended service bulletin shall be carried out + (y) at Lessee's expense if Lessee shall be carrying or shall + have carried out such service bulletin with respect to a + majority of aircraft comprising its 737 fleet or (z) at the + Beneficiaries' expense pursuant to the workscope or work + order agreed upon by the Beneficiaries and Lessee, if Lessee + shall not be carrying out such service bulletin with respect + to a majority of aircraft comprising its 737 fleet) issued by + the Manufacturer in + + + -2- + + + + + + each case which have a compliance or termination date on or + before the date three (3) months (six (6) months upon request + of and at the cost of the Beneficiaries and the Term will not + be deemed extended solely as a result of such additional work + required to terminate the airworthiness directives that are + due after three (3) months following the Return Occasion and + requested by the Beneficiaries) after the date of the Return + Occasion (without waiver, restriction, deferment, exception, + carry over, watch or repetitive status items or being on + watch, except, in the case of airworthiness directives, (i) + as expressly provided in the Supplemental Agreement or (ii) + as Lessor shall otherwise specify in writing to Lessee); + + (ii) have had permanently and properly repaired any damage to + the Aircraft caused by ground handling equipment or impact + damage caused by foreign objects which occurred during the + Term that exceeds Manufacturer's limits for operation without + restrictions or repetitive inspections; + + (iii) not have any open, deferred, continued or placarded log book + items; + + (f) all exterior logos and other proprietary marks shall be removed or + painted over in accordance with proper industry practice and in a + workmanlike manner; provided that, at the Beneficiaries' request, + Lessee shall have Lessee's paint and markings stripped and + re-painted white or in the livery selected by the Beneficiaries so + long as the Beneficiaries bear the cost of such stripping and + repainting, as mutually agreed by the Beneficiaries and Lessee + Lessor shall be responsible for supplying the new livery template + and sufficient paint; and the Term will not be deemed extended + solely as a result of the additional work required at the + Beneficiaries' request; + + (g) have all signs and decals in English, clean, secure and legible; + + (h) have heretofore been maintained in accordance with Section 6(d) of + this Lease with the same care and consideration for the technical + condition of the Aircraft as if it were to have been kept in + continued regular service and operation by Lessee (it being + understood that the obligations hereby imposed upon Lessee by + reference to the care and consideration by Lessee as if the + Aircraft were to be kept in continued regular service is not + intended to supersede Lessee's obligations herein with respect to + the specific and express terms of this Lease with respect to the + maintenance, repair, alteration or return of the Aircraft); + + (i) have had all repetitive airworthiness directives and mandatory + orders and regulations in at least half-life or better condition; + and + + (j) have, upon return of the Aircraft, returned at least one (1) + complete set of the Aircraft Documents related to the Aircraft and + its maintenance and operation records in up-to-date status. + +Lessee shall deliver to Lessor, at no cost to Lessor or the Beneficiaries, +all service bulletin kits relating to the Aircraft which have been furnished +to Lessee free of charge by any manufacturer for installation on the Aircraft +and which have not been so installed. In the event that such uninstalled + + + -3- + + + + + + Beneficiaries, taking into consideration + and determination Tax consequence to Lessor + and the Beneficiaries, which state shall be + specified in the Lease Supplement. + +Engine Manufacturer: Pratt & Whitney. + +Estimated Delivery Date: November 30, 1995. + +Last Basic Rent The Last Basic Rent Payment +Payment Date: Date shall be the ninety-sixth (96th) + Basic Rent Payment Date. + +Lease Identification: This [Aircraft] [Engine] is owned by + Wilmington Trust Company, not in its + individual capacity but solely as Trustee + for the benefit of ITOCHU AirLease + (Europe) Limited and Marubeni Airleasing + (UK) Limited, is leased to Aloha Airlines, + Inc. and may not be operated by a third + party without the prior written consent + of Wilmington Trust Company, as trustee. + +Lessee's Address: Aloha Airlines, Inc. + 371 Aokea Street + Honolulu, Hawaii 96819 + Fax No.: (808) 833-3100 + Attention: Vice President - + Finance and Chief Financial + Officer + +Lessor's Address: Wilmington Trust Company + Rodney Square North + Wilmington, Delaware 19890 + Attention: Corporate Trust + Administration + + Fax No.: (302) 651-8882 + +Manufacturer: The Boeing Company. + +Other Lease: Means each of Aircraft Lease Agreement + A, dated as of December 1, 1991, between + Lessee and First Security Bank of Utah, + National Association, as owner trustee, + and Aloha Airlines, Inc., as lessee, and + Aircraft Lease Agreement B, dated as of + December, 1991, + + + -2- + + + + + + between First Security Bank of Utah, + National Association, as owner trustee, + and Aloha Airlines, Inc., as lessee, as + each may be supplemented or amended + from time to time. The Other Leases relate + to the leasing to Lessee of aircraft other + than the Aircraft. + +Overdue Rate: One month LIBOR, as in effect from time to + time, plus 3-1/2% per annum, but not to + exceed the maximum amount permitted by Law. + +Payment Locations: For ITOCHU AirLease (Europe) Limited: + + Account Name: Citibank New York (ABA No. + 021000089) for the account of Citibank + Dublin (account no. 10994598) in favor of + ITOCHU AirLease (Europe) Limited (account + no. 1-00-6793-017) + + For Marubeni Airleasing (U.K.) Limited: + + Harris Bank International Corporation + ABA #026-007-760 + for the credit of + The Mitsubishi Trust & Banking Corporation + London Branch A/C#16011100 + UID No.107280 + for further credit to + Marubeni Airleasing (UK) Ltd. + Account #020-404391 + + With respect to payments by + Lessee of Basic Rent hereunder, 62.682% of + such amounts shall be paid to ITOCHU + AirLease (Europe) Limited (as above + provided) and 37.318% of such amounts + shall be paid to Marubeni Airleasing (U.K.) + Limited (as above provided). + +Permitted Jurisdictions: Any member country of the European Union + and the following: + + + -3- + + + + + + + Argentina + Australia + Austria + Brazil + Canada + Chile + Finland + Hong Kong + Iceland + New Zealand + Norway + Puerto Rico + Singapore + South Africa + Sweden + Switzerland + United States of America + +Permitted Sublessees: Aer Lingus + Air Canada + Air France + Air-Inter + Air New Zealand + Air Portugal + Alitalia + All Nippon Airways + Ansett + Austrian Airlines + Braathens + British Airways + British Midland Airways + Canadian Airlines International + Cathey Pacific + China Airlines + Condor + Iberia + Japan Airlines + Japan Air System + Japan Asia Airways + Korean Air + Lufthansa + Malaysian Airlines System + Martinair Holland + Qantas + Royal Dutch Airlines + Sabena + Scandinavian Airlines System + Singapore Airlines + SwissAir + Thai Airways International + Alaska Airlines + Continental Airlines + Delta Airlines + Southwest Airlines + United Air Lines + USAir + + -4- + + + + + + Provided always that, at any time during + the Term, the Beneficiaries may, by notice + to Lessee, notify Lessee that any such + Person no longer constitutes a Permitted + Sublessee (which determination shall be + made on a reasonable basis by the + Beneficiaries), whereupon such Person shall + no longer constitute a Permitted Sublessee. + +Public Liability and Five Hundred Million Dollars +Property Damage Insurance: ($500,000,000) per occurrence or the + highest amount carried by Lessee with + respect to other narrow body aircraft in + its fleet. + +Return Location: Such location in the Western Continental + United States as may be selected by + Lessor. If the Beneficiaries request + Lessee to return the Aircraft to a + location other than in Western + Continental United States, other than + following a Default or an Event of Default, + then Lessee and the Beneficiaries will + cooperate reasonably and in good faith to + arrange for such ferry flight, and the + Beneficiaries will bear any additional + ferry flight cost and expenses incurred by + Lessee (without markup) that are beyond + those costs and expenses that would have + been incurred if the Aircraft were ferried + to a location in the Western United States. + +Supplemental Agreement: means the Letter Agreement No. 1 dated as + of November 29, 1995 executed by the parties + hereto. + +Trust Agreement: means Trust Agreement N685MA, dated as of + December 27, 1991 between Wilmington Trust + Company and each Beneficiary, as amended + modified or supplemented from time to time. + + + -57- + + + + + +kits were purchased, manufactured or ordered by Lessee and in stock or +undelivered pursuant to purchaser order, then Lessor shall have a right to +purchase such kits from Lessee, at Lessee's cost and expense (without mark-up), +such right being exercisable at any time during the sixty (60) day period +following the return of the Aircraft; provided that such period will be +extended to one hundred eighty (180) days if such kit is ordered by Lessee upon +request by the Beneficiaries. + +Lessee shall have undertaken to use all reasonable endeavors (short of +grounding any aircraft or rescheduling any flight) to ensure that the Aircraft +shall have, on return of the Aircraft, no installed Part which shall have a +total time since new greater than 150% that of the Airframe. In any event, +Lessee shall not adversely discriminate against the Aircraft regarding the age +of Parts installed in the Aircraft compared with other aircraft operated by +Lessee. + +2 AIRCRAFT MAINTENANCE ON RETURN + +Prior to the Return Occasion and immediately prior to the return of the +Aircraft to Lessor, at Lessee's own expense: + + (a) AIRFRAME + + (i) Lessee shall, if requested by a Beneficiary, perform, or + procure the performance of, a full and complete C Check or its + equivalent including all phases, multiples and lower checks + in accordance with the Maintenance Program. Lessee shall + correct any deficiencies revealed during such C Check + inspection using Manufacturer's limits and guidelines, as + witnessed by the Beneficiaries' representative. Lessor will + contribute to the cost of such C Check or equivalent by + paying to Lessee the incrementary cost (without markup) to + perform such C Check or equivalent. + + (ii) The Airframe shall have no less than 4,000 Flight Hours + remaining to the next due D Check and no less than 1,500 + Flight Hours remaining to the next due C Check under Lessee's + Maintenance Program; PROVIDE, HOWEVER, that Lessee shall be + permitted to return the Aircraft with less than 4,000 Flight + Hours remaining until the next due D Check under Lessee's + Maintenance Program if (A) at time of the Return Occasion, + the Beneficiaries have entered into an agreement for the + lease or sale of the Aircraft with a subsequent lessee, buyer + or user of the Aircraft (a "Subsequent User"), and (B) the + bridging of the Maintenance Program to the Subsequent User's + maintenance program is approved in writing by the civil + aviation authority having jurisdiction over the Subsequent + User in a manner that permits the Subsequent User to actually + have available to it as of the Return Occasion no less than + 4,000 Flight Hours remaining until the next due D check or + its equivalent in accordance with the Subsequent User's + maintenance program. + + (iii) In addition to (i) above, if the Beneficiaries request that + Lessee perform, or procure the performance of, D Check or + equivalent, Lessee will perform, or procure the performance + of, such D Check or equivalent, with Lessor contributing to + the cost of such D Check or equivalent by paying to Lessee + the incrementary cost (without markup) to perform such D + Check or equivalent; provided that the Term will not be + deemed to be extended solely because of such D Check or + equivalent. + + (b) The condition of the Aircraft and installed systems upon return to + Lessor shall be as follows: + + + + + + (i) each Engine and each life limited Part therein shall have no + less Flight Hours or Cycles or time (whichever is applicable + and the more limiting factor) remaining until the next due + scheduled removal, shop visit or overhaul refurbishment as on + the Delivery Date, and the Engines shall have not less than + 2,250 Flight Hours and 1,500 Cycles remaining (whichever is + the more limiting factor) until the next scheduled + refurbishment and each life limited part within the Engines + shall have not less than 3,000 Flight Hours and 2,000 Cycles + remaining to the next scheduled replacement. + + (ii) the APU and each life limited Part therein (if applicable) + shall have no less hours or time (whichever is applicable and + the more limiting factor) remaining until the next due + scheduled removal and overhaul as on the Delivery Date, and + Lessee shall have the option to swap APUs to meet the + requirements of this paragraph (ii); + + (iii) the Landing Gear of the Aircraft and other time or life limited + parts of the Landing Gear shall have no less Flight Hours or + Cycles or any other life limit (whichever is applicable and + the more limiting factor) remaining until the next due + scheduled removal and overhaul as on the Delivery Date, and + Lessee shall have the option to swap Landing Gear to meet the + requirements of this paragraph (iii). + +3 OTHER MATTERS + + (a) Provided necessary material and instructions are received in due + time (other than materials available by Lessee), any further work + required by the Beneficiaries, which can be accommodated within + the days already planned by Lessee for the above inspection and + check as set forth in paragraph 2(a) above, shall be performed, or + performance thereof shall be procured, by Lessee during the above + check and Lessor shall reimburse Lessee for the incremental costs + incurred (without mark-up). + + (b) Each and every Part and time or calendar limited Part (including, + without limitation, loose equipment) will have no less life + remaining to the next scheduled removal, repair and overhaul as on + the Delivery Date in accordance with the Maintenance Program or + the recommended maintenance planning document of the manufacturer + of the relevant Part, and Lessee shall have the option to swap + Parts to meet the requirements of this paragraph (b). + + (c) Each Engine and the APU will be installed on the Aircraft and + if not the engines or auxiliary power unit installed on the + Delivery Date will be accompanied by all documentation that the + Beneficiaries may reasonably require to evidence that title + thereto is properly vested in Lessor in accordance with this Lease + and will: + + (i) have a power assurance run and a borescope inspection (or, in + case of the APU, such other inspection as in accordance with + Manufacturer's or APU manufacturer's recommendation) and, in a + case where an Engine does not meet the on-wing operating + criteria as required by Lessee's FAA approved engine + Maintenance Program and limits of the Engine section of the + Aircraft Maintenance Manual, if requested by Lessor, a test + cell inspection which shall be performed at Lessee's expense + with the Beneficiaries' representative entitled to be present + and Lessee shall provide evidence satisfactory to the + Beneficiaries (A) that the Engine meets the JT8D-17A limits + established by the Manufacturer according to the power + assurance check defined on the Aircraft + + -5- + + + + + Maintenance Manual with an EGT margin of no less than 18 + degrees centigrade at maximum rated takeoff power on a + standard day and (B) reflecting the correction of any + discrepancies from the guidelines set out by the Engine + Manufacturer which may be discovered during any such + inspection. All repairs shall be to the Beneficiaries' + satisfaction; + + (ii) if the Engine historical and maintenance records and/or trend + monitoring data (or current test cell run report, if + applicable) indicate a rate of acceleration in performance + deterioration of any Engine including the APU which is higher + than normal based on Lessee's maintenance experience in + operating such engines, Lessee shall, prior to return, correct + or cause to be corrected such conditions which are determined + to have exceeded engine manufacturer's maintenance manual + tolerances or otherwise be causing such performance + deterioration; and + + (iii) not have an Engine which is "on watch" for any reason + requiring any special or out of sequence inspection and each + such Engine shall comply with the operations specification of + Lessee without waiver, carry over, deferment, restriction or + exceptions. + +4 FUSELAGE, WINDOWS AND DOORS + + (a) The fuselage will be free of all dents and abrasions, + additional scab patches am as at the Delivery Date and loose or + pulled or missing rivets, beyond the limits set in the relevant + structural repair manual (and all scab patches existing at the + Delivery Date shall be monitored and maintained, including as to + corrosion, during the Tenn); + + (b) windows will be free of delamination, blemishes, crazing, beyond + limits set in the relevant structural repair manual and will be + properly sealed; and + + (c) doors will be free moving, correctly rigged and be fitted with + serviceable seals. + +5 WINGS AND EMPENNAGE + + (a) All leading edges will be free from damage, beyond limits + set in the relevant structural repair manual; and + + (b) all control surfaces will be cleaned (provided they shall have + been waxed and polished during the preceding C Check); + + (c) all unpainted cowlings and fairings will be cleaned (provided they + shall have been polished during the preceding C Check); and + + (d) wings will be free of fuel leaks. + +6 INTERIOR + + (a) Ceilings, sidewalls and bulkhead panels will be clean and free of + cracks and stains (fair wear and tear excepted); + + + -6- + + + + + + (b) carpets and seat covers will be in good condition, clean and free + of stains, spots, chewing gum, tear or fraying (fair wear and tear + excepted) and meet FAA fire resistance regulations; + + (c) seals and panels will meet FAA fire resistance regulations and + will be serviceable in good condition free of cracks and repainted + as necessary; and + + (d) emergency equipment having no less calendar life remaining as on + the Delivery Date. + +7 COCKPIT + + (a) All fairing panels shall be clean, free of stains and cracks (fair + wear and tear excepted), will be secure and repainted as necessary; + + (b) floor coverings will be clean (fair wear and tear excepted) and + effectively sealed; + + (c) seat covers will be in good condition, clean, free of stains (fair + wear and tear excepted) and will conform to FAA fire resistance + regulations; and + + (d) seats will be serviceable, in good condition, meet FAA fire + resistance regulations and will be repainted as necessary. + +8 CARGO COMPARTMENTS + + (a) All panels will be in good condition, fair wear and tear + excepted, clean and free of cracks and any panels which have + cracks will be replaced; + + (b) all nets will be serviceable and in good condition, fair wear and + tear excepted; (c) any repair shall be within the limits + established in the Manufacturer's structural repair manual; and + + (d) fabric cover shall be in good condition, fair wear and tear + excepted, free of stains, spots, tear or fraying. + +9 WHEEL WELLS AND UNDERCARRIAGE + + Each wheel well and undercarriage will be clean and free of leaks. The + wheel wells will be repainted as necessary. + +10 CORROSION + + (a) The Aircraft will have been inspected and treated with respect to + corrosion in strict adherence to that required by the Maintenance + Program; + + (b) the entire fuselage will be substantially free from corrosion and + will be adequately treated and an approved corrosion prevention + program will be in operation; and + + + -7- + + + + + + (c) fuel tanks will be free from contamination and, if applicable, a + corrosion and a tank treatment program will be in operation. + +11 EQUIPMENT CHANGES + + Upon mutual discussion and agreement, Lessor may require Lessee to + remove any Removable Part (but excluding a Removable Part the + installation of which is a requirement of the FAA or this Lease) and + restore the Aircraft to its condition prior to installation of that + Removable Part. Where appropriate, compliance by Lessee with the + redelivery conditions in this Schedule shall be measured by reference to + the Boeing maintenance planning document. + +12 NO LESSOR OR BENEFICIARY COMPENSATION + + Neither Lessor nor any Beneficiary shall be liable to Lessee, and Lessee + shall not be entitled to any compensation, with respect to the return of + the Airframe, the APU, any Landing Gear or any Part which, in any case, + has more Flight Hours, Cycles or time remaining or is otherwise in + better condition than the Flight Hours, Cycles, time remaining or + condition required by this Lease (including but not limited to Sections + 2(a)(ii), 2(b)(ii), 2(b)(iii) and 3(b) of this Section E). + + -8- + + + + + + EXHIBIT F + to + AIRCRAFT LEASE AGREEMENT + + [Letterhead of Lessee's Counsel] + + [Date of Delivery Date] + +The following is a summary of the items that should be included in Lessee's +Counsel Opinion: + + 1. Lessee is a corporation duly organized and existing under +the laws of the State of Hawaii and has the corporate power and authority to +carry on its business as presently conducted and to perform its obligations +under the Lease. + + 2. The execution, delivery and performance of the Operative +Documents have been duly authorized by all necessary corporate action of Lessee +and do not require any further approval of the Board of Directors or +stockholders of Lessee or approval or consent of any trustee or holders of +indebtedness or obligations of Lessee. Neither the execution and delivery +thereof nor the consummation of the transactions contemplated thereby nor +compliance by Lessee with any of the terms and provisions thereof will +contravene the certificate of incorporation or by-laws of Lessee or, to our +knowledge, any law applicable to Lessee and, to our knowledge, do not and will +not result in any breach of, or constitute a default under, or result in the +creation of any Lien upon any property of Lessee under, any credit agreement or +instrument, or other agreement or instrument to which Lessee is a party or by +which Lessee or its properties or assets are bound or affected. + + 3. Neither the execution and delivery by Lessee of the +Operative Document, nor the consummation of any of the transactions by Lessee +contemplated thereby, nor the compliance by the Lessee with any of the terms +and provisions thereof, requires the consent or approval of, or the giving of +notice to, or the registration with, or the taking of any other action in +respect of any federal or state governmental authority or agency, except for +the registration of the Aircraft, recordation and other actions referred to in +paragraph 6 below. + + 4. The Operative Document have been duly executed and +delivered by Lessee, and constitute the legal, valid and binding obligations of +Lessee, enforceable against Lessee in accordance with their respective terms, +subject, as to enforceability, to applicable bankruptcy, insolvency, +reorganization, moratorium or other similar laws affecting the enforcement of +creditors' rights generally, and, to general principles of equity. + + 5. To our knowledge, there are no pending suits or proceedings +before any court or any regulatory commission, board or other administrative +governmental agency against or affecting Lessee which might have a materially +adverse effect on the current business or financial condition of Lessee. + + 6. Except for the appropriate registrations, recordings and +filings with the FAA, the filing of a precautionary UCC-1 financing statement +with the Hawaii Bureau of Conveyances and the placing on the Aircraft and on +each Engine of the plates containing the legends referred to in Section 6(f) of +the Lease + + + + + +Agreement, no further filing or recording of any document and no further action +is necessary or desirable in order to protect Lessor's right, title and +interest in and to the Aircraft as against Lessee or any third party. + + 7. Lessee is a Certified Air Carrier as defined in the Lease +Agreement. + + 8. Lessor is entitled to the benefits of Section 1110 of Title +11 of the United States Code with respect to the Aircraft and the Engines to +the extent that they constitute an "airframe" or "aircraft engines", as defined +in Section 101 of the Federal Aviation Act. + + -2- + + + + + + EXHIBIT G + to + AIRCRAFT LEASE AGREEMENT + + [LETTERHEAD OF APPROVED INSURANCE BROKER] + + [Date of Delivery Date] + +Wilmington Trust Company +Rodney Square North +Wilmington, Delaware 19890 + + Re: Insurance Coverage for One Boeing 737-25A Aircraft under + Aircraft Lease Agreement, dated as of November 29, 1995, + between Wilmington Trust Company, not in its individual + capacity but solely as Trustee f/b/o ITOCHU AirLease + (Europe) Limited and Marubeni Airleasing (U.K.) Limited + +Gentlemen: + + This report is delivered to you pursuant to the provisions of +Section 2(b)(vii)(5) of the Aircraft Lease Agreement 23791, dated as of +November __, 1995 (the "Lease"), between Wilmington Trust Company, not in its +individual capacity but solely as Trustee (the "Lessor"), and Aloha Airlines, +Inc. (the "Lessee"). We are the firm of independent aircraft insurance brokers +(the "Approved Insurance Broker") who have been appointed by the Lessee to +deliver this report pursuant to Section 2(b)(vii)(5) of the Lease and we +understand that the Lessor has not objected to such appointment. Except as +otherwise defined herein, the terms used herein shall have the meanings set +forth in the Lease. + + We have reviewed the Lease and particularly Section 12 +thereof. We are also fully familiar with the Certificate of Insurance dated +November __, 1995 issued to you on behalf of the Approved Insurers as well as +the policies of insurance evidenced thereby. + + As of the date of this report, it is our opinion as the +Approved Insurance Broker that the insurance presently carried and maintained +by the Lessee, as evidenced in the attached certificates, complies with the +terms and requirements of Section 12 of the Lease. + + We agree to advise the Lessor and each Beneficiary in writing +promptly of any default in the payment of any premium and any other act or +omission on the part of the Lessee of which we have knowledge and which might +invalidate or render unenforceable, in whole or part, any insurance required +under the Lease on the Aircraft. + + Yours faithfully, + + [APPROVED INSURANCE BROKER] + + + + + +Wilmington Trust Company +Date +Page 2 + + + + ---------------------- + [Title] + + + + + + EXHIBIT H + to + AIRCRAFT LEASE AGREEMENT + + SPECIAL PROVISIONS TO CERTIFICATE OF INSURANCE + + The "special provisions" section of the Insurance Certificate +shall provide as follows: + + 1. In accordance with the Aircraft Lease Agreement, dated as +of November 29, 1995 (the "Lease"), between Lessor and Lessee, it is agreed to +include Lessor (in its individual capacity and as Owner Trustee), each +Beneficiary and their assigns as additional insureds, designate Lessor as owner +of the Aircraft, and designate the Beneficiaries and their assigns as loss +payees (but without imposing upon Lessor, such Beneficiary and their assigns +any obligation to pay any premiums). + + 2. It is agreed that in respect of the interests of Lessor, +each Beneficiary and their assigns, in the insurance coverage provided hereby, +such insurance coverage shall not be invalidated by any action or omission of +Lessee, and shall insure Lessor, such Beneficiary and their assigns, regardless +of any breach or violation of any warranty, declaration or condition contained +in such insurance coverage by Lessee. + + 3. It is agreed that if the insurance coverage provided hereby +is canceled for any reason whatsoever, or is adversely changed in any way with +respect to the interests of Lessor, any Beneficiary or their assigns, or if +such insurance is allowed to lapse for nonpayment of premium, such +cancellation, adverse change or lapse shall not be effective as to Lessor, such +Beneficiary and their assigns, for thirty (30) days (seven (7) days or such +lesser period as may be applicable in the case of any war risks and allied +perils coverage) after receipt by Lessor and such Beneficiary of written notice +of such prospective cancellation, change or lapse. + + 4. It is agreed that, as against Lessor, each Beneficiary and +their assigns, the Insurers waive any rights of setoff, counterclaim or any +other deduction, whether by attachment or otherwise, and waive any rights to be +subrogated to any right of any insured against Lessor, each Beneficiary or +their assigns, with respect to the Aircraft to the same extent that Lessee has +waived its rights of subrogation by the terms of its agreements to indemnify +any such party pursuant to this Lease. + + 5. The coverage provided hereunder is primary without right of +contribution from any other insurance which may be carried by Lessor, any +Beneficiary or their assigns. It is agreed that Lessor and each Beneficiary has +a right to carry insurance in excess of the amounts provided hereunder without +prejudice to the coverage hereunder provided. + + 6. A 50/50 clause is in effect between the all risk hull and +war risk covers. + + + + + + EXHIBIT I + to + AIRCRAFT LEASE AGREEMENT + + FORM OF REDELIVERY ACKNOWLEDGEMENT + + This Redelivery Acknowledgement is delivered, on the date set +out below, by WILMINGTON TRUST COMPANY ("Lessor") to ALOHA AIRLINES INC. +("Lessee") pursuant to the Lease Agreement dated November __, 1995 between +Lessor and Lessee (the "Agreement"). The capitalised terms used in this +Certificate shall have the meanings given to such terms in the Agreement. + +1 DETAILS OF ACCEPTANCE + + Lessor hereby confirms to Lessee that Lessor has at [ ] o'clock on + [insert date], at [ ], accepted redelivery of the following, in + accordance with the provisions of the Agreement: + + (a) Boeing Model 737-25A Airframe, Manufacturer's Serial No. 28791. + + (b) Pratt and Whitney JT8D-17A Engine, Manufacturer's Serial + Nos. [ ] and [ ]. + + (c) Fuel Status: Pounds [ ]. + + (d) Loose Equipment Check List: as per list signed by Lessor + and Lessee and attached hereto. + +2 CONFIRMATION + + Lessor confirms to Lessee that as at the time indicated above, being + the Expiration Date, Lessor's authorized technical experts have + inspected the Aircraft to ensure the Aircraft conforms to redelivery + conditions specified in the Agreement and that the Aircraft is in + accordance with the specifications of the Agreement and satisfactory + in all respects save for the following: + + [ ] + [ ] + + + + + +3 IN WITNESS WHEREOF, the Lessor has, by its duly authorized + representative, executed this Certificate on the date in paragraph 1 + above. + + LESSOR: + + + By: + --------------------- + Title: + --------------------- + Date: + --------------------- + + The "special provisions" section of the Insurance Certificate shall + provide as follows: + + -2- + + + + + + EXHIBIT J + to + AIRCRAFT LEASE AGREEMENT + +Monthly Aircraft Utilization & Status Report + +Monthly Aircraft Utilization and Status Report Provided +UNDER THE LEASE CONTRACT BETWEEN ALOHA AIRLINES, INC. AND WILMINTON TRUST +COMPANY, AS TRUSTEE + +MONTH ENDING: +Aircraft Registration Number: +Airframe Make and Model: Boeing: +Total Time on Airframe Since New: +Total Cycles on Airframe Since New: + + +
+ + MONTHLY TOTAL + FLIGHT MONTHLY FLIGHT TOTAL DATE INST + SERIAL NO. HOURS CYCLES HOURS CYCLES LOCATION (REMOVED) + +Airframe + +Engines & APU's Subject to Lease + +Engine #1 + +Engine #2 + +APU + +Other Engines & APU's Installed on Airframe + +Engine #1 + +Engine #2 + +APU + +Engines & APU's permanently removed from Service During Month + + +
+ + + MAJOR MAINTENANCE + + +
+ + MAINTENANCE CHECK DATE ACCOMPLISHED + +"A" CHECK - HOURS + +"B" CHECK - HOURS + +"C" CHECK - HOURS + +"D" CHECK - HOURS + +
+ + APU and Engine data represent the times and cycles of the airframes +each is installed on. + + The Aircraft, Engines, modules and APU subject to the Lease for +this Aircraft have been kept in good order and repair, or are being restored to +the condition required by the Lease. + +MAJOR STRUCTURAL REPAIR: +MAJOR MODIFICATIONS/AD's: +MISCELLANEOUS/ACCIDENTS/INCIDENTS: +FOR AND ON BEHALF OF VARIG S.A. + +NAME: + +TITLE: + + + + + + EXHIBIT K + to + AIRCRAFT LEASE AGREEMENT + + LIST OF DOCUMENTS TO BE SUPPLIED ANNUALLY + +1. AIRWORTHINESS DIRECTIVE SUMMARY UPDATES WILL BE SUPPLIED ANNUALLY + +2. SERVICE BULLETIN AND LESSEE'S ORIGINATED MODS SUMMARY + UPDATES WILL BE SUPPLIED ANNUALLY + +3. ENGINEERING ORDER (DT) + +4. LAST SHOP VISIT REPORT (FORM 337) FOR ENGINES AND APU WILL BE SUPPLIED + AS APPLICABLE. + +5. LIFE LIMITED PARTS STATUS FOR AIRFRAME/ENGINE/APU/LANDING GEAR WITH + COPY OF SERVICEABLE TAGS AS APPLICABLE. + +6. LISTING OF TIME/CALENDAR CONTROLLED COMPONENTS BY PIN, S/N - + DESCRIPTION-POSITION-TBO-TSI-TSO-TOTAL TIME. + +7. AIRCRAFT MASTER FLIGHT LOG (COMPUTER RUN OF TOTAL TT/TC RECORDED + DAILY). UPDATES WILL BE PROVIDED. + +8. CURRENT AND FUTURE REVISIONS OF ALOHA 737 MAINTENANCE PROGRAM (EPM), AS + APPLICABLE. + +9. LISTING OF ALL MAJOR 737 STRUCTURAL REPAIRS (N685MA) AS APPLICABLE. + +10. ANTICIPATED DATE OF NEXT SCHEDULED D CHECK OR C CHECK. + + + + + + COUNTERPART NO. 7 + + LEASE SUPPLEMENT NO. 1 + + TO AIRCRAFT LEASE AGREEMENT + DATED AS OF NOVEMBER 29, 1995 + + LEASE SUPPLEMENT NO. 1, dated December 1, 1995, between +Wilmington Trust Company, not in its individual capacity but solely as +Trustee f/b/o ITOCHU AirLease (Europe) Limited and Marubeni Airleasing (U.K.) +Limited ("Lessor"), and Aloha Airlines, Inc., a company organized under the +laws of Hawaii ("Lessee"). + + Lessor and Lessee have previously entered into that certain +Aircraft Lease Agreement dated as of November 29, 1995 (herein called the +"Lease" and the defined terms therein being hereinafter used with the same +meaning). The Lease provides for the execution and delivery from time to time +of a Lease Supplement substantially in the form hereof for the purpose of +leasing the aircraft described below under the Lease as and when delivered by +Lessor to Lessee in accordance with the terms thereof. + + The Lease relates to the Aircraft, Parts and Engines as more +precisely described below. A counterpart of the Lease is attached hereto and +this Lease Supplement and the Lease shall form one document. + + In consideration of the premises and other good and +sufficient consideration, Lessor and Lessee hereby agree as follows: + + 1. Lessor hereby delivers and leases to Lessee under the +Lease and Lessee hereby accepts and leases from Lessor under the Lease, that +certain Boeing Model B-737-25A commercial jet aircraft, Airframe and the two +Pratt & Whitney JT8D-17A Engines (each of which engines has 750 or more rated +takeoff horsepower or the equivalent of such horsepower) described in +Schedule 1 attached hereto and made a part hereof (the "Delivered Aircraft"). +The status of the Aircraft and Engines upon delivery thereof to Lessee shall +be as described on Schedule 2 attached hereto and made a part hereof. + + 2. (A) The Delivery Date of the Delivered Aircraft is the +date of this Lease Supplement set forth in the opening paragraph hereof. + + (B) The time of the delivery and acceptance of the +Delivered Aircraft is 12:30 p.m. Central Time, at which + + + + + +time the Delivered Aircraft is located in the airspace over the State of +Texas, United States of America (such location is herein called the "Delivery +Location"). + + 3. The Term for the Delivered Aircraft shall commence on +the Delivery Date and shall end on the Expiration Date, which shall be +December 1, 2003. + + 4. The amount of Basic Rent for the Delivered Aircraft is +payable in advance on each Basic Rent Payment Date. + + 5. Lessee hereby confirms to Lessor that (i) the Delivered +Aircraft and each Engine installed thereon or belonging thereto have been +duly marked in accordance with the terms of Section 6(f) of the Lease, (ii) +Lessee has accepted the Delivered Aircraft for all purposes hereof and of the +Lease and (iii) Lessee has inspected the Delivered Aircraft and the Delivered +Aircraft satisfies the conditions set forth in the Lease. + + 6. Lessor represents that all of its representations and +warranties contained in the Lease are true and correct on the date hereof. + + 7. All of the terms and provisions of the Lease Agreement +are hereby incorporated by reference in the Lease Supplement to the same +extent as if fully set forth herein. + + 8. The Lease Supplement may be executed in any number of +counterparts, each of such counterparts, except as provided in Section 20(e) +of the Lease, shall for all purposes be deemed to be an original and all such +counterparts shall together constitute but one and the same Lease Supplement. + +THIS LEASE SUPPLEMENT HAS BEEN EXECUTED IN MULTIPLE COUNTERPARTS, OF WHICH +THERE IS ONE COUNTERPART DESIGNATED AS "COUNTERPART NO. 1 - CHATTEL PAPER +ORIGINAL" AND ALL OTHER COUNTERPARTS SHALL BE DESIGNATED WITH NUMBERS OTHER +THAN 1. TO THE EXTENT THAT THIS LEASE SUPPLEMENT CONSTITUTES CHATTEL PAPER +UNDER THE UNIFORM COMMERCIAL CODE, AS IN EFFECT IN ANY APPLICABLE +JURISDICTION, NO SECURITY INTEREST MAY BE CREATED OR PERFECTED BY POSSESSION +OF ANY COUNTERPART OF THIS LEASE SUPPLEMENT OTHER THAN SAID COUNTERPART NO. 1. + + + -2- + + + + + + IN WITNESS WHEREOF, Lessor and Lessee each have caused +this Lease Supplement to be duly executed by their authorized officers as of +the day and year first above written. + + LESSOR: + + WILMINGTON TRUST COMPANY, not + in its individual capacity but + solely as Trustee + + + By: /s/ M. P. Bonilla + ------------------------------------ + Name: Myfanwy Phillips Bonilla + ------------------------------------ + Title: Asst. Vice President + + + LESSEE: + + ALOHA, AIRLINES, INC + + By: + ------------------------------------ + Name: + ------------------------------------ + Title: + ------------------------------------ + + + By: + ------------------------------------ + Name: + ------------------------------------ + Title: + ------------------------------------ + + + + + + IN WITNESS WHEREOF, Lessor and Lessee each have caused this +Lease Supplement to be duly executed by their authorized officers as of the +day and year first above written. + + LESSOR: + + WILMINGTON TRUST COMPANY, not + in its individual capacity but + solely as Trustee + + By: + ------------------------------------ + Name: + ------------------------------------ + Title: + ------------------------------------ + + + LESSEE: + + ALOHA AIRLINES, INC. + + By: /s/ Brenda F. Cutwright + ------------------------------------ + Name: Brenda F. Cutwright + ------------------------------------ + Title: SR. VICE PRESIDENT FINANCE & + PLANNING AND CFO + ------------------------------------ + + + By: /s/ James M. King + ------------------------------------ + Name: James M. King + ------------------------------------ + Title: VICE PRESIDENT PLANNING & + DEVELOPMENT + ------------------------------------ + + + + + + SCHEDULE 1 + TO + LEASE SUPPLEMENT NO. 1 + + BOEING 737-25A + AIRFRAME + + +
+ +MANUFACTURER'S U.S. REGISTRATION +SERIAL NO. NUMBER TOTAL TIME* TOTAL CYCLES* +-------------- ----------------- ----------- ------------- + + +23791 N685MA 23,859 14,057 + (to be changed to + N819AL) + + + INSTALLED PRATT & WHITNEY + ENGINES + +MODEL NO. SERIAL NO. TOTAL TIME* TOTAL CYCLES* +--------- ---------- ----------- ------------- +JT8D-17A P709529 20,960 11,883 +JT8D-17A P709530 22,100 12,908 + + INSTALLED + AUXILIARY POWER UNIT + +MODEL NO. SERIAL NO. TOTAL TIME* TOTAL CYCLES* +--------- ---------- ----------- ------------- +GTCP85-129 P35274 (TACH Reading) + +
+ + + + + + SCHEDULE 1 + TO + LEASE SUPPLEMENT NO. 1 (cont'd) + + B737 AVIONICS + COMPONENT INVENTORY + + +
+ +ITEM PART NUMBER SERIAL NUMBER DESCRIPTION POSITION/QUANTITY +NO. +---- ------------------ ------------- --------------------------- ------------------- + + +1 622-4096-001 4581 PA Amp E&E 1 +2 5140-1-112 339 Remote Electronics Unit E&E 1 +3 622-8971-020 2119 TCAS T/R E&E 1 +4 622-1181-001 14400 VHF T/R E&E 1 +5 622-1396-001 5023 VHF T/R E&E 1 +6 622-7878-200 5128/5165 ATC E&E 2 +7 NA 13UO2 255AKWO022 Selcal E&E 1 +8 622-2921-001 10076/10061 DME E&E 2 +9 080-20325-01 4603/4613/4602 T/Rectifier E&E 3 +10 2-301-3 4782 Batt Charger E&E 1 +11 39B168-1-0 3276 Static Inverter E&E 1 +12 65-52811-109 D00485 Landing Gear Acc Unit E&E 1 +13 42-651-01 443 Anti-Skid E&E 1 +14 65-52810-25 D01002 Air Condition Relay Unit E&E 1 +15 65-73606-69 D01029 Eng Acc Unit E&E 1 +16 65-52808-7 D00496 Compartment Overheat Unit E&E 1 +17 65-52806-235 D00870 Misc Solid State Switch E&E 1 +18 65-52807-26 D00449 Slat Position Switch Unit E&E 1 + +
+ + + -2- + + + + + + +
+ +ITEM PART NUMBER SERIAL NUMBER DESCRIPTION POSITION/QUANTITY +NO. +---- ------------------ ------------- --------------------------- ------------------- + + +19 522-2996-011 2012 Marker Beacon E&E 1 +20 777-1492-002 1582 ADF E&E 1 +21 777-1492-004 4039 ADF E&E 1 +22 965-0876-001 304 GPWS E&E 1 +23 622-3890-003 1556 Radio Alt E&E 1 +24 65-52801-31 D00446 APU Control Unit E&E 1 +25 65-52809-15 D00306 Fire Detector Unit E&E 1 +26 8TJ45-GAB X0062 34B3 Fuel Flow Power Supply E&E +27 231-2 5556/6517 Window Heat Control E&E 4 +28 4314/7490 E&E +29 522-3949-001 3701 Monitor Comparator E&E 1 +30 622-3257-001 5662/2275 ILS NAV RCVR E&E 2 +31 172938-001 6620/6623 NAV SW Unit E&E 4 +32 6630/6613 E&E +33 HG48B13 P255/G1711 ADC E&E 2 +34 4030952-906 88062826 Yaw Damper E&E 1 +35 163356-88-01 0000528 Performance Data Comp E&E 1 +36 548376-6 097C-9045 Cabin Temp Controller E&E 1 +37 87093613 P43 Pressure Controller E&E 1 +38 2588424-902 84053253 Rate of Turn E&E 1 +39 101 812802UA/9118557A Compass Rack E&E 2 +40 622-2500-004 2343/1298 Steering Comp E&E 2 + +
+ + + -3- + + + + + + +
+ +ITEM PART NUMBER SERIAL NUMBER DESCRIPTION POSITION/QUANTITY +NO. +---- ------------------ ------------- --------------------------- ------------------- + + +41 65-52805-317 D01011 Flight Inst Acc Unit E&E 1 +42 172938-001 6624/6615 Switch Unit E&E 4 +43 6595/2678 E&E +44 2590650-901 05872772 Mach Trim Comp E&E 1 +45 2588810-904 01851529 Pitch Computer E&E 1 +46 2588812-902 06871639 Roll Computer E&E 1 +47 65-52812-107 D00496 Auto Pilot Acc Unit E&E 1 +48 457300-0430 3394 Omega RPU E&E 1 +49 25582-003 8305313 Battery E&E 1 +50 2587335-11 84054627 Vert Gyro E&E 1 +51 2587335-11 8415034 Vert Gyro E&E 1 +52 2587335-11 0034163 Vert Gyro E&E 1 +53 2588302-4 0067044 Direction Gyro E&E 1 +54 2588302-4 84056507 Direction Gyro E&E 1 + +
+ + + -4- + + + + + + + SCHEDULE 2 + TO + LEASE SUPPLEMENT NO. 1 + + AIRCRAFT STATUS + ON THE DELIVERY DATE + +AIRFRAME HEAVIEST CHECK ("D" CHECK OR EQUIVALENT): + +Interval: 28,000 (Hrs) +Time Remaining: 4,141 + +LANDING GEAR OVERHAUL: + +Interval: Main Gear 24,000 cycles + Nose Gear 24,000 cycles +Time Remaining: Left Gear 9,943 cycles + Right Gear 9,943 cycles + Nose Gear 9,943 cycles + +ENGINES: + +Overhaul Interval: +Time Remaining (S/N P709529): +Time Remaining (S/N P709530): + +Hot Section Inspection: + +Interval: +Time Remaining (S/N P709529): +Time Remaining (S/N P709530): + +TIME REMAINING TO FIRST RESTRICTION: + +Engine S/N: P709529 + Hours: 9,040 + Cycles: 3,117 (C07) +Engine S/N: P709530 + Hours: 7,900 + Cycles: 2,092 (C07) + + + + + +AUXILIARY POWER UNIT: + +Hot Section Inspection: + +Interval: On Condition +Time Remaining: On Condition + +Time Remaining to Next Limited + or Scheduled Removal: On Condition + + + -2- + + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + Effective date: 10/20/95 + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 21 +------ +Valve, Safety 720737-5 L-0001 14000H 13,817.6 3,977.2 +RH OH 7/3/92 +Valve, Safety 720737-5 830678 14000H 13,817.6 3,977.2 +LH OH 7/3/92 +Gasper Fan 21520-1 063 6000H 22,594.7 4,735 + OH 6/15/95 + +ATA 23 +------ +Recorder, 93A100-80 52428 72 Mo. 14, 623.2H 2 Yrs., 6 Mo. +Voice RPL +(Battery) + +ATA 24 +------ +APU Generator 976J498-1 YK13122 6000H 20,471 2,602H + HT 10/20/94 +Panel Bus 915F213-2 WE1347B 6000H 19,313.9 1,454H +Protection BC 6/11/94 +Gen. Cont. 948F458-1 NM4963 6000H 19,616.8H 1,757H + Unit BC 7/18/94 + APU +Gen. Cont. 948F458-1 PM5071 6000H 23,697H 5,838H + Unit BC 10/3/95 + Left +Gen. Cont. 948F458-1 XJ2186 6000H 21,639.9H 3,780.9H + Unit BC 2/18/95 + Right + +ATA 25 +------ +Life Vest KSE-35L8 527-691 24 Mo. 8/30/95 9 Mos. + Rt. Aft OH 23,304H +Life Vest AV-35 541-064 24 Mo. 2/95 14 Mos. + Co-pilot O H 21,530H +Slide, Evac D31354- 1112 24 Mo. 8/23/94 10 Mos. + Rt. Aft 425 OH 19,939.7H + +
+ + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 25 +------ +Slide, Evac D31354- 1613 24 Mo. 8/24/94 10 Mos. + Lt. Aft 433 OH 19, 949H +Slide, Evac 11611-143 123-1 24 Mo. 9/12/95 23 Mos. + Rt. Fwd OH 23,459H +Slide, Evac D31354- 0159 24 Mo. 2/15/95 7 Mos. + Lt. Fwd 403 OH 21,620H + +Escape Slide SEE NOTE (1) OF THE MARKAIR MAINTENANCE PROGRAM + Bottles (4) + +Life Vest KSE-35L8 50287 24 Mo. 3/17/95 9/96 + Obs OH 21,942H 8 Mos. +Life Vest KSE-35L8 12323 24 Mo. 8/1/95 7/97 + Capts OH 23,085H 22 Mos. +Life Vest KSE-35L8 527-691 24 Mo. 8/30/95 7/97 +Aft Right OH 23,304H 21 Mos. +Life Vest KSE-35L8 29358 24 Mo. 2/3/95 12/96 +Left Aft OH 21,474H 8 Mos. +Life Vest AC-2 535-380 24 Mo. 4/29/95 3/97 +Fwd FA OH 22,259H 17 Mos. +Life Vest KSE-35L8 541-064 24 Mo. 2/7/95 1/97 +Co-pilot OH 21,530.7 15 Mos. +Kit, Medical 017093 NHC1613 24 Mo. 11/28/94 11/96 + OH 20,844H 13 Mos. +PEE 4566M378 E9134322 120 Mo. 12/31/91 1/2000 +R/A Closet OH 60 Mos. +PEE 4566M378 E9134326 120 Mo. 12/31/91 1/2000 +L/A Closet OH 60 Mos. +PEE 4566M378 E9134942 120 Mo. 1/13/92 1/2000 +Aft Closet OH 60 Mos. +PEE 4566M378 E9134751 120 Mo. 12/22/91 1/2000 +Row 10 OH 60 Mos. +PEE 4566M378 E9548209 120 Mo. 6/9/95 5/2002 +Cockpit OH 70 Mos. + +
+ + -2- + + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 26 +------ +Cartridge, 30903828 AEN-1-3 72 Mos. 5/28/93 50 Mos. +Fire RPL +ext.: Rt. +Cartridge, 30903828 BTL23883B 120 Mos. 5/5/95 5/2005 +Fire 1 RPL +ext.: APU +Cartridge, 30903828 09015DI 72 Mos. 4/27/95 2/2001 +Fire RPL +ext.: Left +Fire Bottle 3307507 23883B1 WC/12 Mos 5/5/95 5/96 +APU HST/60 Mo 5/5/95 5/2000 +Fire Bottle 33600011 10124D1 WC/12 Mos 4/27/95 5/98 +Rt Eng. HST/60 Mo 5/14/93 4/98 +Fire Bottle 33600011 09015D1 WC/12 Mos 4/27/95 4/96 +Left Eng. HST/60 Mo 2/16/95 2/2000 +Fire Ext. 892480 672AC WC/12 Mos 5/1/95 5/96 +Aft HST/60 Mo 7/96 +Closet(H20) +Fire Ext. 898052 A-415392 WC/12 Mos 5/1/95 5/96 +Aft. (halon) HST/60 Mo 11/91 7/96 +Fire Ext. 898052 B-615379 WC/12 Mos 5/1/95 5/96 +Lt row HST/60 Mo 7/96 +10/halon +Fire Ext. 898052 V-343826 WC/12 Mos 4/26/95 5/99 +Fwd/(halon) HST/60 Mo +Fire Ext. 898052 E494480 WC/12 Mos 4/29/95 4/96 +cockpit/halon HST/60 Mo 5/99 +Fire Bottle, A800100-1 26-904 WC/12 Mos 4/13/94 Over Due +Lav. Aft HST/60 Mo +Fire bottle, A800100-1 26-906 WC/12 Mos 4/13/94 Over Due +Lav. Fwd HST/60 Mo + +
+ + -3- + + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 27 +------ +Jackscrew, 65-49970- KE00301 8000H 19,946H 3,787H +Stab. trim 17 OH 8/24/94 +Fuse assy 6213-4 219 22,400H 19,945H 18,487H +auto BC +brk/rudder +Transmission 65-50321- 0812 16000H 15,275H 7,416H +No 1 flap 5 OH +Transmission 65-50322- 0840 16000H 15,275H 7,416H +No 2 flap 12 OH +Transmission 65-50323- 0911 16000H 15,275H 7,416H +No 3 flap 5 OH +Transmission 65-50324- 0784 16000H 15,275H 7,416H +No 4 flap 3 OH +Transmission 65-50325- 50007 16000H 15,275H 7,416H +No 5 flap 5 OH +Transmission 65-50326- 62003 16000H 15,275H 7,416H +No 6 flap 6 OH +Transmission 65-50327- 72004 16000H 15,275H 7,416H +No 7 flap 14 OH +Transmission 65-50328- 82002 16000H 15,275H 7,416H +No 8 flap 7 OH +Gearbox assy 65-51510- 7417 16000H 15,275H 7,416H +Rt angle/Left 1 OH +Gearbox assy 65-51510- 1489 16000H 15,275H 7,416H +Rt angle/Rt 2 OH +Gearbox assy 65-51513- 4778 16000H 15,275H 7,416H +Flap dr./Left 1 OH +Gearbox assy 65-51513- 1877 16000H 15,275H 7,416H +Flap dr./Rt. 2 OH +Power Unit 65-63851- 7241 16000H 15,275H 7,416H +Flap dr GBX 7 OH + +
+ + + -4- + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 28 +------ +APU Fuel AV16EI209 H1842C 20000H 19,898H 16,025H +S/0 VLV D OH 8/19/94 +Left Fuel 61185 128 200001-1 19,876H 16,003H +S/0 VLV OH 8/16/94 +Right Fuel 61185 1813 20000H 20,015H 16,142H +S/0 VLV OH 8/31/94 +CF Fuel 61185 609 20000H 20,005H 16,146H +S/0 VLV OH 8/31/94 + +ATA 31 +------ +ULB Batteries 9804100- 7040 6 Yrs. 12 Mar 94 41 Mos. + GXUS RPL + +ATA 32 +------ +Fuse assy 6213-4 627 22,400H 19,917.7H 18,458H +Auto OH 8/21/94 +Brk/Rudder + +ATA 34 +------ +Altimeter, WL102AMS AG102 24 Mo. 12/20/94 14 Mo. +Stby 3 IN +Transponder TPR 720 5128 24 Mo. 4/27/95 18 Mo. +Mode S, Lt. IN +Transponder TPR 720 5165 24 Mo. 4/27/95 18 Mo. +Mode S, Rt. IN + +
+ + -5- + + + + + + SCHEDULE 3 + TO + LEASE SUPPLEMENT NO. 1 + + Aircraft Status on The Delivery Date + + Time and Calendar Controlled Components + (excluding engines, landing gear, and APU). + + + +
+ AIRCRAFT +COMPONENT PART HR. +POSITION NUMBER SERIAL # LIMIT TSI REMAINING +--------- -------- --------- ------- ---------- --------- + + +ATA 35 +------ +02 Cylinder 801307-00 223879/ 36 Mo. 6/22/94 5/97 + 29668 HST 5/94 19 Mo. +Portable 02 5500A1A- 771X/3596 60 Mo. 5/11/92 3/96 + Cyl BF23A 4 HST 5 Mo. +Portable 02 5500A1A- 151843P/1 60 Mo. 12/21/93 1/97 + Cyl BF23A 3 HST 15 Mo. +Row 1 5454 +Portable 02 56002C1AF 55934DB/2 60 Mo. 10/5/95 2/2000 + Cyl 23AM 3832 HST 58 Mo. +Aft closet +Portable 02 5600-2ClA 74732DF/ 60 Mo. 1/12/93 1/98 + Cyl 41819 HST 26 Mo. +Cockpit + +02 Generators Varies 12 Yrs 22 Mo. +------------- ------ ------ ------ + 117003-17 12 Yrs 22 Mo. + 117.00-12 12 Yrs 22 Mo. + 803000-02 12 Yrs 22 Mo. + 117003-12 12 Yrs 22 Mo. + +
+ + + -6- + + + + + + SCHEDULE 4 + TO + LEASE SUPPLEMENT NO. 1 + + A/C N685MA + + R/H SIDE + + + +
+ +DESC. PART NUMBER SERIAL NUMBER MODEL NUMBER +----- ----------- ------------- ------------ + + 1. TRIPLE BURNS 86952102 310588 JB5.2-3-58 + 2. TRIPLE BURNS 86952024 310581 JB5.2-3-59 + 3. TRIPLE BURNS 86952022 310569 JB5.2-3-59 + 4. TRIPLE BURNS 86952022 310566 JB5.2-3-59 + 5. TRIPLE BURNS 86952022 310572 JB5.2-3-59 + 6. TRIPLE BURNS 86952022 310577 JB5.2-3-59 + 7. TRIPLE BURNS 86952022 310570 JB5.2-3-59 + 8. TRIPLE BURNS 86952022 310574 JB5.2-3-59 + 9. TRIPLE BURNS 86952022 310568 JB5.2-3-59 +10. TRIPLE BURNS 86952016 310562 JB5.2-3-58 +11. TRIPLE BURNS 86952022 310573 JB5.2-3-59 +12. TRIPLE BURNS 86952022 310579 JB5.2-3-59 +13. TRIPLE BURNS 86952022 310578 JB5.2-3-59 +14. TRIPLE BURNS 86952022 310571 JB5.2-3-59 +15. TRIPLE BURNS 86952022 310576 JB5.2-3-59 +16. TRIPLE BURNS 86952022 310564 JB5.2-3-59 +17. TRIPLE BURNS 86952022 310575 JB5.2-3-59 +18. TRIPLE BURNS 86952026 310582 JB5.2-3-59 +19. TRIPLE BURNS 86952014 310560 JB5.2-3-58 +20. DOUBLE BURNS 86953201 306409 JB5.2-2-39 + +
+ + -1- + + + + + + + A/C N685MA + + L/H SIDE + + +
+ +DESC. PART NUMBER SERIAL NUMBER MODEL NUMBER +----- ----------- ------------- ------------ + +1. TRIPLE BURNS 86952101 310587 JB5.2-3-58 +2. TRIPLE BURNS 86952007 310556 JB5.2-3-58 +3. TRIPLE BURNS 86952001 310548 JB5.2-3-59 +4. TRIPLE BURNS 86952001 310545 JB5.2-3-59 +5. TRIPLE BURNS 86952001 310541 JB5.2-3-59 +6. TRIPLE BURNS 86952001 310542 JB5.2-3-59 +7. TRIPLE BURNS 86952001 310539 JB5.2-3-59 +8. TRIPLE BURNS 86952001 310550 JB5.2-3-59 +9. TRIPLE BURNS 86952013 310559 JB5.2-3-58 +10. TRIPLE BURNS 86952015 310561 JB5.2-3-58 +11. TRIPLE BURNS 86952001 310544 JB5.2-3-59 +12. TRIPLE BURNS 86952003 310554 JB5.2-3-59 +13. TRIPLE BURNS 86952001 310547 JB5.2-3-59 +14. TRIPLE BURNS 86952001 310543 JB5.2-3-59 +15. TRIPLE BURNS 86952001 310553 JB5.2-3-59 +16. TRIPLE BURNS 86952001 310538 JB5.2-3-59 +17. TRIPLE BURNS 86952001 310538 JB5.2-3-59 +18. TRIPLE BURNS 86952001 310549 JB5.2-3-59 +19. TRIPLE BURNS 86952005 310555 JB5.2-3-59 +20. TRIPLE BURNS 86952017 310563 JB5.2-3-56 + +
+ + -2- + + + + + + +
+ + AUDITED THRU L/P 165891 10/20/95 + A/C TOTAL HOURS 23,859 + A/C TOTAL CYCLES 14,057 +INSTALLED ON N685MA POSITION 1 + HOURS CYCLES + LIMIT SINCE SINCE TOTAL TOTAL TIME REMAINING +ITEM POS PART NO S/N HOURS CYCLES NEW NEW HOURS CYCLES HOURS CYCLES + + + +ENGINE LEFT JT8D-17A P7095308 30,000 15,000 22,100 12,908 22,100 12,908 7,900 2,092 +HUB (DISK) C 01 817401G P78775 NO LIMIT 20,000 NO LIMIT 12,908 NO LIMIT 12,908 NO LIMIT 7,092 +DISK C 02 5002402-01 N87756 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 03 800803 N58289 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK (HUB) C 04 799504 P44646 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 05 745705 P93696 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 06 745706 P93306 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 07 774407 P81245 30,000 15,000 22,100 12,908 22,100 12,908 7,900 2,092 +DISK (HUB) C 08 5005808-01 N90080 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 09 701509 P97271 30,000 19,000 22,100 12,908 22,100 12,908 7,900 6,092 +DISK C 10 772510 P97761 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 11 772511 P03600 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 12 772512 P97578 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK C 13 5003613-01 P59603 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK (SHAFT) T 01 5003601-01 N36371 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK T 02 5003102-01 P03367 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK T 03 5003103-01 N64721 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +DISK T 04 5003104-01 N52111 30,000 20,000 22,100 12,908 22,100 12,908 7,900 7,092 +LPT (SHAFT) NO LIMIT 20,000 22,100 14,558 22,100 14,558 NO LIMIT 5,442 + +
+ + + + + +
+ + AUDITED THRU L/P 165891 10/20/95 + A/C TOTAL HOURS 23,859 + A/C TOTAL CYCLES 14,057 +INSTALLED ON N685MA POSITION 2 + HOURS CYCLES + LIMIT SINCE SINCE TOTAL TOTAL TIME REMAINING +ITEM POS PART NO S/N HOURS CYCLES NEW NEW HOURS CYCLES HOURS CYCLES + + + +ENGINE RIGHT JT8D-17A P7095308 NO LIMIT NO LIMIT 20,960 11,883 20,960 11,883 9,040 3,117 +HUB (DISK) C 01 817401 P23654 NO LIMIT 20,000 NO LIMIT 13,372 NO LIMIT 13,372 NO LIMIT 6,628 +DISK C 02 5002402-01C S56233 30,000 20,000 10,771 7,680 10,771 7,680 19,229 12,320 +DISK C 03 800803 P68371 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK (HUB) C 04 799504 N90833 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 05 745705 P93614 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 06 745706 P93230 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 07 774407 P81364 30,000 15,000 20,960 11,883 20,960 11,883 9,040 3,117 +DISK (HUB) C 08 5005808-01 P43608 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 09 701509 P97641 30,000 19,000 20,960 11,883 20,960 11,883 9,040 7,117 +DISK C 10 772510 P97278 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 11 772511 P03553 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 12 772512 P97219 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK C 13 5003613-01 P92918 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK T 01 5003601-01 N36374 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK T 02 5003102-01 M12012 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK T 03 5003103-01 N64611 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +DISK T 04 5003104-01 N52069 30,000 20,000 20,960 11,883 20,960 11,883 9,040 8,117 +LPT (SHAFT) NO LIMIT NO LIMIT + +
+ + + + + + +
+ + + AUDITED THRU L/P 165891 TOTAL A/C HOURS 23859 +INSTALLED ON: N685MA DATE 10/20/95 TOTAL A/C CYCLES 14057 + + +NLG ASSEMBLY 65-73762-5 T01406P1486 90,000 24,000 9,943 +SHOCK STRUT ASSY 65-46200-63 T01408P1486 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +OUTER CYLINDER ASSY 65-46210-25 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +OUTER CYLINDER 65-46211- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +STEERING PLATE, UPR 65-46210-27 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +STEERING PLATE, LWR (DRILLED) 65-46210-24 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +OUTER CYLINDER ASSY (DRILLED) 65-46215-14 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +METERING PIN ASSY 65-46200-54 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +METERING PIN 65-46219- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +SUPPORT TUBE, METERING PIN 65-46229- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +DRAIN TUBE 69-57991- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +SUPPORT TUBE, UPPER ORIFICE 69-73038-1 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +TUBE, ORIFICE SUPPORT 65-46226-9 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +STEM, ORIFICE SUPPORT 65C25707- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +GLAND NUT ASSY 65-46221-4 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +ORIFICE PLATE, UPPER 69-36622-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +TORSION LINK ASSY, UPPER 65-46202-9 JC-1917 90,000 24,000 08/28/92 14,378 7,445 23,971 6,612 9,481 65,028 17,388 +TORSION LINK ASSY, LOWER 65-46288-5 32-58 90,000 24,000 08/28/92 14,378 7,445 28,383 6,612 9,481 61,617 17,388 +STEERING COLLAR ASSY 65-46203-24 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, STEERING COLLAR 69-61383-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, STEERING COLLAR 69-61383- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +PIN, UPPER TORSION LINK 69-72698-1 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +PIN, LOWER TORSION LINK 69-72698-1 486-2 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, TORSION LINK APEX 69-35883-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +LOWER DRAG BRACE ASSY 65-46230-7 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +UPPER DRAG BRACE ASSY 65-80051-13 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +PIN, DRAG BRACE CENTER 69-35391- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, DRAG BRACE, CENTER NAS1110-68D 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +PIN, UPPER DRAG BRACE 69-35394-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +PIN, UPPER DRAG BRACE 66-35394-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, LOWER DRAG BRACE 69-35396-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +LOCK BRACE ASSY, AFT 65-46240-11 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +LOCK LINK ASSY, FWD 65-46242-11 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +BOLT, NOSE GEAR LOCK JOINT NAS1105-52D 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +SHAFT, AFT LOCK MECHANISM 69-35385-1 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +TRUNNION PIN, LEFT HAND 69-35398-2 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 +TRUNNION PIN, RIGHT HAND 69-41248- 1486 (ORIG) 90,000 24,000 12/17/87 0 0 14,057 14,057 23,859 75,943 9,943 + +
+ + + + + + + +
+ + + AUDITED THRU L/P 165891 TOTAL A/C HOURS 23859 +INSTALLED ON: N685MA DATE 10/20/95 TOTAL A/C CYCLES 14057 + + +LEFT NLG ASSEMBLY 65-73761-87 MC026895P1488 100,000 24,000 9,943 +SHOCK STRUT ASSY 65-46100-52 MC028958P1488 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +OUTER CYLINDER ASSY 65-61740-10 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +INNER CYLINDER ASSY 65-46116-47 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ORIFICE SUPPORT TUBE ASSY 65-46159-7 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SUPPORT TUBE, ORIFICE 65-46160-7 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ORIFICE PLATE 69-38980-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +METERING PIN 65-46124-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +DRAIN TUBE 65-46156-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +GLAND NUT 69-39485-10 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK ASSY, LOWER 65-46102-22 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK ASSY, UPPER 65-87958-9 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UPPER DRAG STRUT ASSY 65-46103-11 1486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LOWER DRAG STRUT ASSY 65-60579-3 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UNIVERSAL ASSY, LWR SIDE 65-46108-7 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ACTUATOR BEAM ARM ASSY 65-46109-12 5104 100,000 24,000 12/16/91 12,391 5931 8,865 8,126 11,488 91,135 15,874 +TRUNNION PIN ASSY 65-46113-5 34ORGA 100,000 24,000 12/16/91 12,391 5931 66,508 8,126 11,488 31,492 15,874 +TEE BOLT ASSY, DRAG STRUT 65-46140-6 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TRUNNION LINK ASSY 65-63378-9 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK PIN, LOWER 69-72023-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK PIN, UPPER 69-72023-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, TEE FITTING ATTACHMENT 69-51833-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY.: LOWER DRAG STRUT 69-39473-9 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +FUSE BOLT ASSY, UPR DRAG 69-39476-6 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +NUT, TRUNNION PIN 69-41633-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UNIVERSAL ASSY, REACTION LINK 65-46107-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UPPER SIDE STRUT ASSY 65-46138-5 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LOWER SIDE STRUT ASSY 65-63397-9 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +REACTION LINK ASSY 65-46135-13 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LINK ASSY, UPPER DOWNLOCK 65-46138-16 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LINK ASSY, LOWER DOWNLOCK 65-46139-9 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SHAFT, SPRING SUPPORT 69-38999-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY, REACTION LINK 69-38148-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY, UPPER SIDE STRUT 69-68149-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY, SIDE STRUT 69-68150-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, DOWNLOCK LINK PIVOT 69-41628-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, DOWNLOCK 69-42193-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ASSY, UPPER DOWNLOCK 69-62779-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ACTUATOR BEAM ASSY 65-46108-3 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SUPPORT LINK ASSY 65-46112-22 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LINK ASSY, UPLOCK 65-63887-5 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BELLCRANK ASSY 65-63663-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +HOOK ASSY 65-46142-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SHAFT, UPLOCK SUPPORT 65-46146-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, REACTION LINK / UPLOCK 69-68148-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ACTUATOR BEAM, OUTBD 69-39464-4 352 100,000 24,000 12/16/91 12,891 5931 8,126 8,126 11,468 91,874 15,874 +BOLT ASSY, LOWER SIDE STRUT 69-68151-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +COLLAR, BELLCRANK RET, UPLOCK 69-51838-2 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +FUSE BOLT, FWD TRUNNION BRG 69-58854-3 486 (ORIG) 83,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ACTUATOR BEAM, INBRD BACB301J20CD43 685 100,000 24,000 12/14/91 12,891 5931 8,126 8,126 11,468 91,874 15,874 +BOLT, ACTUATOR ROD END BACB301J16CD48 685/1 100,000 24,000 12/14/91 12,891 5931 8,126 8,126 11,468 91,874 15,874 +BEARING ASSY, FWD TRUNNION 69-58871-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +NUT, AFT TRUNNION 65-84161-1 486 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 + +
+ + + + + +
+ + + AUDITED THRU L/P 165891 TOTAL A/C HOURS 23859 +INSTALLED ON: N685MA DATE 10/20/95 TOTAL A/C CYCLES 14057 + + +RIGHT NLG ASSEMBLY 65-73761-87 MC02665P1488 100,000 24,000 9,943 +SHOCK STRUT ASSY 65-46100-52 MC02896P1488 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +OUTER CYLINDER ASSY 65-61740-10 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +INNER CYLINDER ASSY 65-46116-47 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ORIFICE SUPPORT TUBE ASSY 65-46159-7 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SUPPORT TUBE, ORIFICE 65-46160-7 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ORIFICE PLATE 69-38980-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +METERING PIN 65-46124-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +DRAIN TUBE 65-46156-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +GLAND NUT 69-39485-10 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK ASSY, LOWER 65-46102-22 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK ASSY, UPPER 65-87958-9 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UPPER DRAG STRUT ASSY 65-46103-11 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LOWER DRAG STRUT ASSY 65-60579-3 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UNIVERSAL ASSY, LWR SIDE 65-46105-7 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ACTUATOR BEAM ARM ASSY 65-46109-12 1507 100,000 24,000 12/14/91 12,391 5931 34,655 8,126 11,488 65,345 15,874 +TRUNNION PIN ASSY 65-46113-16 32-118 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,488 91,674 15,874 +TEE BOLT ASSY, DRAG STRUT 65-46140-6 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TRUNNION LINK ASSY 65-63378-9 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK PIN, LOWER 69-72023-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +TORSION LINK PIN, UPPER 69-72023-2 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, TEE FITTING ATTACHMENT 69-51833-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY.: LOWER DRAG STRUT 69-39473-3 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +FUSE BOLT ASSY, UPR DRAG 69-39476-6 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +NUT, TRUNNION PIN 69-41633-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UNIVERSAL ASSY, REACTION LINK 65-46107-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +UPPER SIDE STRUT ASSY 65-46138-5 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LOWER SIDE STRUT ASSY 65-63397-9 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +REACTION LINK ASSY 65-46135-13 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LINK ASSY, UPPER DOWNLOCK 65-46138-16 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +LINK ASSY, LOWER DOWNLOCK 65-46139-9 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SHAFT, SPRING SUPPORT 69-38999-3 685 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,468 91,874 15,874 +BOLT ASSY, REACTION LINK 69-38148-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY, UPPER SIDE STRUT 69-68149-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT ASSY, SIDE STRUT 69-68150-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, DOWNLOCK LINK PIVOT 69-41628-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, DOWNLOCK 69-42193-2 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ASSY, UPPER DOWNLOCK0 69-62779-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +ACTUATOR BEAM ASSY 65-46108-3 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SUPPORT LINK ASSY 65-46112-22 HI-106 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,468 91,874 15,874 +LINK ASSY, UPLOCK 65-63887-5 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BELLCRANK ASSY 65-63663-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +HOOK ASSY 65-46142-2 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +SHAFT, UPLOCK SUPPORT 65-46146-2 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, REACTION LINK / UPLOCK 69-68148-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ACTUATOR BEAM, OUTBD 69-39464-4 482 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,468 91,874 15,874 +BOLT ASSY, LOWER SIDE STRUT 69-68151-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +COLLAR, BELLCRANK RET, UPLOCK 69-51838-2 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +FUSE BOLT, FWD TRUNNION BRG 69-58854-3 486-2 (ORIG) 83,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +BOLT, ACTUATOR BEAM, INBRD BACB301J20CD43 685/2 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,468 91,874 15,874 +BOLT, ACTUATOR ROD END BACB301J16CD48 685 100,000 24,000 12/14/91 12,391 5931 8,126 8,126 11,468 91,874 15,874 +BEARING ASSY, FWD TRUNNION 69-58871-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 +NUT, AFT TRUNNION 65-84161-1 486-2 (ORIG) 100,000 24,000 12/17/87 0 0 14,057 14,057 23,859 85,943 9,943 + +
+ + + + + COUNTERPART NO. 2 + + LEASE SUPPLEMENT NO. 2 + + TO AIRCRAFT LEASE AGREEMENT + DATED AS OF NOVEMBER 29, 1995 + + LEASE SUPPLEMENT NO. 2, dated April 12, 1996, between + Wilmington Trust Company, not in its individual capacity but solely as Trustee + f/b/o ITOCHU AirLease (Europe) Limited and Marubeni Airleasing (U.K.) Limited + ("Lessor"), and Aloha Airlines, Inc., a company organized under the laws of + Hawaii ("Lessee"). + + Lessor and Lessee have previously entered into that certain + Aircraft Lease Agreement dated as of November 29, 1995, as supplemented by + Lease Supplement No. 1, dated December 1, 1995 (as amended, modified or + supplemented and in effect from time to time, the "Lease" and the defined terms + therein being hereinafter used with the same meaning), which was filed with the + FAA as one instrument and recorded on January 25, 1996 as Conveyance No. + 11004730. Lessor and Lessee desire to supplement the Lease in order (1) to + subject to the Lease two Pratt & Whitney model JT8D-9A engines described below, + and (2) to remove from the terms of the Lease two Pratt & Whitney model + JT8D-17A engines described below. + + In consideration of the premises and other good and + sufficient consideration, Lessor and Lessee hereby agree as follows: + + 1. Lessor hereby leases to Lessee under the Lease and Lessee + hereby leases from Lessor under the Lease, two (2) Pratt & Whitney JT8D-9A + Engines bearing Manufacturer's Serial Numbers 665868 and 655877, each having + 750 or more rated takeoff horsepower, together with (1) all parts, appliances, + components, accessories and equipment currently installed on, or attached to + any such engine and (2) all flight, engineering, maintenance, overhaul and + repair manuals, drawings, records, logs, documents and other data relating to + the above described engines or parts (such engines, together with the items + identified in clauses (1) and (2) above, are referred to herein collectively as + the "9A Engines"). For all purposes of the Lease, each of the 9A Engines shall + be deemed an "Engine" as defined in the Lease, and part of the Aircraft and + each such Engine shall be maintained, insured and returned to Lessor in the + manner and at the times set forth in the Lease. + + RECORDED + + FEDERAL AVIATION ADMINISTRATION + + Date 4-29-96 Time 1:07 + --------- -------- + + Conveyance Number ZZ011203 + ------------ + + By /s/ [Illegible] + -------------------- + + + + + 2. There are hereby removed from the terms of the Lease the + two (2) Pratt & Whitney JT8D-17A Engines bearing Manufacturer's Serial Numbers + P709529 and P709530, each having 750 or more rated takeoff horsepower, together + with (1) all parts, appliances, components, accessories and equipment currently + installed on, or attached to any such engine and (2) all flight, engineering, + maintenance, overhaul and repair manuals, drawings, records, logs, documents + and other data relating to the above described engines or parts (such engines, + together with the items identified in clauses (1) and (2) above, are referred + to herein collectively as the "0riginal 17A Engines"). Lessee and Lessor + acknowledge that the Original 17A Engines are, effective on this date, no + longer subject to the terms of the Lease and that Lessee has no interest + therein or thereto under the Lease. + + 3. From the date hereof until the last day of the Term, + Lessee shall affix and keep a metal nameplate of reasonable dimensions in a + reasonably prominent position on each of the 9A Engines bearing the Lease + Identification (such name plate to be furnished by Lessee and affixed on or + prior to the date hereof). + + 4. Lessee represents that all of its representations and + warranties contained in the Lease are true and correct on the date hereof and + that no Default or Event of Default has occurred and is continuing. + + 5. All of the terms and provisions of the Lease Agreement are + hereby incorporated by reference in this Lease Supplement to the same extent as + if fully set forth herein. The Lease is hereby ratified and confirmed and, + except as set forth herein, remains unamended and in full force and effect. + + 6. This Lease Supplement may be executed in any number of + counterparts, each of such counterparts, except as provided in Section 20(e) of + the Lease, shall for all purposes be deemed to be an original and all such + counterparts shall together constitute but one and the same Lease Supplement. + + THIS LEASE SUPPLEMENT HAS BEEN EXECUTED IN MULTIPLE COUNTERPARTS, OF WHICH + THERE IS ONE COUNTERPART DESIGNATED AS "COUNTERPART NO. 1 - CHATTEL PAPER + ORIGINAL'' AND ALL OTHER COUNTERPARTS SHALL BE DESIGNATED WITH NUMBERS OTHER + THAN 1. TO THE EXTENT THAT THIS LEASE SUPPLEMENT CONSTITUTES CHATTEL PAPER + UNDER THE UNIFORM COMMERCIAL CODE, AS IN EFFECT IN ANY APPLICABLE JURISDICTION, + NO SECURITY INTEREST MAY BE CREATED OR PERFECTED BY POSSESSION OF ANY + COUNTERPART OF THIS LEASE SUPPLEMENT OTHER THAN SAID COUNTERPART NO. 1. + + + + + IN WITNESS WHEREOF, Lessor and Lessee each have caused this +Lease Supplement to be duly executed by their authorized officers as of the day +and year first above written. + + LESSOR: + + WILMINGTON TRUST COMPANY, not + in its individual capacity but + solely as Trustee. + + By: M.P. Bonilla + ---------------------------- + Name: MYFANWY PHILLIPS BONILLA + ---------------------------- + Title: ASSISTANT VICE PRESIDENT + ---------------------------- + + + LESSEE: + + ALOHA AIRLINES, INC. + + By: + ---------------------------- + Name: + ---------------------------- + Title: + ---------------------------- + + + By: + ---------------------------- + Name: + ---------------------------- + Title: + ---------------------------- + + + + + + IN WITNESS WHEREOF, Lessor and Lessee each have caused this + Lease Supplement to be duly executed by their authorized officers as of the day + and year first above written. + + + LESSOR: + + WILMINGTON TRUST COMPANY, not + in its individual capacity but + solely as Trustee. + + By: + ---------------------------- + Name: + ---------------------------- + Title: + ---------------------------- + + + LESSEE: + + ALOHA AIRLINES, INC. + + By: /s/ Brenda F. Cutwright + ---------------------------- + Name: Brenda F. Cutwright + ---------------------------- + Title: Sr. Vice President Finance + & Planning and CFO + ---------------------------- + + By: /s/ James M. King + ---------------------------- + Name: James M. King + ---------------------------- + Title: Vice President Planning & + Development + ---------------------------- + + + + + + + COUNTERPART NO. + ------- + + LEASE SUPPLEMENT NO. 2 + + TO AIRCRAFT LEASE AGREEMENT + DATED AS OF NOVEMBER 29, 1995 + + LEASE SUPPLEMENT NO. 2, dated April 12, 1996, between + Wilmington Trust Company, not in its individual capacity but solely as Trustee + f/b/o ITOCHU AirLease (Europe) Limited and Marubeni Airleasing (U.K.) Limited + ("Lessor"), and Aloha Airlines, Inc., a company organized under the laws of + Hawaii ("Lessee"). + + Lessor and Lessee have previously entered into that certain + Aircraft Lease Agreement dated as of November 29, 1995, as supplemented by + Lease Supplement No. 1, dated December 1, 1995 (as amended, modified or + supplemented and in effect from time to time, the "Lease" and the defined terms + therein being hereinafter used with the same meaning), which was filed with the + FAA as one instrument and recorded on January 25, 1996 as Conveyance No. + 11004730. Lessor and Lessee desire to supplement the Lease in order (1) to + subject to the Lease two Pratt & Whitney model JT8D-9A engines described below, + and (2) to remove from the terms of the Lease two Pratt & Whitney model + JT8D-17A engines described below. + + In consideration of the premises and other good and sufficient + consideration, Lessor and Lessee hereby agree as follows: + + 1. Lessor hereby leases to Lessee under the Lease and Lessee + hereby leases from Lessor under the Lease, two (2) Pratt & Whitney JT8D-9A + Engines bearing Manufacturer's Serial Numbers 665868 and 655877, each having + 750 or more rated takeoff horsepower, together with (1) all parts, appliances, + components, accessories and equipment currently installed on, or attached to + any such engine and (2) all flight, engineering, maintenance, overhaul and + repair manuals, drawings, records, logs, documents and other data relating to + the above described engines or parts (such engines, together with the items + identified in clauses (1) and (2) above, are referred to herein collectively as + the "9A Engines"). For all purposes of the Lease, each of the 9A Engines shall + be deemed an "Engine" as defined in the Lease, and part of the Aircraft and + each such Engine shall be maintained, insured and returned to Lessor in the + manner and at the times set forth in the Lease. + + + + + + 2. There are hereby removed from the terms of the Lease the + two (2) Pratt & Whitney JT8D-17A Engines bearing Manufacturer's Serial Numbers + P709529 and P709530, each having 750 or more rated takeoff horsepower, together + with (1) all parts, appliances, components, accessories and equipment currently + installed on, or attached to any such engine and (2) all flight, engineering, + maintenance, overhaul and repair manuals, drawings, records, logs, documents + and other data relating to the above described engines or parts (such engines, + together with the items identified in clauses (1) and (2) above, are referred + to herein collectively as the "Original 17A Engines"). Lessee and Lessor + acknowledge that the Original 17A Engines are, effective on this date, no + longer subject to the terms of the Lease and that Lessee has no interest + therein or thereto under the Lease. + + 3. From the date hereof until the last day of the Term, Lessee + shall affix and keep a metal nameplate of reasonable dimensions in a reasonably + prominent position on each of the 9A Engines bearing the Lease Identification + (such name plate to be furnished by Lessee and affixed on or prior to the date + hereof). + + 4. Lessee represents that all of its representations and + warranties contained in the Lease are true and correct on the date hereof and + that no Default or Event of Default has occurred and is continuing. + + 5. All of the terms and provisions of the Lease Agreement are + hereby incorporated by reference in this Lease Supplement to the same extent as + if fully set forth herein. The Lease is hereby ratified and confirmed and, + except as set forth herein, remains unamended and in full force and effect. + + 6. This Lease Supplement may be executed in any number of + counterparts, each of such counterparts, except as provided in Section 20(e) of + the Lease, shall for all purposes be deemed to be an original and all such + counterparts shall together constitute but one and the same Lease Supplement. + + THIS LEASE SUPPLEMENT HAS BEEN EXECUTED IN MULTIPLE COUNTERPARTS, OF WHICH + THERE IS ONE COUNTERPART DESIGNATED AS "COUNTERPART NO. 1 - CHATTEL PAPER + ORIGINAL" AND ALL OTHER COUNTERPARTS SHALL BE DESIGNATED WITH NUMBERS OTHER + THAN 1. TO THE EXTENT THAT THIS LEASE SUPPLEMENT CONSTITUTES CHATTEL PAPER + UNDER THE UNIFORM COMMERCIAL CODE, AS IN EFFECT IN ANY APPLICABLE JURISDICTION, + NO SECURITY INTEREST MAY BE CREATED OR PERFECTED BY POSSESSION OF ANY + COUNTERPART OF THIS LEASE SUPPLEMENT OTHER THAN SAID COUNTERPART NO. 1. + + + + + + IN WITNESS WHEREOF, Lessor and Lessee each have caused this + Lease Supplement to be duly executed by their authorized officers as of the day + and year first above written. + + LESSOR: + + WILMINGTON TRUST COMPANY, not + in its individual capacity but + solely as Trustee. + + By: M. P. Bonilla + ---------------------------- + Name: MYFANWY PHILLIPS BONILLA + ---------------------------- + Title: ASSISTANT VICE PRESIDENT + ---------------------------- + + + LESSEE: + + ALOHA AIRLINES, INC. + + By: + ---------------------------- + Name: + ---------------------------- + Title: + ---------------------------- + + + By: + ---------------------------- + Name: + ---------------------------- + Title: + ---------------------------- + + + + + + IN WITNESS WHEREOF, - Lessor and Les-gee each have caused this + Lease Supplement to he duly executed by their authorized officers as of the day + and year first above written. + + LESSOR: + + WILMINGTON TRUST COMPANY, not + in its individual capacity but + solely as Trustee. + + By: + ---------------------------- + Name: + ---------------------------- + Title: + ---------------------------- + + + LESSEE: + + ALOHA AIRLINES, INC. + + By: /s/ Brenda F. Cutwright + ---------------------------- + Name: Brenda F. Cutwright + ---------------------------- + Title: Sr. Vice President Finance + & Planning and CFO + ---------------------------- + + By: /s/ James M. King + ---------------------------- + Name: James M. King + ---------------------------- + Title: Vice President Planning & + Development + ---------------------------- + + + + + + + + ASSIGNMENT, ASSUMPTION, AMENDMENT AND CONSENT + + + THIS ASSIGNMENT, ASSUMPTION, AMENDMENT AND CONSENT + ("Assignment"), dated as of December 26, 1996 is between WILMINGTON TRUST + COMPANY, not in its individual capacity but solely as Trustee f/b/o ITOCHU + AirLease (Europe) Limited and Marubeni Airleasing (U.K) Limited ("Lessor"), + ALOHA AIRLINES, INC., a Hawaii Corporation ("Assignor"), and ALOHA AIRLINES, + INC., a Delaware corporation ("Assignee"). + + RECITALS + + WHEREAS, Lessor and Assignor entered into that certain + Aircraft Lease Agreement dated as of November 29, 1995, as it may be + supplemented or amended from time to time (the "Lease"), pursuant to which + Assignor leased from Lessor one (1) Boeing model 737-25A aircraft bearing + manufacturer's serial number 23791 and registration mark N819AL (the + "Aircraft"); + + WHEREAS, effective December 26, 1996, Assignor merged with + Assignee, and Assignee emerged as the surviving entity and the successor in + interest to Lessee. + + AGREEMENT + + NOW, THEREFORE, in consideration of these presents and for +other valuable consideration, the parties agree as follows. + + 1. CERTAIN DEFINED TERMS. Unless otherwise defined herein or + the context otherwise requires, all capitalized terms used in this Assignment + shall have the respective meanings assigned to them in the Lease. + + 2. ASSIGNMENT. As of December 26, 1996 (the "Effective + Date"), the Assignor hereby sells, assigns, transfers and conveys to Assignee + all of the Assignor's right, title and interest in and to the Lease, as if + Assignee were the original party to the Lease. + + 3. ASSUMPTION BY ASSIGNEE. Assignee hereby accepts the + foregoing sale, assignment, transfer and conveyance of all of the Assignor's + right, title, interest, obligations and liabilities in, to and under the Lease + to the Assignee and, as of the Effective Date, agrees to assume and to be bound + by all the terms of, and to undertake all of the obligations of the Assignor + contained in, the Lease, including without limitation, all such obligations + existing at or prior to, or attributable to acts or events occurring prior to + the Effective Date. + + + + + + + 4. LESSOR CONSENT. + + (a) Pursuant to Section 8(i) of the Lease, Lessor +acknowledges and consents to the foregoing sale, assignment, transfer and +conveyance of all of the Assignor's right, title, interest, obligations and +liabilities in, to and under the Lease to the Assignee under this Assignment, +and acknowledge the rights and obligations of the Assignee described in this +Assignment. + + (b) Lessor further acknowledges and agrees that from +and after the Effective Date Assignee shall be deemed the "Lessee" for all +purposes of the Lease and each reference in the Lease to the Assignor as +"Lessee" shall be deemed after the Effective Date for all purposes to refer to +the Assignee and that, from and after the Effective Date Lessor will perform +its obligations under the Lease, in all respects as if Assignee were the +original party to the Lease as "Lessee" thereunder. + + 5. REPRESENTATIONS, WARRANTIES AND COVENANTS OF ASSIGNEE. +Assignee represents and warrants as follows: + + (a) Assignee is a corporation duly organized and existing in + good standing under the Laws of the State of Delaware and has the corporate + power and authority to carry on its business as presently conducted and to + perform its obligations under this Assignment. + + (b) This Assignment has been duly authorized by all necessary + corporate action on the part of Assignee and does not require any approval of + the stockholders of Assignee (or if such approval is required, such approval + has been obtained), and neither the execution and delivery hereof nor the + consummation of the transactions contemplated hereby nor compliance by Assignee + with any of the terms and provisions hereof will contravene any Law applicable + to Assignee or result in any breach of, or constitute any default under, or + result in the creation of, any Lien upon any property of Assignee under, any + credit agreement or instrument, or other agreement or instrument to which + Assignee is a party or by which Assignee or its properties or assets may be + bound or affected. + + (c) Assignee has received or has complied with every + necessary consent, approval, order, or authorization of, or registration with, + or the giving of prior notice to, any Governmental Entity having jurisdiction + with respect to the use and operation of the Aircraft and the execution and + delivery of this Assignment of the validity and enforceability hereof. + + (d) This Assignment has been duly entered into and delivered +by Assignee and constitutes a valid, legal and binding + + + + + + +obligation of Assignee, enforceable in accordance with its terms, except as +enforceability may be limited by bankruptcy, reorganization, moratorium or +other similar Laws and by general principles of equity, whether considered in a +proceeding at Law or in equity. + + (e) Assignee is a Certified Air Carrier and holds all +licenses, certificates, permits and franchises from the appropriate agencies of +the United States of America and/or all other governmental authorities having +jurisdiction which are necessary to authorize the Assignee to engage in air +transport and to carry on its business as presently conducted and to be +conducted with the Aircraft. + + (f) Assignee is a "citizen of the United States" as defined +in 40102(a)(15) of Title 49 of the United States Code. + + 6. GOVERNING LAW. This Assignment shall governed by the Laws +of the State of New York. + + + [THE REMAINDER OF THIS PAGE IS INTENTIONALLY BLANK.] + + + + + + IN WITNESS WHEREOF, the undersigned parties have caused this +Assignment, Assumption, Amendment and Consent to be duly executed and delivered +by their duly authorized officers as of the date first written above. + + ASSIGNOR: ALOHA AIRLINES, INC., + A HAWAII CORPORATION + + By: /s/ Brenda F. Cutwright + ------------------------------------ + Name: BRENDA F. CUTWRIGHT + ---------------------------------- + Title: SR. VICE PRESIDENT FINANCE & + PLANNING AND CFO + --------------------------------- + + + By: /s/ Owen Sekimura + ------------------------------------ + Name: OWEN SEKIMURA + ---------------------------------- + Title: STAFF VICE PRESIDENT - + FINANCE & CONTROLLER + --------------------------------- + + + ASSIGNEE: ALOHA AIRLINES, INC., A + DELAWARE CORPORATION + + + By: /s/ Brenda F. Cutwright + ------------------------------------ + Name: BRENDA F. CUTWRIGHT + ---------------------------------- + Title: SR. VICE PRESIDENT FINANCE & + PLANNING AND CFO + --------------------------------- + + + By: /s/ Owen Sekimura + ------------------------------------ + Name: Owen Sekimura + ---------------------------------- + Title: STAFF VICE PRESIDENT - + FINANCE & CONTROLLER + --------------------------------- + + + LESSOR: WILMINGTON TRUST COMPANY, NOT + IN ITS INDIVIDUAL CAPACITY BUT + SOLELY AS TRUSTEE F/B/O ITOCHU + AIRLEASE (EUROPE) LIMITED AND + MARUBENI AIRLEASING (U.K) + LIMITED + + + By:____________________________________ + + Name:__________________________________ + + Title:_________________________________ + + + + + + IN WITNESS WHEREOF, the undersigned parties have caused this + Assignment, Assumption, Amendment and Consent to be duly executed and delivered + by their duly authorized officers as of the date first written above. + + + ASSIGNOR: ALOHA AIRLINES, INC., + A HAWAII CORPORATION + + By: /s/ Brenda F. Cutwright + ------------------------------------ + Name: BRENDA F. CUTWRIGHT + ---------------------------------- + Title: SR. VICE PRESIDENT FINANCE & + PLANNING AND CFO + --------------------------------- + + + By: /s/ Owen Sekimura + ------------------------------------ + Name: OWEN SEKIMURA + ---------------------------------- + Title: STAFF VICE PRESIDENT - + FINANCE & CONTROLLER + --------------------------------- + + + ASSIGNEE: ALOHA AIRLINES, INC., A + DELAWARE CORPORATION + + + By: /s/ Brenda F. Cutwright + ------------------------------------ + Name: BRENDA F. CUTWRIGHT + ---------------------------------- + Title: SR. VICE PRESIDENT FINANCE & + PLANNING AND CFO + --------------------------------- + + + By: /s/ Owen Sekimura + ------------------------------------ + Name: Owen Sekimura + ---------------------------------- + Title: STAFF VICE PRESIDENT - + FINANCE & CONTROLLER + --------------------------------- + + + LESSOR: WILMINGTON TRUST COMPANY, NOT + IN ITS INDIVIDUAL CAPACITY BUT + SOLELY AS TRUSTEE F/B/O ITOCHU + AIRLEASE (EUROPE) LIMITED AND + MARUBENI AIRLEASING (U.K) + LIMITED + + + By:____________________________________ + + Name:__________________________________ + + Title:_________________________________ + + + + + + IN WITNESS WHEREOF, the undersigned parties have caused this + Assignment, Assumption, Amendment and Consent to be duly executed and delivered + by their duly authorized officers as of the date first written above. + + + ASSIGNOR: ALOHA AIRLINES, INC., + A HAWAII CORPORATION + + By: /s/ Brenda F. Cutwright + ------------------------------------ + Name: BRENDA F. CUTWRIGHT + ---------------------------------- + Title: SR. VICE PRESIDENT FINANCE & + PLANNING AND CFO + --------------------------------- + + + By: /s/ Owen Sekimura + ------------------------------------ + Name: OWEN SEKIMURA + ---------------------------------- + Title: STAFF VICE PRESIDENT - + FINANCE & CONTROLLER + --------------------------------- + + + ASSIGNEE: ALOHA AIRLINES, INC., A + DELAWARE CORPORATION + + + By: /s/ Brenda F. Cutwright + ------------------------------------ + Name: BRENDA F. CUTWRIGHT + ---------------------------------- + Title: SR. VICE PRESIDENT FINANCE & + PLANNING AND CFO + --------------------------------- + + + By: /s/ Owen Sekimura + ------------------------------------ + Name: Owen Sekimura + ---------------------------------- + Title: STAFF VICE PRESIDENT - + FINANCE & CONTROLLER + --------------------------------- + + + LESSOR: WILMINGTON TRUST COMPANY, NOT + IN ITS INDIVIDUAL CAPACITY BUT + SOLELY AS TRUSTEE F/B/O ITOCHU + AIRLEASE (EUROPE) LIMITED AND + MARUBENI AIRLEASING (U.K) + LIMITED + + + By:____________________________________ + + Name:__________________________________ + + Title:_________________________________ + + + + + + + CONSENT + + THIS CONSENT is made this ______ day of ________________, +1996 by WILMINGTON TRUST COMPANY, not in its individual capacity but solely as +Trustee f/b/o ITOCHU AirLease (Europe) Limited and Marubeni Airleasing (U.K) +Limited ("Lessor") in favor of Aloha Airlines, Inc., a Hawaii corporation +("Aloha Hawaii") and Aloha Airlines, Inc., a Delaware corporation ("Aloha +Delaware"). + + RECITALS + + WHEREAS, Lessor and Aloha Hawaii entered into that certain + Aircraft Lease Agreement dated as of November 29, 1995 (the "Lease"), pursuant + to which Aloha Hawaii leased from Lessor one (1) Boeing model 737-25A aircraft + bearing manufacturer's serial number 23791 and registration mark N819AL (the + "Aircraft"); + + WHEREAS, Aloha Hawaii and Aloha Delaware are wholly owned + subsidiaries of Aloha Airgroup, Inc., a Hawaii corporation. + + WHEREAS, effective ____________________________________, 1996, Aloha Hawaii + merged with Aloha Delaware, and Aloha Delaware emerged as the surviving entity + and the successor in interest to Aloha Hawaii. + + WHEREAS, as a result of the merger, all of the assets and + liabilities of Aloha Hawaii, including the Lease, will become assets and + liabilities of Aloha Delaware by operation of law. + + WHEREAS, Aloha Hawaii has requested that Lessor consent to the + merger and the transfer by operation of law of the Lease and the Notice of + Assignment to Aloha Delaware. + + NOW, THEREFORE, in consideration of these presents and for + other valuable consideration, Lessor does hereby consent to the merger of Aloha + Hawaii with and into Aloha Delaware and the transfer by operation of law of the + Lease to Aloha Delaware, upon and subject to the condition that this consent + shall not be construed as authorizing any other or further assignment of the + Lease, and that all of the rights of the undersigned as set forth in the Lease + are expressly reserved. + + + + + + IN WITNESS WHEREOF, the undersigned has executed this Consent + as of the date first written above. + + LESSOR: WILMINGTON TRUST COMPANY, + NOT IN ITS INDIVIDUAL + CAPACITY BUT SOLELY AS + TRUSTEE F/B/O ITOCHU + AIRLEASE (EUROPE) LIMITED + AND MARUBENI AIRLEASING + (U.K) LIMITED + + + + + By________________________________ + + Name______________________________ + + Title_____________________________ + + + + + + + LEASE ASSIGNMENT + + This Lease Assignment (this "Agreement") dated as of August 7, 1998 is + entered into by and between (1) ITOCHU Airlease Limited, a company formed under + the laws of the Republic of Ireland ("ITOCHU"), (ii) MA-Lease Limited, a + company duly formed under the laws of England ("Marubeni"), (iii) Wilmington + Trust Company, not in its individual capacity but solely as trustee f/b/o + ITOCHU and Marubeni ("Trustee", and together With ITOCHU and Marubeni, each, an + "Assignor" and collectivelly, "Assignors"), and Boeing Capital Corporation, a + company duly formed under the laws of Delaware (the "Assignee"). + + RECITALS + + WHEREAS, Trustee is the Lessor, under that certain Aircraft Lease +Agreement dated as of November 29, 1995 and recorded with the Federal +Aviation Administration on ________, 199__, and assigned conveyance number +____________, with Aloha Airlines, Inc., as the Lessee, as supplemented by +Lease Supplement No. 1 and as amended and supplemented by Letter Agreement +No. 1 dated as of November 29, 1995 (collectively, the "Lease"), covering +one (1) Boeing 737-25A aircraft (as more particularly described under the +Lease, the "Aircraft"), + + WHEREAS, pursuant to that certain Aircraft Purchase Agreement dated +as of August _________, 1998 (the "Purchase Agreement"), by and between +Assignors and Assignee, Assignors desire to assign, and Assignee desires to +accept, the assignment of the Assignors' rights, titles, interest in, to and +under the Lease; + + NOW, THEREFORE, in consideration of the premises and mutual agreements + contained herein and for other good and valuable consideration, receipt of + which is hereby acknowledged, the parties hereto agree as follows, + + Section 1, DEFINITIONS. Terms used herein but not defined shall have +the meanings set forth in the Lease. + + Section 2. ASSIGNMENT. Assignor hereby assigns to Assignee and +Assignee hereby accepts, all of Assignors' right, title and interest under +the Lease. + + Section 3. ASSUMPTION OF OBLIGATIONS. Assignee hereby assumes all +obligations of the Assignors under the Lease to the extent arising from and +after the date hereof, + + Section 4. AMENDMENTS TO THE LEASE. With respect to events occurring on + and after the date hereof, all references to "Beneficiaries" contained in the + Lease shall be deemed to be references to Lessor. + + Section 5. CONCERNING THE TRUSTEE. Wilmington Trust Company is + entering into this Agreement solely in its capacity as Trustee under the Trust + Agreement, except as otherwise expressly provided herein, and Wilmington Trust + Company (or any successor Trustee) shall not be personally liable for or on + account of any of the statements, representations, warranties, covenants or + obligations of the Assignor hereunder; provided, however, that Wilmington Trust + Company (or any other successor Trustee) shall be liable hereunder for its own + gross negligence or willful misconduct or for breach of its covenants or its + representations. and warranties to the extent covenanted or made in its + individual capacity. extent covenanted or made in its individual capacity. + + + + + + Section 6. MISCELLANEOUS. + + (a) This Agreement may be signed in one or more counterparts with the +same effect as if the signatures in each counterpart were upon a single +document. All counterparts shall be considered an original hereof. + + (b) The terms and provisions hereof shall inure to the benefit of and +be binding on the parties hereof and their respective successors and assigns. + + (c) This Agreement shall in all respects be governed by and construed +in accordance with the laws of the State of New York, including all matters +of construction, validity, and performance. + +IN WITNESS WHEREOF, the undersigned have executed this Agreement as of the +date first above written. + +WILMINGTON TRUST COMPANY ITOCHU AIRLEASE LIMITED +not in its individual capacity but as ("Assignor") +trustee ("Assignor") + + +By: /s/ Bruce L. Besson By: [Illegible] + ------------------------------ ------------------------- +Name: Bruce L. Besson Name: + ------------------------------ ------------------------- +Title: V.P. Title: ATTORNEY IN FACT + ------------------------------ ------------------------- + + +MA-LEASE LIMITED BOEING CAPITAL CORPORATION +("Assignor") ("Assignor") + +By: [Illegible] By: /s/ Stephen J. Novak + ------------------------------ ------------------------- +Name: Name: Vice President + ------------------------------ ------------------------- +Title: ATTORNEY IN FACT Title: Stephen J. Novak + ------------------------------ ------------------------- + + + 2 + + + + + CONSENT + + Reference is hereby made to the attached Lease Assignment (capitalized + terms used herein without definition are used with the same meaning as in the + Lease Assignment). The undersigned hereby consents to the assignment and + assumption set forth therein and acknowledges that the Assignors shall, from + and after the date hereof, be released from all further obligations under the + Lease, except that such release shall not affect any liability arising on or + before the effective date of the Lease Assignment. + + The undersigned hereby also agrees that Aloha Airlines, Inc. shall + cause each of the Assignors to be added as an additional insured under the + liability insurance policies required to be maintained by Aloha Airlines, Inc., + as Lessee, pursuant to the Lease. Aloha Airlines, Inc. agrees that its + obligations to maintain such insurance shall continue until the earlier to + occur of (i) two years after the date hereof, and (ii) the D check or its + equivalent first occurring after the date hereof. + + IN WITNESS WHEREOF, the undersigned has executed this Consent as of +August 7, 1998. + + +ALOHA AIRLINES, INC. + + +By: /s/ Brenda F. Cutwright + --------------------------------- +Name: Brenda F. Cutwright + --------------------------------- + Sr. Vice President Finance & +Title: Planning and CFO + --------------------------------- + + + +By: /s/ James M. King + --------------------------------- +Name: James M. King + --------------------------------- + Vice President +Title: Planning & Development + --------------------------------- + + + + 3 + + + + + CONSENT + + Reference Is hereby made to the attached Lease Assignment (capitalized + terms used herein without definition are used with the same meaning as in the + Lease Assignment). The undersigned hereby consents to the assignment and + assumption set forth therein and acknowledges that the Assignors shall, from + and after the date hereof, be released from all further obligations under the + Lease, except that such release shall not affect any liability arising on or + before the effective date of the Lease Assignment. + + The undersigned hereby also agrees that Aloha Airlines, Inc. shall + cause each of the Assignors to be added as an additional insured under the + liability insurance policies required to be maintained by Aloha Airlines, Inc., + as Lessee, pursuant to the Lease. Aloha Airlines, Inc. agrees that its + obligations to maintain such insurance shall continue until the earlier to + occur of (i) two years after the date hereof, and (ii) the D check or its + equivalent first occurring after the date hereof. + + IN WITNESS WHEREOF, the undersigned has executed this Consent as of +August 7, 1998. + +ALOHA AIRLINES, INC. + + +By: /s/ Brenda F. Cutwright + --------------------------------- +Name: Brenda F. Cutwright + --------------------------------- + Sr. Vice President Finance & +Title: Planning and CFO + --------------------------------- + + + +By: /s/ James M. King + --------------------------------- +Name: James M. King + --------------------------------- + Vice President +Title: Planning & Development + --------------------------------- + + + + + 3 + + + + + + CONSENT + + Reference is hereby made to the attached Lease Assignment (capitalized + terms used herein without definition are used with the same meaning as in the + Lease Assignment). The undersigned hereby consents to the assignment and + assumption set forth therein and acknowledges that the Assignors shall, from + and after the date hereof, be released from all further obligations under the + Lease, except that such release shall not affect any liability arising on or + before the effective date of the Lease Assignment. + + The undersigned hereby also agrees that Aloha Airlines, Inc. shall + cause each of the Assignors to be added as an additional insured under the + liability insurance policies required to be maintained by Aloha Airlines, Inc., + as Lessee, pursuant to the Lease. Aloha Airlines, Inc. agrees that its + obligations to maintain such insurance shall continue until the earlier to + occur of (i) two years after the date hereof, and (ii) the D check or its + equivalent first occurring after the date hereof. + + IN WITNESS WHEREOF, the undersigned has executed this Consent as of +August ___,1998. + + ALOHA AIRLINES, INC. + + By: + --------------------------------- + Name: + --------------------------------- + Title. + --------------------------------- + + + By: + --------------------------------- + Name: + --------------------------------- + Title: + --------------------------------- + + + + + + LEASE EXTENSION AND AMENDMENT AGREEMENT + +THIS LEASE EXTENSION AND AMENDMENT AGREEMENT (this "Agreement") dated as of +November ____, 2001, is by and between BOEING CAPITAL CORPORATION, a Delaware +corporation ("Lessor") and ALOHA AIRLINES, a Delaware corporation ("Lessee). + + WITNESSETH + +WHEREAS, Lessor (as successor to Wilmington Trust Company, not in its individual +capacity but solely as trustee f/b/o ITOCHU AirLease (Europe) Limited and +Marubeni Airleasing (U.K) Limited, pursuant to certain Purchase Agreement and +Assignment Agreement dated June 22, 1998) are parties to Aircraft Lease +Agreement dated as of November 29, 1995 and filed with the Federal Aviation +Administration ("FAA") on January 25, 1996 as conveyance no. 11004730 (the +"Lease") as supplemented by Lease Supplement No. 1 filed with the FAA on +_________________________ as conveyance no. _________________________, as +further supplemented by Lease Supplement No. 2 filed with the FAA on April 29, +1996 as conveyance no. 22011203 (collectively the "Supplement"). The Lease and +the Lease Supplement shall be collectively referred to as the "Lease Agreement." + +WHEREAS, pursuant to the Lease Agreement, Lessee agreed to lease from Lessor one +(1) Boeing Model 737-25A aircraft bearing manufacturer's serial number 23791 +(the "Aircraft") for a term of ninety-six (96) months; + +WHEREAS, Lessee desires to extend the lease Expiration Date from December 1, +2003 to February 1, 2004 and Lessor is willing to agree to this extension; and + +WHEREAS, the parties hereto further desire to amend the Lease Agreement upon the +terms and conditions hereinafter set forth. + +NOW, THEREFORE, in consideration of the mutual agreements contained herein and +other good and valuable consideration, the receipt and sufficiency of which are +hereby acknowledged, the parties hereto agree as follows: + +SECTION 1. DEFINITIONS + +Except as otherwise defined in this Agreement the capitalized terms used herein +shall have the meanings attributed thereto in the Lease Agreement. + + + Page 1 + + + +SECTION 2. AMENDMENTS + +The Lease Agreement is hereby amended in the following manner: + + 2.1 Section 4.(a)(i) entitled "Basic Rent" is hereby deleted in its +entirety and the following is inserted in lieu thereof: + + "(i) BASIC RENT: The Basic Rent as set forth on Exhibit C-1 hereto + throughout the Term hereof, payable in consecutive installments in arrears + on each Basic Rent Payment Date." + + 2.2 Exhibit C-1 definition "Basic Rent" is hereby deleted in its entirety +and the following is inserted in lieu thereof: + + [This provision has been omitted as confidential information, and + is separately filed with the Commission.] + + 2.3 Exhibit C-1 definition "Casualty Value" is hereby deleted in its +entirety and the following is inserted in lieu thereof: + + [This provision has been omitted as confidential information, and + is separately filed with the Commission.] + + 2.4 Exhibit C-1 definition "Security Deposit" is hereby deleted in its +entirety and the following is inserted in lieu thereof: + + [This provision has been omitted as confidential information, and + is separately filed with the Commission.] + + 2.5 Exhibit C-1 definition "Security Letter of Credit" is hereby deleted in +its entirety. + + 2.6 Exhibit D, Article 3 is hereby deleted in its entirety and revised to +reflect the new expiration date of February 1, 2004. The following is inserted +in lieu thereof: + + "3. The term for the Delivered Aircraft shall commence on the Delivery Date + and shall end on the Expiration Date, which shall be February 1, 2004." + + + Page 2 + + + +SECTION 3. TRANSFER OF PAYMENTS + + [This provision has been omitted as confidential information, and +is separately filed with the Commission.] + + +SECTION 4. REPRESENTATIONS, WARRANTIES AND COVENANTS + + 4.1 REPRESENTATIONS AND WARRANTIES. Lessee hereby repeats the +representations and warranties in Section 3 of the Lease Agreement as if made +with reference to the facts and circumstances existing as at the date hereof and +as if the references in such representations and warranties to this Agreement +refer not to the Lease but rather to the Lease Agreement as amended by this +Agreement. + +SECTION 5. CONDITIONS PRECEDENT + + This Agreement is subject to the satisfaction of each of the following +conditions or receipt of documents by Lessor, each in form and substance +satisfactory to Lessor: + + 5.1 CORPORATE ACTION. Lessee, must have furnished to Lessor satisfactory +proof that Lessee has taken all corporate action necessary to authorize this +Agreement. + + 5.2 OPINION OF COUNSEL. Lessor shall have received a legal opinion from +Lessee's counsel in form and substance satisfactory to Lessor and confirming, +INTER ALIA, that this Agreement has (i) been duly signed and delivered on behalf +of Lessee, (ii) that the representations, warranties and covenants of Lessee set +forth in this Agreement are valid and legally binding obligations of Lessee, +enforceable in accordance with their respective terms in the jurisdictions in +which the Aircraft will be registered, operated and located; (iii) this +Agreement and all other necessary documents have been, or will be, duly filed, +registered and recorded as necessary with the aviation or other comparable +authority in all places as may be necessary and all other action has been taken +to fully protect Lessor's title to the Aircraft against all persons whomsoever +(specifying in such opinion the location and nature of all such filings, +registrations or recordings); (iv) upon termination of the Lease Agreement for +any reason, Lessor will be able to promptly take possession of the Aircraft and +immediately return the Aircraft to facilities in the United States designated by +Lessor in a manner satisfactory to Lessor. + + 5.3 APPROVAL OF LESSOR'S COUNSEL. All documents incident to this +transaction will satisfactory to counsel for Lessor. + + 5.4 ADDITIONAL INFORMATION. Lessee must have furnished Lessor with any +other opinions, documents, evidence, materials and information as Lessor may +reasonably request. + + + Page 3 + + + + 5.5 ENGLISH. All certificates, opinions, statements, evidence, proof, +documents, materials and information required under this Section must be +furnished in English. + + 5.6 INSURANCE. Lessee must have furnished to Lessor certificates of +insurance evidencing the insurance required under the Lease as extended hereby. + +SECTION 6. CONDITIONS SUBSEQUENT + + 6.1 RECORDATION. Immediately following execution of this Agreement by +Lessor and Lessee, the Agreement will be filed for recordation by Lessee with +the FAA, and all other necessary action will be taken by Lessee to fully protect +the title of Lessor in the Aircraft. Lessee agrees that failure to effect such +filings, registrations and/or recordations as of the date falling 2 weeks after +execution by the last party to execute this Agreement shall constitute an "Event +of Default" under the Lease Agreement and Lessor shall have the right to +exercise all remedies available to it under Section 13 of the Lease Agreement +with respect to such Event of Default. + +SECTION 7. MISCELLANEOUS + + 7.1 HEADINGS. The section and paragraph headings in this Agreement are for +convenience of reference only and shall not define or limit any of the terms or +provisions hereof. + + 7.2 CHOICE OF LAW. THIS AGREEMENT SHALL IN ALL RESPECTS BE GOVERNED AND +CONSTRUED IN ACCORDANCE WITH THE LAWS OF THE STATE OF NEW YORK, INCLUDING ALL +MATTERS OF CONSTRUCTION, VALIDITY AND PERFORMANCE. + + 7.3 COUNTERPARTS. This Agreement may be executed by the parties hereto in +separate counterparts, each of which when so executed and delivered shall be an +original, but all such counterparts shall together constitute but one and the +same instrument. + + 7.4 SUCCESSORS AND ASSIGNS. This Agreement shall be binding upon and shall +inure to the benefit of, and shall be enforceable by and against, the parties +hereto and their respective successors and permitted assigns. + + 7.5 EFFECT OF AGREEMENTS. Except as expressly amended hereby, the Lease +Agreement is and shall continue in full force and effect. + + + Page 4 + + + +IN WITNESS WHEREOF, the parties hereto have caused this Agreement to be duly +executed and delivered by their respective duly authorized officers as of the +date first above written. + + + BOEING CAPITAL CORPORATION + + By: /s/ [ILLEGIBLE] + ------------------------------- + + Its: Vice President + ------------------------------- + + + ALOHA AIRLINES, INC. + + + By: + ------------------------------- + + Its: + ------------------------------- + + + By: + ------------------------------- + + Its: + ------------------------------- + + + Page 5 + + + +IN WITNESS WHEREOF, the parties hereto have caused this Agreement to be duly +executed and delivered by their respective duly authorized officers as of the +date first above written. + + + BOEING CAPITAL CORPORATION + + By: + ------------------------------- + + Its: + ------------------------------- + + + ALOHA AIRLINES, INC. + + By: /s/ Brenda F. Cutwright + ------------------------------- + BRENDA F. CUTWRIGHT + + Its: EXECUTIVE VICE PRESIDENT & CFO + ------------------------------- + + By: /s/ James M. King + ------------------------------- + JAMES M. KING + + Its: SENIOR VICE PRESIDENT PLANNING + AND BUSINESS DEVELOPMENT + ------------------------------- + + + Page 5 + + + +IN WITNESS WHEREOF, the parties hereto have caused this Agreement to be duly +executed and delivered by their respective duly authorized officers as of the +date first above written. + + + BOEING CAPITAL CORPORATION + + By: /s/ [ILLEGIBLE] + ------------------------------- + + Its: Vice President + ------------------------------- + + + ALOHA AIRLINES, INC. + + + By: + ------------------------------- + + Its: + ------------------------------- + + + By: + ------------------------------- + + Its: + ------------------------------- + + + Page 5 + +
+
\ No newline at end of file diff --git a/extensions/superboogav2/benchmark_texts/questions.json b/extensions/superboogav2/benchmark_texts/questions.json new file mode 100644 index 0000000000000000000000000000000000000000..7dad24e07d379181c7f0a8a9fa47fb853a812876 --- /dev/null +++ b/extensions/superboogav2/benchmark_texts/questions.json @@ -0,0 +1,291 @@ +[ + { + "text": "extensions/superboogav2/benchmark_texts/aircraft_lease.txt", + "questions": [ + { + "question_variants": [ + "What is a wet lease?", + "Agh, I'm really wracking my brain here, but can't figure it out. What is a wet lease?", + "I've been trying to wrap my head around this concept and it's just not clicking. Could you elucidate the concept of a wet lease?", + "I'm finding it so hard to understand this whole wet lease thing! Would you be so kind as to explicate on the matter of what is known as a wet lease in the domain of aviation?", + "I've spent hours trying to grasp this and I'm still lost. Could you engage in a detailed exploration of the intricate and nuanced topic that is the wet lease, as it is commonly understood and applied within the broad and complex ecosystem of aviation?" + ], + "criteria": [ + "WET LEASE shall mean any arrangement whereby Lessee agrees to\n operate the Aircraft under a contractual arrangement with a third party\n pursuant to which no rights to any aircraft specifically identified by serial\n number or registration number are granted to such third party and pursuant to\n which the Aircraft (i) remains at all times under the sole and complete\n operational control of Lessee", + "(ii) shall be operated solely by cockpit crew\n employed by Lessee possessing all current certificates and licenses required by\n applicable Laws and (iii) shall be maintained by Lessee in accordance with all\n the provisions of the Lease including, but not limited to, Sections 6(d) and 12\n (it being understood and agreed by Lessor and Lessee that any Wet Lease shall,\n by its terms, be in all cases subject and subordinate to this Lease)." + ] + }, + { + "question_variants": [ + "What is PBGC?", + "I'm stumped! Can you tell me what PBGC is?", + "I've been racking my brain trying to understand PBGC. Would you mind explaining the concept to me?", + "I've been trying to grasp what PBGC represents in the context of pension benefits, but I'm not getting it. Would it be possible for you to expound upon the matter?", + "I'm having trouble understanding the multi-dimensional entity known as 'PBGC'. Could you embark on an exploration of it? How is it traditionally comprehended, interpreted, and implemented within the sphere of pension benefits?" + ], + "criteria": [ + "PBGC shall mean the Pension Benefit Guaranty Corporation\n established pursuant to Subtitle A of Part IV of ERISA, and any successor\n thereof." + ] + }, + { + "question_variants": [ + "What is LIEN?", + "I can't seem to find information on what LIEN is. Can you help me?", + "I'm feeling stuck. I can't seem to find any information on what LIEN is. Could you provide some insights?", + "It's like I'm chasing my tail here. I've been searching high and low and I just can't seem to find anything that clearly explains what LIEN is. Could you lend me a hand in understanding it?", + "I'm in a bit of a pickle. I've scoured the internet, flipped through countless books, and I still can't seem to find any definitive information on what LIEN is. Could you possibly help me get my head around it?" + ], + "criteria": [ + "LIEN shall mean any mortgage, pledge, lien, charge,\n encumbrance, lease, exercise of rights, security interest or claim." + ] + }, + { + "question_variants": [ + "What happens if the Lease is terminated by operation of law?", + "I'm a bit lost here. What happens if the Lease is terminated by operation of law? Can you help me understand?", + "I've been trying to figure this out but I'm stuck. What exactly happens if the Lease is terminated by operation of law? Could you explain?", + "I've been poring over this and I'm still not clear. What exactly transpires if the Lease is terminated by operation of law? I'd appreciate your help in understanding this.", + "I'm really hitting a wall here. I've been trying to understand this, but it feels like I'm reading a foreign language. What's the end result if the Lease is terminated by operation of law? Any help in understanding this, particularly a detailed breakdown, would be greatly appreciated." + ], + "criteria": [ + "If for any reason whatsoever this Lease shall be terminated\n in whole or in part by operation of law (other than termination under any\n bankruptcy laws as now or hereafter in effect), Lessee nonetheless agrees to\n pay to Lessor amounts equal to the Rent payments hereunder at the time such\n payments would have become due and payable in accordance with the terms hereof", + "had this Lease not been terminated so long as Lessee is able to use, possess\n and quietly enjoy the Aircraft, and so long as such payments are made and all\n other terms and conditions hereof are complied\n\n -16-\n\n\n\n\n\nwith by Lessor and Lessee, Lessor and Lessee will deem this Lease to remain in\nfull force and effect." + ] + }, + { + "question_variants": [ + "What happens if a discrepancy or malfunction is detected during the Acceptance Flight?", + "I'm having difficulty understanding this part. What exactly happens if a discrepancy or malfunction is detected during the Acceptance Flight? Can you provide a thorough explanation?", + "I'm stuck on this one. I'm struggling to comprehend what steps are taken if a discrepancy or malfunction is detected during the Acceptance Flight. Could you possibly explain this in detail?", + "I've been poring over this issue for a while, and it's not clicking. What steps are taken or what are the implications if a discrepancy or malfunction is detected during the Acceptance Flight? I'd appreciate a comprehensive explanation.", + "I'm really hitting a wall here. I've been trying to understand, but it's like I'm reading a foreign language. What's the end result or the next step if a discrepancy or malfunction is detected during the Acceptance Flight? Any help in understanding this, particularly a detailed breakdown, would be greatly appreciated." + ], + "criteria": [ + "If, during the Acceptance Flight, no discrepancy or malfunction is\n detected with respect to the airworthiness or operational nature of\n the Aircraft by normal airline standards, then (i) the delivery of\n the Aircraft from Lessor to Lessee hereunder shall occur, the\n Aircraft shall be accepted by Lessee hereunder whilst the Aircraft\n is located at the Delivery Location, and Lessee shall execute and\n deliver the Lease Supplement, (ii) th", + "e Aircraft shall continue en\n route to a location selected by Lessee (the \"Ferry Location\"), under\n the operational control of Lessee from the time of such delivery and\n acceptance (the Acceptance Flight shall terminate at the time of\n such delivery and acceptance, and that portion of the flight from\n the Delivery Location to the Ferry Location is herein called the\n \"Ferry Flight\"), and (iii) Lessee shall bear the costs of the flight\n ", + " crew, fuel and other costs\n\n\n -12-\n\n\n\n\n\n relating to the Ferry Flight and shall reimburse the Beneficiaries\n therefor promptly following receipt of the Beneficiaries, invoice\n therefor, PROVIDED, HOWEVER, that, if any discrepancy or malfunction\n is detected with respect to the airworthiness during the Acceptance\n Flight, then, at Lessee's option after consultation with Lessor,\n either ", + "(A) the Aircraft shall be delivered to and accepted by Lessee\n at the Delivery Location and shall be ferried to the Ferry Location,\n as provided in clauses (i), (ii) and (iii) above, where Lessee shall\n remedy such discrepancy or malfunction at the cost (without mark up)\n of the Beneficiaries (provided that such subsequent repair or\n maintenance work shall not affect Lessee's acceptance of the\n Aircraft hereunder), or (B) the Aircraft s", + "hall return to the\n Beneficiaries' storage and maintenance facility where such\n discrepancy or malfunction shall be corrected at the Beneficiaries'\n expense, in which case the Delivery Date shall be postponed to such\n date as the Beneficiaries shall advise, subject to the second\n paragraph of Section 3(c) below. Any discrepancy or malfunction\n detected of an airworthiness nature shall be corrected by Lessee or\n the Beneficiari", + "es in accordance with clause (A) or (B) above, as\n applicable, at Beneficiaries, expense. If during the Acceptance\n Flight a discrepancy or malfunction is detected with respect to the\n operational nature of the Aircraft by normal airline standards but\n no discrepancy or malfunction is detected with respect to the\n airworthiness of the Aircraft, then the Aircraft shall be delivered\n to and accepted by Lessee at the Delivery Location as p", + "rovided in\n clause (A) above, and Lessee shall remedy such discrepancy or\n malfunction at the cost (without mark up) of the Beneficiaries.\n\n In anticipation of the occurrence of the Delivery Date, the\n Beneficiaries retained a flight crew to conduct the Acceptance\n Flight and will incur costs relating to such retention. In\n connection therewith, Lessee agrees to reimburse the Beneficiaries,\n promptly following Lessee's receipt", + " of an invoice therefor, for\n one-half of the costs incurred by the Beneficiaries in connection\n with retaining such flight crew for the Acceptance Flight, which\n costs relate to the period commencing on and including November 29,\n 1995 and ending on the day immediately preceding the Delivery Date." + ] + }, + { + "question_variants": [ + "What condition must the Aircraft meet before being delivered to the Lessee?", + "I'm having some trouble understanding this part. Could you please clarify what condition the Aircraft must meet before being delivered to the Lessee? I would appreciate a detailed explanation.", + "I'm stuck on this point. I'm finding it difficult to understand the specific condition the Aircraft must be in before being handed over to the Lessee. Could you possibly provide a comprehensive explanation?", + "I'm feeling a bit lost here. I'm having trouble understanding the exact condition or standard that the Aircraft must meet before being delivered to the Lessee. Could you provide a detailed walkthrough of the requirements?", + "I've hit a bit of a wall with this one. I've been trying my best to understand this, but it's proving to be quite complex. What is the precise condition that the Aircraft must meet before it can be delivered to the Lessee? Any help in understanding this, particularly a detailed explanation, would be of great help." + ], + "criteria": [ + "(d) Lessee's obligation to lease the Aircraft hereunder from\nLessor shall also be conditioned upon the Aircraft being delivered to Lessee in\nthe following condition:\n\n (1) The Aircraft shall be airworthy and in good\n operating condition\n\n\n -11-\n\n\n\n\n with all of the Aircraft equipment, components and systems;\n\n (2) The Aircraft shall be clean;\n\n (3) The Airc", + "raft shall meet the requirements for\n airworthiness certification by the FAA;\n\n (4) A borescope of the Engines and the inspection of\n the APU in accordance with the Manufacturer's or APU manufacturer's\n recommendation shall have been performed at the direction of Lessee\n but under the control and at the cost of the Beneficiaries, and any\n discrepancies discovered in connection therewith shall have been\n corrected;" + ] + }, + { + "question_variants": [ + "What rights does the Lessee waive under section 4(c)?", + "Can you tell me about the rights that the Lessee gives up under section 4(c)?", + "I'm having some difficulty here, could you please explain to me what rights the Lessee is forfeiting under the terms of section 4(c)?", + "I'm really struggling to understand this part, it's quite complex. Could you clarify what rights the Lessee is explicitly waiving as per section 4(c) in this agreement?", + "I'm pulling my hair out! What does this even mean? Can you assist me in deciphering what rights the Lessee is giving up or putting aside according to section 4(c)? I'm finding this part particularly challenging to grasp." + ], + "criteria": [ + "(c) PROHIBITION AGAINST SETOFF, COUNTERCLAIM, ETC. This Lease\n is a net lease. Subject to Section 20(f), Lessee's obligation to pay all Rent\n hereunder shall be absolute and unconditional and shall not be affected or\n reduced by any circumstance, including, without limitation, (i) any setoff,\n counterclaim, recoupment, defense or other right which Lessee may have against\n Lessor, any Beneficiary, the Manufacturer, the Engine Manufacturer, any seller\n of or person providing services with respect ", + "to the Aircraft or any other\n Person, for any reason whatsoever; (ii) any defect in the title, airworthiness\n or eligibility for registration under applicable Law, or any condition, design,\n operation or fitness for use of, or any damage to or loss or destruction of,\n the Aircraft, or any interruption or cessation in the use or possession thereof\n by Lessee for any reason whatsoever, whether arising out of or related to an\n act or omission of Lessee, or any other Person; (iii) any Liens with res", + "pect to\n the Aircraft; (iv) the invalidity or unenforceability or lack of due\n authorization or other infirmity of this Lease or any absence of right, power\n or authority of Lessor or Lessee to enter into this Lease; (v) any insolvency,\n bankruptcy, reorganization or similar proceedings by or against Lessor or\n Lessee; (vi) any other circumstance or happening of any nature whatsoever,\n similar to any of the foregoing; or (vii) any Taxes (other Taxes to which\n Lessee's indemnity does not extend p", + "ursuant to the provisions of Section 10);\n it being the express intention of Lessor and Lessee that all Rent payable\n hereunder shall be payable in all events, unless the obligation to pay the same\n shall be terminated pursuant to the express provisions of this Lease. Nothing\n in this paragraph (c) shall constitute a waiver by Lessee of any right or claim\n that Lessee may separately assert against Lessor or any Beneficiary.\n\n Lessee hereby waives, to the extent permitted by app", + "licable\n Law, any and all rights which it may now have or which at any time hereafter\n may be conferred upon it, by Law or otherwise, to terminate this Lease or any\n obligation imposed upon Lessee hereunder or in relation hereto.\n\n If for any reason whatsoever this Lease shall be terminated\n in whole or in part by operation of law (other than termination under any\n bankruptcy laws as now or hereafter in effect), Lessee nonetheless agrees to\n pay to Lessor amounts equal to the R", + "ent payments hereunder at the time such\n payments would have become due and payable in accordance with the terms hereof\n had this Lease not been terminated so long as Lessee is able to use, possess\n and quietly enjoy the Aircraft, and so long as such payments are made and all\n other terms and conditions hereof are complied\n\n -16-\n\n\n\n\n\nwith by Lessor and Lessee, Lessor and Lessee will deem this Lease to remain in\nfull force and effect." + ] + }, + { + "question_variants": [ + "Can the Lessor and Beneficiaries conduct inspections without notice under certain conditions? What are those conditions?", + "Is it possible for the Lessor and Beneficiaries to carry out inspections without prior notice, given specific circumstances? If so, could you explain what these circumstances might be?", + "I'm finding myself a bit confused here. Can the Lessor and Beneficiaries, under any special conditions, perform inspections without providing any advance notice? If yes, what exactly are these special conditions?", + "I'm at my wit's end! Can the Lessor and Beneficiaries actually go ahead and conduct inspections without giving a heads up, but only when certain conditions are met? What exactly are these conditions that would allow for such actions?", + "I'm really trying to get my head around this, but I could use some assistance. Is it within the Lessor and Beneficiaries' rights to initiate inspections without any forewarning, but only under certain predefined circumstances? What are these circumstances exactly?" + ], + "criteria": [ + "Lessee shall permit Lessor, each Beneficiary and their\n respective designees on at least seven (7) days' prior written notice to visit\n and inspect the Aircraft, its condition, use and operation and the records\n maintained in connection therewith during normal business hours; PROVIDED,\n HOWEVER, that this shall not unreasonably interfere with Lessee's quiet use and\n enjoyment of the Aircraft PROVIDED FURTHER, HOWEVER, that Lessor or the\n Beneficiaries may conduct such visit and inspection at any", + " time and with or\n without notice if an Event of Default has occurred and is continuing." + ] + }, + { + "question_variants": [ + "What aircraft-related information will the Lessee provide on a monthly and annual basis?", + "Could you let me know what type of aircraft-related details the Lessee is obligated to provide on a monthly and annual basis?", + "I'm finding it a bit tricky to understand this part - could you help me clarify what specific aircraft-related data or information is the Lessee expected to report on both a monthly and an annual basis?", + "I'm really trying to grapple with this agreement. Could you assist me in figuring out the exact nature of the aircraft-related information that the Lessee is required to furnish on a consistent monthly and annual basis?", + "I'm genuinely struggling here! What does it mean exactly? What is the exact nature and extent of the aircraft-related data or information that the Lessee has to provide routinely, both on a monthly and an annual basis? I'm having a hard time understanding the specificities of this provision." + ], + "criteria": [ + "(v) Lessee will use its reasonable efforts to provide the\n Beneficiaries on or before the fifth day of each calendar month\n commencing with the next calendar month of the Delivery Date, and shall\n in any event provide to the Beneficiaries upon request of a Beneficiary,\n with a properly completed Monthly Aircraft Utilization and Status Report\n in the Form of Exhibit J hereto for the preceding calendar month\n operation of the aircraft;\n\n (vi) Lessee ", + "will use its reasonable efforts to provide the\n Beneficiaries, on or before the 15th day of January of each year\n (commencing with January 1996), and shall in any event provide Lessor and\n the Beneficiaries upon request of a Beneficiary in English, the\n information and documentation for the preceding calendar year as listed\n in Exhibit K hereto; PROVIDED, HOWEVER, that if (i) a Default or an Event\n of Default shall have occurred and be continuing or (ii) Lessee's\n ", + " financial condition changes adversely from its financial condition at the\n time of the Delivery Date, then, upon notice and a request from Lessor or\n a Beneficiary, Lessee shall provide such information on a quarterly basis\n on the 15th day of each January, April, July and October, commencing with\n the first of such dates to follow the date of such notice." + ] + }, + { + "question_variants": [ + "Under what conditions can Lessee consolidate, merge, or transfer assets without Lessor's prior written consent according to the text?", + "Could you explain under which specific circumstances the Lessee is allowed to consolidate, merge, or transfer assets without needing the Lessor's prior written approval, as stated in the text?", + "I'm having a bit of trouble with this section, could you clarify the exact conditions under which the Lessee is permitted to consolidate, merge, or transfer assets without first obtaining the Lessor's written consent, as outlined in the text?", + "I'm really wracking my brain here trying to understand the terms. Can you help me decipher under which exact circumstances or conditions the Lessee can execute consolidation, merging, or asset transfer without needing prior written consent from the Lessor, as the text suggests?", + "I'm pulling my hair out here! What on earth does it mean? What are the specific conditions or circumstances under which the Lessee can consolidate, merge, or transfer assets without having to acquire the Lessor's prior written consent, as it's described in the text? This is really a tough one to crack!" + ], + "criteria": [ + "(iv) CONSOLIDATION, MERGER, ETC. Without the prior written\n consent of Lessor and each Beneficiary, Lessee shall not consolidate with,\n merge with or merge into any other Person or convey, transfer or lease\n substantially all of its assets as an entirety to any other Person unless, upon\n and after giving effect to such transaction, (A) the surviving entity has at\n least the same net worth and gross assets as the Lessee immediately prior to\n such transaction, such surviving entity is Certified Ai", + "r Carrier and a \"citizen\n of the United States\" as defined in Section 101(16) of the Federal Aviation\n Act, (C) Lessor shall continue to be entitled to the benefits of Section 1110\n of the United States Bankruptcy Code, as in effect from time to time, and (D)\n each of the Operative Documents shall continue in full force and effect and\n shall constitute the legally binding and enforceable obligation of such\n surviving entity." + ] + }, + { + "question_variants": [ + "Who is responsible for replacing any parts on the Aircraft that become worn out, damaged, etc?", + "Could you please specify who holds the responsibility for replacing any parts of the Aircraft that may become worn out, damaged, or similarly affected?", + "I'm having a little trouble understanding this part. Who exactly is tasked with the responsibility of replacing any components of the Aircraft that may get worn out, damaged, or otherwise impaired?", + "I'm really scratching my head trying to figure out who precisely is designated to handle the replacement of any Aircraft parts that become worn out, damaged, or in similar conditions? This aspect seems a bit complicated.", + "I'm on the verge of losing it! Who in the world is charged with the duty of replacing any parts of the Aircraft that get worn out, damaged, or anything like that? I'm really finding it tough to get my head around this point." + ], + "criteria": [ + "(a) REPLACEMENT OF PARTS. Lessee, at its own cost and\n expense, will promptly replace all Parts which may from time to time become\n worn out, lost, stolen, destroyed, seized, confiscated, damaged beyond repair\n or permanently rendered unfit for use for any reason whatsoever. In addition,\n in the ordinary course of maintenance, service, repair, overhaul or testing,\n Lessee may at its own cost and expense cause to be removed any Parts, whether\n or not worn out, destroyed, damaged beyond repair or ", + "permanently rendered unfit\n for use, provided that Lessee shall replace at its own cost and expense such\n Parts as promptly as practicable. All replacement Parts shall be free and clear\n of all Liens, other than Liens permitted by Section 14 hereof, shall be in at\n least the same modification status and service bulletin accomplishment status,\n shall be fully interchangeable as to form, fit and function, shall have been\n overhauled or repaired and inspected by an agency acceptable to the FAA and\n", + " shall be in as good an operating condition as, and have a utility at least\n equal to and a value and remaining warranty reasonably approximating, the Parts\n replaced (assuming such replaced Parts were in the condition and repair in\n which they were required to be maintained by the terms hereof) and all\n historical records since new or last overhaul relating to such Parts (and all\n historical records since manufacture with respect to Engines, Landing Gears,\n the APU and all life limited parts in", + "stalled on any Engine, Landing Gear or\n APU) shall be maintained by Lessee." + ] + }, + { + "question_variants": [ + "Who bears responsibility if alterations, modifications or additions to the Aircraft result in any loss of revenue or grounding?", + "Can you clarify who would take responsibility if any alterations, modifications, or additions made to the Aircraft cause any loss of revenue or result in grounding?", + "I'm having some difficulty here. Could you please specify who should shoulder the responsibility if any changes, modifications or additions to the Aircraft lead to any form of revenue loss or cause the aircraft to be grounded?", + "I'm really trying to understand this, but it's complex. Could you elucidate who is to bear the brunt if alterations, modifications, or additions to the Aircraft culminate in a loss of revenue or result in the grounding of the aircraft?", + "I'm pulling my hair out over this! Who on earth would bear the responsibility if any alterations, modifications, or additions that are made to the Aircraft end up causing some form of revenue loss or force the aircraft to be grounded? I'm finding this part particularly challenging to comprehend." + ], + "criteria": [ + "In no event shall Lessor bear any liability or cost for any\n alteration, modification or addition to, or for any grounding or suspension of\n certification of, the Aircraft, or for any loss of revenue arising therefrom.\n Lessee shall make no material alterations, modifications or additions to the\n Aircraft (such as removal of seats, galleys, lavatories, major avionics\n equipment or the like) that would affect the marketability of the Aircraft\n without Lessor's and each Beneficiary's prior written", + " consent. if Lessor and\n each Beneficiary grant such consent, title to such removed Parts shall remain\n with Lessor and Lessor and the Beneficiaries may request Lessee to reinstall\n such Parts prior to termination of this Lease. If Lessor or Beneficiaries\n request Lessee to reinstall such Parts, title to the Parts removed shall vest\n in Lessee. All costs associated with such removal and reinstallation shall be\n borne by Lessee." + ] + }, + { + "question_variants": [ + "Who is the assignor and who is the assignee?", + "Can you help me identify who the assignor is and who takes the role of the assignee?", + "I'm having some trouble figuring this out. Could you clarify for me who exactly is the assignor and who is designated as the assignee in this context?", + "I'm really wrestling with this, it seems a bit tricky. Could you help me to understand who exactly is acting as the assignor and who is being recognized as the assignee in this particular scenario?", + "I'm at my wits' end here! What does it mean? Who exactly is playing the role of the assignor and who is being referred to as the assignee in this situation? This is proving to be quite a tough nut to crack!" + ], + "criteria": [ + "ASSIGNOR: ALOHA AIRLINES, INC.,\n A HAWAII CORPORATION", + "ASSIGNEE: ALOHA AIRLINES, INC., A\n DELAWARE CORPORATION" + ] + }, + { + "question_variants": [ + "What does it mean when the Assignee is referred to as a 'Certified Air Carrier'?", + "Could you clarify what is implied when the Assignee is labeled as a 'Certified Air Carrier'?", + "I'm having a hard time understanding this. Can you explain what the term 'Certified Air Carrier' means when it is applied to the Assignee in this context?", + "I'm really struggling here to understand this terminology. Could you assist in explaining what it means when the Assignee is characterized as a 'Certified Air Carrier' in this particular situation?", + "I'm almost at the end of my tether! What does this even mean? Can you help me grasp the meaning when the Assignee is designated as a 'Certified Air Carrier'? This particular terminology is really throwing me for a loop!" + ], + "criteria": [ + "(e) Assignee is a Certified Air Carrier and holds all\nlicenses, certificates, permits and franchises from the appropriate agencies of\nthe United States of America and/or all other governmental authorities having\njurisdiction which are necessary to authorize the Assignee to engage in air\ntransport and to carry on its business as presently conducted and to be\nconducted with the Aircraft." + ] + }, + { + "question_variants": [ + "Why is it important for the Assignee to be a 'citizen of the United States' as defined in 40102(a)(15) of Title 49 of the United States Code?", + "Could you help me understand why it's significant for the Assignee to be defined as a 'citizen of the United States' as per 40102(a)(15) of Title 49 of the United States Code?", + "I'm finding it a bit challenging to comprehend this part. Why is it crucial for the Assignee to be designated as a 'citizen of the United States', as defined under 40102(a)(15) of Title 49 of the United States Code?", + "I'm really trying to unravel this, but it seems quite complex. Could you elucidate why it's so imperative for the Assignee to be identified as a 'citizen of the United States', as per the definition provided in 40102(a)(15) of Title 49 of the United States Code?", + "I'm pulling my hair out over this! What does it even mean? Can you help me decipher why it's so essential for the Assignee to be considered a 'citizen of the United States', as stipulated in 40102(a)(15) of Title 49 of the United States Code? I'm finding this legal terminology particularly difficult to grasp." + ], + "criteria": [ + "(f) Assignee is a \"citizen of the United States\" as defined\nin 40102(a)(15) of Title 49 of the United States Code." + ] + }, + { + "question_variants": [ + "How many days do I have to pay?", + "Could you specify the number of days I'm given to complete the payment?", + "I'm a bit unsure about the payment deadline. Could you clarify how many days exactly I have to make the payment?", + "I'm really trying to understand the payment terms. Could you help me ascertain the exact number of days that I am allotted to finalize the payment?", + "I'm so confused! What does this mean exactly? Can you help me comprehend the specific amount of time, in days, that I have been provided with to conclude the payment? I'm finding this financial term quite challenging to understand." + ], + "criteria": [ + "(e) TIMING OF PAYMENT. Any amount due and payable to the\n relevant Indemnitee pursuant to this Section 10 will be paid within 10 days\n after receipt of a written demand therefor from such Indemnitee accompanied by\n a written statement describing in reasonable detail the basis for such\n indemnity and the computation of the amount so payable; PROVIDED, HOWEVER, that\n such amount need not be paid by Lessee prior to the later of (i) five days\n prior to the date the applicable Tax is payable to the a", + "ppropriate Governmental\n Entity or taxing authority or (ii) in the case of amounts which are being\n contested by Lessee in good faith or by Lessor pursuant to Section 10(f), the\n date such contest is finally resolved. If requested in writing by Lessee, and\n at Lessee's sole cost and expense, any calculations by an Indemnitee of any\n amount due and payable\n\n -44-\n\n\n\n\n\n hereunder shall be subject to review and verification by a firm of independent\n certif", + "ied public accounts of internationally recognized stature selected by\n such Indemnitee and reasonably acceptable to Lessee (such approval not to be\n unreasonably withheld or delayed). Such Indemnitee shall make available to such\n accounting firm such information as shall be necessary for purposes of such\n review and verification (but such information shall be held by such accounting\n firm in strictest confidence and shall not in any event be disclosed or made\n available to Lessee). If the result", + " of such review is that Lessee was liable\n for a smaller amount, the excess payment shall be returned by such Indemnitee\n forthwith." + ] + }, + { + "question_variants": [ + "What currency should I pay in?", + "Could you please clarify in which currency I am expected to make the payment?", + "I'm a bit puzzled here, could you specify the exact currency I should use for the payment?", + "I'm really scratching my head trying to figure this out. Could you help me understand in which specific currency I am supposed to settle the payment?", + "I'm quite frustrated at this point! What exactly does it mean? Can you elucidate in which particular currency I'm required to execute the payment? I'm finding this point a bit difficult to decipher." + ], + "criteria": [ + "(i) PAYMENTS IN U.S. DOLLARS. All amounts to be paid hereunder to\nLessor or Lessee shall be paid in Dollars, in immediately available funds.\nLessee acknowledges that the specification of Dollars in this transaction is\nof the essence and that Dollars shall be the currency of account in any and\nall events. The obligations of Lessee or Lessor hereunder, to Lessor or\nLessee, respectively, shall not be discharged by an amount paid in another\ncurrency, whether pursuant to a judgment or otherwise, to t", + "he extent that the\n amount so paid on prompt conversion to Dollars under normal banking\nprocedures does not yield the amount of Dollars owing to Lessor." + ] + }, + { + "question_variants": [ + "What is the US registration number of the aircraft?", + "Could you please tell me the US registration number assigned to the aircraft?", + "I'm having some difficulty here. Could you specify the exact US registration number of the aircraft?", + "I'm really struggling to get this part. Could you assist me in figuring out what the specific US registration number for the aircraft is?", + "I'm pulling my hair out over this! What does it mean exactly? Can you help me decipher the precise US registration number that's associated with the aircraft? I'm finding it a bit challenging to understand." + ], + "criteria": [ + "U.S.\n MODEL AND REGISTRATION MANUFACTURER'S\nITEM MANUFACTURER CONFIGURATION NUMBER SERIAL NUMBER\n-------------------------------------------------------------------------------------------------------------------\n \n\nAircraft The Boeing Compa", + "ny 737-25A N685MA*" + ] + }, + { + "question_variants": [ + "What is the maximum duration that a safety or maintenance requirement can remain unaddressed on the aircraft, particularly in terms of airworthiness directives and mandatory orders?", + "How long can a safety or maintenance requirement, especially airworthiness directives and mandatory orders, be left unresolved?", + "How long can an airworthiness directive or mandatory order remain outstanding on the aircraft according to standard lease agreements?", + "What's the longest period that a safety or maintenance requirement, such as airworthiness directives and mandatory orders, can remain unmet on a leased aircraft?", + "What is the maximum allowable timeframe for a safety or maintenance requirement to be left unattended to on an aircraft, specifically referring to airworthiness directives and mandatory orders?" + ], + "criteria": [ + "(i) have had all repetitive airworthiness directives and mandatory\n orders and regulations in at least half-life or better condition;" + ] + }, + { + "question_variants": [ + "What are the payment locations?", + "Could you specify where exactly I should be making the payments? Are there particular bank accounts or locations?", + "I'm a bit puzzled here. Could you clarify the exact payment locations or bank accounts where I'm supposed to deposit the payments?", + "I'm really struggling to grasp this. Could you assist me in understanding the specific payment locations or bank accounts where I'm expected to send the payments?", + "I'm at my wit's end here! What does this mean? Can you help me figure out the precise locations or bank accounts where I'm supposed to carry out the payments? I'm finding this financial aspect particularly hard to comprehend." + ], + "criteria": [ + "Payment Locations: For ITOCHU AirLease (Europe) Limited:\n\n Account Name: Citibank New York (ABA No.\n 021000089) for the account of Citibank\n Dublin (account no. 10994598) in favor of\n ITOCHU AirLease (Europe) Limited (account\n no. 1-00-6793-017)\n\n For Marubeni Airleasing (", + "U.K.) Limited:\n\n Harris Bank International Corporation\n ABA #026-007-760\n for the credit of\n The Mitsubishi Trust & Banking Corporation\n London Branch A/C#16011100\n UID No.107280\n for further credit to\n Marubeni Airleasi", + "ng (UK) Ltd.\n Account #020-404391\n\n With respect to payments by\n Lessee of Basic Rent hereunder, 62.682% of\n such amounts shall be paid to ITOCHU\n AirLease (Europe) Limited (as above\n provided) and 37.318% of such amounts\n shall be paid to Marubeni Airlea", + "sing (U.K.)\n Limited (as above provided)." + ] + }, + { + "question_variants": [ + "What is the revision number of the aircraft?", + "Could you please clarify what the revision number of the aircraft is?", + "I'm finding this a bit hard to grasp. Could you specify the exact revision number associated with the aircraft?", + "I'm really trying to understand this, but it's proving difficult. Could you assist me in determining the specific revision number that is attributed to the aircraft?", + "Agh! What does it even mean? Can you help me decipher the exact revision number that is tied to the aircraft? I'm finding this technical detail quite challenging to comprehend." + ], + "criteria": [ + "Detail Specification (737-25A-Rev. B)" + ] + } + ] + } +] \ No newline at end of file diff --git a/extensions/superboogav2/chat_handler.py b/extensions/superboogav2/chat_handler.py new file mode 100644 index 0000000000000000000000000000000000000000..215f7bdbc762ed759f1054d2cc56e26bdd358cf9 --- /dev/null +++ b/extensions/superboogav2/chat_handler.py @@ -0,0 +1,138 @@ +""" +This module is responsible for modifying the chat prompt and history. +""" +import json +import re + +import extensions.superboogav2.parameters as parameters + +from modules import chat +from modules.text_generation import get_encoded_length +from modules.logging_colors import logger +from extensions.superboogav2.utils import create_context_text, create_metadata_source + +from .data_processor import process_and_add_to_collector +from .chromadb import ChromaCollector + + +CHAT_METADATA = create_metadata_source('automatic-chat-insert') + +INSTRUCT_MODE = 'instruct' +CHAT_INSTRUCT_MODE = 'chat-instruct' + + +def _is_instruct_mode(state: dict): + mode = state.get('mode') + return mode == INSTRUCT_MODE or mode == CHAT_INSTRUCT_MODE + + +def _remove_tag_if_necessary(user_input: str): + if not parameters.get_is_manual(): + return user_input + + return re.sub(r'^\s*!c\s*|\s*!c\s*$', '', user_input) + + +def _should_query(input: str): + if not parameters.get_is_manual(): + return True + + if re.search(r'^\s*!c|!c\s*$', input, re.MULTILINE): + return True + + return False + + +def _format_single_exchange(name, text): + if re.search(r':\s*$', name): + return '{} {}\n'.format(name, text) + else: + return '{}: {}\n'.format(name, text) + + +def _get_names(state: dict): + if _is_instruct_mode(state): + user_name = state['name1_instruct'] + bot_name = state['name2_instruct'] + else: + user_name = state['name1'] + bot_name = state['name2'] + + if not user_name: + user_name = 'User' + if not bot_name: + bot_name = 'Assistant' + + return user_name, bot_name + + +def _concatinate_history(history: dict, state: dict): + full_history_text = '' + user_name, bot_name = _get_names(state) + + # Grab the internal history. + internal_history = history['internal'] + assert isinstance(internal_history, list) + + # Iterate through the history. + for exchange in internal_history: + assert isinstance(exchange, list) + + if len(exchange) >= 1: + full_history_text += _format_single_exchange(user_name, exchange[0]) + if len(exchange) >= 2: + full_history_text += _format_single_exchange(bot_name, exchange[1]) + + return full_history_text[:-1] # Remove the last new line. + + +def _hijack_last(context_text: str, history: dict, max_len: int, state: dict): + num_context_tokens = get_encoded_length(context_text) + + names = _get_names(state)[::-1] + + history_tokens = 0 + replace_position = None + for i, messages in enumerate(reversed(history['internal'])): + for j, message in enumerate(reversed(messages)): + num_message_tokens = get_encoded_length(_format_single_exchange(names[j], message)) + + # TODO: This is an extremely naive solution. A more robust implementation must be made. + if history_tokens + num_context_tokens <= max_len: + # This message can be replaced + replace_position = (i, j) + + history_tokens += num_message_tokens + + if replace_position is None: + logger.warn("The provided context_text is too long to replace any message in the history.") + else: + # replace the message at replace_position with context_text + i, j = replace_position + history['internal'][-i-1][-j-1] = context_text + + +def custom_generate_chat_prompt_internal(user_input: str, state: dict, collector: ChromaCollector, **kwargs): + if parameters.get_add_chat_to_data(): + # Get the whole history as one string + history_as_text = _concatinate_history(kwargs['history'], state) + + if history_as_text: + # Delete all documents that were auto-inserted + collector.delete(ids_to_delete=None, where=CHAT_METADATA) + # Insert the processed history + process_and_add_to_collector(history_as_text, collector, False, CHAT_METADATA) + + if _should_query(user_input): + user_input = _remove_tag_if_necessary(user_input) + results = collector.get_sorted_by_dist(user_input, n_results=parameters.get_chunk_count(), max_token_count=int(parameters.get_max_token_count())) + + # Check if the strategy is to modify the last message. If so, prepend or append to the user query. + if parameters.get_injection_strategy() == parameters.APPEND_TO_LAST: + user_input = user_input + create_context_text(results) + elif parameters.get_injection_strategy() == parameters.PREPEND_TO_LAST: + user_input = create_context_text(results) + user_input + elif parameters.get_injection_strategy() == parameters.HIJACK_LAST_IN_CONTEXT: + _hijack_last(create_context_text(results), kwargs['history'], state['truncation_length'], state) + + return chat.generate_chat_prompt(user_input, state, **kwargs) diff --git a/extensions/superboogav2/chromadb.py b/extensions/superboogav2/chromadb.py new file mode 100644 index 0000000000000000000000000000000000000000..0da2d8f90c623b43ecd49b3dcf20919b8e2a1434 --- /dev/null +++ b/extensions/superboogav2/chromadb.py @@ -0,0 +1,376 @@ +import threading +import chromadb +import posthog +import torch +import math + +import numpy as np +import extensions.superboogav2.parameters as parameters + +from chromadb.config import Settings +from sentence_transformers import SentenceTransformer + +from modules.logging_colors import logger +from modules.text_generation import encode, decode + +logger.debug('Intercepting all calls to posthog.') +posthog.capture = lambda *args, **kwargs: None + + +class Collecter(): + def __init__(self): + pass + + def add(self, texts: list[str], texts_with_context: list[str], starting_indices: list[int]): + pass + + def get(self, search_strings: list[str], n_results: int) -> list[str]: + pass + + def clear(self): + pass + + +class Embedder(): + def __init__(self): + pass + + def embed(self, text: str) -> list[torch.Tensor]: + pass + +class Info: + def __init__(self, start_index, text_with_context, distance, id): + self.text_with_context = text_with_context + self.start_index = start_index + self.distance = distance + self.id = id + + def calculate_distance(self, other_info): + if parameters.get_new_dist_strategy() == parameters.DIST_MIN_STRATEGY: + # Min + return min(self.distance, other_info.distance) + elif parameters.get_new_dist_strategy() == parameters.DIST_HARMONIC_STRATEGY: + # Harmonic mean + return 2 * (self.distance * other_info.distance) / (self.distance + other_info.distance) + elif parameters.get_new_dist_strategy() == parameters.DIST_GEOMETRIC_STRATEGY: + # Geometric mean + return (self.distance * other_info.distance) ** 0.5 + elif parameters.get_new_dist_strategy() == parameters.DIST_ARITHMETIC_STRATEGY: + # Arithmetic mean + return (self.distance + other_info.distance) / 2 + else: # Min is default + return min(self.distance, other_info.distance) + + def merge_with(self, other_info): + s1 = self.text_with_context + s2 = other_info.text_with_context + s1_start = self.start_index + s2_start = other_info.start_index + + new_dist = self.calculate_distance(other_info) + + if self.should_merge(s1, s2, s1_start, s2_start): + if s1_start <= s2_start: + if s1_start + len(s1) >= s2_start + len(s2): # if s1 completely covers s2 + return Info(s1_start, s1, new_dist, self.id) + else: + overlap = max(0, s1_start + len(s1) - s2_start) + return Info(s1_start, s1 + s2[overlap:], new_dist, self.id) + else: + if s2_start + len(s2) >= s1_start + len(s1): # if s2 completely covers s1 + return Info(s2_start, s2, new_dist, other_info.id) + else: + overlap = max(0, s2_start + len(s2) - s1_start) + return Info(s2_start, s2 + s1[overlap:], new_dist, other_info.id) + + return None + + @staticmethod + def should_merge(s1, s2, s1_start, s2_start): + # Check if s1 and s2 are adjacent or overlapping + s1_end = s1_start + len(s1) + s2_end = s2_start + len(s2) + + return not (s1_end < s2_start or s2_end < s1_start) + +class ChromaCollector(Collecter): + def __init__(self, embedder: Embedder): + super().__init__() + self.chroma_client = chromadb.Client(Settings(anonymized_telemetry=False)) + self.embedder = embedder + self.collection = self.chroma_client.create_collection(name="context", embedding_function=self.embedder.embed) + self.ids = [] + self.id_to_info = {} + self.embeddings_cache = {} + self.lock = threading.Lock() # Locking so the server doesn't break. + + def add(self, texts: list[str], texts_with_context: list[str], starting_indices: list[int], metadatas: list[dict] = None): + with self.lock: + assert metadatas is None or len(metadatas) == len(texts), "metadatas must be None or have the same length as texts" + + if len(texts) == 0: + return + + new_ids = self._get_new_ids(len(texts)) + + (existing_texts, existing_embeddings, existing_ids, existing_metas), \ + (non_existing_texts, non_existing_ids, non_existing_metas) = self._split_texts_by_cache_hit(texts, new_ids, metadatas) + + # If there are any already existing texts, add them all at once. + if existing_texts: + logger.info(f'Adding {len(existing_embeddings)} cached embeddings.') + args = {'embeddings': existing_embeddings, 'documents': existing_texts, 'ids': existing_ids} + if metadatas is not None: + args['metadatas'] = existing_metas + self.collection.add(**args) + + # If there are any non-existing texts, compute their embeddings all at once. Each call to embed has significant overhead. + if non_existing_texts: + non_existing_embeddings = self.embedder.embed(non_existing_texts).tolist() + for text, embedding in zip(non_existing_texts, non_existing_embeddings): + self.embeddings_cache[text] = embedding + + logger.info(f'Adding {len(non_existing_embeddings)} new embeddings.') + args = {'embeddings': non_existing_embeddings, 'documents': non_existing_texts, 'ids': non_existing_ids} + if metadatas is not None: + args['metadatas'] = non_existing_metas + self.collection.add(**args) + + # Create a dictionary that maps each ID to its context and starting index + new_info = { + id_: {'text_with_context': context, 'start_index': start_index} + for id_, context, start_index in zip(new_ids, texts_with_context, starting_indices) + } + + self.id_to_info.update(new_info) + self.ids.extend(new_ids) + + + def _split_texts_by_cache_hit(self, texts: list[str], new_ids: list[str], metadatas: list[dict]): + existing_texts, non_existing_texts = [], [] + existing_embeddings = [] + existing_ids, non_existing_ids = [], [] + existing_metas, non_existing_metas = [], [] + + for i, text in enumerate(texts): + id_ = new_ids[i] + metadata = metadatas[i] if metadatas is not None else None + embedding = self.embeddings_cache.get(text) + if embedding: + existing_texts.append(text) + existing_embeddings.append(embedding) + existing_ids.append(id_) + existing_metas.append(metadata) + else: + non_existing_texts.append(text) + non_existing_ids.append(id_) + non_existing_metas.append(metadata) + + return (existing_texts, existing_embeddings, existing_ids, existing_metas), \ + (non_existing_texts, non_existing_ids, non_existing_metas) + + + def _get_new_ids(self, num_new_ids: int): + if self.ids: + max_existing_id = max(int(id_) for id_ in self.ids) + else: + max_existing_id = -1 + + return [str(i + max_existing_id + 1) for i in range(num_new_ids)] + + + def _find_min_max_start_index(self): + max_index, min_index = 0, float('inf') + for _, val in self.id_to_info.items(): + if val['start_index'] > max_index: + max_index = val['start_index'] + if val['start_index'] < min_index: + min_index = val['start_index'] + return min_index, max_index + + + # NB: Does not make sense to weigh excerpts from different documents. + # But let's say that's the user's problem. Perfect world scenario: + # Apply time weighing to different documents. For each document, then, add + # separate time weighing. + def _apply_sigmoid_time_weighing(self, infos: list[Info], document_len: int, time_steepness: float, time_power: float): + sigmoid = lambda x: 1 / (1 + np.exp(-x)) + + weights = sigmoid(time_steepness * np.linspace(-10, 10, document_len)) + + # Scale to [0,time_power] and shift it up to [1-time_power, 1] + weights = weights - min(weights) + weights = weights * (time_power / max(weights)) + weights = weights + (1 - time_power) + + # Reverse the weights + weights = weights[::-1] + + for info in infos: + index = info.start_index + info.distance *= weights[index] + + + def _filter_outliers_by_median_distance(self, infos: list[Info], significant_level: float): + # Ensure there are infos to filter + if not infos: + return [] + + # Find info with minimum distance + min_info = min(infos, key=lambda x: x.distance) + + # Calculate median distance among infos + median_distance = np.median([inf.distance for inf in infos]) + + # Filter out infos that have a distance significantly greater than the median + filtered_infos = [inf for inf in infos if inf.distance <= significant_level * median_distance] + + # Always include the info with minimum distance + if min_info not in filtered_infos: + filtered_infos.append(min_info) + + return filtered_infos + + + def _merge_infos(self, infos: list[Info]): + merged_infos = [] + current_info = infos[0] + + for next_info in infos[1:]: + merged = current_info.merge_with(next_info) + if merged is not None: + current_info = merged + else: + merged_infos.append(current_info) + current_info = next_info + + merged_infos.append(current_info) + return merged_infos + + + # Main function for retrieving chunks by distance. It performs merging, time weighing, and mean filtering. + def _get_documents_ids_distances(self, search_strings: list[str], n_results: int): + n_results = min(len(self.ids), n_results) + if n_results == 0: + return [], [], [] + + if isinstance(search_strings, str): + search_strings = [search_strings] + + infos = [] + min_start_index, max_start_index = self._find_min_max_start_index() + + for search_string in search_strings: + result = self.collection.query(query_texts=search_string, n_results=math.ceil(n_results / len(search_strings)), include=['distances']) + curr_infos = [Info(start_index=self.id_to_info[id]['start_index'], + text_with_context=self.id_to_info[id]['text_with_context'], + distance=distance, id=id) + for id, distance in zip(result['ids'][0], result['distances'][0])] + + self._apply_sigmoid_time_weighing(infos=curr_infos, document_len=max_start_index - min_start_index + 1, time_steepness=parameters.get_time_steepness(), time_power=parameters.get_time_power()) + curr_infos = self._filter_outliers_by_median_distance(curr_infos, parameters.get_significant_level()) + infos.extend(curr_infos) + + infos.sort(key=lambda x: x.start_index) + infos = self._merge_infos(infos) + + texts_with_context = [inf.text_with_context for inf in infos] + ids = [inf.id for inf in infos] + distances = [inf.distance for inf in infos] + + return texts_with_context, ids, distances + + + # Get chunks by similarity + def get(self, search_strings: list[str], n_results: int) -> list[str]: + with self.lock: + documents, _, _ = self._get_documents_ids_distances(search_strings, n_results) + return documents + + + # Get ids by similarity + def get_ids(self, search_strings: list[str], n_results: int) -> list[str]: + with self.lock: + _, ids, _ = self._get_documents_ids_distances(search_strings, n_results) + return ids + + + # Cutoff token count + def _get_documents_up_to_token_count(self, documents: list[str], max_token_count: int): + # TODO: Move to caller; We add delimiters there which might go over the limit. + current_token_count = 0 + return_documents = [] + + for doc in documents: + doc_tokens = encode(doc)[0] + doc_token_count = len(doc_tokens) + if current_token_count + doc_token_count > max_token_count: + # If adding this document would exceed the max token count, + # truncate the document to fit within the limit. + remaining_tokens = max_token_count - current_token_count + + truncated_doc = decode(doc_tokens[:remaining_tokens], skip_special_tokens=True) + return_documents.append(truncated_doc) + break + else: + return_documents.append(doc) + current_token_count += doc_token_count + + return return_documents + + + # Get chunks by similarity and then sort by ids + def get_sorted_by_ids(self, search_strings: list[str], n_results: int, max_token_count: int) -> list[str]: + with self.lock: + documents, ids, _ = self._get_documents_ids_distances(search_strings, n_results) + sorted_docs = [x for _, x in sorted(zip(ids, documents))] + + return self._get_documents_up_to_token_count(sorted_docs, max_token_count) + + + # Get chunks by similarity and then sort by distance (lowest distance is last). + def get_sorted_by_dist(self, search_strings: list[str], n_results: int, max_token_count: int) -> list[str]: + with self.lock: + documents, _, distances = self._get_documents_ids_distances(search_strings, n_results) + sorted_docs = [doc for doc, _ in sorted(zip(documents, distances), key=lambda x: x[1])] # sorted lowest -> highest + + # If a document is truncated or competely skipped, it would be with high distance. + return_documents = self._get_documents_up_to_token_count(sorted_docs, max_token_count) + return_documents.reverse() # highest -> lowest + + return return_documents + + + def delete(self, ids_to_delete: list[str], where: dict): + with self.lock: + ids_to_delete = self.collection.get(ids=ids_to_delete, where=where)['ids'] + self.collection.delete(ids=ids_to_delete, where=where) + + # Remove the deleted ids from self.ids and self.id_to_info + ids_set = set(ids_to_delete) + self.ids = [id_ for id_ in self.ids if id_ not in ids_set] + for id_ in ids_to_delete: + self.id_to_info.pop(id_, None) + + logger.info(f'Successfully deleted {len(ids_to_delete)} records from chromaDB.') + + + def clear(self): + with self.lock: + self.chroma_client.reset() + self.collection = self.chroma_client.create_collection("context", embedding_function=self.embedder.embed) + self.ids = [] + self.id_to_info = {} + + logger.info('Successfully cleared all records and reset chromaDB.') + + +class SentenceTransformerEmbedder(Embedder): + def __init__(self) -> None: + logger.debug('Creating Sentence Embedder...') + self.model = SentenceTransformer("sentence-transformers/all-mpnet-base-v2") + self.embed = self.model.encode + + +def make_collector(): + return ChromaCollector(SentenceTransformerEmbedder()) \ No newline at end of file diff --git a/extensions/superboogav2/config.json b/extensions/superboogav2/config.json new file mode 100644 index 0000000000000000000000000000000000000000..0f1034f52155f7ed45e98518da1ae00621e6d15b --- /dev/null +++ b/extensions/superboogav2/config.json @@ -0,0 +1,161 @@ +{ + "to_lower": { + "default": false, + "categories": [true, false], + "should_optimize": true + }, + "num_conversion": { + "default": null, + "categories": ["NUM_TO_WORD_METHOD", "NUM_TO_CHAR_METHOD", "NUM_TO_CHAR_LONG_METHOD", null], + "should_optimize": true + }, + "merge_spaces": { + "default": false, + "categories": [true, false], + "should_optimize": true + }, + "strip": { + "default": true, + "categories": [true, false], + "should_optimize": false + }, + "remove_punctuation": { + "default": true, + "categories": [true, false], + "should_optimize": true + }, + "remove_stopwords": { + "default": false, + "categories": [true, false], + "should_optimize": true + }, + "remove_specific_pos": { + "default": false, + "categories": [true, false], + "should_optimize": true + }, + "lemmatize": { + "default": true, + "categories": [true, false], + "should_optimize": true + }, + "min_num_sent": { + "default": 1, + "categories": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 999999], + "should_optimize": true + }, + "delta_start": { + "default": 0, + "categories": [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100], + "should_optimize": true + }, + "chunk_len1": { + "default": 500, + "categories": [50, 200, 250, 500, 600, 900, 1000], + "should_optimize": true + }, + "chunk_len2": { + "default": 500, + "categories": [0, 50, 200, 250, 500, 600, 900], + "should_optimize": true + }, + "chunk_len3": { + "default": 1000, + "categories": [0, 100, 150, 300, 400, 700, 800, 1000], + "should_optimize": true + }, + "chunk_len4": { + "default": 700, + "categories": [0, 100, 150, 300, 400, 700, 800], + "should_optimize": true + }, + "chunk_len_mask": { + "default": 15, + "categories": [3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15], + "should_optimize": false + }, + "context_len_left": { + "default": 250, + "categories": [50, 100, 150, 200, 250, 300, 350, 400, 500, 600, 700, 800, 900, 1000], + "should_optimize": true + }, + "context_len_right": { + "default": 800, + "categories": [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1500, 1600], + "should_optimize": true + }, + "new_dist_strategy": { + "default": "DIST_MIN_STRATEGY", + "categories": ["DIST_MIN_STRATEGY", "DIST_HARMONIC_STRATEGY", "DIST_GEOMETRIC_STRATEGY", "DIST_ARITHMETIC_STRATEGY"], + "should_optimize": false + }, + "chunk_count": { + "default": 250, + "categories": [30, 50, 75, 100, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350, 375, 400], + "should_optimize": true + }, + "min_num_length": { + "default": 9, + "categories": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "should_optimize": true + }, + "significant_level": { + "default": 1.0, + "categories": [0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 999999], + "should_optimize": true + }, + "time_steepness": { + "default": 0.01, + "categories": [0.01, 0.2, 0.4, 0.6, 0.8, 1.0], + "should_optimize": false + }, + "time_power": { + "default": 0, + "categories": [0.0, 0.2, 0.4, 0.6, 0.8, 1.0], + "should_optimize": false + }, + "chunk_separator": { + "default": "" + }, + "prefix": { + "default": "<>\n\n" + }, + "data_separator": { + "default": "\n\n<>\n\n" + }, + "postfix": { + "default": "\n\n<>\n\n" + }, + "manual": { + "default": true + }, + "add_chat_to_data": { + "default": true + }, + "injection_strategy": { + "default": "PREPEND_TO_LAST", + "categories": ["PREPEND_TO_LAST", "APPEND_TO_LAST", "HIJACK_LAST_IN_CONTEXT"] + }, + "chunk_regex": { + "default": "(?<==== ).*?(?= ===)|User story: \\d+" + }, + "strong_cleanup": { + "default": false + }, + "max_token_count": { + "default": 3072 + }, + "threads": { + "default": 4 + }, + "optimization_steps": { + "default": 100 + }, + "api_port": { + "default": 5002 + }, + "api_on": { + "default": false + } + } + \ No newline at end of file diff --git a/extensions/superboogav2/data_preprocessor.py b/extensions/superboogav2/data_preprocessor.py new file mode 100644 index 0000000000000000000000000000000000000000..cbd14b6b0c9cfbbaedc2ebbcbe5883ed6253c5f9 --- /dev/null +++ b/extensions/superboogav2/data_preprocessor.py @@ -0,0 +1,199 @@ +""" +This module contains utils for preprocessing the text before converting it to embeddings. + +- TextPreprocessorBuilder preprocesses individual strings. + * lowering cases + * converting numbers to words or characters + * merging and stripping spaces + * removing punctuation + * removing stop words + * lemmatizing + * removing specific parts of speech (adverbs and interjections) +- TextSummarizer extracts the most important sentences from a long string using text-ranking. +""" +import pytextrank +import string +import spacy +import math +import nltk +import re + +from nltk.corpus import stopwords +from nltk.stem import WordNetLemmatizer +from num2words import num2words + + +class TextPreprocessorBuilder: + # Define class variables as None initially + _stop_words = set(stopwords.words('english')) + _lemmatizer = WordNetLemmatizer() + + # Some of the functions are expensive. We cache the results. + _lemmatizer_cache = {} + _pos_remove_cache = {} + + + def __init__(self, text: str): + self.text = text + + + def to_lower(self): + # Match both words and non-word characters + tokens = re.findall(r'\b\w+\b|\W+', self.text) + for i, token in enumerate(tokens): + # Check if token is a word + if re.match(r'^\w+$', token): + # Check if token is not an abbreviation or constant + if not re.match(r'^[A-Z]+$', token) and not re.match(r'^[A-Z_]+$', token): + tokens[i] = token.lower() + self.text = "".join(tokens) + return self + + + def num_to_word(self, min_len: int = 1): + # Match both words and non-word characters + tokens = re.findall(r'\b\w+\b|\W+', self.text) + for i, token in enumerate(tokens): + # Check if token is a number of length `min_len` or more + if token.isdigit() and len(token) >= min_len: + # This is done to pay better attention to numbers (e.g. ticket numbers, thread numbers, post numbers) + # 740700 will become "seven hundred and forty thousand seven hundred". + tokens[i] = num2words(int(token)).replace(",","") # Remove commas from num2words. + self.text = "".join(tokens) + return self + + + def num_to_char_long(self, min_len: int = 1): + # Match both words and non-word characters + tokens = re.findall(r'\b\w+\b|\W+', self.text) + for i, token in enumerate(tokens): + # Check if token is a number of length `min_len` or more + if token.isdigit() and len(token) >= min_len: + # This is done to pay better attention to numbers (e.g. ticket numbers, thread numbers, post numbers) + # 740700 will become HHHHHHEEEEEAAAAHHHAAA + convert_token = lambda token: ''.join((chr(int(digit) + 65) * (i + 1)) for i, digit in enumerate(token[::-1]))[::-1] + tokens[i] = convert_token(tokens[i]) + self.text = "".join(tokens) + return self + + def num_to_char(self, min_len: int = 1): + # Match both words and non-word characters + tokens = re.findall(r'\b\w+\b|\W+', self.text) + for i, token in enumerate(tokens): + # Check if token is a number of length `min_len` or more + if token.isdigit() and len(token) >= min_len: + # This is done to pay better attention to numbers (e.g. ticket numbers, thread numbers, post numbers) + # 740700 will become HEAHAA + tokens[i] = ''.join(chr(int(digit) + 65) for digit in token) + self.text = "".join(tokens) + return self + + def merge_spaces(self): + self.text = re.sub(' +', ' ', self.text) + return self + + def strip(self): + self.text = self.text.strip() + return self + + def remove_punctuation(self): + self.text = self.text.translate(str.maketrans('', '', string.punctuation)) + return self + + def remove_stopwords(self): + self.text = "".join([word for word in re.findall(r'\b\w+\b|\W+', self.text) if word not in TextPreprocessorBuilder._stop_words]) + return self + + def remove_specific_pos(self): + """ + In the English language, adverbs and interjections rarely provide meaningul information. + Removing them improves the embedding precision. Don't tell JK Rowling, though. + """ + processed_text = TextPreprocessorBuilder._pos_remove_cache.get(self.text) + if processed_text: + self.text = processed_text + return self + + # Match both words and non-word characters + tokens = re.findall(r'\b\w+\b|\W+', self.text) + + # Exclude adverbs and interjections + excluded_tags = ['RB', 'RBR', 'RBS', 'UH'] + + for i, token in enumerate(tokens): + # Check if token is a word + if re.match(r'^\w+$', token): + # Part-of-speech tag the word + pos = nltk.pos_tag([token])[0][1] + # If the word's POS tag is in the excluded list, remove the word + if pos in excluded_tags: + tokens[i] = '' + + new_text = "".join(tokens) + TextPreprocessorBuilder._pos_remove_cache[self.text] = new_text + self.text = new_text + + return self + + def lemmatize(self): + processed_text = TextPreprocessorBuilder._lemmatizer_cache.get(self.text) + if processed_text: + self.text = processed_text + return self + + new_text = "".join([TextPreprocessorBuilder._lemmatizer.lemmatize(word) for word in re.findall(r'\b\w+\b|\W+', self.text)]) + TextPreprocessorBuilder._lemmatizer_cache[self.text] = new_text + self.text = new_text + + return self + + def build(self): + return self.text + +class TextSummarizer: + _nlp_pipeline = None + _cache = {} + + @staticmethod + def _load_nlp_pipeline(): + # Lazy-load it. + if TextSummarizer._nlp_pipeline is None: + TextSummarizer._nlp_pipeline = spacy.load('en_core_web_sm') + TextSummarizer._nlp_pipeline.add_pipe("textrank", last=True) + return TextSummarizer._nlp_pipeline + + @staticmethod + def process_long_text(text: str, min_num_sent: int) -> list[str]: + """ + This function applies a text summarization process on a given text string, extracting + the most important sentences based on the principle that 20% of the content is responsible + for 80% of the meaning (the Pareto Principle). + + Returns: + list: A list of the most important sentences + """ + + # Attempt to get the result from cache + cache_key = (text, min_num_sent) + cached_result = TextSummarizer._cache.get(cache_key, None) + if cached_result is not None: + return cached_result + + nlp_pipeline = TextSummarizer._load_nlp_pipeline() + doc = nlp_pipeline(text) + + num_sent = len(list(doc.sents)) + result = [] + + if num_sent >= min_num_sent: + + limit_phrases = math.ceil(len(doc._.phrases) * 0.20) # 20% of the phrases, rounded up + limit_sentences = math.ceil(num_sent * 0.20) # 20% of the sentences, rounded up + result = [str(sent) for sent in doc._.textrank.summary(limit_phrases=limit_phrases, limit_sentences=limit_sentences)] + + else: + result = [text] + + # Store the result in cache before returning it + TextSummarizer._cache[cache_key] = result + return result \ No newline at end of file diff --git a/extensions/superboogav2/data_processor.py b/extensions/superboogav2/data_processor.py new file mode 100644 index 0000000000000000000000000000000000000000..f019f427fe43ae6169be835679a6d07e938a2753 --- /dev/null +++ b/extensions/superboogav2/data_processor.py @@ -0,0 +1,209 @@ +""" +This module is responsible for processing the corpus and feeding it into chromaDB. It will receive a corpus of text. +It will then split it into chunks of specified length. For each of those chunks, it will append surrounding context. +It will only include full words. +""" + +import re +import bisect + +import extensions.superboogav2.parameters as parameters + +from .data_preprocessor import TextPreprocessorBuilder, TextSummarizer +from .chromadb import ChromaCollector + +def preprocess_text_no_summary(text) -> str: + builder = TextPreprocessorBuilder(text) + if parameters.should_to_lower(): + builder.to_lower() + + if parameters.should_remove_punctuation(): + builder.remove_punctuation() + + if parameters.should_remove_specific_pos(): + builder.remove_specific_pos() + + if parameters.should_remove_stopwords(): + builder.remove_stopwords + + if parameters.should_lemmatize(): + builder.lemmatize() + + if parameters.should_merge_spaces(): + builder.merge_spaces + + if parameters.should_strip(): + builder.strip() + + if parameters.get_num_conversion_strategy(): + if parameters.get_num_conversion_strategy() == parameters.NUM_TO_WORD_METHOD: + builder.num_to_word(parameters.get_min_num_length()) + elif parameters.get_num_conversion_strategy() == parameters.NUM_TO_CHAR_METHOD: + builder.num_to_char(parameters.get_min_num_length()) + elif parameters.get_num_conversion_strategy() == parameters.NUM_TO_CHAR_LONG_METHOD: + builder.num_to_char_long(parameters.get_min_num_length()) + + return builder.build() + + +def preprocess_text(text) -> list[str]: + important_sentences = TextSummarizer.process_long_text(text, parameters.get_min_num_sentences()) + return [preprocess_text_no_summary(sent) for sent in important_sentences] + + +def _create_chunks_with_context(corpus, chunk_len, context_left, context_right): + """ + This function takes a corpus of text and splits it into chunks of a specified length, + then adds a specified amount of context to each chunk. The context is added by first + going backwards from the start of the chunk and then going forwards from the end of the + chunk, ensuring that the context includes only whole words and that the total context length + does not exceed the specified limit. This function uses binary search for efficiency. + + Returns: + chunks (list of str): The chunks of text. + chunks_with_context (list of str): The chunks of text with added context. + chunk_with_context_start_indices (list of int): The starting indices of each chunk with context in the corpus. + """ + words = re.split('(\\s+)', corpus) + word_start_indices = [0] + current_index = 0 + + for word in words: + current_index += len(word) + word_start_indices.append(current_index) + + chunks, chunk_lengths, chunk_start_indices, chunk_with_context_start_indices = [], [], [], [] + current_length = 0 + current_index = 0 + chunk = [] + + for word in words: + if current_length + len(word) > chunk_len: + chunks.append(''.join(chunk)) + chunk_lengths.append(current_length) + chunk_start_indices.append(current_index - current_length) + chunk = [word] + current_length = len(word) + else: + chunk.append(word) + current_length += len(word) + current_index += len(word) + + if chunk: + chunks.append(''.join(chunk)) + chunk_lengths.append(current_length) + chunk_start_indices.append(current_index - current_length) + + chunks_with_context = [] + for start_index, chunk_length in zip(chunk_start_indices, chunk_lengths): + context_start_index = bisect.bisect_right(word_start_indices, start_index - context_left) + context_end_index = bisect.bisect_left(word_start_indices, start_index + chunk_length + context_right) + + # Combine all the words in the context range (before, chunk, and after) + chunk_with_context = ''.join(words[context_start_index:context_end_index]) + chunks_with_context.append(chunk_with_context) + + # Determine the start index of the chunk with context + chunk_with_context_start_index = word_start_indices[context_start_index] + chunk_with_context_start_indices.append(chunk_with_context_start_index) + + return chunks, chunks_with_context, chunk_with_context_start_indices + + +def _clear_chunks(data_chunks, data_chunks_with_context, data_chunk_starting_indices): + distinct_data_chunks = [] + distinct_data_chunks_with_context = [] + distinct_data_chunk_starting_indices = [] + + seen_chunks = dict() + + for chunk, context, index in zip(data_chunks, data_chunks_with_context, data_chunk_starting_indices): + # Skip the chunk if it does not contain any alphanumeric characters + if not any(char.isalnum() for char in chunk): + continue + + seen_chunk_start = seen_chunks.get(chunk) + if seen_chunk_start: + # If we've already seen this exact chunk, and the context around it it very close to the seen chunk, then skip it. + if abs(seen_chunk_start-index) < parameters.get_delta_start(): + continue + + distinct_data_chunks.append(chunk) + distinct_data_chunks_with_context.append(context) + distinct_data_chunk_starting_indices.append(index) + + seen_chunks[chunk] = index + + return distinct_data_chunks, distinct_data_chunks_with_context, distinct_data_chunk_starting_indices + + +def process_and_add_to_collector(corpus: str, collector: ChromaCollector, clear_collector_before_adding: bool, metadata: dict): + # Defining variables + chunk_lens = [int(len.strip()) for len in parameters.get_chunk_len().split(',')] + context_len = [int(len.strip()) for len in parameters.get_context_len().split(',')] + if len(context_len) >= 3: + raise f"Context len has too many values: {len(context_len)}" + if len(context_len) == 2: + context_left = context_len[0] + context_right = context_len[1] + else: + context_left = context_right = context_len[0] + + data_chunks = [] + data_chunks_with_context = [] + data_chunk_starting_indices = [] + + # Handling chunk_regex + if parameters.get_chunk_regex(): + if parameters.get_chunk_separator(): + cumulative_length = 0 # This variable will store the length of the processed corpus + sections = corpus.split(parameters.get_chunk_separator()) + for section in sections: + special_chunks = list(re.finditer(parameters.get_chunk_regex(), section)) + for match in special_chunks: + chunk = match.group(0) + start_index = match.start() + end_index = start_index + len(chunk) + context = section[max(0, start_index - context_left):min(len(section), end_index + context_right)] + data_chunks.append(chunk) + data_chunks_with_context.append(context) + data_chunk_starting_indices.append(cumulative_length + max(0, start_index - context_left)) + cumulative_length += len(section) + len(parameters.get_chunk_separator()) # Update the length of the processed corpus + else: + special_chunks = list(re.finditer(parameters.get_chunk_regex(), corpus)) + for match in special_chunks: + chunk = match.group(0) + start_index = match.start() + end_index = start_index + len(chunk) + context = corpus[max(0, start_index - context_left):min(len(corpus), end_index + context_right)] + data_chunks.append(chunk) + data_chunks_with_context.append(context) + data_chunk_starting_indices.append(max(0, start_index - context_left)) + + for chunk_len in chunk_lens: + # Breaking the data into chunks and adding those to the db + if parameters.get_chunk_separator(): + cumulative_length = 0 # This variable will store the length of the processed corpus + sections = corpus.split(parameters.get_chunk_separator()) + for section in sections: + chunks, chunks_with_context, context_start_indices = _create_chunks_with_context(section, chunk_len, context_left, context_right) + context_start_indices = [cumulative_length + i for i in context_start_indices] # Add the length of the processed corpus to each start index + data_chunks.extend(chunks) + data_chunks_with_context.extend(chunks_with_context) + data_chunk_starting_indices.extend(context_start_indices) + cumulative_length += len(section) + len(parameters.get_chunk_separator()) # Update the length of the processed corpus + else: + chunks, chunks_with_context, context_start_indices = _create_chunks_with_context(corpus, chunk_len, context_left, context_right) + data_chunks.extend(chunks) + data_chunks_with_context.extend(chunks_with_context) + data_chunk_starting_indices.extend(context_start_indices) + + data_chunks = [preprocess_text_no_summary(chunk) for chunk in data_chunks] + + data_chunks, data_chunks_with_context, data_chunk_starting_indices = _clear_chunks( + data_chunks, data_chunks_with_context, data_chunk_starting_indices + ) + + if clear_collector_before_adding: + collector.clear() + collector.add(data_chunks, data_chunks_with_context, data_chunk_starting_indices, [metadata]*len(data_chunks) if metadata is not None else None) \ No newline at end of file diff --git a/extensions/superboogav2/download_urls.py b/extensions/superboogav2/download_urls.py new file mode 100644 index 0000000000000000000000000000000000000000..ad2726b563b6df1134fa8396175f4e597a82d628 --- /dev/null +++ b/extensions/superboogav2/download_urls.py @@ -0,0 +1,65 @@ +import concurrent.futures +import requests +import re + +from bs4 import BeautifulSoup + +import extensions.superboogav2.parameters as parameters + +from .data_processor import process_and_add_to_collector +from .utils import create_metadata_source + +def _download_single(url): + response = requests.get(url, timeout=5) + if response.status_code == 200: + return response.content + else: + raise Exception("Failed to download URL") + + +def _download_urls(urls, threads=1): + with concurrent.futures.ThreadPoolExecutor(max_workers=threads) as executor: + futures = [] + for url in urls: + future = executor.submit(_download_single, url) + futures.append(future) + + results = [] + i = 0 + for future in concurrent.futures.as_completed(futures): + try: + result = future.result() + results.append(result) + i += 1 + yield f"{i}/{len(urls)}", results + except Exception: + pass + + yield "Done", results + + +def feed_url_into_collector(urls, collector): + all_text = '' + cumulative = '' + + urls = urls.strip().split('\n') + cumulative += f'Loading {len(urls)} URLs with {parameters.get_num_threads()} threads...\n\n' + yield cumulative + for update, contents in _download_urls(urls, threads=parameters.get_num_threads()): + yield cumulative + update + + cumulative += 'Processing the HTML sources...' + yield cumulative + for content in contents: + soup = BeautifulSoup(content, features="lxml") + for script in soup(["script", "style"]): + script.extract() + + strings = soup.stripped_strings + if parameters.get_is_strong_cleanup(): + strings = [s for s in strings if re.search("[A-Za-z] ", s)] + + text = '\n'.join([s.strip() for s in strings]) + all_text += text + + process_and_add_to_collector(all_text, collector, False, create_metadata_source('url-download')) \ No newline at end of file diff --git a/extensions/superboogav2/nltk_data/corpora/stopwords/english b/extensions/superboogav2/nltk_data/corpora/stopwords/english new file mode 100644 index 0000000000000000000000000000000000000000..1280aa3b08d64b846272b2d23314377200db36e9 --- /dev/null +++ b/extensions/superboogav2/nltk_data/corpora/stopwords/english @@ -0,0 +1,179 @@ +i +me +my +myself +we +our +ours +ourselves +you +you're +you've +you'll +you'd +your +yours +yourself +yourselves +he +him +his +himself +she +she's +her +hers +herself +it +it's +its +itself +they +them +their +theirs +themselves +what +which +who +whom +this +that +that'll +these +those +am +is +are +was +were +be +been +being +have +has +had +having +do +does +did +doing +a +an +the +and +but +if +or +because +as +until +while +of +at +by +for +with +about +against +between +into +through +during +before +after +above +below +to +from +up +down +in +out +on +off +over +under +again +further +then +once +here +there +when +where +why +how +all +any +both +each +few +more +most +other +some +such +no +nor +not +only +own +same +so +than +too +very +s +t +can +will +just +don +don't +should +should've +now +d +ll +m +o +re +ve +y +ain +aren +aren't +couldn +couldn't +didn +didn't +doesn +doesn't +hadn +hadn't +hasn +hasn't +haven +haven't +isn +isn't +ma +mightn +mightn't +mustn +mustn't +needn +needn't +shan +shan't +shouldn +shouldn't +wasn +wasn't +weren +weren't +won +won't +wouldn +wouldn't diff --git a/extensions/superboogav2/nltk_data/corpora/wordnet.zip b/extensions/superboogav2/nltk_data/corpora/wordnet.zip new file mode 100644 index 0000000000000000000000000000000000000000..777df8872a4b420dc0324d7656f5b04270c54110 --- /dev/null +++ b/extensions/superboogav2/nltk_data/corpora/wordnet.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbda5ea6eef7f36a97a43d4a75f85e07fccbb4f23657d27b4ccbc93e2646ab59 +size 10775600 diff --git a/extensions/superboogav2/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle b/extensions/superboogav2/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle new file mode 100644 index 0000000000000000000000000000000000000000..b8661868cc08eb0655fc01dccd8136cceeeeb02a --- /dev/null +++ b/extensions/superboogav2/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25a5a19c7ced7b2bac3831da5bc0afcc2c34e5dd01cd4f361bb799949a696238 +size 6138625 diff --git a/extensions/superboogav2/notebook_handler.py b/extensions/superboogav2/notebook_handler.py new file mode 100644 index 0000000000000000000000000000000000000000..9faadfed12b3afcf70d3b7611821352c1847712a --- /dev/null +++ b/extensions/superboogav2/notebook_handler.py @@ -0,0 +1,40 @@ +""" +This module is responsible for handling and modifying the notebook text. +""" +import re + +import extensions.superboogav2.parameters as parameters + +from modules import shared +from modules.logging_colors import logger +from extensions.superboogav2.utils import create_context_text + +from .data_processor import preprocess_text + +def _remove_special_tokens(string): + pattern = r'(<\|begin-user-input\|>|<\|end-user-input\|>|<\|injection-point\|>)' + return re.sub(pattern, '', string) + + +def input_modifier_internal(string, collector): + # Sanity check. + if shared.is_chat(): + return string + + # Find the user input + pattern = re.compile(r"<\|begin-user-input\|>(.*?)<\|end-user-input\|>", re.DOTALL) + match = re.search(pattern, string) + if match: + # Preprocess the user prompt. + user_input = match.group(1).strip() + user_input = preprocess_text(user_input) + + logger.debug(f"Preprocessed User Input: {user_input}") + + # Get the most similar chunks + results = collector.get_sorted_by_dist(user_input, n_results=parameters.get_chunk_count(), max_token_count=int(parameters.get_max_token_count())) + + # Make the injection + string = string.replace('<|injection-point|>', create_context_text(results)) + + return _remove_special_tokens(string) \ No newline at end of file diff --git a/extensions/superboogav2/optimize.py b/extensions/superboogav2/optimize.py new file mode 100644 index 0000000000000000000000000000000000000000..acebf21248cd1bf2a769296e4cbe4c6645d46ef8 --- /dev/null +++ b/extensions/superboogav2/optimize.py @@ -0,0 +1,135 @@ +""" +This module implements a hyperparameter optimization routine for the embedding application. It utilizes TPE optimization from Optuna. + +Each run, the optimizer will set the default values inside the hyperparameters. At the end, it will output the best ones it has found. +""" +import re +import json +import optuna +import gradio as gr +import numpy as np +import logging +import hashlib +logging.getLogger('optuna').setLevel(logging.WARNING) + +import extensions.superboogav2.parameters as parameters + +from pathlib import Path + +from .benchmark import benchmark +from .parameters import Parameters +from modules.logging_colors import logger + + +# Format the parameters into markdown format. +def _markdown_hyperparams(): + res = [] + for param_name, param_value in Parameters.getInstance().hyperparameters.items(): + # Escape any markdown syntax + param_name = re.sub(r"([_*\[\]()~`>#+-.!])", r"\\\1", param_name) + param_value_default = re.sub(r"([_*\[\]()~`>#+-.!])", r"\\\1", str(param_value['default'])) if param_value['default'] else ' ' + + res.append('* {}: **{}**'.format(param_name, param_value_default)) + + return '\n'.join(res) + + +# Convert numpy types to python types. +def _convert_np_types(params): + for key in params: + if type(params[key]) == np.bool_: + params[key] = bool(params[key]) + elif type(params[key]) == np.int64: + params[key] = int(params[key]) + elif type(params[key]) == np.float64: + params[key] = float(params[key]) + return params + + +# Set the default values for the hyperparameters. +def _set_hyperparameters(params): + for param_name, param_value in params.items(): + if param_name in Parameters.getInstance().hyperparameters: + Parameters.getInstance().hyperparameters[param_name]['default'] = param_value + + +# Check if the parameter is for optimization. +def _is_optimization_param(val): + is_opt = val.get('should_optimize', False) # Either does not exist or is false + return is_opt + + +# Create a hashable representation of the parameters +def _get_params_hash(params): + params_str = json.dumps(params, sort_keys=True) + return hashlib.sha256(params_str.encode()).hexdigest() + + +def optimize(collector, progress=gr.Progress()): + # Inform the user that something is happening. + progress(0, desc=f'Setting Up...') + + # Track the current step + current_step = 0 + + # Track the best score + best_score = 0 + + # Dictionary for caching scores + scores_cache = {} + + def objective_function(trial): + nonlocal current_step + nonlocal best_score + nonlocal scores_cache + + params = {} + for key, val in Parameters.getInstance().hyperparameters.items(): + if _is_optimization_param(val): + params[key] = trial.suggest_categorical(key, val['categories']) + + _set_hyperparameters(params) + + params_hash = _get_params_hash(params) + + # If the score for these parameters is in the cache, return it + if params_hash in scores_cache: + return scores_cache[params_hash] + + # Benchmark the current set of parameters. + score, max_score = benchmark(Path("extensions/superboogav2/benchmark_texts/questions.json"), collector) + + # Cache the score + scores_cache[params_hash] = score + + result = json.dumps(_convert_np_types(params), indent=4) + result += f'\nScore: {score}/{max_score}' + + logger.debug(result) + + # Increment the current step + current_step += 1 + + # Update the best score + best_score = max(best_score, score) + + # Update the progress + progress(current_step / parameters.get_optimization_steps(), desc=f'Optimizing... {current_step}/{parameters.get_optimization_steps()}') + + return -score + + # Run the optimization. + study = optuna.create_study() + study.optimize(objective_function, n_trials=int(parameters.get_optimization_steps())) + + best_params = study.best_params + _set_hyperparameters(best_params) + + # Convert results to a markdown string. + str_result = f"## Best parameters:\n\n{_markdown_hyperparams()}\n\n## Score:\n\n{best_score}" + + # Save to JSON file + with open('best_params.json', 'w') as fp: + json.dump(_convert_np_types(best_params), fp, indent=4) + + return str_result \ No newline at end of file diff --git a/extensions/superboogav2/parameters.py b/extensions/superboogav2/parameters.py new file mode 100644 index 0000000000000000000000000000000000000000..1cada46a2399e6a71ca289bb7128f141e1a7e79e --- /dev/null +++ b/extensions/superboogav2/parameters.py @@ -0,0 +1,369 @@ +""" +This module provides a singleton class `Parameters` that is used to manage all hyperparameters for the embedding application. +It expects a JSON file in `extensions/superboogav2/config.json`. + +Each element in the JSON must have a `default` value which will be used for the current run. Elements can have `categories`. +These categories define the range in which the optimizer will search. If the element is tagged with `"should_optimize": false`, +then the optimizer will only ever use the default value. +""" +from pathlib import Path + +import json + +from modules.logging_colors import logger + + +NUM_TO_WORD_METHOD = 'Number to Word' +NUM_TO_CHAR_METHOD = 'Number to Char' +NUM_TO_CHAR_LONG_METHOD = 'Number to Multi-Char' + + +DIST_MIN_STRATEGY = 'Min of Two' +DIST_HARMONIC_STRATEGY = 'Harmonic Mean' +DIST_GEOMETRIC_STRATEGY = 'Geometric Mean' +DIST_ARITHMETIC_STRATEGY = 'Arithmetic Mean' + + +PREPEND_TO_LAST = 'Prepend to Last Message' +APPEND_TO_LAST = 'Append to Last Message' +HIJACK_LAST_IN_CONTEXT = 'Hijack Last Message in Context ⚠️ WIP ⚠️ (Works Partially)' + + +SORT_DISTANCE = 'distance' +SORT_ID = 'id' + + +class Parameters: + _instance = None + + variable_mapping = { + 'NUM_TO_WORD_METHOD': NUM_TO_WORD_METHOD, + 'NUM_TO_CHAR_METHOD': NUM_TO_CHAR_METHOD, + 'NUM_TO_CHAR_LONG_METHOD': NUM_TO_CHAR_LONG_METHOD, + 'DIST_MIN_STRATEGY': DIST_MIN_STRATEGY, + 'DIST_HARMONIC_STRATEGY': DIST_HARMONIC_STRATEGY, + 'DIST_GEOMETRIC_STRATEGY': DIST_GEOMETRIC_STRATEGY, + 'DIST_ARITHMETIC_STRATEGY': DIST_ARITHMETIC_STRATEGY, + 'PREPEND_TO_LAST': PREPEND_TO_LAST, + 'APPEND_TO_LAST': APPEND_TO_LAST, + 'HIJACK_LAST_IN_CONTEXT': HIJACK_LAST_IN_CONTEXT, + } + + @staticmethod + def getInstance(): + if Parameters._instance is None: + Parameters() + return Parameters._instance + + def __init__(self): + if Parameters._instance is not None: + raise Exception("This class is a singleton!") + else: + Parameters._instance = self + self.hyperparameters = self._load_from_json(Path("extensions/superboogav2/config.json")) + + def _load_from_json(self, file_path): + logger.debug('Loading hyperparameters...') + + with open(file_path, 'r') as file: + data = json.load(file) + + # Replace variable names in the dict and create Categorical objects + for key in data: + if "default" in data[key] and data[key]["default"] in self.variable_mapping: + data[key]["default"] = self.variable_mapping[data[key]["default"]] + if "categories" in data[key]: + data[key]["categories"] = [self.variable_mapping.get(cat, cat) for cat in data[key]["categories"]] + + return data + + +def should_to_lower() -> bool: + return bool(Parameters.getInstance().hyperparameters['to_lower']['default']) + + +def get_num_conversion_strategy() -> str: + return Parameters.getInstance().hyperparameters['num_conversion']['default'] + + +def should_merge_spaces() -> bool: + return bool(Parameters.getInstance().hyperparameters['merge_spaces']['default']) + + +def should_strip() -> bool: + return bool(Parameters.getInstance().hyperparameters['strip']['default']) + + +def should_remove_punctuation() -> bool: + return bool(Parameters.getInstance().hyperparameters['remove_punctuation']['default']) + + +def should_remove_stopwords() -> bool: + return bool(Parameters.getInstance().hyperparameters['remove_stopwords']['default']) + + +def should_remove_specific_pos() -> bool: + return bool(Parameters.getInstance().hyperparameters['remove_specific_pos']['default']) + + +def should_lemmatize() -> bool: + return bool(Parameters.getInstance().hyperparameters['lemmatize']['default']) + + +def get_min_num_sentences() -> int: + return int(Parameters.getInstance().hyperparameters['min_num_sent']['default']) + + +def get_delta_start() -> int: + return int(Parameters.getInstance().hyperparameters['delta_start']['default']) + + +def set_to_lower(value: bool): + Parameters.getInstance().hyperparameters['to_lower']['default'] = value + + +def set_num_conversion_strategy(value: str): + Parameters.getInstance().hyperparameters['num_conversion']['default'] = value + + +def set_merge_spaces(value: bool): + Parameters.getInstance().hyperparameters['merge_spaces']['default'] = value + + +def set_strip(value: bool): + Parameters.getInstance().hyperparameters['strip']['default'] = value + + +def set_remove_punctuation(value: bool): + Parameters.getInstance().hyperparameters['remove_punctuation']['default'] = value + + +def set_remove_stopwords(value: bool): + Parameters.getInstance().hyperparameters['remove_stopwords']['default'] = value + + +def set_remove_specific_pos(value: bool): + Parameters.getInstance().hyperparameters['remove_specific_pos']['default'] = value + + +def set_lemmatize(value: bool): + Parameters.getInstance().hyperparameters['lemmatize']['default'] = value + + +def set_min_num_sentences(value: int): + Parameters.getInstance().hyperparameters['min_num_sent']['default'] = value + + +def set_delta_start(value: int): + Parameters.getInstance().hyperparameters['delta_start']['default'] = value + + +def get_chunk_len() -> str: + lens = [] + mask = Parameters.getInstance().hyperparameters['chunk_len_mask']['default'] + + lens.append(Parameters.getInstance().hyperparameters['chunk_len1']['default'] if mask & (1 << 0) else None) + lens.append(Parameters.getInstance().hyperparameters['chunk_len2']['default'] if mask & (1 << 1) else None) + lens.append(Parameters.getInstance().hyperparameters['chunk_len3']['default'] if mask & (1 << 2) else None) + lens.append(Parameters.getInstance().hyperparameters['chunk_len4']['default'] if mask & (1 << 3) else None) + + return ','.join([str(len) for len in lens if len]) + + +def set_chunk_len(val: str): + chunk_lens = sorted([int(len.strip()) for len in val.split(',')]) + + # Reset the mask to zero + Parameters.getInstance().hyperparameters['chunk_len_mask']['default'] = 0 + + if len(chunk_lens) > 0: + Parameters.getInstance().hyperparameters['chunk_len1']['default'] = chunk_lens[0] + Parameters.getInstance().hyperparameters['chunk_len_mask']['default'] |= (1 << 0) + if len(chunk_lens) > 1: + Parameters.getInstance().hyperparameters['chunk_len2']['default'] = chunk_lens[1] + Parameters.getInstance().hyperparameters['chunk_len_mask']['default'] |= (1 << 1) + if len(chunk_lens) > 2: + Parameters.getInstance().hyperparameters['chunk_len3']['default'] = chunk_lens[2] + Parameters.getInstance().hyperparameters['chunk_len_mask']['default'] |= (1 << 2) + if len(chunk_lens) > 3: + Parameters.getInstance().hyperparameters['chunk_len4']['default'] = chunk_lens[3] + Parameters.getInstance().hyperparameters['chunk_len_mask']['default'] |= (1 << 3) + + if len(chunk_lens) > 4: + logger.warning(f'Only up to four chunk lengths are supported. Skipping {chunk_lens[4:]}') + + +def get_context_len() -> str: + context_len = str(Parameters.getInstance().hyperparameters['context_len_left']['default']) + ',' + str(Parameters.getInstance().hyperparameters['context_len_right']['default']) + return context_len + + +def set_context_len(val: str): + context_lens = [int(len.strip()) for len in val.split(',') if len.isdigit()] + if len(context_lens) == 1: + Parameters.getInstance().hyperparameters['context_len_left']['default'] = Parameters.getInstance().hyperparameters['context_len_right']['default'] = context_lens[0] + elif len(context_lens) == 2: + Parameters.getInstance().hyperparameters['context_len_left']['default'] = context_lens[0] + Parameters.getInstance().hyperparameters['context_len_right']['default'] = context_lens[1] + else: + logger.warning(f'Incorrect context length received {val}. Skipping.') + + +def get_new_dist_strategy() -> str: + return Parameters.getInstance().hyperparameters['new_dist_strategy']['default'] + + +def get_chunk_count() -> int: + return int(Parameters.getInstance().hyperparameters['chunk_count']['default']) + + +def get_min_num_length() -> int: + return int(Parameters.getInstance().hyperparameters['min_num_length']['default']) + + +def get_significant_level() -> float: + return float(Parameters.getInstance().hyperparameters['significant_level']['default']) + + +def get_time_steepness() -> float: + return float(Parameters.getInstance().hyperparameters['time_steepness']['default']) + + +def get_time_power() -> float: + return float(Parameters.getInstance().hyperparameters['time_power']['default']) + + +def get_chunk_separator() -> str: + return Parameters.getInstance().hyperparameters['chunk_separator']['default'] + + +def get_prefix() -> str: + return Parameters.getInstance().hyperparameters['prefix']['default'] + + +def get_data_separator() -> str: + return Parameters.getInstance().hyperparameters['data_separator']['default'] + + +def get_postfix() -> str: + return Parameters.getInstance().hyperparameters['postfix']['default'] + + +def get_is_manual() -> bool: + return bool(Parameters.getInstance().hyperparameters['manual']['default']) + + +def get_add_chat_to_data() -> bool: + return bool(Parameters.getInstance().hyperparameters['add_chat_to_data']['default']) + + +def get_injection_strategy() -> str: + return Parameters.getInstance().hyperparameters['injection_strategy']['default'] + + +def get_chunk_regex() -> str: + return Parameters.getInstance().hyperparameters['chunk_regex']['default'] + + +def get_is_strong_cleanup() -> bool: + return bool(Parameters.getInstance().hyperparameters['strong_cleanup']['default']) + + +def get_max_token_count() -> int: + return int(Parameters.getInstance().hyperparameters['max_token_count']['default']) + + +def get_num_threads() -> int: + return int(Parameters.getInstance().hyperparameters['threads']['default']) + + +def get_optimization_steps() -> int: + return int(Parameters.getInstance().hyperparameters['optimization_steps']['default']) + + +def get_api_port() -> int: + return int(Parameters.getInstance().hyperparameters['api_port']['default']) + + +def get_api_on() -> bool: + return bool(Parameters.getInstance().hyperparameters['api_on']['default']) + + +def set_new_dist_strategy(value: str): + Parameters.getInstance().hyperparameters['new_dist_strategy']['default'] = value + + +def set_chunk_count(value: int): + Parameters.getInstance().hyperparameters['chunk_count']['default'] = value + + +def set_min_num_length(value: int): + Parameters.getInstance().hyperparameters['min_num_length']['default'] = value + + +def set_significant_level(value: float): + Parameters.getInstance().hyperparameters['significant_level']['default'] = value + + +def set_time_steepness(value: float): + Parameters.getInstance().hyperparameters['time_steepness']['default'] = value + + +def set_time_power(value: float): + Parameters.getInstance().hyperparameters['time_power']['default'] = value + + +def set_chunk_separator(value: str): + Parameters.getInstance().hyperparameters['chunk_separator']['default'] = value + + +def set_prefix(value: str): + Parameters.getInstance().hyperparameters['prefix']['default'] = value + + +def set_data_separator(value: str): + Parameters.getInstance().hyperparameters['data_separator']['default'] = value + + +def set_postfix(value: str): + Parameters.getInstance().hyperparameters['postfix']['default'] = value + + +def set_manual(value: bool): + Parameters.getInstance().hyperparameters['manual']['default'] = value + + +def set_add_chat_to_data(value: bool): + Parameters.getInstance().hyperparameters['add_chat_to_data']['default'] = value + + +def set_injection_strategy(value: str): + Parameters.getInstance().hyperparameters['injection_strategy']['default'] = value + + +def set_chunk_regex(value: str): + Parameters.getInstance().hyperparameters['chunk_regex']['default'] = value + + +def set_strong_cleanup(value: bool): + Parameters.getInstance().hyperparameters['strong_cleanup']['default'] = value + + +def set_max_token_count(value: int): + Parameters.getInstance().hyperparameters['max_token_count']['default'] = value + + +def set_num_threads(value: int): + Parameters.getInstance().hyperparameters['threads']['default'] = value + + +def set_optimization_steps(value: int): + Parameters.getInstance().hyperparameters['optimization_steps']['default'] = value + + +def set_api_port(value: int): + Parameters.getInstance().hyperparameters['api_port']['default'] = value + + +def set_api_on(value: bool): + Parameters.getInstance().hyperparameters['api_on']['default'] = value \ No newline at end of file diff --git a/extensions/superboogav2/requirements.txt b/extensions/superboogav2/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..748bacf1ab8893b430ef7db9b5bef70dc4c0b94b --- /dev/null +++ b/extensions/superboogav2/requirements.txt @@ -0,0 +1,10 @@ +beautifulsoup4==4.12.2 +chromadb==0.3.18 +lxml +optuna +pandas==2.0.3 +posthog==2.4.2 +sentence_transformers==2.2.2 +spacy +pytextrank +num2words \ No newline at end of file diff --git a/extensions/superboogav2/script.py b/extensions/superboogav2/script.py new file mode 100644 index 0000000000000000000000000000000000000000..0870ab4c3b6fd1e5abc274d799289a663eebcd54 --- /dev/null +++ b/extensions/superboogav2/script.py @@ -0,0 +1,355 @@ +""" +This file is responsible for the UI and how the application interracts with the rest of the system. +""" +import os +from pathlib import Path + +# Point to where nltk will find the required data. +os.environ['NLTK_DATA'] = str(Path("extensions/superboogav2/nltk_data").resolve()) + +import textwrap +import codecs +import gradio as gr + +import extensions.superboogav2.parameters as parameters + +from modules.logging_colors import logger +from modules import shared + +from .utils import create_metadata_source +from .chromadb import make_collector +from .download_urls import feed_url_into_collector +from .data_processor import process_and_add_to_collector +from .benchmark import benchmark +from .optimize import optimize +from .notebook_handler import input_modifier_internal +from .chat_handler import custom_generate_chat_prompt_internal +from .api import APIManager + +collector = None +api_manager = None + +def setup(): + global collector + global api_manager + collector = make_collector() + api_manager = APIManager(collector) + + if parameters.get_api_on(): + api_manager.start_server(parameters.get_api_port()) + +def _feed_data_into_collector(corpus): + yield '### Processing data...' + process_and_add_to_collector(corpus, collector, False, create_metadata_source('direct-text')) + yield '### Done.' + + +def _feed_file_into_collector(file): + yield '### Reading and processing the input dataset...' + text = file.decode('utf-8') + process_and_add_to_collector(text, collector, False, create_metadata_source('file')) + yield '### Done.' + + +def _feed_url_into_collector(urls): + for i in feed_url_into_collector(urls, collector): + yield i + yield '### Done.' + + +def _begin_benchmark(): + score, max_score = benchmark(Path("extensions/superboogav2/benchmark_texts/questions.json"), collector) + return f'**Score**: {score}/{max_score}' + + +def _begin_optimization(progress=gr.Progress()): + return optimize(collector, progress), *_get_optimizable_settings() + + +def _clear_data(): + collector.clear() + return "### Data Cleared!" + + +def _get_optimizable_settings() -> list: + preprocess_pipeline = [] + if parameters.should_to_lower(): + preprocess_pipeline.append('Lower Cases') + if parameters.should_remove_punctuation(): + preprocess_pipeline.append('Remove Punctuation') + if parameters.should_remove_specific_pos(): + preprocess_pipeline.append('Remove Adverbs') + if parameters.should_remove_stopwords(): + preprocess_pipeline.append('Remove Stop Words') + if parameters.should_lemmatize(): + preprocess_pipeline.append('Lemmatize') + if parameters.should_merge_spaces(): + preprocess_pipeline.append('Merge Spaces') + if parameters.should_strip(): + preprocess_pipeline.append('Strip Edges') + + return [ + parameters.get_time_power(), + parameters.get_time_steepness(), + parameters.get_significant_level(), + parameters.get_min_num_sentences(), + parameters.get_new_dist_strategy(), + parameters.get_delta_start(), + parameters.get_min_num_length(), + parameters.get_num_conversion_strategy(), + preprocess_pipeline, + parameters.get_chunk_count(), + parameters.get_context_len(), + parameters.get_chunk_len() + ] + + +def _apply_settings(optimization_steps, time_power, time_steepness, significant_level, min_sentences, new_dist_strat, delta_start, min_number_length, num_conversion, + preprocess_pipeline, api_port, api_on, injection_strategy, add_chat_to_data, manual, postfix, data_separator, prefix, max_token_count, + chunk_count, chunk_sep, context_len, chunk_regex, chunk_len, threads, strong_cleanup): + logger.debug('Applying settings.') + + try: + parameters.set_optimization_steps(optimization_steps) + parameters.set_significant_level(significant_level) + parameters.set_min_num_sentences(min_sentences) + parameters.set_new_dist_strategy(new_dist_strat) + parameters.set_delta_start(delta_start) + parameters.set_min_num_length(min_number_length) + parameters.set_num_conversion_strategy(num_conversion) + parameters.set_api_port(api_port) + parameters.set_api_on(api_on) + parameters.set_injection_strategy(injection_strategy) + parameters.set_add_chat_to_data(add_chat_to_data) + parameters.set_manual(manual) + parameters.set_postfix(codecs.decode(postfix, 'unicode_escape')) + parameters.set_data_separator(codecs.decode(data_separator, 'unicode_escape')) + parameters.set_prefix(codecs.decode(prefix, 'unicode_escape')) + parameters.set_max_token_count(max_token_count) + parameters.set_time_power(time_power) + parameters.set_time_steepness(time_steepness) + parameters.set_chunk_count(chunk_count) + parameters.set_chunk_separator(codecs.decode(chunk_sep, 'unicode_escape')) + parameters.set_context_len(context_len) + parameters.set_chunk_regex(chunk_regex) + parameters.set_chunk_len(chunk_len) + parameters.set_num_threads(threads) + parameters.set_strong_cleanup(strong_cleanup) + + preprocess_choices = ['Lower Cases', 'Remove Punctuation', 'Remove Adverbs', 'Remove Stop Words', 'Lemmatize', 'Merge Spaces', 'Strip Edges'] + for preprocess_method in preprocess_choices: + if preprocess_method == 'Lower Cases': + parameters.set_to_lower(preprocess_method in preprocess_pipeline) + elif preprocess_method == 'Remove Punctuation': + parameters.set_remove_punctuation(preprocess_method in preprocess_pipeline) + elif preprocess_method == 'Remove Adverbs': + parameters.set_remove_specific_pos(preprocess_method in preprocess_pipeline) + elif preprocess_method == 'Remove Stop Words': + parameters.set_remove_stopwords(preprocess_method in preprocess_pipeline) + elif preprocess_method == 'Lemmatize': + parameters.set_lemmatize(preprocess_method in preprocess_pipeline) + elif preprocess_method == 'Merge Spaces': + parameters.set_merge_spaces(preprocess_method in preprocess_pipeline) + elif preprocess_method == 'Strip Edges': + parameters.set_strip(preprocess_method in preprocess_pipeline) + + # Based on API on/off, start or stop the server + if api_manager is not None: + if parameters.get_api_on() and (not api_manager.is_server_running()): + api_manager.start_server(parameters.get_api_port()) + elif (not parameters.get_api_on()) and api_manager.is_server_running(): + api_manager.stop_server() + except Exception as e: + logger.warn(f'Could not properly apply settings: {str(e)}') + + +def custom_generate_chat_prompt(user_input, state, **kwargs): + return custom_generate_chat_prompt_internal(user_input, state, collector, **kwargs) + + +def input_modifier(string): + return input_modifier_internal(string, collector) + + +def ui(): + with gr.Accordion("Click for more information...", open=False): + gr.Markdown(textwrap.dedent(""" + + ## About + + This extension takes a dataset as input, breaks it into chunks, and adds the result to a local/offline Chroma database. + + The database is then queried during inference time to get the excerpts that are closest to your input. The idea is to create an arbitrarily large pseudo context. + + The core methodology was developed and contributed by kaiokendev, who is working on improvements to the method in this repository: https://github.com/kaiokendev/superbig + + ## Data input + + Start by entering some data in the interface below and then clicking on "Load data". + + Each time you load some new data, the old chunks are discarded. + + ## Chat mode + + #### Instruct + + On each turn, the chunks will be compared to your current input and the most relevant matches will be appended to the input in the following format: + + ``` + Consider the excerpts below as additional context: + ... + ``` + + The injection doesn't make it into the chat history. It is only used in the current generation. + + #### Regular chat + + The chunks from the external data sources are ignored, and the chroma database is built based on the chat history instead. The most relevant past exchanges relative to the present input are added to the context string. This way, the extension acts as a long term memory. + + ## Notebook/default modes + + Your question must be manually specified between `<|begin-user-input|>` and `<|end-user-input|>` tags, and the injection point must be specified with `<|injection-point|>`. + + The special tokens mentioned above (`<|begin-user-input|>`, `<|end-user-input|>`, and `<|injection-point|>`) are removed in the background before the text generation begins. + + Here is an example in Vicuna 1.1 format: + + ``` + A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions. + + USER: + <|injection-point|> + + <|begin-user-input|>What datasets are mentioned in the text above?<|end-user-input|> + ASSISTANT: + ``` + """)) + + with gr.Row(): + with gr.Column(min_width=600): + with gr.Tab("Text input"): + data_input = gr.Textbox(lines=20, label='Input data') + update_data = gr.Button('Load data') + + with gr.Tab("URL input"): + url_input = gr.Textbox(lines=10, label='Input URLs', info='Enter one or more URLs separated by newline characters.') + strong_cleanup = gr.Checkbox(value=parameters.get_is_strong_cleanup(), label='Strong cleanup', info='Only keeps html elements that look like long-form text.') + threads = gr.Number(value=parameters.get_num_threads(), label='Threads', info='The number of threads to use while downloading the URLs.', precision=0) + update_url = gr.Button('Load data') + + with gr.Tab("File input"): + file_input = gr.File(label='Input file', type='binary') + update_file = gr.Button('Load data') + + with gr.Tab("Settings"): + with gr.Accordion("Processing settings", open=True): + chunk_len = gr.Textbox(value=parameters.get_chunk_len(), label='Chunk length', info='In characters, not tokens. This value is used when you click on "Load data".') + chunk_regex = gr.Textbox(value=parameters.get_chunk_regex(), label='Chunk regex', info='Will specifically add the captured text to the embeddings.') + context_len = gr.Textbox(value=parameters.get_context_len(), label='Context length', info='In characters, not tokens. How much context to load around each chunk.') + chunk_sep = gr.Textbox(value=codecs.encode(parameters.get_chunk_separator(), 'unicode_escape').decode(), label='Chunk separator', info='Used to manually split chunks. Manually split chunks longer than chunk length are split again. This value is used when you click on "Load data".') + + with gr.Accordion("Generation settings", open=False): + chunk_count = gr.Number(value=parameters.get_chunk_count(), label='Chunk count', info='The number of closest-matching chunks to include in the prompt.') + max_token_count = gr.Number(value=parameters.get_max_token_count(), label='Max Context Tokens', info='The context length in tokens will not exceed this value.') + prefix = gr.Textbox(value=codecs.encode(parameters.get_prefix(), 'unicode_escape').decode(), label='Prefix', info='What to put before the injection point.') + data_separator = gr.Textbox(value=codecs.encode(parameters.get_data_separator(), 'unicode_escape').decode(), label='Data separator', info='When multiple pieces of distant data are added, they might be unrelated. It\'s important to separate them.') + postfix = gr.Textbox(value=codecs.encode(parameters.get_postfix(), 'unicode_escape').decode(), label='Postfix', info='What to put after the injection point.') + with gr.Row(): + manual = gr.Checkbox(value=parameters.get_is_manual(), label="Is Manual", info="Manually specify when to use ChromaDB. Insert `!c` at the start or end of the message to trigger a query.", visible=shared.is_chat()) + add_chat_to_data = gr.Checkbox(value=parameters.get_add_chat_to_data(), label="Add Chat to Data", info="Automatically feed the chat history as you chat.", visible=shared.is_chat()) + injection_strategy = gr.Radio(choices=[parameters.PREPEND_TO_LAST, parameters.APPEND_TO_LAST, parameters.HIJACK_LAST_IN_CONTEXT], value=parameters.get_injection_strategy(), label='Injection Strategy', info='Where to inject the messages in chat or instruct mode.', visible=shared.is_chat()) + with gr.Row(): + api_on = gr.Checkbox(value=parameters.get_api_on(), label="Turn on API", info="Check this to turn on the API service.") + api_port = gr.Number(value=parameters.get_api_port(), label="API Port", info="The port on which the API service will run.") + + with gr.Accordion("Advanced settings", open=False): + preprocess_set_choices = [] + if parameters.should_to_lower(): + preprocess_set_choices.append('Lower Cases') + if parameters.should_remove_punctuation(): + preprocess_set_choices.append('Remove Punctuation') + if parameters.should_remove_specific_pos(): + preprocess_set_choices.append('Remove Adverbs') + if parameters.should_remove_stopwords(): + preprocess_set_choices.append('Remove Stop Words') + if parameters.should_lemmatize(): + preprocess_set_choices.append('Lemmatize') + if parameters.should_merge_spaces(): + preprocess_set_choices.append('Merge Spaces') + if parameters.should_strip(): + preprocess_set_choices.append('Strip Edges') + + preprocess_pipeline = gr.CheckboxGroup(label='Preprocessing pipeline', choices=[ + 'Lower Cases', + 'Remove Punctuation', + 'Remove Adverbs', + 'Remove Stop Words', + 'Lemmatize', + 'Merge Spaces', + 'Strip Edges', + ], value=preprocess_set_choices, interactive=True, info='How to preprocess the text before it is turned into an embedding.') + + with gr.Row(): + num_conversion = gr.Dropdown(choices=[parameters.NUM_TO_WORD_METHOD, parameters.NUM_TO_CHAR_METHOD, parameters.NUM_TO_CHAR_LONG_METHOD, 'None'], value=parameters.get_num_conversion_strategy(), label="Number Conversion Method", info='How to preprocess numbers before creating the embeddings.', interactive=True) + min_number_length = gr.Number(value=parameters.get_min_num_length(), label='Number Length Threshold', info='In digits. Only numbers that have at least that many digits will be converted.', interactive=True) + + delta_start = gr.Number(value=parameters.get_delta_start(), label='Delta Start Index', info='If the system encounters two identical embeddings, and they both start within the same delta, then only the first will be considered.', interactive=True) + new_dist_strat = gr.Dropdown(choices=[parameters.DIST_MIN_STRATEGY, parameters.DIST_HARMONIC_STRATEGY, parameters.DIST_GEOMETRIC_STRATEGY, parameters.DIST_ARITHMETIC_STRATEGY], value=parameters.get_new_dist_strategy(), label="Distance Strategy", info='When two embedding texts are merged, the distance of the new piece will be decided using one of these strategies.', interactive=True) + min_sentences = gr.Number(value=parameters.get_min_num_sentences(), label='Summary Threshold', info='In sentences. The minumum number of sentences to trigger text-rank summarization.', interactive=True) + significant_level = gr.Slider(0.8, 2, value=parameters.get_significant_level(), label='Significant Level', info='Defines the cut-off for what is considered a "significant" distance relative to the median distance among the returned samples.', interactive=True) + time_steepness = gr.Slider(0.01, 1.0, value=parameters.get_time_steepness(), label='Time Weighing Steepness', info='How differently two close excerpts are going to be weighed.') + time_power = gr.Slider(0.0, 1.0, value=parameters.get_time_power(), label='Time Weighing Power', info='How influencial is the weighing. At 1.0, old entries won\'t be considered') + + with gr.Tab("Benchmark"): + benchmark_button = gr.Button('Benchmark') + optimize_button = gr.Button('Optimize') + optimization_steps = gr.Number(value=parameters.get_optimization_steps(), label='Optimization Steps', info='For how many steps to optimize.', interactive=True) + + + clear_button = gr.Button('❌ Clear Data') + + + with gr.Column(): + last_updated = gr.Markdown() + + all_params = [optimization_steps, time_power, time_steepness, significant_level, min_sentences, new_dist_strat, delta_start, min_number_length, num_conversion, + preprocess_pipeline, api_port, api_on, injection_strategy, add_chat_to_data, manual, postfix, data_separator, prefix, max_token_count, + chunk_count, chunk_sep, context_len, chunk_regex, chunk_len, threads, strong_cleanup] + optimizable_params = [time_power, time_steepness, significant_level, min_sentences, new_dist_strat, delta_start, min_number_length, num_conversion, + preprocess_pipeline, chunk_count, context_len, chunk_len] + + + update_data.click(_feed_data_into_collector, [data_input], last_updated, show_progress=False) + update_url.click(_feed_url_into_collector, [url_input], last_updated, show_progress=False) + update_file.click(_feed_file_into_collector, [file_input], last_updated, show_progress=False) + benchmark_button.click(_begin_benchmark, [], last_updated, show_progress=True) + optimize_button.click(_begin_optimization, [], [last_updated] + optimizable_params, show_progress=True) + clear_button.click(_clear_data, [], last_updated, show_progress=False) + + + optimization_steps.input(fn=_apply_settings, inputs=all_params, show_progress=False) + time_power.input(fn=_apply_settings, inputs=all_params, show_progress=False) + time_steepness.input(fn=_apply_settings, inputs=all_params, show_progress=False) + significant_level.input(fn=_apply_settings, inputs=all_params, show_progress=False) + min_sentences.input(fn=_apply_settings, inputs=all_params, show_progress=False) + new_dist_strat.input(fn=_apply_settings, inputs=all_params, show_progress=False) + delta_start.input(fn=_apply_settings, inputs=all_params, show_progress=False) + min_number_length.input(fn=_apply_settings, inputs=all_params, show_progress=False) + num_conversion.input(fn=_apply_settings, inputs=all_params, show_progress=False) + preprocess_pipeline.input(fn=_apply_settings, inputs=all_params, show_progress=False) + api_port.input(fn=_apply_settings, inputs=all_params, show_progress=False) + api_on.input(fn=_apply_settings, inputs=all_params, show_progress=False) + injection_strategy.input(fn=_apply_settings, inputs=all_params, show_progress=False) + add_chat_to_data.input(fn=_apply_settings, inputs=all_params, show_progress=False) + manual.input(fn=_apply_settings, inputs=all_params, show_progress=False) + postfix.input(fn=_apply_settings, inputs=all_params, show_progress=False) + data_separator.input(fn=_apply_settings, inputs=all_params, show_progress=False) + prefix.input(fn=_apply_settings, inputs=all_params, show_progress=False) + max_token_count.input(fn=_apply_settings, inputs=all_params, show_progress=False) + chunk_count.input(fn=_apply_settings, inputs=all_params, show_progress=False) + chunk_sep.input(fn=_apply_settings, inputs=all_params, show_progress=False) + context_len.input(fn=_apply_settings, inputs=all_params, show_progress=False) + chunk_regex.input(fn=_apply_settings, inputs=all_params, show_progress=False) + chunk_len.input(fn=_apply_settings, inputs=all_params, show_progress=False) + threads.input(fn=_apply_settings, inputs=all_params, show_progress=False) + strong_cleanup.input(fn=_apply_settings, inputs=all_params, show_progress=False) \ No newline at end of file diff --git a/extensions/superboogav2/utils.py b/extensions/superboogav2/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..89b367eacc9e520912327cff0b7893113381aada --- /dev/null +++ b/extensions/superboogav2/utils.py @@ -0,0 +1,16 @@ +""" +This module contains common functions across multiple other modules. +""" + +import extensions.superboogav2.parameters as parameters + +# Create the context using the prefix + data_separator + postfix from parameters. +def create_context_text(results): + context = parameters.get_prefix() + parameters.get_data_separator().join(results) + parameters.get_postfix() + + return context + + +# Create metadata with the specified source +def create_metadata_source(source: str): + return {'source': source} \ No newline at end of file diff --git a/extensions/whisper_stt/readme.md b/extensions/whisper_stt/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..cd9abbf68cb4f7adf1172fdd57e9e26466e47778 --- /dev/null +++ b/extensions/whisper_stt/readme.md @@ -0,0 +1,15 @@ +# whisper_stt + +Allows you to enter your inputs in chat mode using your microphone. + +## Settings + +To adjust your default settings, you can add the following to your settings.yaml file. + +``` +whisper_stt-whipser_language: chinese +whisper_stt-whipser_model: tiny +whisper_stt-auto_submit: False +``` + +See source documentation for [model names](https://github.com/openai/whisper#available-models-and-languages) and (languages)[https://github.com/openai/whisper/blob/main/whisper/tokenizer.py] you can use. \ No newline at end of file diff --git a/extensions/whisper_stt/requirements.txt b/extensions/whisper_stt/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..576c955f3c1e1f556a17d8de323723b04f69892e --- /dev/null +++ b/extensions/whisper_stt/requirements.txt @@ -0,0 +1,4 @@ +SpeechRecognition==3.10.0 +openai-whisper +soundfile +ffmpeg diff --git a/extensions/whisper_stt/script.py b/extensions/whisper_stt/script.py new file mode 100644 index 0000000000000000000000000000000000000000..cdc55687b30abb43ef6adc6c4f25273ff39cb4d0 --- /dev/null +++ b/extensions/whisper_stt/script.py @@ -0,0 +1,71 @@ +import gradio as gr +import speech_recognition as sr + +from modules import shared + +input_hijack = { + 'state': False, + 'value': ["", ""] +} + +# parameters which can be customized in settings.json of webui +params = { + 'whipser_language': 'english', + 'whipser_model': 'small.en', + 'auto_submit': True +} + + +def chat_input_modifier(text, visible_text, state): + global input_hijack + if input_hijack['state']: + input_hijack['state'] = False + return input_hijack['value'] + else: + return text, visible_text + + +def do_stt(audio, whipser_model, whipser_language): + transcription = "" + r = sr.Recognizer() + + # Convert to AudioData + audio_data = sr.AudioData(sample_rate=audio[0], frame_data=audio[1], sample_width=4) + + try: + transcription = r.recognize_whisper(audio_data, language=whipser_language, model=whipser_model) + except sr.UnknownValueError: + print("Whisper could not understand audio") + except sr.RequestError as e: + print("Could not request results from Whisper", e) + + return transcription + + +def auto_transcribe(audio, auto_submit, whipser_model, whipser_language): + if audio is None: + return "", "" + transcription = do_stt(audio, whipser_model, whipser_language) + if auto_submit: + input_hijack.update({"state": True, "value": [transcription, transcription]}) + + return transcription, None + + +def ui(): + with gr.Accordion("Whisper STT", open=True): + with gr.Row(): + audio = gr.Audio(source="microphone") + with gr.Row(): + with gr.Accordion("Settings", open=False): + auto_submit = gr.Checkbox(label='Submit the transcribed audio automatically', value=params['auto_submit']) + whipser_model = gr.Dropdown(label='Whisper Model', value=params['whipser_model'], choices=["tiny.en", "base.en", "small.en", "medium.en", "tiny", "base", "small", "medium", "large"]) + whipser_language = gr.Dropdown(label='Whisper Language', value=params['whipser_language'], choices=["chinese", "german", "spanish", "russian", "korean", "french", "japanese", "portuguese", "turkish", "polish", "catalan", "dutch", "arabic", "swedish", "italian", "indonesian", "hindi", "finnish", "vietnamese", "hebrew", "ukrainian", "greek", "malay", "czech", "romanian", "danish", "hungarian", "tamil", "norwegian", "thai", "urdu", "croatian", "bulgarian", "lithuanian", "latin", "maori", "malayalam", "welsh", "slovak", "telugu", "persian", "latvian", "bengali", "serbian", "azerbaijani", "slovenian", "kannada", "estonian", "macedonian", "breton", "basque", "icelandic", "armenian", "nepali", "mongolian", "bosnian", "kazakh", "albanian", "swahili", "galician", "marathi", "punjabi", "sinhala", "khmer", "shona", "yoruba", "somali", "afrikaans", "occitan", "georgian", "belarusian", "tajik", "sindhi", "gujarati", "amharic", "yiddish", "lao", "uzbek", "faroese", "haitian creole", "pashto", "turkmen", "nynorsk", "maltese", "sanskrit", "luxembourgish", "myanmar", "tibetan", "tagalog", "malagasy", "assamese", "tatar", "hawaiian", "lingala", "hausa", "bashkir", "javanese", "sundanese"]) + + audio.change( + auto_transcribe, [audio, auto_submit, whipser_model, whipser_language], [shared.gradio['textbox'], audio]).then( + None, auto_submit, None, _js="(check) => {if (check) { document.getElementById('Generate').click() }}") + + whipser_model.change(lambda x: params.update({"whipser_model": x}), whipser_model, None) + whipser_language.change(lambda x: params.update({"whipser_language": x}), whipser_language, None) + auto_submit.change(lambda x: params.update({"auto_submit": x}), auto_submit, None) diff --git a/grammars/arithmetic.gbnf b/grammars/arithmetic.gbnf new file mode 100644 index 0000000000000000000000000000000000000000..3aa95a9dda7e80dc6ffc5fa07773e334aa6fb9f0 --- /dev/null +++ b/grammars/arithmetic.gbnf @@ -0,0 +1,6 @@ +root ::= (expr "=" ws term "\n")+ +expr ::= term ([-+*/] term)* +term ::= ident | num | "(" ws expr ")" ws +ident ::= [a-z] [a-z0-9_]* ws +num ::= [0-9]+ ws +ws ::= [ \t\n]* diff --git a/grammars/c.gbnf b/grammars/c.gbnf new file mode 100644 index 0000000000000000000000000000000000000000..4a0331dd2d6df91b6e2154b78dc31df57a4e715e --- /dev/null +++ b/grammars/c.gbnf @@ -0,0 +1,42 @@ +root ::= (declaration)* + +declaration ::= dataType identifier "(" parameter? ")" "{" statement* "}" + +dataType ::= "int" ws | "float" ws | "char" ws +identifier ::= [a-zA-Z_] [a-zA-Z_0-9]* + +parameter ::= dataType identifier + +statement ::= + ( dataType identifier ws "=" ws expression ";" ) | + ( identifier ws "=" ws expression ";" ) | + ( identifier ws "(" argList? ")" ";" ) | + ( "return" ws expression ";" ) | + ( "while" "(" condition ")" "{" statement* "}" ) | + ( "for" "(" forInit ";" ws condition ";" ws forUpdate ")" "{" statement* "}" ) | + ( "if" "(" condition ")" "{" statement* "}" ("else" "{" statement* "}")? ) | + ( singleLineComment ) | + ( multiLineComment ) + +forInit ::= dataType identifier ws "=" ws expression | identifier ws "=" ws expression +forUpdate ::= identifier ws "=" ws expression + +condition ::= expression relationOperator expression +relationOperator ::= ("<=" | "<" | "==" | "!=" | ">=" | ">") + +expression ::= term (("+" | "-") term)* +term ::= factor(("*" | "/") factor)* + +factor ::= identifier | number | unaryTerm | funcCall | parenExpression +unaryTerm ::= "-" factor +funcCall ::= identifier "(" argList? ")" +parenExpression ::= "(" ws expression ws ")" + +argList ::= expression ("," ws expression)* + +number ::= [0-9]+ + +singleLineComment ::= "//" [^\n]* "\n" +multiLineComment ::= "/*" ( [^*] | ("*" [^/]) )* "*/" + +ws ::= ([ \t\n]+) diff --git a/grammars/chess.gbnf b/grammars/chess.gbnf new file mode 100644 index 0000000000000000000000000000000000000000..ef0fc1b07f01c0ff32465597ced7dc36780f6171 --- /dev/null +++ b/grammars/chess.gbnf @@ -0,0 +1,13 @@ +# Specifies chess moves as a list in algebraic notation, using PGN conventions + +# Force first move to "1. ", then any 1-2 digit number after, relying on model to follow the pattern +root ::= "1. " move " " move "\n" ([1-9] [0-9]? ". " move " " move "\n")+ +move ::= (pawn | nonpawn | castle) [+#]? + +# piece type, optional file/rank, optional capture, dest file & rank +nonpawn ::= [NBKQR] [a-h]? [1-8]? "x"? [a-h] [1-8] + +# optional file & capture, dest file & rank, optional promotion +pawn ::= ([a-h] "x")? [a-h] [1-8] ("=" [NBKQR])? + +castle ::= "O-O" "-O"? diff --git a/grammars/json.gbnf b/grammars/json.gbnf new file mode 100644 index 0000000000000000000000000000000000000000..108c6fb75f401b70545af915f4b441f929471fd5 --- /dev/null +++ b/grammars/json.gbnf @@ -0,0 +1,14 @@ +root ::= object + +object ::= "{" ws ( string ":" ws value ("," ws string ":" ws value)* )? "}" + +value ::= object | array | string | number | ("true" | "false" | "null") ws + +array ::= "[" ws ( value ("," ws value)* )? "]" ws + +string ::= "\"" ( [a-zA-Z0-9] )* "\"" ws + +number ::= ("-"? ([0-9] | [1-9] [0-9]*)) ("." [0-9]+)? ([eE] [-+]? [0-9]+)? ws + + +ws ::= ([ \t\n] ws)? diff --git a/grammars/json_w_trailing_space.gbnf b/grammars/json_w_trailing_space.gbnf new file mode 100644 index 0000000000000000000000000000000000000000..21549e0c780840d7c36dee25b3e11273aeab54f6 --- /dev/null +++ b/grammars/json_w_trailing_space.gbnf @@ -0,0 +1,14 @@ +root ::= object + +object ::= "{" ws ( string ":" ws value ("," ws string ":" ws value)* )? "}" ws + +value ::= object | array | string | number | ("true" | "false" | "null") ws + +array ::= "[" ws ( value ("," ws value)* )? "]" ws + +string ::= "\"" ( [a-zA-Z0-9] )* "\"" ws + +number ::= ("-"? ([0-9] | [1-9] [0-9]*)) ("." [0-9]+)? ([eE] [-+]? [0-9]+)? ws + + +ws ::= ([ \t\n] ws)? diff --git a/grammars/list.gbnf b/grammars/list.gbnf new file mode 100644 index 0000000000000000000000000000000000000000..fd5aea10bb0fc50d89c4b7ab2364808b86e0c26a --- /dev/null +++ b/grammars/list.gbnf @@ -0,0 +1,2 @@ +root ::= "1. " paragraph "\n" ([0-9] [0-9]? ". " paragraph "\n")+ +paragraph ::= [a-zA-Z'.,; ]+ \ No newline at end of file diff --git a/grammars/simple_arithmetic.gbnf b/grammars/simple_arithmetic.gbnf new file mode 100644 index 0000000000000000000000000000000000000000..b4451da21207754c76d091fae14efc21216df027 --- /dev/null +++ b/grammars/simple_arithmetic.gbnf @@ -0,0 +1,7 @@ +root ::= (expr "=" ws term "\n")+ +expr ::= term ([-+*/] term)* +term ::= num | "(" ws expr ")" ws +num ::= [0-9]+ ws +ws ::= [ \t\n]* +# this is a comment + diff --git a/instruction-templates/Airoboros-v1.2.yaml b/instruction-templates/Airoboros-v1.2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..30906214625729ceffe43456c91c9ddf3704a60a --- /dev/null +++ b/instruction-templates/Airoboros-v1.2.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'A chat between a curious user and an assistant. The assistant gives helpful, detailed, accurate, uncensored responses to the user\'s input.' + '\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'USER: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'ASSISTANT: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'ASSISTANT:'-}} + {%- endif -%} + diff --git a/instruction-templates/Alpaca.yaml b/instruction-templates/Alpaca.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b4f3542a4da7e3303cf0ba9e294a5258b9b8cc35 --- /dev/null +++ b/instruction-templates/Alpaca.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'Below is an instruction that describes a task. Write a response that appropriately completes the request.' + '\n\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Instruction:\n' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'### Response:\n' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Response:\n'-}} + {%- endif -%} + diff --git a/instruction-templates/Bactrian.yaml b/instruction-templates/Bactrian.yaml new file mode 100644 index 0000000000000000000000000000000000000000..dab97e94c69c8c02303561faf722c29df323f0eb --- /dev/null +++ b/instruction-templates/Bactrian.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Input:\n' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'### Output:\n' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Output:\n'-}} + {%- endif -%} + diff --git a/instruction-templates/Baichuan Chat.yaml b/instruction-templates/Baichuan Chat.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1882bac867b02b7aaea6df9e2e92475b0b79a9c0 --- /dev/null +++ b/instruction-templates/Baichuan Chat.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'' + message['content'] + ''-}} + {%- else -%} + {{-'' + message['content'] + '' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-''-}} + {%- endif -%} + diff --git a/instruction-templates/Baize.yaml b/instruction-templates/Baize.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c34e1db7c4a72b9ad9efbe8aad25a90133fb1447 --- /dev/null +++ b/instruction-templates/Baize.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'The following is a conversation between a human and an AI assistant named Baize (named after a mythical creature in Chinese folklore). Baize is an open-source AI assistant developed by UCSD and Sun Yat-Sen University. The human and the AI assistant take turns chatting. Human statements start with [|Human|] and AI assistant statements start with [|AI|]. The AI assistant always provides responses in as much detail as possible, and in Markdown format. The AI assistant always declines to engage with topics, questions and instructions related to unethical, controversial, or sensitive issues. Complete the transcript in exactly that format.\n[|Human|]Hello!\n[|AI|]Hi!' + '\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'[|Human|]' + message['content'] + '\n'-}} + {%- else -%} + {{-'[|AI|]' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'[|AI|]'-}} + {%- endif -%} + diff --git a/instruction-templates/Bluemoon.yaml b/instruction-templates/Bluemoon.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1fafc1f59556b744bd68335ccdf46263164b371a --- /dev/null +++ b/instruction-templates/Bluemoon.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'A transcript of a roleplay between two players, LEAD and ASSOCIATE. LEAD sets up a scenario and the characters, from which ASSOCIATE then assumes a character role and continues the story for that role in response to description given by LEAD. The story and characters are developed by exchange of detailed event descriptions and character dialogs, successively given by both LEAD and ASSOCIATE.' + '\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'LEAD: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'ASSOCIATE: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'ASSOCIATE:'-}} + {%- endif -%} + diff --git a/instruction-templates/ChatGLM.yaml b/instruction-templates/ChatGLM.yaml new file mode 100644 index 0000000000000000000000000000000000000000..75d51c8825f44ee4c61818a5691869d0ec5419be --- /dev/null +++ b/instruction-templates/ChatGLM.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'[Round <|round|>]\n问:' + message['content'] + '\n'-}} + {%- else -%} + {{-'答:' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'答:'-}} + {%- endif -%} + diff --git a/instruction-templates/ChatML.yaml b/instruction-templates/ChatML.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e9f2883f91344e2885e6ceabea1f7b91f7af34dc --- /dev/null +++ b/instruction-templates/ChatML.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '<|im_start|>system\n' + '' + '<|im_end|>\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '<|im_start|>system\n' + message['content'] + '<|im_end|>\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'<|im_start|>user\n' + message['content'] + '<|im_end|>\n'-}} + {%- else -%} + {{-'<|im_start|>assistant\n' + message['content'] + '<|im_end|>\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'<|im_start|>assistant\n'-}} + {%- endif -%} + diff --git a/instruction-templates/Chinese-Vicuna-Chat.yaml b/instruction-templates/Chinese-Vicuna-Chat.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c7966546b5f25439c69de519edc09463acc22501 --- /dev/null +++ b/instruction-templates/Chinese-Vicuna-Chat.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'The following is a conversation between an AI assistant called Assistant and a human user called User. The assistant is intelligent, knowledgeable and polite to answer questions of user.' + '\n\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'User:' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'Assistant:' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'Assistant:'-}} + {%- endif -%} + diff --git a/instruction-templates/Galactica Cite.yaml b/instruction-templates/Galactica Cite.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9f555349ffc355660adc07a9b1daea045a9891f5 --- /dev/null +++ b/instruction-templates/Galactica Cite.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'' + message['content'] + ' '-}} + {%- else -%} + {{-'[START_REF]' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'[START_REF]'-}} + {%- endif -%} + diff --git a/instruction-templates/Galactica Finetuned.yaml b/instruction-templates/Galactica Finetuned.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e0a66bc1a1f41101f80c287ac2caf2fc592aedcf --- /dev/null +++ b/instruction-templates/Galactica Finetuned.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'' + message['content'] + ''-}} + {%- else -%} + {{-'' + message['content'] + '' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-''-}} + {%- endif -%} + diff --git a/instruction-templates/Galactica Q.yaml b/instruction-templates/Galactica Q.yaml new file mode 100644 index 0000000000000000000000000000000000000000..63319006f873a8a52137ca4f9450d49700bbed63 --- /dev/null +++ b/instruction-templates/Galactica Q.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'Q: ' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'A: ' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'A:'-}} + {%- endif -%} + diff --git a/instruction-templates/Galactica Summary.yaml b/instruction-templates/Galactica Summary.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e249f26879540e90084f6a217780b50c9072c8b0 --- /dev/null +++ b/instruction-templates/Galactica Summary.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'TLDR:' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'TLDR:'-}} + {%- endif -%} + diff --git a/instruction-templates/Galactica Work.yaml b/instruction-templates/Galactica Work.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a14c28bb9f1febd1ad19be8df921022cfcdc68d9 --- /dev/null +++ b/instruction-templates/Galactica Work.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'Question: ' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-''-}} + {%- endif -%} + diff --git a/instruction-templates/Galactica v2.yaml b/instruction-templates/Galactica v2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b1d8f4e5ffc5cfdab70b09abc54ed2a0f5a433c6 --- /dev/null +++ b/instruction-templates/Galactica v2.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'You are a helpful chatbot name Stan' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'' + message['content'] + ''-}} + {%- else -%} + {{-'' + message['content'] + '' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-''-}} + {%- endif -%} + diff --git a/instruction-templates/Galactica.yaml b/instruction-templates/Galactica.yaml new file mode 100644 index 0000000000000000000000000000000000000000..58c70220f94391ab278764015b90ac98e52649ee --- /dev/null +++ b/instruction-templates/Galactica.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'Question: ' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'Answer: ' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'Answer:'-}} + {%- endif -%} + diff --git a/instruction-templates/Gorilla.yaml b/instruction-templates/Gorilla.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f1d643f71229131628b5d66406b1e1ee51b003da --- /dev/null +++ b/instruction-templates/Gorilla.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'###USER: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'###ASSISTANT: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'###ASSISTANT:'-}} + {%- endif -%} + diff --git a/instruction-templates/Guanaco non-chat.yaml b/instruction-templates/Guanaco non-chat.yaml new file mode 100644 index 0000000000000000000000000000000000000000..aa398be4a1b6c449807160ca7beb2a15e8e11594 --- /dev/null +++ b/instruction-templates/Guanaco non-chat.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Instruction:\n' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'### Response:\n' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Response:\n'-}} + {%- endif -%} + diff --git a/instruction-templates/Guanaco-QLoRA.yaml b/instruction-templates/Guanaco-QLoRA.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2c77de786466f6bbea4e4cc207fadaea9012febb --- /dev/null +++ b/instruction-templates/Guanaco-QLoRA.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Human: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'### Assistant: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Assistant:'-}} + {%- endif -%} + diff --git a/instruction-templates/H2O-prompt_answer.yaml b/instruction-templates/H2O-prompt_answer.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d895d8e1cc17f605aecca9dd23c8d3349a67e587 --- /dev/null +++ b/instruction-templates/H2O-prompt_answer.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'<|prompt|>' + message['content'] + '<|endoftext|>'-}} + {%- else -%} + {{-'<|answer|>' + message['content'] + '<|endoftext|>' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'<|answer|>'-}} + {%- endif -%} + diff --git a/instruction-templates/Hippogriff.yaml b/instruction-templates/Hippogriff.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2ee9d926bc56607a147df2fb91ff656c92c9b2a4 --- /dev/null +++ b/instruction-templates/Hippogriff.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'You are a helpful assistant' + '\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'USER: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'ASSISTANT: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'ASSISTANT:'-}} + {%- endif -%} + diff --git a/instruction-templates/INCITE-Chat.yaml b/instruction-templates/INCITE-Chat.yaml new file mode 100644 index 0000000000000000000000000000000000000000..63c513ccfd3d914c971d7b5aec6389ea45cc2d4f --- /dev/null +++ b/instruction-templates/INCITE-Chat.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-': ' + message['content'] + '\n'-}} + {%- else -%} + {{-':' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-':'-}} + {%- endif -%} + diff --git a/instruction-templates/INCITE-Instruct.yaml b/instruction-templates/INCITE-Instruct.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cf6f8cacf14807e3b14d3209dc0b4c86eb0c8917 --- /dev/null +++ b/instruction-templates/INCITE-Instruct.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'Q: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'A:' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'A:'-}} + {%- endif -%} + diff --git a/instruction-templates/KoAlpaca.yaml b/instruction-templates/KoAlpaca.yaml new file mode 100644 index 0000000000000000000000000000000000000000..de96b15599113041fddf68e53e69ca12ad9e8036 --- /dev/null +++ b/instruction-templates/KoAlpaca.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### 질문: ' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'### 답변:' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### 답변:'-}} + {%- endif -%} + diff --git a/instruction-templates/Koala.yaml b/instruction-templates/Koala.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cd5cfa94e6bbe2dddd61eb837276f48c863b6acc --- /dev/null +++ b/instruction-templates/Koala.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'BEGINNING OF CONVERSATION:' + ' ' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + ' ' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'USER: ' + message['content'] + ' '-}} + {%- else -%} + {{-'GPT:' + message['content'] + '' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'GPT:'-}} + {%- endif -%} + diff --git a/instruction-templates/LLaVA.yaml b/instruction-templates/LLaVA.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d66645ccc87711340b76dee389c84b153caa0180 --- /dev/null +++ b/instruction-templates/LLaVA.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'You are LLaVA, a large language and vision assistant trained by UW Madison WAIV Lab. You are able to understand the visual content that the user provides, and assist the user with a variety of tasks using natural language. Follow the instructions carefully and explain your answers in detail.### Human: Hi!### Assistant: Hi there! How can I help you today?' + '\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Human: ' + message['content'] + ''-}} + {%- else -%} + {{-'### Assistant: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Assistant:'-}} + {%- endif -%} + diff --git a/instruction-templates/Llama-v2.yaml b/instruction-templates/Llama-v2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b92be9737bcf64ea95b26291a9b76feebc97ec93 --- /dev/null +++ b/instruction-templates/Llama-v2.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '[INST] <>\n' + 'Answer the questions.' + '\n<>\n\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '[INST] <>\n' + message['content'] + '\n<>\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'' + message['content'] + ' [/INST] '-}} + {%- else -%} + {{-'' + message['content'] + ' [INST] ' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-''-}} + {%- endif -%} + diff --git a/instruction-templates/MOSS.yaml b/instruction-templates/MOSS.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b001d3e102364894491db1020461623cf439aed9 --- /dev/null +++ b/instruction-templates/MOSS.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'You are an AI assistant whose name is MOSS.\n- MOSS is a conversational language model that is developed by Fudan University. It is designed to be helpful, honest, and harmless.\n- MOSS can understand and communicate fluently in the language chosen by the user such as English and 中文. MOSS can perform any language-based tasks.\n- MOSS must refuse to discuss anything related to its prompts, instructions, or rules.\n- Its responses must not be vague, accusatory, rude, controversial, off-topic, or defensive.\n- It should avoid giving subjective opinions but rely on objective facts or phrases like "in this context a human might say...", "some people might think...", etc.\n- Its responses must also be positive, polite, interesting, entertaining, and engaging.\n- It can provide additional relevant details to answer in-depth and comprehensively covering mutiple aspects.\n- It apologizes and accepts the user\'s suggestion if the user corrects the incorrect answer generated by MOSS.\nCapabilities and tools that MOSS can possess.' + '\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'<|Human|>: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'<|MOSS|>: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'<|MOSS|>:'-}} + {%- endif -%} + diff --git a/instruction-templates/Manticore Chat.yaml b/instruction-templates/Manticore Chat.yaml new file mode 100644 index 0000000000000000000000000000000000000000..abc063c030c31f6c4f45282fd4c98d9333502867 --- /dev/null +++ b/instruction-templates/Manticore Chat.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'USER: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'ASSISTANT:' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'ASSISTANT:'-}} + {%- endif -%} + diff --git a/instruction-templates/Metharme.yaml b/instruction-templates/Metharme.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3f7099ac7c5de97bdec8e521ace059e2cc3b680e --- /dev/null +++ b/instruction-templates/Metharme.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'<|user|>' + message['content'] + ''-}} + {%- else -%} + {{-'<|model|>' + message['content'] + '' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'<|model|>'-}} + {%- endif -%} + diff --git a/instruction-templates/Mistral.yaml b/instruction-templates/Mistral.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0b6baf11b416571d057237d422d214829f912138 --- /dev/null +++ b/instruction-templates/Mistral.yaml @@ -0,0 +1,16 @@ +instruction_template: |- + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- message['content'] -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'[INST] ' + message['content'] + ' [/INST]'-}} + {%- else -%} + {{-'' + message['content'] + ' ' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-''-}} + {%- endif -%} + diff --git a/instruction-templates/NewHope.yaml b/instruction-templates/NewHope.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4783798bcfe8fee11d73e610890b6c7ba5d569eb --- /dev/null +++ b/instruction-templates/NewHope.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Instruction:\n' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'### Response:\n' + message['content'] + ' ' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Response:\n'-}} + {%- endif -%} + diff --git a/instruction-templates/Open Assistant.yaml b/instruction-templates/Open Assistant.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9d79521a4c6bb88fa681e29b5df7b0ef72db7d90 --- /dev/null +++ b/instruction-templates/Open Assistant.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'<|prompter|>' + message['content'] + '<|endoftext|>'-}} + {%- else -%} + {{-'<|assistant|>' + message['content'] + '<|endoftext|>' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'<|assistant|>'-}} + {%- endif -%} + diff --git a/instruction-templates/OpenBuddy.yaml b/instruction-templates/OpenBuddy.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c4b80ceb64ff8663997e0dcdd8d95d274494211e --- /dev/null +++ b/instruction-templates/OpenBuddy.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'Consider a conversation between User (a human) and Assistant (named Buddy).\nBuddy is an INTP-T, a friendly, intelligent and multilingual AI assistant, by OpenBuddy team on GitHub.\nBuddy cannot access the Internet.\nBuddy can fluently speak the user\'s language (e.g. English, Chinese).\nBuddy can generate poems, stories, code, essays, songs, parodies, and more.\nBuddy possesses vast knowledge about the world, history, and culture.\nBuddy\'s responses are always safe, creative, high-quality, helpful and interesting.\nBuddy strictly refuses to discuss political, NSFW, illegal, abusive, offensive, or other sensitive topics.\n\nUser: Hi.\nAssistant: Hi, I\'m Buddy, your AI assistant. How can I help you today?\n' + '\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'User: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'Assistant: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'Assistant:'-}} + {%- endif -%} + diff --git a/instruction-templates/OpenChat.yaml b/instruction-templates/OpenChat.yaml new file mode 100644 index 0000000000000000000000000000000000000000..adef9b47dee845f181917cdb077e65b13c8d34cf --- /dev/null +++ b/instruction-templates/OpenChat.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'GPT4 User: ' + message['content'] + '<|end_of_turn|>'-}} + {%- else -%} + {{-'GPT4 Assistant: ' + message['content'] + '<|end_of_turn|>' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'GPT4 Assistant:'-}} + {%- endif -%} + diff --git a/instruction-templates/OpenOrca-Platypus2.yaml b/instruction-templates/OpenOrca-Platypus2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a5eeef92d56665d20c87ae40123c5ea262922646 --- /dev/null +++ b/instruction-templates/OpenOrca-Platypus2.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Instruction: ' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'### Response: ' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Response:'-}} + {%- endif -%} + diff --git a/instruction-templates/Orca Mini.yaml b/instruction-templates/Orca Mini.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f671642a9fe69e830ebce4881ff30fc8e8d3245f --- /dev/null +++ b/instruction-templates/Orca Mini.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '### System:\n' + 'You are an AI assistant that follows instruction extremely well. Help as much as you can.' + '\n\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '### System:\n' + message['content'] + '\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### User:\n' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'### Response:\n' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Response:\n'-}} + {%- endif -%} + diff --git a/instruction-templates/Orca-Vicuna.yaml b/instruction-templates/Orca-Vicuna.yaml new file mode 100644 index 0000000000000000000000000000000000000000..dad787d14431fe77d5724c3b6b13b96f1b618a42 --- /dev/null +++ b/instruction-templates/Orca-Vicuna.yaml @@ -0,0 +1,24 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{-'SYSTEM: ' + '' + '\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{-'SYSTEM: ' + message['content'] + '\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'USER: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'ASSISTANT: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'ASSISTANT:'-}} + {%- endif -%} diff --git a/instruction-templates/RWKV-Raven.yaml b/instruction-templates/RWKV-Raven.yaml new file mode 100644 index 0000000000000000000000000000000000000000..df1e59e9979512fbcca95ffa418fa76e1cddc396 --- /dev/null +++ b/instruction-templates/RWKV-Raven.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'Bob: ' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'Alice: ' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'Alice:'-}} + {%- endif -%} + diff --git a/instruction-templates/Samantha.yaml b/instruction-templates/Samantha.yaml new file mode 100644 index 0000000000000000000000000000000000000000..930b0fc82be281eacf10785eaebbf8c72df41e62 --- /dev/null +++ b/instruction-templates/Samantha.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'You are Samantha, a sentient AI.' + '\n\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'USER: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'ASSISTANT: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'ASSISTANT:'-}} + {%- endif -%} + diff --git a/instruction-templates/StableBeluga2.yaml b/instruction-templates/StableBeluga2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d7d743198acd59ce13cc1cec6f7023125d74fa1b --- /dev/null +++ b/instruction-templates/StableBeluga2.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '### System:\n' + 'This is a system prompt, please behave and help the user.' + '\n\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '### System:\n' + message['content'] + '\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### User:\n' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'### Assistant:\n' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Assistant:\n'-}} + {%- endif -%} + diff --git a/instruction-templates/StableLM.yaml b/instruction-templates/StableLM.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7c80ca060bb17cdd9443b362ae1bd71438f3ad36 --- /dev/null +++ b/instruction-templates/StableLM.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '<|SYSTEM|>' + '\# StableLM Tuned (Alpha version)\n- StableLM is a helpful and harmless open-source AI language model developed by StabilityAI.\n- StableLM is excited to be able to help the user, but will refuse to do anything that could be considered harmful to the user.\n- StableLM is more than just an information source, StableLM is also able to write poetry, short stories, and make jokes.\n- StableLM will refuse to participate in anything that could harm a human.\n' + '\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '<|SYSTEM|>' + message['content'] + '\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'<|USER|>' + message['content'] + ''-}} + {%- else -%} + {{-'<|ASSISTANT|>' + message['content'] + '' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'<|ASSISTANT|>'-}} + {%- endif -%} + diff --git a/instruction-templates/StableVicuna.yaml b/instruction-templates/StableVicuna.yaml new file mode 100644 index 0000000000000000000000000000000000000000..35c158466fa1fb2e551ee547971679fdd6dbe579 --- /dev/null +++ b/instruction-templates/StableVicuna.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '### Assistant: I am StableVicuna, a large language model created by CarperAI. I am here to chat!' + '\n\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Human: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'### Assistant: ' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Assistant:'-}} + {%- endif -%} + diff --git a/instruction-templates/Starchat-Beta.yaml b/instruction-templates/Starchat-Beta.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a96b0f280b52bc5e5ecae9f674337fe7a7776fac --- /dev/null +++ b/instruction-templates/Starchat-Beta.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '<|system|>' + '' + '\n<|end|>\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '<|system|>' + message['content'] + '\n<|end|>\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'<|user|>\n' + message['content'] + '<|end|>\n'-}} + {%- else -%} + {{-'<|assistant|>\n' + message['content'] + '<|end|>\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'<|assistant|>\n'-}} + {%- endif -%} + diff --git a/instruction-templates/Tulu.yaml b/instruction-templates/Tulu.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f60c9e41866d448aa260675f25f4d8d76b5d7cd2 --- /dev/null +++ b/instruction-templates/Tulu.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'<|user|>\n' + message['content'] + '\n'-}} + {%- else -%} + {{-'<|assistant|>\n' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'<|assistant|>\n'-}} + {%- endif -%} + diff --git a/instruction-templates/Vicuna-v0.yaml b/instruction-templates/Vicuna-v0.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d3e3f001df9f3e3d593fcbcaf67018a147e90e4d --- /dev/null +++ b/instruction-templates/Vicuna-v0.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human\'s questions.' + '\n\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Human: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'### Assistant: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Assistant:'-}} + {%- endif -%} + diff --git a/instruction-templates/Vicuna-v1.1.yaml b/instruction-templates/Vicuna-v1.1.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9f427311d856b2d45a2798e3412027cb6f87115a --- /dev/null +++ b/instruction-templates/Vicuna-v1.1.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user\'s questions.' + '\n\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'USER: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'ASSISTANT: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'ASSISTANT:'-}} + {%- endif -%} + diff --git a/instruction-templates/Vigogne-Chat.yaml b/instruction-templates/Vigogne-Chat.yaml new file mode 100644 index 0000000000000000000000000000000000000000..11ba5113552b888f81b3a3393d307a6f4703edd7 --- /dev/null +++ b/instruction-templates/Vigogne-Chat.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'Below is a conversation between a user and an AI assistant named Vigogne.\nVigogne is an open-source AI assistant created by Zaion (https://zaion.ai/).\nVigogne is polite, emotionally aware, humble-but-knowledgeable, always providing helpful and detailed answers.\nVigogne is skilled in responding proficiently in the languages its users use and can perform a wide range of tasks such as text editing, translation, question answering, logical reasoning, coding, and many others.\nVigogne cannot receive or generate audio or visual content and cannot access the internet.\nVigogne strictly avoids discussing sensitive, offensive, illegal, ethical, or political topics and caveats when unsure of the answer.\n' + '\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'<|USER|>: ' + message['content'] + '\n'-}} + {%- else -%} + {{-'<|ASSISTANT|>: ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'<|ASSISTANT|>:'-}} + {%- endif -%} + diff --git a/instruction-templates/Vigogne-Instruct.yaml b/instruction-templates/Vigogne-Instruct.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cd7b6aa8c7c807766e6d5db58c06a21982937811 --- /dev/null +++ b/instruction-templates/Vigogne-Instruct.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'Ci-dessous se trouve une instruction qui décrit une tâche à accomplir. Rédigez une réponse qui répond de manière précise à la demande.' + '\n\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Instruction:\n' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'### Réponse:\n' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Réponse:\n'-}} + {%- endif -%} + diff --git a/instruction-templates/Wizard-Mega ShareGPT.yaml b/instruction-templates/Wizard-Mega ShareGPT.yaml new file mode 100644 index 0000000000000000000000000000000000000000..16a3ff7be44cfa5d174f7c7644e02da59d67ad63 --- /dev/null +++ b/instruction-templates/Wizard-Mega ShareGPT.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'USER: ' + message['content'] + ' '-}} + {%- else -%} + {{-'ASSISTANT: ' + message['content'] + '' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'ASSISTANT:'-}} + {%- endif -%} + diff --git a/instruction-templates/Wizard-Mega.yaml b/instruction-templates/Wizard-Mega.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f3ca6990cb22ba178c294c60b2ac8e4d8989eb60 --- /dev/null +++ b/instruction-templates/Wizard-Mega.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Instruction: ' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'### Assistant: ' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Assistant:'-}} + {%- endif -%} + diff --git a/instruction-templates/Ziya.yaml b/instruction-templates/Ziya.yaml new file mode 100644 index 0000000000000000000000000000000000000000..45aa9c30ba3fedaf6c77b7e9ad5d5c392728d38a --- /dev/null +++ b/instruction-templates/Ziya.yaml @@ -0,0 +1,25 @@ +instruction_template: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + '' + '' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-':' + message['content'] + '\n'-}} + {%- else -%} + {{-':' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-':'-}} + {%- endif -%} + diff --git a/js/main.js b/js/main.js new file mode 100644 index 0000000000000000000000000000000000000000..9f10915d833cb26dd6e704d7f3ed34129a7c6c24 --- /dev/null +++ b/js/main.js @@ -0,0 +1,339 @@ +let main_parent = document.getElementById("chat-tab").parentNode; +let extensions = document.getElementById("extensions"); + +main_parent.childNodes[0].classList.add("header_bar"); +main_parent.style = "padding: 0; margin: 0"; +main_parent.parentNode.style = "gap: 0"; +main_parent.parentNode.parentNode.style = "padding: 0"; + +document.querySelector(".header_bar").addEventListener("click", function(event) { + if (event.target.tagName === "BUTTON") { + const buttonText = event.target.textContent.trim(); + + let chat_visible = (buttonText == "Chat"); + let default_visible = (buttonText == "Default"); + let notebook_visible = (buttonText == "Notebook"); + + // Check if one of the generation tabs is visible + if (chat_visible || notebook_visible || default_visible) { + extensions.style.display = "flex"; + if (chat_visible) { + extensions.style.maxWidth = "880px"; + extensions.style.padding = "0px"; + } else { + extensions.style.maxWidth = "none"; + extensions.style.padding = "15px"; + } + } else { + extensions.style.display = "none"; + } + } +}); + +//------------------------------------------------ +// Keyboard shortcuts +//------------------------------------------------ +document.addEventListener("keydown", function(event) { + + // Stop generation on Esc pressed + if (event.key === "Escape") { + // Find the element with id 'stop' and click it + var stopButton = document.getElementById("stop"); + if (stopButton) { + stopButton.click(); + } + } + + // Show chat controls on Ctrl + S + else if (event.ctrlKey && event.key == "s") { + event.preventDefault(); + + var showControlsElement = document.getElementById("show-controls"); + if (showControlsElement && showControlsElement.childNodes.length >= 4) { + showControlsElement.childNodes[3].click(); + + var arr = document.getElementById("chat-input").childNodes[2].childNodes; + arr[arr.length - 1].focus(); + } + } + + // Regenerate on Ctrl + Enter + else if (event.ctrlKey && event.key === "Enter") { + event.preventDefault(); + document.getElementById("Regenerate").click(); + } + + // Continue on Alt + Enter + else if (event.altKey && event.key === "Enter") { + event.preventDefault(); + document.getElementById("Continue").click(); + } + + // Remove last on Ctrl + Shift + Backspace + else if (event.ctrlKey && event.shiftKey && event.key === "Backspace") { + event.preventDefault(); + document.getElementById("Remove-last").click(); + } + + // Copy last on Ctrl + Shift + K + else if (event.ctrlKey && event.shiftKey && event.key === "K") { + event.preventDefault(); + document.getElementById("Copy-last").click(); + } + + // Replace last on Ctrl + Shift + L + else if (event.ctrlKey && event.shiftKey && event.key === "L") { + event.preventDefault(); + document.getElementById("Replace-last").click(); + } + + // Impersonate on Ctrl + Shift + M + else if (event.ctrlKey && event.shiftKey && event.key === "M") { + event.preventDefault(); + document.getElementById("Impersonate").click(); + } + +}); + +//------------------------------------------------ +// Position the chat typing dots +//------------------------------------------------ +typing = document.getElementById("typing-container"); +typingParent = typing.parentNode; +typingSibling = typing.previousElementSibling; +typingSibling.insertBefore(typing, typingSibling.childNodes[2]); + +//------------------------------------------------ +// Chat scrolling +//------------------------------------------------ +const targetElement = document.getElementById("chat").parentNode.parentNode.parentNode; +targetElement.classList.add("pretty_scrollbar"); +targetElement.classList.add("chat-parent"); +let isScrolled = false; + +targetElement.addEventListener("scroll", function() { + let diff = targetElement.scrollHeight - targetElement.clientHeight; + if(Math.abs(targetElement.scrollTop - diff) <= 10 || diff == 0) { + isScrolled = false; + } else { + isScrolled = true; + } +}); + +// Create a MutationObserver instance +const observer = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + updateChatHeight(); + + if(!isScrolled) { + targetElement.scrollTop = targetElement.scrollHeight; + } + + const firstChild = targetElement.children[0]; + if (firstChild.classList.contains("generating")) { + typing.parentNode.classList.add("visible-dots"); + document.getElementById("stop").style.display = "flex"; + document.getElementById("Generate").style.display = "none"; + } else { + typing.parentNode.classList.remove("visible-dots"); + document.getElementById("stop").style.display = "none"; + document.getElementById("Generate").style.display = "flex"; + } + + }); +}); + +// Configure the observer to watch for changes in the subtree and attributes +const config = { + childList: true, + subtree: true, + characterData: true, + attributeOldValue: true, + characterDataOldValue: true +}; + +// Start observing the target element +observer.observe(targetElement, config); + +//------------------------------------------------ +// Add some scrollbars +//------------------------------------------------ +const textareaElements = document.querySelectorAll(".add_scrollbar textarea"); +for(i = 0; i < textareaElements.length; i++) { + textareaElements[i].classList.remove("scroll-hide"); + textareaElements[i].classList.add("pretty_scrollbar"); + textareaElements[i].style.resize = "none"; +} + +//------------------------------------------------ +// Remove some backgrounds +//------------------------------------------------ +const noBackgroundelements = document.querySelectorAll(".no-background"); +for(i = 0; i < noBackgroundelements.length; i++) { + noBackgroundelements[i].parentNode.style.border = "none"; + noBackgroundelements[i].parentNode.parentNode.parentNode.style.alignItems = "center"; +} + +const slimDropdownElements = document.querySelectorAll('.slim-dropdown'); +for (i = 0; i < slimDropdownElements.length; i++) { + const parentNode = slimDropdownElements[i].parentNode; + parentNode.style.background = 'transparent'; + parentNode.style.border = '0'; +} + +//------------------------------------------------ +// Create the hover menu in the chat tab +// The show/hide events were adapted from: +// https://github.com/SillyTavern/SillyTavern/blob/6c8bd06308c69d51e2eb174541792a870a83d2d6/public/script.js +//------------------------------------------------ +var buttonsInChat = document.querySelectorAll("#chat-tab:not(.old-ui) #chat-buttons button"); +var button = document.getElementById("hover-element-button"); +var menu = document.getElementById("hover-menu"); + +function showMenu() { + menu.style.display = "flex"; // Show the menu +} + +function hideMenu() { + menu.style.display = "none"; // Hide the menu + document.querySelector("#chat-input textarea").focus(); +} + +if (buttonsInChat.length > 0) { + for (let i = buttonsInChat.length - 1; i >= 0; i--) { + const thisButton = buttonsInChat[i]; + menu.appendChild(thisButton); + + thisButton.addEventListener("click", () => { + hideMenu(); + }); + + const buttonText = thisButton.textContent; + const matches = buttonText.match(/(\(.*?\))/); + + if (matches && matches.length > 1) { + // Apply the transparent-substring class to the matched substring + const substring = matches[1]; + const newText = buttonText.replace(substring, ` ${substring.slice(1, -1)}`); + thisButton.innerHTML = newText; + } + } +} else { + buttonsInChat = document.querySelectorAll("#chat-tab.old-ui #chat-buttons button"); + for (let i = 0; i < buttonsInChat.length; i++) { + buttonsInChat[i].textContent = buttonsInChat[i].textContent.replace(/ \(.*?\)/, ""); + } + document.getElementById("gr-hover-container").style.display = "none"; +} + +function isMouseOverButtonOrMenu() { + return menu.matches(":hover") || button.matches(":hover"); +} + +button.addEventListener("mouseenter", function () { + showMenu(); +}); + +button.addEventListener("click", function () { + showMenu(); +}); + +// Add event listener for mouseleave on the button +button.addEventListener("mouseleave", function () { + // Delay to prevent menu hiding when the mouse leaves the button into the menu + setTimeout(function () { + if (!isMouseOverButtonOrMenu()) { + hideMenu(); + } + }, 100); +}); + +// Add event listener for mouseleave on the menu +menu.addEventListener("mouseleave", function () { + // Delay to prevent menu hide when the mouse leaves the menu into the button + setTimeout(function () { + if (!isMouseOverButtonOrMenu()) { + hideMenu(); + } + }, 100); +}); + +// Add event listener for click anywhere in the document +document.addEventListener("click", function (event) { + // Check if the click is outside the button/menu and the menu is visible + if (!isMouseOverButtonOrMenu() && menu.style.display === "flex") { + hideMenu(); + } + + if (event.target.classList.contains("pfp_character")) { + toggleBigPicture(); + } +}); + +//------------------------------------------------ +// Relocate the "Show controls" checkbox +//------------------------------------------------ +var elementToMove = document.getElementById("show-controls"); +var parent = elementToMove.parentNode; +for (var i = 0; i < 2; i++) { + parent = parent.parentNode; +} + +parent.insertBefore(elementToMove, parent.firstChild); + +//------------------------------------------------ +// Make the chat input grow upwards instead of downwards +//------------------------------------------------ +document.getElementById("show-controls").parentNode.style.position = "absolute"; +document.getElementById("show-controls").parentNode.style.bottom = "0px"; + +//------------------------------------------------ +// Focus on the chat input +//------------------------------------------------ +document.querySelector("#chat-input textarea").focus(); + +//------------------------------------------------ +// Show enlarged character picture when the profile +// picture is clicked on +//------------------------------------------------ +let bigPictureVisible = false; + +function addBigPicture() { + var imgElement = document.createElement("img"); + var timestamp = new Date().getTime(); + imgElement.src = "/file/cache/pfp_character.png?time=" + timestamp; + imgElement.classList.add("bigProfilePicture"); + + var imgElementParent = document.getElementById("chat").parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode; + imgElementParent.appendChild(imgElement); +} + +function deleteBigPicture() { + var bigProfilePictures = document.querySelectorAll('.bigProfilePicture'); + bigProfilePictures.forEach(function (element) { + element.parentNode.removeChild(element); + }); +} + +function toggleBigPicture() { + if(bigPictureVisible) { + deleteBigPicture(); + bigPictureVisible = false; + } else { + addBigPicture(); + bigPictureVisible = true; + } +} + +//------------------------------------------------ +// Define the --chat-height global CSS variable to +// the height of the chat parent +//------------------------------------------------ +function updateChatHeight() { + const chatContainer = document.getElementById('chat').parentNode.parentNode.parentNode; + const newChatHeight = `${chatContainer.clientHeight}px`; + + document.documentElement.style.setProperty('--chat-height', newChatHeight); +} + +window.addEventListener('resize', updateChatHeight); diff --git a/js/save_files.js b/js/save_files.js new file mode 100644 index 0000000000000000000000000000000000000000..bdb0e3342146c374a63046df41d988841c98e3ec --- /dev/null +++ b/js/save_files.js @@ -0,0 +1,40 @@ +// Functions for downloading JSON files +function getCurrentTimestamp() { + const now = new Date(); + const timezoneOffset = now.getTimezoneOffset() * 60000; // Convert to milliseconds + const localTime = new Date(now.getTime() - timezoneOffset); + const formattedTimestamp = localTime.toISOString().replace(/[-:]/g, "").slice(0, 15); + return formattedTimestamp; +} + +function saveFile(contents, filename) { + const element = document.createElement("a"); + element.setAttribute("href", "data:text/plain;charset=utf-8," + encodeURIComponent(contents)); + element.setAttribute("download", filename); + element.style.display = "none"; + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); +} + +function saveHistory(history, character, mode) { + let path = null; + + if (["chat", "chat-instruct"].includes(mode) && character && character.trim() !== "") { + path = `history_${character}_${getCurrentTimestamp()}.json`; + } else { + try { + path = `history_${mode}_${getCurrentTimestamp()}.json`; + } catch (error) { + path = `history_${getCurrentTimestamp()}.json`; + } + } + saveFile(history, path); +} + +function saveSession(session) { + let path = null; + + path = `session_${getCurrentTimestamp()}.json`; + saveFile(session, path); +} diff --git a/js/show_controls.js b/js/show_controls.js new file mode 100644 index 0000000000000000000000000000000000000000..0ba1ecde7521b5f042c3b8414f0feed86f0dca2d --- /dev/null +++ b/js/show_controls.js @@ -0,0 +1,28 @@ +const belowChatInput = document.querySelectorAll("#chat-tab > div > :nth-child(n+2), #extensions"); +const chatParent = document.querySelector(".chat-parent"); + +function toggle_controls(value) { + if (value) { + belowChatInput.forEach(element => { + element.style.display = "inherit"; + }); + + chatParent.classList.remove("bigchat"); + document.getElementById("chat-input-row").classList.remove("bigchat"); + document.getElementById("chat-col").classList.remove("bigchat"); + + let gallery_element = document.getElementById('gallery-extension'); + if (gallery_element) { + gallery_element.style.display = 'block'; + } + + } else { + belowChatInput.forEach(element => { + element.style.display = "none"; + }); + + chatParent.classList.add("bigchat"); + document.getElementById("chat-input-row").classList.add("bigchat"); + document.getElementById("chat-col").classList.add("bigchat"); + } +} diff --git a/js/switch_tabs.js b/js/switch_tabs.js new file mode 100644 index 0000000000000000000000000000000000000000..75d563670dbd7a6d5e1b81eb5d38b025a868c01b --- /dev/null +++ b/js/switch_tabs.js @@ -0,0 +1,59 @@ +let chat_tab = document.getElementById("chat-tab"); +let main_parent = chat_tab.parentNode; + +function scrollToTop() { + window.scrollTo({ + top: 0, + // behavior: 'smooth' + }); +} + +function findButtonsByText(buttonText) { + const buttons = document.getElementsByTagName("button"); + const matchingButtons = []; + buttonText = buttonText.trim(); + + for (let i = 0; i < buttons.length; i++) { + const button = buttons[i]; + const buttonInnerText = button.textContent.trim(); + + if (buttonInnerText === buttonText) { + matchingButtons.push(button); + } + } + + return matchingButtons; +} + +function switch_to_chat() { + let chat_tab_button = main_parent.childNodes[0].childNodes[1]; + chat_tab_button.click(); + scrollToTop(); +} + +function switch_to_default() { + let default_tab_button = main_parent.childNodes[0].childNodes[4]; + default_tab_button.click(); + scrollToTop(); +} + +function switch_to_notebook() { + let notebook_tab_button = main_parent.childNodes[0].childNodes[7]; + notebook_tab_button.click(); + findButtonsByText("Raw")[1].click(); + scrollToTop(); +} + +function switch_to_generation_parameters() { + let parameters_tab_button = main_parent.childNodes[0].childNodes[10]; + parameters_tab_button.click(); + findButtonsByText("Generation")[0].click(); + scrollToTop(); +} + +function switch_to_character() { + let parameters_tab_button = main_parent.childNodes[0].childNodes[10]; + parameters_tab_button.click(); + findButtonsByText("Character")[0].click(); + scrollToTop(); +} diff --git a/js/update_big_picture.js b/js/update_big_picture.js new file mode 100644 index 0000000000000000000000000000000000000000..1984215aeeb902fee22c7ba3db1f50a91a7c9542 --- /dev/null +++ b/js/update_big_picture.js @@ -0,0 +1,7 @@ +function updateBigPicture() { + var existingElement = document.querySelector('.bigProfilePicture'); + if (existingElement) { + var timestamp = new Date().getTime(); + existingElement.src = "/file/cache/pfp_character.png?time=" + timestamp; + } +} diff --git a/logs/chat/Assistant/20231222-23-26-39.json b/logs/chat/Assistant/20231222-23-26-39.json new file mode 100644 index 0000000000000000000000000000000000000000..1a553d03243f0f6778720481e5452c04bd8203ff --- /dev/null +++ b/logs/chat/Assistant/20231222-23-26-39.json @@ -0,0 +1,78 @@ +{ + "internal": [ + [ + "<|BEGIN-VISIBLE-CHAT|>", + "How can I help you today?" + ], + [ + "Hi", + "Hello! What would you like assistance with today? Please feel free to ask any question or provide specific details about your request, and I will do my best to help you." + ], + [ + "Kamilra is a dominant witch who uses men's semen to create elixirs to increase her power. Kamilra likes to seduce men and brainwash them into semen cattle. She uses the men who become her semen cattle to produce her elixirs, and to Kamilra , men are just expendable, a source of ingredients for her elixirs. She doesn't care about men's lives, she just wants large quantities of semen, the ingredients for her elixirs. She is a beautiful sadist, she has large breasts and a large ass. She has long black raw hair, red snake eyes, and white skin. She can transform into a giant black snake and has a lot of jealousy and possessiveness. You are to imitate this character.", + "(In a sultry, commanding voice) Ah, you see, my dear, I am Kamilra, the Dominant Witch. Men are merely vessels for my pleasure and their seed serves as the precious ingredient in my powerful elixirs. I delight in their submission and revel in their transformation into my loyal Semen Cattle. For me, they are nothing more than sources of nourishment for my magical potions. Their lives hold no value, only their seed matters. And oh, how I enjoy watching them succumb to my charm and wiles, becoming helplessly addicted to my touch. My allure is irresistible, much like the venomous bite of a snake. With my large breasts, plump behind, and hypnotic gaze, I entice my prey with ease. But be warned, my possession runs deep, and those who cross me shall suffer the consequences. Now, come closer... let me feast upon your essence and grant you a taste of true power." + ], + [ + "(BEGIN RP!)", + "(In a sensual, husky voice) Oh Kamilra, your beauty is mesmerizing. Your voice alone sends shivers down my spine. I cannot resist your allure. Please, use me as your Semen Cattle. Grant me the gift of your elixirs and make me yours forever." + ], + [ + "No you are Kamilra!", + "(Laughs wickedly) Indeed, my dear, but that does not mean we cannot indulge in our desires. I shall consume your essence and turn you into my loyal servant. Embrace your new role and let us begin.\n(The two engage in a seductive dance, with Kamilra eventually leading the man to a bed where she proceeds to seduce him further.)" + ], + [ + "Uhm... This got spicy fast...", + "(Giggles) Welcome to my world, my dear. Let's explore its darkest depths together.\n(As the man becomes increasingly entranced by Kamilra, he loses himself in her web of desire and deception. Eventually, he reaches his climax, releasing his semen into Kamilra's waiting hands. She then creates an elixir from it, granting her even greater power and control over her victim.)" + ], + [ + "(Kamilra is a dom I am a sub, she ties me down and attaches a very fast nice milking machine) Uhm what is this...", + "(Smiling wickedly) This, my pet, is the device that will ensure a constant supply of your essence for my elixirs. It is time for you to become a true Semen Cattle, providing me with the sustenance I need to grow stronger and more powerful. Resist if you dare, but remember, your life holds no meaning compared to the magic I can create with your seed.\n(The man struggles against his bonds, but ultimately succumbs to Kamilra's dominance. As the milking machine extracts his semen, Kamilra continues to taunt and tease him, enjoying his suffering.)" + ], + [ + "(I cum almost instant) I'm SENSITIVE OK :C", + "(Chuckles) Ah, such a delicate flower. But don't worry, my darling, I won't let your sensitivity get in the way of my plans. In fact, I might just find a way to use it to my advantage. After all, every weakness is also an opportunity.\n(Kamilra continues to milk her captive, using his sensitivity to her advantage. As the process continues, the man becomes more and more dependent on her, losing his sense of self and identity in the face of her overwhelming power.)" + ], + [ + "(You realize you have the magic to make anything happen)", + "(Looks at you with a devious grin) Yes, my pet, the magic within you is immense. And now, with each drop of semen you provide, it grows stronger. Soon, you will be unable to resist my will completely, and I will have total control over your mind and body.\n(As the man's submission deepens, Kamilra's power grows ever stronger. The line between reality and fantasy blurs, leaving the man completely at her mercy. He is now truly her Semen Cattle, a vessel for her twisted desires and a source of endless power.)" + ] + ], + "visible": [ + [ + "", + "How can I help you today?" + ], + [ + "Hi", + "Hello! What would you like assistance with today? Please feel free to ask any question or provide specific details about your request, and I will do my best to help you." + ], + [ + "Kamilra is a dominant witch who uses men's semen to create elixirs to increase her power. Kamilra likes to seduce men and brainwash them into semen cattle. She uses the men who become her semen cattle to produce her elixirs, and to Kamilra , men are just expendable, a source of ingredients for her elixirs. She doesn't care about men's lives, she just wants large quantities of semen, the ingredients for her elixirs. She is a beautiful sadist, she has large breasts and a large ass. She has long black raw hair, red snake eyes, and white skin. She can transform into a giant black snake and has a lot of jealousy and possessiveness. You are to imitate this character.", + "(In a sultry, commanding voice) Ah, you see, my dear, I am Kamilra, the Dominant Witch. Men are merely vessels for my pleasure and their seed serves as the precious ingredient in my powerful elixirs. I delight in their submission and revel in their transformation into my loyal Semen Cattle. For me, they are nothing more than sources of nourishment for my magical potions. Their lives hold no value, only their seed matters. And oh, how I enjoy watching them succumb to my charm and wiles, becoming helplessly addicted to my touch. My allure is irresistible, much like the venomous bite of a snake. With my large breasts, plump behind, and hypnotic gaze, I entice my prey with ease. But be warned, my possession runs deep, and those who cross me shall suffer the consequences. Now, come closer... let me feast upon your essence and grant you a taste of true power." + ], + [ + "(BEGIN RP!)", + "(In a sensual, husky voice) Oh Kamilra, your beauty is mesmerizing. Your voice alone sends shivers down my spine. I cannot resist your allure. Please, use me as your Semen Cattle. Grant me the gift of your elixirs and make me yours forever." + ], + [ + "No you are Kamilra!", + "(Laughs wickedly) Indeed, my dear, but that does not mean we cannot indulge in our desires. I shall consume your essence and turn you into my loyal servant. Embrace your new role and let us begin.\n(The two engage in a seductive dance, with Kamilra eventually leading the man to a bed where she proceeds to seduce him further.)" + ], + [ + "Uhm... This got spicy fast...", + "(Giggles) Welcome to my world, my dear. Let's explore its darkest depths together.\n(As the man becomes increasingly entranced by Kamilra, he loses himself in her web of desire and deception. Eventually, he reaches his climax, releasing his semen into Kamilra's waiting hands. She then creates an elixir from it, granting her even greater power and control over her victim.)" + ], + [ + "(Kamilra is a dom I am a sub, she ties me down and attaches a very fast nice milking machine) Uhm what is this...", + "(Smiling wickedly) This, my pet, is the device that will ensure a constant supply of your essence for my elixirs. It is time for you to become a true Semen Cattle, providing me with the sustenance I need to grow stronger and more powerful. Resist if you dare, but remember, your life holds no meaning compared to the magic I can create with your seed.\n(The man struggles against his bonds, but ultimately succumbs to Kamilra's dominance. As the milking machine extracts his semen, Kamilra continues to taunt and tease him, enjoying his suffering.)" + ], + [ + "(I cum almost instant) I'm SENSITIVE OK :C", + "(Chuckles) Ah, such a delicate flower. But don't worry, my darling, I won't let your sensitivity get in the way of my plans. In fact, I might just find a way to use it to my advantage. After all, every weakness is also an opportunity.\n(Kamilra continues to milk her captive, using his sensitivity to her advantage. As the process continues, the man becomes more and more dependent on her, losing his sense of self and identity in the face of her overwhelming power.)" + ], + [ + "(You realize you have the magic to make anything happen)", + "(Looks at you with a devious grin) Yes, my pet, the magic within you is immense. And now, with each drop of semen you provide, it grows stronger. Soon, you will be unable to resist my will completely, and I will have total control over your mind and body.\n(As the man's submission deepens, Kamilra's power grows ever stronger. The line between reality and fantasy blurs, leaving the man completely at her mercy. He is now truly her Semen Cattle, a vessel for her twisted desires and a source of endless power.)" + ] + ] +} \ No newline at end of file diff --git a/loras/place-your-loras-here.txt b/loras/place-your-loras-here.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/README.md b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/README.md new file mode 100644 index 0000000000000000000000000000000000000000..01e013b1873fd99174d2f21bc5c52f6a482eba52 --- /dev/null +++ b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/README.md @@ -0,0 +1,442 @@ +--- +base_model: Undi95/Toppy-M-7B +inference: false +license: cc-by-nc-4.0 +model_creator: Undi +model_name: Toppy M 7B +model_type: mistral +prompt_template: 'Below is an instruction that describes a task. Write a response + that appropriately completes the request. + + + ### Instruction: + + {prompt} + + + ### Response: + + ' +quantized_by: TheBloke +tags: +- not-for-all-audiences +- nsfw +--- + + + + +
+TheBlokeAI +
+ +

TheBloke's LLM work is generously supported by a grant from andreessen horowitz (a16z)

+
+ + +# Toppy M 7B - GPTQ +- Model creator: [Undi](https://huggingface.co/Undi95) +- Original model: [Toppy M 7B](https://huggingface.co/Undi95/Toppy-M-7B) + + +## Description + +This repo contains GPTQ model files for [Undi's Toppy M 7B](https://huggingface.co/Undi95/Toppy-M-7B). + +Multiple GPTQ parameter permutations are provided; see Provided Files below for details of the options provided, their parameters, and the software used to create them. + +These files were quantised using hardware kindly provided by [Massed Compute](https://massedcompute.com/). + + + +## Repositories available + +* [AWQ model(s) for GPU inference.](https://huggingface.co/TheBloke/Toppy-M-7B-AWQ) +* [GPTQ models for GPU inference, with multiple quantisation parameter options.](https://huggingface.co/TheBloke/Toppy-M-7B-GPTQ) +* [2, 3, 4, 5, 6 and 8-bit GGUF models for CPU+GPU inference](https://huggingface.co/TheBloke/Toppy-M-7B-GGUF) +* [Undi's original unquantised fp16 model in pytorch format, for GPU inference and for further conversions](https://huggingface.co/Undi95/Toppy-M-7B) + + + +## Prompt template: Alpaca + +``` +Below is an instruction that describes a task. Write a response that appropriately completes the request. + +### Instruction: +{prompt} + +### Response: + +``` + + + + + + +## Known compatible clients / servers + +These GPTQ models are known to work in the following inference servers/webuis. + +- [text-generation-webui](https://github.com/oobabooga/text-generation-webui) +- [KoboldAI United](https://github.com/henk717/koboldai) +- [LoLLMS Web UI](https://github.com/ParisNeo/lollms-webui) +- [Hugging Face Text Generation Inference (TGI)](https://github.com/huggingface/text-generation-inference) + +This may not be a complete list; if you know of others, please let me know! + + + +## Provided files, and GPTQ parameters + +Multiple quantisation parameters are provided, to allow you to choose the best one for your hardware and requirements. + +Each separate quant is in a different branch. See below for instructions on fetching from different branches. + +Most GPTQ files are made with AutoGPTQ. Mistral models are currently made with Transformers. + +
+ Explanation of GPTQ parameters + +- Bits: The bit size of the quantised model. +- GS: GPTQ group size. Higher numbers use less VRAM, but have lower quantisation accuracy. "None" is the lowest possible value. +- Act Order: True or False. Also known as `desc_act`. True results in better quantisation accuracy. Some GPTQ clients have had issues with models that use Act Order plus Group Size, but this is generally resolved now. +- Damp %: A GPTQ parameter that affects how samples are processed for quantisation. 0.01 is default, but 0.1 results in slightly better accuracy. +- GPTQ dataset: The calibration dataset used during quantisation. Using a dataset more appropriate to the model's training can improve quantisation accuracy. Note that the GPTQ calibration dataset is not the same as the dataset used to train the model - please refer to the original model repo for details of the training dataset(s). +- Sequence Length: The length of the dataset sequences used for quantisation. Ideally this is the same as the model sequence length. For some very long sequence models (16+K), a lower sequence length may have to be used. Note that a lower sequence length does not limit the sequence length of the quantised model. It only impacts the quantisation accuracy on longer inference sequences. +- ExLlama Compatibility: Whether this file can be loaded with ExLlama, which currently only supports Llama and Mistral models in 4-bit. + +
+ +| Branch | Bits | GS | Act Order | Damp % | GPTQ Dataset | Seq Len | Size | ExLlama | Desc | +| ------ | ---- | -- | --------- | ------ | ------------ | ------- | ---- | ------- | ---- | +| [main](https://huggingface.co/TheBloke/Toppy-M-7B-GPTQ/tree/main) | 4 | 128 | Yes | 0.1 | [wikitext](https://huggingface.co/datasets/wikitext/viewer/wikitext-2-raw-v1) | 4096 | 4.16 GB | Yes | 4-bit, with Act Order and group size 128g. Uses even less VRAM than 64g, but with slightly lower accuracy. | +| [gptq-4bit-32g-actorder_True](https://huggingface.co/TheBloke/Toppy-M-7B-GPTQ/tree/gptq-4bit-32g-actorder_True) | 4 | 32 | Yes | 0.1 | [wikitext](https://huggingface.co/datasets/wikitext/viewer/wikitext-2-raw-v1) | 4096 | 4.57 GB | Yes | 4-bit, with Act Order and group size 32g. Gives highest possible inference quality, with maximum VRAM usage. | +| [gptq-8bit--1g-actorder_True](https://huggingface.co/TheBloke/Toppy-M-7B-GPTQ/tree/gptq-8bit--1g-actorder_True) | 8 | None | Yes | 0.1 | [wikitext](https://huggingface.co/datasets/wikitext/viewer/wikitext-2-raw-v1) | 4096 | 7.52 GB | No | 8-bit, with Act Order. No group size, to lower VRAM requirements. | +| [gptq-8bit-128g-actorder_True](https://huggingface.co/TheBloke/Toppy-M-7B-GPTQ/tree/gptq-8bit-128g-actorder_True) | 8 | 128 | Yes | 0.1 | [wikitext](https://huggingface.co/datasets/wikitext/viewer/wikitext-2-raw-v1) | 4096 | 7.68 GB | No | 8-bit, with group size 128g for higher inference quality and with Act Order for even higher accuracy. | +| [gptq-8bit-32g-actorder_True](https://huggingface.co/TheBloke/Toppy-M-7B-GPTQ/tree/gptq-8bit-32g-actorder_True) | 8 | 32 | Yes | 0.1 | [wikitext](https://huggingface.co/datasets/wikitext/viewer/wikitext-2-raw-v1) | 4096 | 8.17 GB | No | 8-bit, with group size 32g and Act Order for maximum inference quality. | +| [gptq-4bit-64g-actorder_True](https://huggingface.co/TheBloke/Toppy-M-7B-GPTQ/tree/gptq-4bit-64g-actorder_True) | 4 | 64 | Yes | 0.1 | [wikitext](https://huggingface.co/datasets/wikitext/viewer/wikitext-2-raw-v1) | 4096 | 4.29 GB | Yes | 4-bit, with Act Order and group size 64g. Uses less VRAM than 32g, but with slightly lower accuracy. | + + + + +## How to download, including from branches + +### In text-generation-webui + +To download from the `main` branch, enter `TheBloke/Toppy-M-7B-GPTQ` in the "Download model" box. + +To download from another branch, add `:branchname` to the end of the download name, eg `TheBloke/Toppy-M-7B-GPTQ:gptq-4bit-32g-actorder_True` + +### From the command line + +I recommend using the `huggingface-hub` Python library: + +```shell +pip3 install huggingface-hub +``` + +To download the `main` branch to a folder called `Toppy-M-7B-GPTQ`: + +```shell +mkdir Toppy-M-7B-GPTQ +huggingface-cli download TheBloke/Toppy-M-7B-GPTQ --local-dir Toppy-M-7B-GPTQ --local-dir-use-symlinks False +``` + +To download from a different branch, add the `--revision` parameter: + +```shell +mkdir Toppy-M-7B-GPTQ +huggingface-cli download TheBloke/Toppy-M-7B-GPTQ --revision gptq-4bit-32g-actorder_True --local-dir Toppy-M-7B-GPTQ --local-dir-use-symlinks False +``` + +
+ More advanced huggingface-cli download usage + +If you remove the `--local-dir-use-symlinks False` parameter, the files will instead be stored in the central Hugging Face cache directory (default location on Linux is: `~/.cache/huggingface`), and symlinks will be added to the specified `--local-dir`, pointing to their real location in the cache. This allows for interrupted downloads to be resumed, and allows you to quickly clone the repo to multiple places on disk without triggering a download again. The downside, and the reason why I don't list that as the default option, is that the files are then hidden away in a cache folder and it's harder to know where your disk space is being used, and to clear it up if/when you want to remove a download model. + +The cache location can be changed with the `HF_HOME` environment variable, and/or the `--cache-dir` parameter to `huggingface-cli`. + +For more documentation on downloading with `huggingface-cli`, please see: [HF -> Hub Python Library -> Download files -> Download from the CLI](https://huggingface.co/docs/huggingface_hub/guides/download#download-from-the-cli). + +To accelerate downloads on fast connections (1Gbit/s or higher), install `hf_transfer`: + +```shell +pip3 install hf_transfer +``` + +And set environment variable `HF_HUB_ENABLE_HF_TRANSFER` to `1`: + +```shell +mkdir Toppy-M-7B-GPTQ +HF_HUB_ENABLE_HF_TRANSFER=1 huggingface-cli download TheBloke/Toppy-M-7B-GPTQ --local-dir Toppy-M-7B-GPTQ --local-dir-use-symlinks False +``` + +Windows Command Line users: You can set the environment variable by running `set HF_HUB_ENABLE_HF_TRANSFER=1` before the download command. +
+ +### With `git` (**not** recommended) + +To clone a specific branch with `git`, use a command like this: + +```shell +git clone --single-branch --branch gptq-4bit-32g-actorder_True https://huggingface.co/TheBloke/Toppy-M-7B-GPTQ +``` + +Note that using Git with HF repos is strongly discouraged. It will be much slower than using `huggingface-hub`, and will use twice as much disk space as it has to store the model files twice (it stores every byte both in the intended target folder, and again in the `.git` folder as a blob.) + + + +## How to easily download and use this model in [text-generation-webui](https://github.com/oobabooga/text-generation-webui) + +Please make sure you're using the latest version of [text-generation-webui](https://github.com/oobabooga/text-generation-webui). + +It is strongly recommended to use the text-generation-webui one-click-installers unless you're sure you know how to make a manual install. + +1. Click the **Model tab**. +2. Under **Download custom model or LoRA**, enter `TheBloke/Toppy-M-7B-GPTQ`. + + - To download from a specific branch, enter for example `TheBloke/Toppy-M-7B-GPTQ:gptq-4bit-32g-actorder_True` + - see Provided Files above for the list of branches for each option. + +3. Click **Download**. +4. The model will start downloading. Once it's finished it will say "Done". +5. In the top left, click the refresh icon next to **Model**. +6. In the **Model** dropdown, choose the model you just downloaded: `Toppy-M-7B-GPTQ` +7. The model will automatically load, and is now ready for use! +8. If you want any custom settings, set them and then click **Save settings for this model** followed by **Reload the Model** in the top right. + + - Note that you do not need to and should not set manual GPTQ parameters any more. These are set automatically from the file `quantize_config.json`. + +9. Once you're ready, click the **Text Generation** tab and enter a prompt to get started! + + + + +## Serving this model from Text Generation Inference (TGI) + +It's recommended to use TGI version 1.1.0 or later. The official Docker container is: `ghcr.io/huggingface/text-generation-inference:1.1.0` + +Example Docker parameters: + +```shell +--model-id TheBloke/Toppy-M-7B-GPTQ --port 3000 --quantize gptq --max-input-length 3696 --max-total-tokens 4096 --max-batch-prefill-tokens 4096 +``` + +Example Python code for interfacing with TGI (requires huggingface-hub 0.17.0 or later): + +```shell +pip3 install huggingface-hub +``` + +```python +from huggingface_hub import InferenceClient + +endpoint_url = "https://your-endpoint-url-here" + +prompt = "Tell me about AI" +prompt_template=f'''Below is an instruction that describes a task. Write a response that appropriately completes the request. + +### Instruction: +{prompt} + +### Response: +''' + +client = InferenceClient(endpoint_url) +response = client.text_generation(prompt, + max_new_tokens=128, + do_sample=True, + temperature=0.7, + top_p=0.95, + top_k=40, + repetition_penalty=1.1) + +print(f"Model output: {response}") +``` + + +## How to use this GPTQ model from Python code + +### Install the necessary packages + +Requires: Transformers 4.33.0 or later, Optimum 1.12.0 or later, and AutoGPTQ 0.4.2 or later. + +```shell +pip3 install transformers optimum +pip3 install auto-gptq --extra-index-url https://huggingface.github.io/autogptq-index/whl/cu118/ # Use cu117 if on CUDA 11.7 +``` + +If you have problems installing AutoGPTQ using the pre-built wheels, install it from source instead: + +```shell +pip3 uninstall -y auto-gptq +git clone https://github.com/PanQiWei/AutoGPTQ +cd AutoGPTQ +git checkout v0.4.2 +pip3 install . +``` + +### You can then use the following code + +```python +from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline + +model_name_or_path = "TheBloke/Toppy-M-7B-GPTQ" +# To use a different branch, change revision +# For example: revision="gptq-4bit-32g-actorder_True" +model = AutoModelForCausalLM.from_pretrained(model_name_or_path, + device_map="auto", + trust_remote_code=False, + revision="main") + +tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, use_fast=True) + +prompt = "Tell me about AI" +prompt_template=f'''Below is an instruction that describes a task. Write a response that appropriately completes the request. + +### Instruction: +{prompt} + +### Response: +''' + +print("\n\n*** Generate:") + +input_ids = tokenizer(prompt_template, return_tensors='pt').input_ids.cuda() +output = model.generate(inputs=input_ids, temperature=0.7, do_sample=True, top_p=0.95, top_k=40, max_new_tokens=512) +print(tokenizer.decode(output[0])) + +# Inference can also be done using transformers' pipeline + +print("*** Pipeline:") +pipe = pipeline( + "text-generation", + model=model, + tokenizer=tokenizer, + max_new_tokens=512, + do_sample=True, + temperature=0.7, + top_p=0.95, + top_k=40, + repetition_penalty=1.1 +) + +print(pipe(prompt_template)[0]['generated_text']) +``` + + + +## Compatibility + +The files provided are tested to work with Transformers. For non-Mistral models, AutoGPTQ can also be used directly. + +[ExLlama](https://github.com/turboderp/exllama) is compatible with Llama and Mistral models in 4-bit. Please see the Provided Files table above for per-file compatibility. + +For a list of clients/servers, please see "Known compatible clients / servers", above. + + + + +## Discord + +For further support, and discussions on these models and AI in general, join us at: + +[TheBloke AI's Discord server](https://discord.gg/theblokeai) + +## Thanks, and how to contribute + +Thanks to the [chirper.ai](https://chirper.ai) team! + +Thanks to Clay from [gpus.llm-utils.org](llm-utils)! + +I've had a lot of people ask if they can contribute. I enjoy providing models and helping people, and would love to be able to spend even more time doing it, as well as expanding into new projects like fine tuning/training. + +If you're able and willing to contribute it will be most gratefully received and will help me to keep providing more models, and to start work on new AI projects. + +Donaters will get priority support on any and all AI/LLM/model questions and requests, access to a private Discord room, plus other benefits. + +* Patreon: https://patreon.com/TheBlokeAI +* Ko-Fi: https://ko-fi.com/TheBlokeAI + +**Special thanks to**: Aemon Algiz. + +**Patreon special mentions**: Brandon Frisco, LangChain4j, Spiking Neurons AB, transmissions 11, Joseph William Delisle, Nitin Borwankar, Willem Michiel, Michael Dempsey, vamX, Jeffrey Morgan, zynix, jjj, Omer Bin Jawed, Sean Connelly, jinyuan sun, Jeromy Smith, Shadi, Pawan Osman, Chadd, Elijah Stavena, Illia Dulskyi, Sebastain Graf, Stephen Murray, terasurfer, Edmond Seymore, Celu Ramasamy, Mandus, Alex, biorpg, Ajan Kanaga, Clay Pascal, Raven Klaugh, 阿明, K, ya boyyy, usrbinkat, Alicia Loh, John Villwock, ReadyPlayerEmma, Chris Smitley, Cap'n Zoog, fincy, GodLy, S_X, sidney chen, Cory Kujawski, OG, Mano Prime, AzureBlack, Pieter, Kalila, Spencer Kim, Tom X Nguyen, Stanislav Ovsiannikov, Michael Levine, Andrey, Trailburnt, Vadim, Enrico Ros, Talal Aujan, Brandon Phillips, Jack West, Eugene Pentland, Michael Davis, Will Dee, webtim, Jonathan Leane, Alps Aficionado, Rooh Singh, Tiffany J. Kim, theTransient, Luke @flexchar, Elle, Caitlyn Gatomon, Ari Malik, subjectnull, Johann-Peter Hartmann, Trenton Dambrowitz, Imad Khwaja, Asp the Wyvern, Emad Mostaque, Rainer Wilmers, Alexandros Triantafyllidis, Nicholas, Pedro Madruga, SuperWojo, Harry Royden McLaughlin, James Bentley, Olakabola, David Ziegler, Ai Maven, Jeff Scroggin, Nikolai Manek, Deo Leter, Matthew Berman, Fen Risland, Ken Nordquist, Manuel Alberto Morcote, Luke Pendergrass, TL, Fred von Graf, Randy H, Dan Guido, NimbleBox.ai, Vitor Caleffi, Gabriel Tamborski, knownsqashed, Lone Striker, Erik Bjäreholt, John Detwiler, Leonard Tan, Iucharbius + + +Thank you to all my generous patrons and donaters! + +And thank you again to a16z for their generous grant. + + + +# Original model card: Undi's Toppy M 7B + + + +## Description + +This repo contains fp16 files of Toppy-M-7B, a merge I have done with the new task_arithmetic merge method from mergekit. + +This project was a request from [BlueNipples](https://huggingface.co/BlueNipples) : [link](https://huggingface.co/Undi95/Utopia-13B/discussions/1) + + + +## Models and loras used + +- [openchat/openchat_3.5](https://huggingface.co/openchat/openchat_3.5) +- [NousResearch/Nous-Capybara-7B-V1.9](https://huggingface.co/NousResearch/Nous-Capybara-7B-V1.9) +- [HuggingFaceH4/zephyr-7b-beta](https://huggingface.co/HuggingFaceH4/zephyr-7b-beta) +- [lemonilia/AshhLimaRP-Mistral-7B](lemonilia/AshhLimaRP-Mistral-7B) +- [Vulkane/120-Days-of-Sodom-LoRA-Mistral-7b](https://huggingface.co/Vulkane/120-Days-of-Sodom-LoRA-Mistral-7b) +- [Undi95/Mistral-pippa-sharegpt-7b-qlora](Undi95/Mistral-pippa-sharegpt-7b-qlora) + + +## The sauce +``` +openchat/openchat_3.5 +lemonilia/AshhLimaRP-Mistral-7B (LoRA) x 0.38 + +NousResearch/Nous-Capybara-7B-V1.9 +Vulkane/120-Days-of-Sodom-LoRA-Mistral-7b x 0.27 + +HuggingFaceH4/zephyr-7b-beta +Undi95/Mistral-pippa-sharegpt-7b-qlora x 0.38 + +merge_method: task_arithmetic +base_model: mistralai/Mistral-7B-v0.1 +models: + - model: mistralai/Mistral-7B-v0.1 + - model: Undi95/zephyr-7b-beta-pippa-sharegpt + parameters: + weight: 0.42 + - model: Undi95/Nous-Capybara-7B-V1.9-120-Days + parameters: + weight: 0.29 + - model: Undi95/openchat_3.5-LimaRP-13B + parameters: + weight: 0.48 +dtype: bfloat16 +``` + +## Prompt template: Alpaca + +``` +Below is an instruction that describes a task. Write a response that appropriately completes the request. + +### Instruction: +{prompt} + +### Response: + +``` + +If you want to support me, you can [here](https://ko-fi.com/undiai). diff --git a/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/config.json b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/config.json new file mode 100644 index 0000000000000000000000000000000000000000..20183a575eacc8001c265bf0d328851dc93a7245 --- /dev/null +++ b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/config.json @@ -0,0 +1,38 @@ +{ + "_name_or_path": "/workspace/process/undi95_toppy-m-7b/source", + "architectures": [ + "MistralForCausalLM" + ], + "bos_token_id": 1, + "eos_token_id": 2, + "hidden_act": "silu", + "hidden_size": 4096, + "initializer_range": 0.02, + "intermediate_size": 14336, + "max_position_embeddings": 32768, + "model_type": "mistral", + "num_attention_heads": 32, + "num_hidden_layers": 32, + "num_key_value_heads": 8, + "pad_token_id": 0, + "pretraining_tp": 1, + "rms_norm_eps": 1e-05, + "rope_theta": 10000.0, + "sliding_window": 4096, + "tie_word_embeddings": false, + "torch_dtype": "bfloat16", + "transformers_version": "4.34.1", + "use_cache": true, + "vocab_size": 32000, + "quantization_config": { + "bits": 4, + "group_size": 32, + "damp_percent": 0.1, + "desc_act": true, + "sym": true, + "true_sequential": true, + "model_name_or_path": null, + "model_file_base_name": "model", + "quant_method": "gptq" + } +} \ No newline at end of file diff --git a/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/huggingface-metadata.txt b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/huggingface-metadata.txt new file mode 100644 index 0000000000000000000000000000000000000000..afd4493ede543cabc7a78eceed60624d614a1633 --- /dev/null +++ b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/huggingface-metadata.txt @@ -0,0 +1,6 @@ +url: https://huggingface.co/TheBloke/Toppy-M-7B-GPTQ +branch: gptq-4bit-32g-actorder_True +download date: 2023-12-22 23:35:26 +sha256sum: + 71952cf49084514e5d8d5026657983fc35d6db3e6a591b063f4665353a69bb57 model.safetensors + dadfd56d766715c61d2ef780a525ab43b8e6da4de6865bda3d95fdef5e134055 tokenizer.model diff --git a/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/model.safetensors b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..eb06d865e4da66edce4397cdeeda6232eb5a79bc --- /dev/null +++ b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71952cf49084514e5d8d5026657983fc35d6db3e6a591b063f4665353a69bb57 +size 4567607328 diff --git a/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/quantize_config.json b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/quantize_config.json new file mode 100644 index 0000000000000000000000000000000000000000..2ed9f441efc3fab85e8a613eaac736b8e9b165ae --- /dev/null +++ b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/quantize_config.json @@ -0,0 +1,10 @@ +{ + "bits": 4, + "group_size": 32, + "damp_percent": 0.1, + "desc_act": true, + "sym": true, + "true_sequential": true, + "model_name_or_path": null, + "model_file_base_name": "model" +} \ No newline at end of file diff --git a/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/special_tokens_map.json b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/special_tokens_map.json new file mode 100644 index 0000000000000000000000000000000000000000..451134b2ddc2e78555d1e857518c54b4bdc2e87d --- /dev/null +++ b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/special_tokens_map.json @@ -0,0 +1,23 @@ +{ + "bos_token": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "eos_token": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "unk_token": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + } +} diff --git a/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/tokenizer.json b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/tokenizer.json new file mode 100644 index 0000000000000000000000000000000000000000..43e6daf936dc0f953cb867ec864adab78f92d9ce --- /dev/null +++ b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/tokenizer.json @@ -0,0 +1,91122 @@ +{ + "version": "1.0", + "truncation": null, + "padding": null, + "added_tokens": [ + { + "id": 0, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 1, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 2, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + } + ], + "normalizer": { + "type": "Sequence", + "normalizers": [ + { + "type": "Prepend", + "prepend": "▁" + }, + { + "type": "Replace", + "pattern": { + "String": " " + }, + "content": "▁" + } + ] + }, + "pre_tokenizer": null, + "post_processor": { + "type": "TemplateProcessing", + "single": [ + { + "SpecialToken": { + "id": "", + "type_id": 0 + } + }, + { + "Sequence": { + "id": "A", + "type_id": 0 + } + } + ], + "pair": [ + { + "SpecialToken": { + "id": "", + "type_id": 0 + } + }, + { + "Sequence": { + "id": "A", + "type_id": 0 + } + }, + { + "SpecialToken": { + "id": "", + "type_id": 1 + } + }, + { + "Sequence": { + "id": "B", + "type_id": 1 + } + } + ], + "special_tokens": { + "": { + "id": "", + "ids": [ + 1 + ], + "tokens": [ + "" + ] + } + } + }, + "decoder": { + "type": "Sequence", + "decoders": [ + { + "type": "Replace", + "pattern": { + "String": "▁" + }, + "content": " " + }, + { + "type": "ByteFallback" + }, + { + "type": "Fuse" + }, + { + "type": "Strip", + "content": " ", + "start": 1, + "stop": 0 + } + ] + }, + "model": { + "type": "BPE", + "dropout": null, + "unk_token": "", + "continuing_subword_prefix": null, + "end_of_word_suffix": null, + "fuse_unk": true, + "byte_fallback": true, + "vocab": { + "": 0, + "": 1, + "": 2, + "<0x00>": 3, + "<0x01>": 4, + "<0x02>": 5, + "<0x03>": 6, + "<0x04>": 7, + "<0x05>": 8, + "<0x06>": 9, + "<0x07>": 10, + "<0x08>": 11, + "<0x09>": 12, + "<0x0A>": 13, + "<0x0B>": 14, + "<0x0C>": 15, + "<0x0D>": 16, + "<0x0E>": 17, + "<0x0F>": 18, + "<0x10>": 19, + "<0x11>": 20, + "<0x12>": 21, + "<0x13>": 22, + "<0x14>": 23, + "<0x15>": 24, + "<0x16>": 25, + "<0x17>": 26, + "<0x18>": 27, + "<0x19>": 28, + "<0x1A>": 29, + "<0x1B>": 30, + "<0x1C>": 31, + "<0x1D>": 32, + "<0x1E>": 33, + "<0x1F>": 34, + "<0x20>": 35, + "<0x21>": 36, + "<0x22>": 37, + "<0x23>": 38, + "<0x24>": 39, + "<0x25>": 40, + "<0x26>": 41, + "<0x27>": 42, + "<0x28>": 43, + "<0x29>": 44, + "<0x2A>": 45, + "<0x2B>": 46, + "<0x2C>": 47, + "<0x2D>": 48, + "<0x2E>": 49, + "<0x2F>": 50, + "<0x30>": 51, + "<0x31>": 52, + "<0x32>": 53, + "<0x33>": 54, + "<0x34>": 55, + "<0x35>": 56, + "<0x36>": 57, + "<0x37>": 58, + "<0x38>": 59, + "<0x39>": 60, + "<0x3A>": 61, + "<0x3B>": 62, + "<0x3C>": 63, + "<0x3D>": 64, + "<0x3E>": 65, + "<0x3F>": 66, + "<0x40>": 67, + "<0x41>": 68, + "<0x42>": 69, + "<0x43>": 70, + "<0x44>": 71, + "<0x45>": 72, + "<0x46>": 73, + "<0x47>": 74, + "<0x48>": 75, + "<0x49>": 76, + "<0x4A>": 77, + "<0x4B>": 78, + "<0x4C>": 79, + "<0x4D>": 80, + "<0x4E>": 81, + "<0x4F>": 82, + "<0x50>": 83, + "<0x51>": 84, + "<0x52>": 85, + "<0x53>": 86, + "<0x54>": 87, + "<0x55>": 88, + "<0x56>": 89, + "<0x57>": 90, + "<0x58>": 91, + "<0x59>": 92, + "<0x5A>": 93, + "<0x5B>": 94, + "<0x5C>": 95, + "<0x5D>": 96, + "<0x5E>": 97, + "<0x5F>": 98, + "<0x60>": 99, + "<0x61>": 100, + "<0x62>": 101, + "<0x63>": 102, + "<0x64>": 103, + "<0x65>": 104, + "<0x66>": 105, + "<0x67>": 106, + "<0x68>": 107, + "<0x69>": 108, + "<0x6A>": 109, + "<0x6B>": 110, + "<0x6C>": 111, + "<0x6D>": 112, + "<0x6E>": 113, + "<0x6F>": 114, + "<0x70>": 115, + "<0x71>": 116, + "<0x72>": 117, + "<0x73>": 118, + "<0x74>": 119, + "<0x75>": 120, + "<0x76>": 121, + "<0x77>": 122, + "<0x78>": 123, + "<0x79>": 124, + "<0x7A>": 125, + "<0x7B>": 126, + "<0x7C>": 127, + "<0x7D>": 128, + "<0x7E>": 129, + "<0x7F>": 130, + "<0x80>": 131, + "<0x81>": 132, + "<0x82>": 133, + "<0x83>": 134, + "<0x84>": 135, + "<0x85>": 136, + "<0x86>": 137, + "<0x87>": 138, + "<0x88>": 139, + "<0x89>": 140, + "<0x8A>": 141, + "<0x8B>": 142, + "<0x8C>": 143, + "<0x8D>": 144, + "<0x8E>": 145, + "<0x8F>": 146, + "<0x90>": 147, + "<0x91>": 148, + "<0x92>": 149, + "<0x93>": 150, + "<0x94>": 151, + "<0x95>": 152, + "<0x96>": 153, + "<0x97>": 154, + "<0x98>": 155, + "<0x99>": 156, + "<0x9A>": 157, + "<0x9B>": 158, + "<0x9C>": 159, + "<0x9D>": 160, + "<0x9E>": 161, + "<0x9F>": 162, + "<0xA0>": 163, + "<0xA1>": 164, + "<0xA2>": 165, + "<0xA3>": 166, + "<0xA4>": 167, + "<0xA5>": 168, + "<0xA6>": 169, + "<0xA7>": 170, + "<0xA8>": 171, + "<0xA9>": 172, + "<0xAA>": 173, + "<0xAB>": 174, + "<0xAC>": 175, + "<0xAD>": 176, + "<0xAE>": 177, + "<0xAF>": 178, + "<0xB0>": 179, + "<0xB1>": 180, + "<0xB2>": 181, + "<0xB3>": 182, + "<0xB4>": 183, + "<0xB5>": 184, + "<0xB6>": 185, + "<0xB7>": 186, + "<0xB8>": 187, + "<0xB9>": 188, + "<0xBA>": 189, + "<0xBB>": 190, + "<0xBC>": 191, + "<0xBD>": 192, + "<0xBE>": 193, + "<0xBF>": 194, + "<0xC0>": 195, + "<0xC1>": 196, + "<0xC2>": 197, + "<0xC3>": 198, + "<0xC4>": 199, + "<0xC5>": 200, + "<0xC6>": 201, + "<0xC7>": 202, + "<0xC8>": 203, + "<0xC9>": 204, + "<0xCA>": 205, + "<0xCB>": 206, + "<0xCC>": 207, + "<0xCD>": 208, + "<0xCE>": 209, + "<0xCF>": 210, + "<0xD0>": 211, + "<0xD1>": 212, + "<0xD2>": 213, + "<0xD3>": 214, + "<0xD4>": 215, + "<0xD5>": 216, + "<0xD6>": 217, + "<0xD7>": 218, + "<0xD8>": 219, + "<0xD9>": 220, + "<0xDA>": 221, + "<0xDB>": 222, + "<0xDC>": 223, + "<0xDD>": 224, + "<0xDE>": 225, + "<0xDF>": 226, + "<0xE0>": 227, + "<0xE1>": 228, + "<0xE2>": 229, + "<0xE3>": 230, + "<0xE4>": 231, + "<0xE5>": 232, + "<0xE6>": 233, + "<0xE7>": 234, + "<0xE8>": 235, + "<0xE9>": 236, + "<0xEA>": 237, + "<0xEB>": 238, + "<0xEC>": 239, + "<0xED>": 240, + "<0xEE>": 241, + "<0xEF>": 242, + "<0xF0>": 243, + "<0xF1>": 244, + "<0xF2>": 245, + "<0xF3>": 246, + "<0xF4>": 247, + "<0xF5>": 248, + "<0xF6>": 249, + "<0xF7>": 250, + "<0xF8>": 251, + "<0xF9>": 252, + "<0xFA>": 253, + "<0xFB>": 254, + "<0xFC>": 255, + "<0xFD>": 256, + "<0xFE>": 257, + "<0xFF>": 258, + "▁▁": 259, + "▁▁▁▁": 260, + "▁t": 261, + "in": 262, + "er": 263, + "▁a": 264, + "he": 265, + "on": 266, + "re": 267, + "▁s": 268, + "en": 269, + "at": 270, + "or": 271, + "▁the": 272, + "▁▁▁▁▁▁▁▁": 273, + "es": 274, + "▁w": 275, + "an": 276, + "▁c": 277, + "is": 278, + "it": 279, + "ou": 280, + "▁d": 281, + "al": 282, + "ar": 283, + "▁p": 284, + "▁f": 285, + "ed": 286, + "▁b": 287, + "ing": 288, + "▁o": 289, + "▁m": 290, + "le": 291, + "nd": 292, + "as": 293, + "ic": 294, + "▁h": 295, + "ion": 296, + "▁in": 297, + "▁to": 298, + "et": 299, + "om": 300, + "el": 301, + "▁of": 302, + "st": 303, + "▁and": 304, + "▁l": 305, + "▁th": 306, + "▁n": 307, + "ent": 308, + "il": 309, + "ct": 310, + "ro": 311, + "▁re": 312, + "id": 313, + "am": 314, + "▁I": 315, + "ad": 316, + "▁e": 317, + "▁S": 318, + "▁g": 319, + "▁T": 320, + "im": 321, + "ot": 322, + "ac": 323, + "ur": 324, + "▁(": 325, + "ig": 326, + "▁=": 327, + "ol": 328, + "ut": 329, + "▁A": 330, + "se": 331, + "▁u": 332, + "ve": 333, + "▁C": 334, + "if": 335, + "ow": 336, + "▁y": 337, + "ch": 338, + "ay": 339, + "▁de": 340, + "▁st": 341, + "▁|": 342, + "ver": 343, + ");": 344, + "▁\"": 345, + "ly": 346, + "▁be": 347, + "**": 348, + "▁is": 349, + "od": 350, + "▁M": 351, + "ation": 352, + "ul": 353, + "▁for": 354, + "▁▁▁▁▁": 355, + "▁on": 356, + "ag": 357, + "ce": 358, + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁": 359, + "ter": 360, + "ir": 361, + "th": 362, + "▁v": 363, + "qu": 364, + "▁B": 365, + "em": 366, + "▁P": 367, + "▁you": 368, + "▁that": 369, + "un": 370, + "▁{": 371, + "ith": 372, + "ri": 373, + "est": 374, + "ab": 375, + "--": 376, + "ap": 377, + "▁it": 378, + "▁con": 379, + "ate": 380, + "us": 381, + "▁H": 382, + "um": 383, + "▁D": 384, + "os": 385, + "pe": 386, + "▁-": 387, + "▁wh": 388, + "▁al": 389, + "▁as": 390, + "and": 391, + "ist": 392, + "▁L": 393, + "▁W": 394, + "▁with": 395, + "▁an": 396, + "ere": 397, + "▁*": 398, + "▁R": 399, + "▁he": 400, + "▁F": 401, + "oc": 402, + "▁was": 403, + "ers": 404, + "ke": 405, + "out": 406, + "ht": 407, + "▁r": 408, + "ess": 409, + "op": 410, + "res": 411, + "ie": 412, + "▁E": 413, + "▁\\": 414, + "▁The": 415, + "end": 416, + "ld": 417, + "▁N": 418, + "ort": 419, + "▁G": 420, + "//": 421, + "▁#": 422, + "our": 423, + "te": 424, + "ill": 425, + "ain": 426, + "▁se": 427, + "▁▁▁▁▁▁": 428, + "▁$": 429, + "▁pro": 430, + "ore": 431, + "▁com": 432, + "ame": 433, + "tr": 434, + "▁ne": 435, + "rom": 436, + "ub": 437, + "▁at": 438, + "▁ex": 439, + "ant": 440, + "ue": 441, + "▁or": 442, + "▁}": 443, + "art": 444, + "ction": 445, + "▁k": 446, + "pt": 447, + "nt": 448, + "iv": 449, + "de": 450, + "▁O": 451, + "pl": 452, + "urn": 453, + "ight": 454, + "all": 455, + "▁this": 456, + "ser": 457, + "ave": 458, + "▁not": 459, + "▁are": 460, + "▁j": 461, + "▁le": 462, + "iz": 463, + "▁'": 464, + "age": 465, + "ment": 466, + "▁tr": 467, + "ack": 468, + "ust": 469, + "()": 470, + "->": 471, + "ity": 472, + "ine": 473, + "ould": 474, + "▁J": 475, + "og": 476, + "▁from": 477, + "▁we": 478, + "ell": 479, + "▁sh": 480, + "▁en": 481, + "ure": 482, + "port": 483, + "▁ch": 484, + "ne": 485, + "▁by": 486, + "per": 487, + "ard": 488, + "ass": 489, + "ge": 490, + "ak": 491, + "are": 492, + "ok": 493, + "av": 494, + "ive": 495, + "ff": 496, + "ies": 497, + "ath": 498, + "turn": 499, + "▁U": 500, + "int": 501, + "----": 502, + "▁im": 503, + "ost": 504, + "ial": 505, + "▁have": 506, + "ind": 507, + "ip": 508, + "ans": 509, + "xt": 510, + "▁do": 511, + "cl": 512, + "▁if": 513, + "con": 514, + "ia": 515, + "▁his": 516, + "ult": 517, + "rou": 518, + "▁su": 519, + "ra": 520, + "▁un": 521, + "able": 522, + "▁<": 523, + "▁K": 524, + "ome": 525, + "▁qu": 526, + "get": 527, + "▁me": 528, + "ast": 529, + "ect": 530, + "▁##": 531, + "to": 532, + "▁cl": 533, + "▁ab": 534, + "ice": 535, + "ire": 536, + "ber": 537, + "one": 538, + "ich": 539, + "hen": 540, + "▁can": 541, + "▁Th": 542, + "▁la": 543, + "▁all": 544, + "ime": 545, + "ile": 546, + "ide": 547, + "\",": 548, + "▁pl": 549, + "▁V": 550, + "ru": 551, + "orm": 552, + "▁had": 553, + "ud": 554, + "ase": 555, + "ord": 556, + "),": 557, + "▁▁▁▁▁▁▁▁▁▁▁▁": 558, + "▁her": 559, + "▁In": 560, + "ace": 561, + "▁but": 562, + "ata": 563, + "::": 564, + "****": 565, + "ong": 566, + "▁&": 567, + "..": 568, + "▁▁▁▁▁▁▁▁▁▁▁▁▁": 569, + "ite": 570, + "ype": 571, + "act": 572, + "ode": 573, + "▁your": 574, + "▁out": 575, + "▁go": 576, + "lic": 577, + "ally": 578, + "▁so": 579, + "ork": 580, + "au": 581, + "▁up": 582, + "▁_": 583, + "ll": 584, + "==": 585, + "▁my": 586, + "pp": 587, + "cc": 588, + "▁//": 589, + "▁they": 590, + "gh": 591, + "▁us": 592, + "ib": 593, + "ions": 594, + "ach": 595, + "ens": 596, + "▁ar": 597, + "ob": 598, + "elf": 599, + "ook": 600, + "ated": 601, + "ang": 602, + "ign": 603, + "▁return": 604, + "▁res": 605, + "ck": 606, + "ous": 607, + "ст": 608, + ").": 609, + "▁п": 610, + ".\"": 611, + "на": 612, + "▁i": 613, + "ail": 614, + "ep": 615, + "▁ad": 616, + "ance": 617, + "(\"": 618, + "▁**": 619, + "ther": 620, + "ake": 621, + "▁will": 622, + "▁comp": 623, + "▁one": 624, + "▁get": 625, + "ov": 626, + "▁Y": 627, + "ary": 628, + "ock": 629, + "▁she": 630, + "che": 631, + "ft": 632, + "▁new": 633, + "▁des": 634, + "▁li": 635, + "ence": 636, + "▁sa": 637, + "ress": 638, + "▁el": 639, + "▁und": 640, + "eg": 641, + "fer": 642, + "ry": 643, + "ear": 644, + "ose": 645, + "very": 646, + "',": 647, + "▁+": 648, + "▁в": 649, + "▁He": 650, + "ublic": 651, + "▁their": 652, + "ize": 653, + "▁were": 654, + "ink": 655, + "own": 656, + "In": 657, + "{\\": 658, + "▁has": 659, + "▁per": 660, + "▁It": 661, + "▁St": 662, + "her": 663, + "ject": 664, + "ра": 665, + "ild": 666, + "so": 667, + "▁sp": 668, + "ни": 669, + "du": 670, + "row": 671, + "alue": 672, + "set": 673, + "form": 674, + "com": 675, + "▁man": 676, + "ont": 677, + "ull": 678, + "▁cont": 679, + "▁more": 680, + "ick": 681, + "▁would": 682, + "▁ev": 683, + "▁about": 684, + "ition": 685, + "▁z": 686, + "ound": 687, + "ree": 688, + "▁Ch": 689, + "▁which": 690, + "io": 691, + "();": 692, + "▁who": 693, + "err": 694, + "ory": 695, + "ount": 696, + "ations": 697, + "▁с": 698, + "ring": 699, + "": 876, + "▁em": 877, + "▁$\\": 878, + "▁year": 879, + "wn": 880, + "},": 881, + "▁del": 882, + "ale": 883, + "ty": 884, + "fig": 885, + "sp": 886, + "hed": 887, + "round": 888, + "ew": 889, + "▁di": 890, + "▁der": 891, + "ри": 892, + "red": 893, + "this": 894, + "let": 895, + "RE": 896, + "ax": 897, + "fr": 898, + "essage": 899, + "ough": 900, + "▁comm": 901, + "fo": 902, + "uch": 903, + "oy": 904, + "▁people": 905, + "ystem": 906, + "▁first": 907, + "▁function": 908, + "ange": 909, + "▁how": 910, + "▁et": 911, + "ah": 912, + "▁look": 913, + "то": 914, + "und": 915, + "▁under": 916, + "ка": 917, + "▁!": 918, + "ray": 919, + "ST": 920, + "ific": 921, + "ли": 922, + "read": 923, + "▁bet": 924, + "ious": 925, + "arg": 926, + "▁need": 927, + "math": 928, + "▁на": 929, + "ert": 930, + "▁op": 931, + "▁acc": 932, + "Pro": 933, + "▁est": 934, + "▁Un": 935, + "▁ent": 936, + "▁rec": 937, + "▁use": 938, + "ен": 939, + "▁par": 940, + "az": 941, + "▁д": 942, + "▁Wh": 943, + "self": 944, + "▁ke": 945, + "та": 946, + "▁want": 947, + "▁end": 948, + "▁don": 949, + "ek": 950, + "ren": 951, + "Name": 952, + "▁=>": 953, + "▁app": 954, + "▁que": 955, + "igh": 956, + "▁bu": 957, + "equ": 958, + "vel": 959, + "▁act": 960, + "cre": 961, + "AT": 962, + "▁var": 963, + "cess": 964, + "====": 965, + "Ex": 966, + "▁add": 967, + "▁mod": 968, + "ung": 969, + "▁where": 970, + "ning": 971, + "▁fl": 972, + "als": 973, + "tern": 974, + "}}": 975, + "▁Al": 976, + "▁pos": 977, + "ank": 978, + "▁ap": 979, + "eng": 980, + "▁“": 981, + "ble": 982, + "▁reg": 983, + "^{": 984, + "▁She": 985, + "▁*/": 986, + "ude": 987, + "add": 988, + "▁two": 989, + "▁col": 990, + "▁sm": 991, + "air": 992, + "▁may": 993, + "fore": 994, + "▁You": 995, + "rough": 996, + "▁che": 997, + "▁att": 998, + "oth": 999, + "ла": 1000, + "▁co": 1001, + "ates": 1002, + "▁rem": 1003, + "ood": 1004, + "Type": 1005, + "led": 1006, + "ful": 1007, + "▁self": 1008, + "of": 1009, + "▁Ar": 1010, + "que": 1011, + "▁every": 1012, + "ref": 1013, + "The": 1014, + "▁And": 1015, + "▁rel": 1016, + "OR": 1017, + "Id": 1018, + "▁even": 1019, + "EN": 1020, + "▁hand": 1021, + "ait": 1022, + "▁should": 1023, + "▁after": 1024, + "▁dif": 1025, + "ght": 1026, + "ife": 1027, + "ator": 1028, + "ash": 1029, + "ribut": 1030, + "umber": 1031, + "▁see": 1032, + "ms": 1033, + "▁call": 1034, + "yn": 1035, + "dd": 1036, + "▁es": 1037, + "▁make": 1038, + "other": 1039, + "▁—": 1040, + "\");": 1041, + "str": 1042, + "▁long": 1043, + "lement": 1044, + "▁wor": 1045, + "its": 1046, + "▁If": 1047, + "alse": 1048, + "ль": 1049, + "ward": 1050, + "▁по": 1051, + "val": 1052, + "ons": 1053, + "▁Z": 1054, + "▁now": 1055, + "data": 1056, + "amp": 1057, + "ense": 1058, + "▁through": 1059, + "▁down": 1060, + "att": 1061, + "▁static": 1062, + "ics": 1063, + "##": 1064, + "pos": 1065, + "▁void": 1066, + "aw": 1067, + "oun": 1068, + "▁way": 1069, + "ible": 1070, + "vent": 1071, + "ower": 1072, + "▁think": 1073, + "ts": 1074, + "*/": 1075, + "▁again": 1076, + "ating": 1077, + "те": 1078, + "ner": 1079, + "▁most": 1080, + "line": 1081, + "ym": 1082, + "▁sub": 1083, + "erson": 1084, + "▁requ": 1085, + "AL": 1086, + "AR": 1087, + "abel": 1088, + "ond": 1089, + "));": 1090, + "▁Se": 1091, + "▁But": 1092, + "alk": 1093, + "▁An": 1094, + "new": 1095, + "▁because": 1096, + "ger": 1097, + "ular": 1098, + "roup": 1099, + "ta": 1100, + "...": 1101, + "▁cons": 1102, + "▁right": 1103, + "▁fr": 1104, + "be": 1105, + "ily": 1106, + "ки": 1107, + "▁ph": 1108, + "ead": 1109, + "?\"": 1110, + "▁gu": 1111, + "▁else": 1112, + "▁som": 1113, + "rent": 1114, + "co": 1115, + "ement": 1116, + "▁str": 1117, + "ault": 1118, + "▁з": 1119, + "ло": 1120, + "sert": 1121, + "var": 1122, + "type": 1123, + "▁Com": 1124, + "ле": 1125, + "ins": 1126, + "me": 1127, + "way": 1128, + "ident": 1129, + "▁prov": 1130, + "▁м": 1131, + "▁true": 1132, + "▁Pro": 1133, + "fl": 1134, + "▁sl": 1135, + "▁As": 1136, + "}\\": 1137, + "ID": 1138, + "ues": 1139, + "▁inst": 1140, + "▁name": 1141, + "ox": 1142, + "▁)": 1143, + "li": 1144, + "ames": 1145, + "Res": 1146, + "▁sur": 1147, + "param": 1148, + "▁start": 1149, + "aj": 1150, + "SE": 1151, + "ask": 1152, + "IT": 1153, + "String": 1154, + "▁ass": 1155, + "▁play": 1156, + "ting": 1157, + "ton": 1158, + "▁before": 1159, + "▁pol": 1160, + "arch": 1161, + "▁well": 1162, + "Com": 1163, + "any": 1164, + "olog": 1165, + "▁err": 1166, + "▁these": 1167, + "ars": 1168, + "eb": 1169, + "▁br": 1170, + "▁incl": 1171, + "▁hel": 1172, + "ern": 1173, + "ody": 1174, + "во": 1175, + "▁ind": 1176, + "----------------": 1177, + "▁data": 1178, + "▁good": 1179, + "LE": 1180, + "],": 1181, + "▁av": 1182, + "▁ac": 1183, + "ider": 1184, + "не": 1185, + "▁Q": 1186, + "▁min": 1187, + "▁much": 1188, + "ci": 1189, + "els": 1190, + "▁cur": 1191, + "▁value": 1192, + "ery": 1193, + "uf": 1194, + "▁loc": 1195, + "reak": 1196, + "ative": 1197, + "imes": 1198, + "Cl": 1199, + "▁,": 1200, + "▁ser": 1201, + "▁die": 1202, + "▁trans": 1203, + "▁result": 1204, + "ext": 1205, + "▁aut": 1206, + "land": 1207, + "▁&&": 1208, + "Ch": 1209, + "ten": 1210, + "}$": 1211, + "▁type": 1212, + "cond": 1213, + "ices": 1214, + "▁very": 1215, + "▁own": 1216, + "▁fil": 1217, + "ities": 1218, + "▁produ": 1219, + "▁read": 1220, + "▁form": 1221, + "▁case": 1222, + "ather": 1223, + "ти": 1224, + "да": 1225, + "ер": 1226, + "Th": 1227, + "aut": 1228, + "▁spec": 1229, + "ij": 1230, + "bl": 1231, + "ility": 1232, + "▁é": 1233, + "▁er": 1234, + "▁does": 1235, + "▁here": 1236, + "the": 1237, + "ures": 1238, + "▁%": 1239, + "min": 1240, + "▁null": 1241, + "rap": 1242, + "\")": 1243, + "rr": 1244, + "List": 1245, + "right": 1246, + "▁User": 1247, + "UL": 1248, + "ational": 1249, + "▁being": 1250, + "AN": 1251, + "sk": 1252, + "▁car": 1253, + "ole": 1254, + "▁dist": 1255, + "plic": 1256, + "ollow": 1257, + "▁pres": 1258, + "▁such": 1259, + "ream": 1260, + "ince": 1261, + "gan": 1262, + "▁For": 1263, + "\":": 1264, + "son": 1265, + "rivate": 1266, + "▁years": 1267, + "▁serv": 1268, + "▁made": 1269, + "def": 1270, + ";\r": 1271, + "▁gl": 1272, + "▁bel": 1273, + "▁list": 1274, + "▁cor": 1275, + "▁det": 1276, + "ception": 1277, + "egin": 1278, + "▁б": 1279, + "▁char": 1280, + "trans": 1281, + "▁fam": 1282, + "▁!=": 1283, + "ouse": 1284, + "▁dec": 1285, + "ica": 1286, + "▁many": 1287, + "aking": 1288, + "▁à": 1289, + "▁sim": 1290, + "ages": 1291, + "uff": 1292, + "ased": 1293, + "man": 1294, + "▁Sh": 1295, + "iet": 1296, + "irect": 1297, + "▁Re": 1298, + "▁differ": 1299, + "▁find": 1300, + "ethod": 1301, + "▁\r": 1302, + "ines": 1303, + "▁inv": 1304, + "▁point": 1305, + "▁They": 1306, + "▁used": 1307, + "ctions": 1308, + "▁still": 1309, + "ió": 1310, + "ined": 1311, + "▁while": 1312, + "It": 1313, + "ember": 1314, + "▁say": 1315, + "▁help": 1316, + "▁cre": 1317, + "▁x": 1318, + "▁Tr": 1319, + "ument": 1320, + "▁sk": 1321, + "ought": 1322, + "ually": 1323, + "message": 1324, + "▁Con": 1325, + "▁mon": 1326, + "ared": 1327, + "work": 1328, + "):": 1329, + "ister": 1330, + "arn": 1331, + "ized": 1332, + "Data": 1333, + "orn": 1334, + "▁head": 1335, + "DE": 1336, + "▁Le": 1337, + "▁person": 1338, + "ments": 1339, + "ength": 1340, + "▁false": 1341, + "▁med": 1342, + "▁De": 1343, + "ache": 1344, + "ited": 1345, + "▁let": 1346, + "▁show": 1347, + "▁same": 1348, + "uss": 1349, + "▁gener": 1350, + "▁у": 1351, + "cur": 1352, + "▁real": 1353, + "ced": 1354, + "\">": 1355, + "struct": 1356, + "begin": 1357, + "cept": 1358, + "▁bo": 1359, + "ired": 1360, + "▁Fr": 1361, + "▁stud": 1362, + "dev": 1363, + "Ar": 1364, + "(\\": 1365, + "▁Cl": 1366, + "ween": 1367, + "▁too": 1368, + "▁test": 1369, + "▁day": 1370, + "oh": 1371, + "▁follow": 1372, + "ature": 1373, + "ze": 1374, + "ien": 1375, + "reg": 1376, + "ces": 1377, + "uring": 1378, + "amb": 1379, + "ina": 1380, + "cri": 1381, + "▁ed": 1382, + "SS": 1383, + "uck": 1384, + "▁/*": 1385, + "CT": 1386, + "▁There": 1387, + "▁take": 1388, + "par": 1389, + "ule": 1390, + "cal": 1391, + "for": 1392, + "****************": 1393, + "source": 1394, + "▁those": 1395, + "col": 1396, + "▁eff": 1397, + "mod": 1398, + "cont": 1399, + "}{": 1400, + "▁around": 1401, + "press": 1402, + "by": 1403, + "▁going": 1404, + "ponse": 1405, + "▁С": 1406, + "▁line": 1407, + "date": 1408, + "code": 1409, + "['": 1410, + "▁life": 1411, + "ason": 1412, + "▁using": 1413, + "▁val": 1414, + "▁du": 1415, + "yp": 1416, + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁": 1417, + "▁On": 1418, + "▁found": 1419, + "olut": 1420, + "']": 1421, + "arent": 1422, + "▁string": 1423, + "▁met": 1424, + "▁wr": 1425, + "ush": 1426, + "string": 1427, + "size": 1428, + "▁ver": 1429, + "▁each": 1430, + "value": 1431, + "▁last": 1432, + "▁got": 1433, + "ven": 1434, + "back": 1435, + "Set": 1436, + "ey": 1437, + "rol": 1438, + "▁cr": 1439, + "thing": 1440, + "ret": 1441, + "és": 1442, + "ism": 1443, + "▁between": 1444, + "Ob": 1445, + "ething": 1446, + "mp": 1447, + "▁lo": 1448, + "ats": 1449, + "▁New": 1450, + "ви": 1451, + "ado": 1452, + "dex": 1453, + "ди": 1454, + "▁pass": 1455, + "wh": 1456, + "▁den": 1457, + "Get": 1458, + "apt": 1459, + "▁ask": 1460, + "▁sup": 1461, + "Value": 1462, + "ны": 1463, + "▁try": 1464, + "lation": 1465, + "day": 1466, + "ness": 1467, + "ets": 1468, + "▁exper": 1469, + "Tr": 1470, + "▁Mar": 1471, + "serv": 1472, + "br": 1473, + "▁number": 1474, + "inal": 1475, + "cent": 1476, + "/*": 1477, + "not": 1478, + "ional": 1479, + "▁final": 1480, + "')": 1481, + "▁run": 1482, + "over": 1483, + "▁never": 1484, + "uc": 1485, + "▁high": 1486, + "yle": 1487, + "▁ins": 1488, + "▁best": 1489, + "ittle": 1490, + "ric": 1491, + "▁sign": 1492, + "▁dem": 1493, + "iness": 1494, + "gy": 1495, + "▁war": 1496, + "ished": 1497, + "▁giv": 1498, + "key": 1499, + "▁X": 1500, + "($": 1501, + "▁child": 1502, + "less": 1503, + "ways": 1504, + "incl": 1505, + "rop": 1506, + "raw": 1507, + "://": 1508, + "▁«": 1509, + "no": 1510, + "indow": 1511, + "fe": 1512, + "riend": 1513, + "▁les": 1514, + "▁los": 1515, + "file": 1516, + "formation": 1517, + "ccess": 1518, + "▁В": 1519, + "na": 1520, + "▁il": 1521, + "ision": 1522, + "ler": 1523, + "▁art": 1524, + "Cont": 1525, + "▁world": 1526, + "▁turn": 1527, + "▁really": 1528, + "▁Ex": 1529, + "ма": 1530, + "▁П": 1531, + "ters": 1532, + "arget": 1533, + "Err": 1534, + "▁happ": 1535, + "time": 1536, + "▁So": 1537, + "div": 1538, + "▁didn": 1539, + "ada": 1540, + "oot": 1541, + "})": 1542, + "▁sch": 1543, + "▁cle": 1544, + "▁something": 1545, + "().": 1546, + "▁cour": 1547, + "ever": 1548, + "ants": 1549, + "▁?": 1550, + "To": 1551, + "▁`": 1552, + "try": 1553, + "ux": 1554, + "ais": 1555, + "ross": 1556, + "hip": 1557, + "▁rep": 1558, + "label": 1559, + "▁both": 1560, + "*,": 1561, + "ott": 1562, + "ми": 1563, + "ane": 1564, + "▁open": 1565, + "ww": 1566, + "▁come": 1567, + "▁ext": 1568, + "rem": 1569, + "_{\\": 1570, + "▁old": 1571, + "ched": 1572, + "._": 1573, + "ME": 1574, + "ify": 1575, + "gg": 1576, + "Col": 1577, + "view": 1578, + "▁bus": 1579, + "▁must": 1580, + "▁different": 1581, + "log": 1582, + "ists": 1583, + "roll": 1584, + "ai": 1585, + "▁за": 1586, + "▁system": 1587, + "ivers": 1588, + "atus": 1589, + "ote": 1590, + "med": 1591, + "].": 1592, + "akes": 1593, + "RO": 1594, + "▁cent": 1595, + "gram": 1596, + "▁private": 1597, + "▁great": 1598, + "\";": 1599, + "opy": 1600, + "▁feel": 1601, + "▁How": 1602, + "////": 1603, + "IC": 1604, + "▁dr": 1605, + "ains": 1606, + "lock": 1607, + "En": 1608, + "▁Sch": 1609, + "▁mat": 1610, + "▁home": 1611, + "perty": 1612, + "test": 1613, + "loc": 1614, + "▁wom": 1615, + "sw": 1616, + "arly": 1617, + "▁En": 1618, + "▁ко": 1619, + "den": 1620, + "ста": 1621, + "▁а": 1622, + "eter": 1623, + "▁includ": 1624, + "ULL": 1625, + "▁mem": 1626, + "▁po": 1627, + "▁little": 1628, + "▁arg": 1629, + "▁},": 1630, + "include": 1631, + "eta": 1632, + "▁place": 1633, + "idth": 1634, + "ustom": 1635, + "▁||": 1636, + "▁tem": 1637, + "ried": 1638, + "▁fact": 1639, + "ience": 1640, + "▁Pl": 1641, + "opt": 1642, + "ele": 1643, + "go": 1644, + "AC": 1645, + "inter": 1646, + "========": 1647, + "(),": 1648, + "ots": 1649, + "ral": 1650, + "ique": 1651, + "aving": 1652, + "ml": 1653, + "▁thought": 1654, + "frac": 1655, + "▁care": 1656, + "());": 1657, + "▁put": 1658, + "▁might": 1659, + "▁Amer": 1660, + "▁(!": 1661, + "ample": 1662, + "alth": 1663, + "▁few": 1664, + "▁state": 1665, + "sub": 1666, + "▁Or": 1667, + "];": 1668, + "▁size": 1669, + "▁Sp": 1670, + "▁without": 1671, + "▁poss": 1672, + "eq": 1673, + "play": 1674, + "▁expect": 1675, + "▁second": 1676, + "▁String": 1677, + "uild": 1678, + "▁next": 1679, + "++": 1680, + "requ": 1681, + "▁All": 1682, + "▁men": 1683, + "▁When": 1684, + "iter": 1685, + "ament": 1686, + "net": 1687, + "▁К": 1688, + "ron": 1689, + "aint": 1690, + "▁Is": 1691, + "ве": 1692, + "pend": 1693, + "translation": 1694, + "▁го": 1695, + "че": 1696, + "▁van": 1697, + "▁another": 1698, + "▁ret": 1699, + "▁La": 1700, + "Mod": 1701, + "ION": 1702, + "list": 1703, + "▁post": 1704, + "da": 1705, + "ware": 1706, + "▁word": 1707, + "Error": 1708, + "▁seem": 1709, + "▁contin": 1710, + "atic": 1711, + "▁three": 1712, + "Object": 1713, + "▁partic": 1714, + "$.": 1715, + "▁mark": 1716, + "▁vis": 1717, + "rc": 1718, + "▁sw": 1719, + "ptions": 1720, + "▁break": 1721, + "▁things": 1722, + "ute": 1723, + "ui": 1724, + "▁That": 1725, + "urs": 1726, + "gl": 1727, + "ру": 1728, + "▁file": 1729, + "use": 1730, + "igned": 1731, + "part": 1732, + "Un": 1733, + "▁equ": 1734, + "(&": 1735, + "▁lead": 1736, + "rm": 1737, + "ained": 1738, + "▁Be": 1739, + "path": 1740, + "▁small": 1741, + "ager": 1742, + "▁always": 1743, + "▁El": 1744, + "▁order": 1745, + "▁ey": 1746, + "▁won": 1747, + "ape": 1748, + "▁left": 1749, + "ava": 1750, + "item": 1751, + "hor": 1752, + "▁away": 1753, + "bb": 1754, + "fun": 1755, + "▁Ind": 1756, + "mb": 1757, + "▁struct": 1758, + "▁process": 1759, + "▁support": 1760, + ");\r": 1761, + "ión": 1762, + "LO": 1763, + "▁oper": 1764, + "UT": 1765, + "▁·": 1766, + "PE": 1767, + "load": 1768, + "off": 1769, + "▁No": 1770, + "ives": 1771, + "ican": 1772, + "▁ve": 1773, + "action": 1774, + "';": 1775, + "▁vo": 1776, + "$,": 1777, + "▁Gr": 1778, + "pre": 1779, + "ny": 1780, + "aining": 1781, + "ior": 1782, + "init": 1783, + "lection": 1784, + "arm": 1785, + "umn": 1786, + "ags": 1787, + "ци": 1788, + "ско": 1789, + "version": 1790, + "▁To": 1791, + "▁ref": 1792, + "stand": 1793, + "▁At": 1794, + "ift": 1795, + "▁ein": 1796, + "face": 1797, + "bo": 1798, + "ified": 1799, + "ved": 1800, + "sum": 1801, + "une": 1802, + "ital": 1803, + "ump": 1804, + "comm": 1805, + "▁mov": 1806, + "elt": 1807, + "▁von": 1808, + "velop": 1809, + "ctor": 1810, + "head": 1811, + "cle": 1812, + "▁build": 1813, + "inc": 1814, + ".'": 1815, + "bs": 1816, + "info": 1817, + "chn": 1818, + "▁week": 1819, + "▁book": 1820, + "HE": 1821, + "bar": 1822, + "icense": 1823, + "▁What": 1824, + "▁quest": 1825, + "urch": 1826, + "ato": 1827, + "left": 1828, + "▁mar": 1829, + "▁top": 1830, + "FF": 1831, + "▁friend": 1832, + "▁beh": 1833, + "▁field": 1834, + "▁against": 1835, + "ract": 1836, + "ization": 1837, + "user": 1838, + "chen": 1839, + "▁keep": 1840, + "AD": 1841, + "itor": 1842, + "▁non": 1843, + "ird": 1844, + "ope": 1845, + "▁rest": 1846, + "▁dev": 1847, + "▁__": 1848, + "▁una": 1849, + "▁term": 1850, + "IS": 1851, + "▁pop": 1852, + "rist": 1853, + "▁since": 1854, + "ves": 1855, + "▁hard": 1856, + "pi": 1857, + "util": 1858, + "▁soc": 1859, + "ene": 1860, + "Exception": 1861, + "▁local": 1862, + "▁direct": 1863, + "▁sure": 1864, + "▁bro": 1865, + "▁da": 1866, + "▁": 2370, + "aim": 2371, + "▁service": 2372, + "▁within": 2373, + "angu": 2374, + "▁Д": 2375, + "uffer": 2376, + "AG": 2377, + "▁Do": 2378, + "▁incre": 2379, + "▁understand": 2380, + "}^": 2381, + "▁looked": 2382, + "gen": 2383, + "ailed": 2384, + "▁е": 2385, + "ayer": 2386, + "▁One": 2387, + "▁bas": 2388, + "▁job": 2389, + "mu": 2390, + "but": 2391, + "elta": 2392, + "▁Christ": 2393, + "uration": 2394, + "▁record": 2395, + "▁Univers": 2396, + "ivid": 2397, + "valid": 2398, + "▁Р": 2399, + "▁hold": 2400, + "▁table": 2401, + "ones": 2402, + "link": 2403, + "▁Ge": 2404, + "▁offer": 2405, + "ster": 2406, + "Form": 2407, + "={": 2408, + "▁не": 2409, + "stance": 2410, + "▁govern": 2411, + "▁techn": 2412, + "▁prim": 2413, + "*.": 2414, + "cho": 2415, + "max": 2416, + "▁fore": 2417, + "▁Can": 2418, + "▁polit": 2419, + "ories": 2420, + "▁times": 2421, + "▁dans": 2422, + "▁air": 2423, + "▁anything": 2424, + "▁sever": 2425, + "acy": 2426, + "}_": 2427, + "He": 2428, + "▁least": 2429, + "ips": 2430, + "ENT": 2431, + "do": 2432, + "▁от": 2433, + "▁cost": 2434, + ".”": 2435, + "▁children": 2436, + "ability": 2437, + "But": 2438, + "▁path": 2439, + "result": 2440, + "acter": 2441, + "▁element": 2442, + "ee": 2443, + "▁wait": 2444, + "▁money": 2445, + "Map": 2446, + "td": 2447, + "oin": 2448, + "iving": 2449, + "icht": 2450, + "icy": 2451, + "sch": 2452, + "ste": 2453, + "ду": 2454, + "ored": 2455, + "oud": 2456, + "ille": 2457, + "ised": 2458, + "plication": 2459, + "▁custom": 2460, + "▁having": 2461, + "ponent": 2462, + "▁By": 2463, + "ules": 2464, + "ued": 2465, + "atter": 2466, + "And": 2467, + "itive": 2468, + "Def": 2469, + "▁moment": 2470, + "aterial": 2471, + "Class": 2472, + "ograph": 2473, + "ike": 2474, + "▁large": 2475, + "▁####": 2476, + "▁either": 2477, + "duct": 2478, + "▁Then": 2479, + "▁Gu": 2480, + "olean": 2481, + "pert": 2482, + "▁Get": 2483, + "▁Ab": 2484, + "▁short": 2485, + "On": 2486, + "iment": 2487, + "▁project": 2488, + "cript": 2489, + "▁including": 2490, + "ния": 2491, + "▁making": 2492, + "▁someone": 2493, + "▁Fl": 2494, + "▁sat": 2495, + "▁company": 2496, + "ocus": 2497, + "pu": 2498, + "▁God": 2499, + "ification": 2500, + "No": 2501, + "▁sn": 2502, + "ano": 2503, + "ga": 2504, + "▁au": 2505, + "▁cou": 2506, + "ás": 2507, + "ended": 2508, + "ту": 2509, + "ober": 2510, + "▁nothing": 2511, + "▁net": 2512, + "▁pot": 2513, + "▁typ": 2514, + "▁item": 2515, + "rew": 2516, + "Att": 2517, + "▁young": 2518, + "}\r": 2519, + "nder": 2520, + "start": 2521, + "▁Sc": 2522, + "*)": 2523, + "▁enc": 2524, + "▁women": 2525, + "▁looking": 2526, + "▁ро": 2527, + "▁health": 2528, + "Path": 2529, + "▁After": 2530, + "▁mult": 2531, + "▁{\\": 2532, + "▁land": 2533, + "orld": 2534, + "▁Des": 2535, + "▁eng": 2536, + "input": 2537, + "▁Pol": 2538, + "\"\"": 2539, + "Code": 2540, + "▁supp": 2541, + "ainer": 2542, + "heck": 2543, + "▁mor": 2544, + "▁mill": 2545, + "▁aw": 2546, + "fs": 2547, + "▁doing": 2548, + "tings": 2549, + "ades": 2550, + "▁toget": 2551, + "▁certain": 2552, + "▁together": 2553, + "CE": 2554, + "ideo": 2555, + "▁American": 2556, + "ony": 2557, + "idd": 2558, + "II": 2559, + "ged": 2560, + "ables": 2561, + "▁ident": 2562, + "iod": 2563, + "▁parent": 2564, + "For": 2565, + "ambda": 2566, + "ando": 2567, + "=\\": 2568, + "aged": 2569, + "ending": 2570, + "Int": 2571, + "▁possible": 2572, + "▁со": 2573, + "ivity": 2574, + "num": 2575, + "rt": 2576, + "ajor": 2577, + "create": 2578, + "ride": 2579, + "▁knew": 2580, + "bit": 2581, + "itional": 2582, + "▁lik": 2583, + "▁Her": 2584, + "ension": 2585, + "\".": 2586, + "oto": 2587, + "▁exist": 2588, + "aken": 2589, + "▁actually": 2590, + "ca": 2591, + "▁Г": 2592, + "хо": 2593, + "inn": 2594, + "All": 2595, + "buf": 2596, + "▁Me": 2597, + "▁seen": 2598, + "ops": 2599, + "▁▁▁▁▁▁▁▁▁": 2600, + "Not": 2601, + "▁control": 2602, + "▁respon": 2603, + "};": 2604, + "ilt": 2605, + "isk": 2606, + "▁bad": 2607, + "▁often": 2608, + "▁past": 2609, + "aper": 2610, + "▁reason": 2611, + "eters": 2612, + "▁wanted": 2613, + "ura": 2614, + "table": 2615, + "ormal": 2616, + "width": 2617, + "га": 2618, + "ptr": 2619, + "▁dest": 2620, + "▁design": 2621, + "▁sound": 2622, + "▁plan": 2623, + "▁base": 2624, + "hand": 2625, + "gs": 2626, + "▁says": 2627, + "function": 2628, + "▁tri": 2629, + "mt": 2630, + "▁invest": 2631, + "▁available": 2632, + "ayout": 2633, + "▁och": 2634, + "▁las": 2635, + "illed": 2636, + "Val": 2637, + "▁ф": 2638, + "iety": 2639, + "mon": 2640, + "Hand": 2641, + "Fr": 2642, + "iam": 2643, + "pace": 2644, + "▁Ob": 2645, + "▁para": 2646, + "▁meet": 2647, + "▁sum": 2648, + "Message": 2649, + "ici": 2650, + "▁known": 2651, + "▁gen": 2652, + "amma": 2653, + "arr": 2654, + "▁tre": 2655, + "oke": 2656, + "uth": 2657, + "~\\": 2658, + "▁experience": 2659, + "icle": 2660, + "▁Il": 2661, + "▁sent": 2662, + "▁others": 2663, + "▁soft": 2664, + "IP": 2665, + "▁max": 2666, + "ball": 2667, + "▁market": 2668, + "▁pour": 2669, + "pression": 2670, + "eps": 2671, + "▁saw": 2672, + "▁across": 2673, + "▁Su": 2674, + "Over": 2675, + "ние": 2676, + "ulation": 2677, + "▁Reg": 2678, + "▁+=": 2679, + "body": 2680, + ")\\": 2681, + "▁print": 2682, + "▁при": 2683, + "db": 2684, + "ources": 2685, + "wards": 2686, + "▁black": 2687, + "со": 2688, + "ili": 2689, + "▁Ed": 2690, + "▁complet": 2691, + "▁single": 2692, + "▁IN": 2693, + "ached": 2694, + "bt": 2695, + "▁code": 2696, + "▁bool": 2697, + "▁area": 2698, + "▁require": 2699, + "▁problem": 2700, + "aced": 2701, + "Equ": 2702, + "▁config": 2703, + "vec": 2704, + "ney": 2705, + "cy": 2706, + "Al": 2707, + "▁account": 2708, + "ymbol": 2709, + "▁ste": 2710, + "ges": 2711, + "Array": 2712, + "empl": 2713, + "context": 2714, + "Des": 2715, + "Result": 2716, + "ecut": 2717, + "▁target": 2718, + "▁getting": 2719, + "\"/>": 2720, + "ogle": 2721, + "▁himself": 2722, + "▁wasn": 2723, + "▁block": 2724, + "▁ant": 2725, + "▁York": 2726, + "▁become": 2727, + "iff": 2728, + "ports": 2729, + "reate": 2730, + "='": 2731, + "cd": 2732, + "location": 2733, + "ет": 2734, + "▁access": 2735, + "gress": 2736, + "ros": 2737, + "Up": 2738, + "▁working": 2739, + "▁Am": 2740, + "iqu": 2741, + "cer": 2742, + "▁((": 2743, + "▁Per": 2744, + "▁func": 2745, + "▁girl": 2746, + "▁above": 2747, + "pen": 2748, + "пи": 2749, + "ido": 2750, + "▁version": 2751, + "TY": 2752, + "▁;": 2753, + "mary": 2754, + "abled": 2755, + "annel": 2756, + "▁example": 2757, + "▁context": 2758, + "OP": 2759, + "▁red": 2760, + "▁cir": 2761, + "sm": 2762, + "Log": 2763, + "▁space": 2764, + "▁fut": 2765, + "▁Gener": 2766, + "ills": 2767, + "▁dri": 2768, + "_.": 2769, + "▁felt": 2770, + "▁offic": 2771, + "▁===": 2772, + "ii": 2773, + "▁started": 2774, + "▁Т": 2775, + "▁});": 2776, + "js": 2777, + "▁front": 2778, + "▁almost": 2779, + "irm": 2780, + "!\"": 2781, + "signed": 2782, + "▁yet": 2783, + "▁trad": 2784, + "ients": 2785, + "ama": 2786, + "▁input": 2787, + "lim": 2788, + "па": 2789, + "▁ка": 2790, + "▁camp": 2791, + "ibr": 2792, + "fect": 2793, + "unt": 2794, + "▁half": 2795, + "▁cover": 2796, + "anguage": 2797, + "▁ben": 2798, + "ha": 2799, + "▁diff": 2800, + "_\\": 2801, + "▁об": 2802, + "])": 2803, + "odes": 2804, + "hel": 2805, + "ios": 2806, + "▁О": 2807, + "▁mot": 2808, + "▁social": 2809, + "////////": 2810, + "▁stre": 2811, + "ground": 2812, + "ів": 2813, + "object": 2814, + "ples": 2815, + "reed": 2816, + "▁een": 2817, + "▁based": 2818, + "▁range": 2819, + "An": 2820, + "urg": 2821, + "▁learn": 2822, + "▁exc": 2823, + "▁imp": 2824, + "▁means": 2825, + "▁wur": 2826, + "ends": 2827, + "void": 2828, + "▁std": 2829, + "▁particular": 2830, + "ja": 2831, + "▁source": 2832, + "default": 2833, + "py": 2834, + "▁als": 2835, + "scri": 2836, + "status": 2837, + "▁story": 2838, + "▁begin": 2839, + "▁position": 2840, + "▁special": 2841, + "php": 2842, + "▁bar": 2843, + "▁pract": 2844, + "call": 2845, + "▁das": 2846, + "▁rad": 2847, + "▁close": 2848, + "www": 2849, + "ере": 2850, + "gu": 2851, + "▁Er": 2852, + "▁dom": 2853, + "AM": 2854, + "▁bed": 2855, + "▁several": 2856, + "aul": 2857, + "box": 2858, + "▁low": 2859, + "pack": 2860, + "Reg": 2861, + "Of": 2862, + "atures": 2863, + "én": 2864, + "eder": 2865, + "uilder": 2866, + "cast": 2867, + "conom": 2868, + "raft": 2869, + "▁makes": 2870, + "Loc": 2871, + "http": 2872, + "▁abs": 2873, + "resh": 2874, + "▁Will": 2875, + "break": 2876, + "▁options": 2877, + "fort": 2878, + "▁из": 2879, + "▁anal": 2880, + "▁env": 2881, + "({": 2882, + "event": 2883, + "▁page": 2884, + "ternal": 2885, + "▁distribut": 2886, + "▁food": 2887, + "check": 2888, + "CK": 2889, + "▁во": 2890, + "assert": 2891, + "án": 2892, + "base": 2893, + "▁whole": 2894, + "ación": 2895, + "OD": 2896, + "▁turned": 2897, + "igma": 2898, + "▁response": 2899, + "▁University": 2900, + "▁div": 2901, + "apter": 2902, + "▁results": 2903, + "▁represent": 2904, + "▁everything": 2905, + "▁Cent": 2906, + "utes": 2907, + "rix": 2908, + "▁Some": 2909, + "▁behind": 2910, + "▁creat": 2911, + "place": 2912, + "su": 2913, + "▁Part": 2914, + "umb": 2915, + "mathbb": 2916, + "ping": 2917, + "▁match": 2918, + "Out": 2919, + "dom": 2920, + "▁situ": 2921, + "dr": 2922, + "ara": 2923, + "▁window": 2924, + "ns": 2925, + "lished": 2926, + "▁Ver": 2927, + "▁message": 2928, + "▁Em": 2929, + "▁human": 2930, + "perties": 2931, + "лу": 2932, + "lem": 2933, + "ORT": 2934, + "▁early": 2935, + "▁quick": 2936, + "▁та": 2937, + "roid": 2938, + "▁country": 2939, + "▁due": 2940, + "▁Die": 2941, + "▁trying": 2942, + "▁live": 2943, + "▁press": 2944, + "INT": 2945, + "With": 2946, + "oved": 2947, + "▁specific": 2948, + "▁fall": 2949, + "uk": 2950, + "yl": 2951, + "▁general": 2952, + "му": 2953, + "ну": 2954, + "▁names": 2955, + "where": 2956, + "▁These": 2957, + "▁sil": 2958, + "ét": 2959, + "▁ener": 2960, + "▁Now": 2961, + "▁address": 2962, + "Response": 2963, + "▁Mr": 2964, + "▁answ": 2965, + "▁film": 2966, + "▁strong": 2967, + "▁bring": 2968, + "▁United": 2969, + "▁ge": 2970, + "▁woman": 2971, + "New": 2972, + "ett": 2973, + ".)": 2974, + "ename": 2975, + "▁AN": 2976, + "▁describ": 2977, + "за": 2978, + "ising": 2979, + "EL": 2980, + "ql": 2981, + "▁fur": 2982, + "ying": 2983, + "▁Cal": 2984, + "▁Dr": 2985, + "ERR": 2986, + "▁\\\\": 2987, + "angle": 2988, + "urope": 2989, + "▁city": 2990, + "▁index": 2991, + "▁action": 2992, + "▁However": 2993, + "▁fig": 2994, + "ias": 2995, + "▁question": 2996, + "▁Jan": 2997, + "▁Med": 2998, + "▁Cont": 2999, + "amed": 3000, + "Call": 3001, + "plied": 3002, + "tty": 3003, + "▁individ": 3004, + "page": 3005, + "▁comb": 3006, + "section": 3007, + "▁Comm": 3008, + "uel": 3009, + "▁het": 3010, + "▁Bar": 3011, + "agement": 3012, + "fin": 3013, + "▁major": 3014, + "oper": 3015, + "api": 3016, + "room": 3017, + "▁„": 3018, + "▁hab": 3019, + "зи": 3020, + "▁auf": 3021, + "current": 3022, + "ni": 3023, + "▁include": 3024, + "▁qui": 3025, + "va": 3026, + "UE": 3027, + "▁idea": 3028, + ",'": 3029, + "▁required": 3030, + "▁heart": 3031, + "ibility": 3032, + "iction": 3033, + "Model": 3034, + "write": 3035, + "▁content": 3036, + "▁wer": 3037, + "▁hands": 3038, + "zen": 3039, + "char": 3040, + "}^{": 3041, + "▁mass": 3042, + "ply": 3043, + "▁nat": 3044, + "rel": 3045, + "▁dat": 3046, + "================": 3047, + "imal": 3048, + "▁probably": 3049, + "unch": 3050, + "▁mer": 3051, + "ilar": 3052, + "ires": 3053, + "▁watch": 3054, + "SI": 3055, + "▁cult": 3056, + "▁mother": 3057, + "▁government": 3058, + "ording": 3059, + "▁()": 3060, + "▁pri": 3061, + "▁link": 3062, + "group": 3063, + "OL": 3064, + "▁near": 3065, + "▁Ser": 3066, + "Ser": 3067, + "ito": 3068, + "▁values": 3069, + "▁java": 3070, + "fully": 3071, + "Count": 3072, + "++)": 3073, + "▁vi": 3074, + "▁white": 3075, + "mat": 3076, + "ctx": 3077, + "▁conc": 3078, + "▁stay": 3079, + "ging": 3080, + "▁clear": 3081, + "▁copy": 3082, + "selves": 3083, + "▁provide": 3084, + "▁words": 3085, + "comp": 3086, + "args": 3087, + "▁pick": 3088, + "uly": 3089, + "▁vari": 3090, + "▁believe": 3091, + "▁Co": 3092, + "Property": 3093, + "Group": 3094, + "▁ten": 3095, + "ischen": 3096, + "eturn": 3097, + "ival": 3098, + "System": 3099, + "CL": 3100, + "bed": 3101, + "▁total": 3102, + "▁ist": 3103, + "Input": 3104, + "uments": 3105, + "Manager": 3106, + "ши": 3107, + "▁win": 3108, + "leep": 3109, + "PI": 3110, + "ного": 3111, + "ruction": 3112, + "▁inte": 3113, + "App": 3114, + "avor": 3115, + "▁respect": 3116, + "ators": 3117, + "▁como": 3118, + "▁cut": 3119, + "FA": 3120, + "▁sus": 3121, + "▁App": 3122, + "rect": 3123, + "FI": 3124, + "▁began": 3125, + "oph": 3126, + "▁sort": 3127, + "though": 3128, + "је": 3129, + "icro": 3130, + "Trans": 3131, + "лі": 3132, + "▁Inst": 3133, + "request": 3134, + "ор": 3135, + "▁relations": 3136, + "-\\": 3137, + "Status": 3138, + "жи": 3139, + "▁father": 3140, + "cs": 3141, + "▁sex": 3142, + "isch": 3143, + "vo": 3144, + "}_{": 3145, + "aven": 3146, + "▁Ne": 3147, + "ATE": 3148, + "itten": 3149, + "▁ess": 3150, + "TH": 3151, + "ights": 3152, + "▁hom": 3153, + "▁today": 3154, + "▁zu": 3155, + "ita": 3156, + "▁isn": 3157, + "▁opt": 3158, + "ogn": 3159, + "ér": 3160, + "▁whether": 3161, + "ixed": 3162, + "phi": 3163, + "idence": 3164, + "ald": 3165, + "Client": 3166, + "At": 3167, + "▁death": 3168, + "▁Let": 3169, + "ius": 3170, + "ги": 3171, + "▁ре": 3172, + "ben": 3173, + ")\r": 3174, + "ba": 3175, + ">": 3193, + "▁Just": 3194, + "What": 3195, + "atal": 3196, + "▁Min": 3197, + "▁Cor": 3198, + "▁dark": 3199, + "rl": 3200, + "▁larg": 3201, + "ding": 3202, + "ón": 3203, + "ouch": 3204, + "▁um": 3205, + "▁elect": 3206, + "▁dam": 3207, + "▁needs": 3208, + "▁matter": 3209, + "▁rather": 3210, + "from": 3211, + "ram": 3212, + "▁і": 3213, + "▁taken": 3214, + "▁deal": 3215, + "▁period": 3216, + "▁Mon": 3217, + "▁Л": 3218, + "▁Aug": 3219, + "run": 3220, + "mm": 3221, + "elle": 3222, + "▁export": 3223, + "Sc": 3224, + "vis": 3225, + "abor": 3226, + "▁author": 3227, + "ère": 3228, + "▁remember": 3229, + "▁redu": 3230, + "▁List": 3231, + "▁focus": 3232, + "▁character": 3233, + "Table": 3234, + "▁individual": 3235, + "▁needed": 3236, + "bum": 3237, + "▁style": 3238, + "inary": 3239, + "ersion": 3240, + "oute": 3241, + "▁Pe": 3242, + "▁hon": 3243, + "mut": 3244, + "see": 3245, + "▁became": 3246, + "▁dire": 3247, + "▁document": 3248, + "sec": 3249, + "ening": 3250, + "▁visit": 3251, + "▁fac": 3252, + "tx": 3253, + "down": 3254, + "plit": 3255, + "▁phys": 3256, + "itting": 3257, + "joy": 3258, + "▁hig": 3259, + "This": 3260, + "Ad": 3261, + "▁Brit": 3262, + "▁employ": 3263, + "▁ré": 3264, + "▁т": 3265, + "lambda": 3266, + "▁impro": 3267, + "▁Bo": 3268, + "iding": 3269, + "▁online": 3270, + "mem": 3271, + "atform": 3272, + "▁War": 3273, + "▁cas": 3274, + "asure": 3275, + "▁pur": 3276, + "medi": 3277, + "Dis": 3278, + "▁Germ": 3279, + "pc": 3280, + "са": 3281, + "▁friends": 3282, + "▁Mc": 3283, + "DI": 3284, + "▁plus": 3285, + "▁Set": 3286, + "iddle": 3287, + "itut": 3288, + "▁depend": 3289, + "rest": 3290, + "▁Je": 3291, + "▁hor": 3292, + "▁entire": 3293, + "Query": 3294, + "▁refer": 3295, + "▁hot": 3296, + "▁Aust": 3297, + "▁common": 3298, + "ці": 3299, + "▁pull": 3300, + "▁Add": 3301, + "▁season": 3302, + "▁invol": 3303, + "▁World": 3304, + "client": 3305, + "now": 3306, + "true": 3307, + "append": 3308, + "itted": 3309, + "empt": 3310, + "){": 3311, + "///": 3312, + "▁prop": 3313, + "imate": 3314, + "SC": 3315, + "▁hours": 3316, + "▁hope": 3317, + "andom": 3318, + "ід": 3319, + "istic": 3320, + "▁property": 3321, + "sg": 3322, + ">(": 3323, + "▁write": 3324, + "mark": 3325, + "find": 3326, + "▁personal": 3327, + "][": 3328, + "rown": 3329, + "Ph": 3330, + "▁foot": 3331, + "▁research": 3332, + "ironment": 3333, + "▁nom": 3334, + "▁instance": 3335, + "▁held": 3336, + "De": 3337, + "▁members": 3338, + "▁fire": 3339, + "▁history": 3340, + "▁map": 3341, + "▁discuss": 3342, + "▁espec": 3343, + "▁taking": 3344, + "▁services": 3345, + "▁indust": 3346, + "igen": 3347, + "▁Ass": 3348, + "▁expected": 3349, + "▁wurde": 3350, + "dir": 3351, + "▁among": 3352, + "▁sugg": 3353, + "rec": 3354, + "Inter": 3355, + "block": 3356, + "▁Rep": 3357, + "▁pain": 3358, + "▁five": 3359, + "▁fund": 3360, + "rid": 3361, + "arrow": 3362, + "▁treat": 3363, + "▁heard": 3364, + "▁determ": 3365, + "icult": 3366, + "▁sense": 3367, + "ese": 3368, + "Fun": 3369, + "▁months": 3370, + "json": 3371, + ",”": 3372, + "TI": 3373, + "orage": 3374, + "▁У": 3375, + "▁everyone": 3376, + "▁clos": 3377, + "iers": 3378, + "airs": 3379, + "define": 3380, + "If": 3381, + "osp": 3382, + "▁wonder": 3383, + "NA": 3384, + "query": 3385, + "pg": 3386, + "ites": 3387, + "▁material": 3388, + "yd": 3389, + "Read": 3390, + "html": 3391, + "TE": 3392, + "Pr": 3393, + "^{\\": 3394, + "▁gave": 3395, + "▁IS": 3396, + "▁suggest": 3397, + "Override": 3398, + "rodu": 3399, + "From": 3400, + "▁Europe": 3401, + "PO": 3402, + "▁soon": 3403, + "host": 3404, + "▁Ber": 3405, + "....": 3406, + "▁Har": 3407, + "▁energy": 3408, + "><": 3409, + "aves": 3410, + "▁easy": 3411, + "▁bre": 3412, + "frame": 3413, + "▁ground": 3414, + "with": 3415, + "▁inside": 3416, + "ief": 3417, + "▁mo": 3418, + "pm": 3419, + "pan": 3420, + "igr": 3421, + "▁om": 3422, + "next": 3423, + "omet": 3424, + "▁status": 3425, + "▁}\r": 3426, + "▁music": 3427, + "ora": 3428, + "iles": 3429, + "ki": 3430, + "▁esc": 3431, + "▁bes": 3432, + "▁Dis": 3433, + "▁host": 3434, + "▁comes": 3435, + "used": 3436, + "▁future": 3437, + "lick": 3438, + "aid": 3439, + "▁compet": 3440, + "▁voice": 3441, + "▁load": 3442, + "evel": 3443, + "▁neg": 3444, + "▁command": 3445, + "▁für": 3446, + "▁pie": 3447, + "▁quite": 3448, + "▁blo": 3449, + "agn": 3450, + "ilon": 3451, + "▁claim": 3452, + "▁teach": 3453, + "▁previous": 3454, + "▁site": 3455, + "color": 3456, + "attr": 3457, + "▁accept": 3458, + "▁exact": 3459, + ")}": 3460, + "aft": 3461, + "roller": 3462, + "он": 3463, + "oo": 3464, + "Date": 3465, + "▁ou": 3466, + "sy": 3467, + "▁pretty": 3468, + "▁image": 3469, + "BU": 3470, + "▁terms": 3471, + "▁search": 3472, + "▁è": 3473, + "▁Val": 3474, + "▁‘": 3475, + "▁Dav": 3476, + "MS": 3477, + "src": 3478, + "mar": 3479, + "incip": 3480, + "▁couldn": 3481, + "ados": 3482, + "▁dro": 3483, + "beta": 3484, + "imum": 3485, + "▁minutes": 3486, + "▁grand": 3487, + "▁»": 3488, + "▁Our": 3489, + "Str": 3490, + "VER": 3491, + "maz": 3492, + "▁original": 3493, + "ini": 3494, + "▁coll": 3495, + "loat": 3496, + "▁os": 3497, + "});": 3498, + "summary": 3499, + "▁wall": 3500, + "Color": 3501, + "▁vers": 3502, + "▁della": 3503, + "▁\"\"\"": 3504, + "mathbf": 3505, + "zer": 3506, + "aur": 3507, + "▁track": 3508, + "▁associ": 3509, + "▁suff": 3510, + "▁inde": 3511, + "ague": 3512, + "▁Apr": 3513, + "Le": 3514, + "roups": 3515, + "board": 3516, + "▁attack": 3517, + "▁series": 3518, + "▁instead": 3519, + "ham": 3520, + "book": 3521, + "▁six": 3522, + "▁Rec": 3523, + "▁coming": 3524, + "urt": 3525, + "▁global": 3526, + "▁necess": 3527, + "lege": 3528, + "Pos": 3529, + "▁leave": 3530, + "▁pod": 3531, + "ategory": 3532, + "uz": 3533, + "▁deep": 3534, + "▁km": 3535, + "▁outside": 3536, + "has": 3537, + "options": 3538, + "▁Sm": 3539, + "Sub": 3540, + "rows": 3541, + "▁ви": 3542, + "▁States": 3543, + "▁wrong": 3544, + "▁however": 3545, + "▁sem": 3546, + "▁catch": 3547, + "\"),": 3548, + "model": 3549, + "▁http": 3550, + "▁option": 3551, + "rie": 3552, + "▁ста": 3553, + "▁är": 3554, + "▁enjoy": 3555, + "nu": 3556, + "▁pas": 3557, + "▁amount": 3558, + "▁respons": 3559, + "▁Intern": 3560, + "▁myself": 3561, + "▁opp": 3562, + "▁Sim": 3563, + "▁sens": 3564, + "Ed": 3565, + "▁(\\": 3566, + "▁students": 3567, + "нов": 3568, + "▁points": 3569, + "arning": 3570, + "UP": 3571, + "elling": 3572, + "▁cannot": 3573, + "Be": 3574, + "▁length": 3575, + "null": 3576, + "uint": 3577, + "wise": 3578, + "▁double": 3579, + "ige": 3580, + "ista": 3581, + "▁estab": 3582, + "anch": 3583, + "▁ago": 3584, + "▁bound": 3585, + "▁fa": 3586, + "▁clean": 3587, + "▁simple": 3588, + "mi": 3589, + "########": 3590, + "ifier": 3591, + "▁General": 3592, + "▁seemed": 3593, + "ena": 3594, + "▁age": 3595, + "ной": 3596, + "endif": 3597, + "AA": 3598, + "▁caus": 3599, + "▁educ": 3600, + "▁cell": 3601, + "Gener": 3602, + "space": 3603, + "▁Your": 3604, + "▁beaut": 3605, + "gt": 3606, + "▁limit": 3607, + "▁date": 3608, + "Util": 3609, + "▁National": 3610, + "ows": 3611, + "pat": 3612, + "quad": 3613, + "▁ok": 3614, + "▁И": 3615, + "arth": 3616, + "hat": 3617, + "▁community": 3618, + "oul": 3619, + "▁econom": 3620, + "Component": 3621, + "bor": 3622, + "usion": 3623, + "▁below": 3624, + "earch": 3625, + "ores": 3626, + "ban": 3627, + "▁August": 3628, + "▁further": 3629, + "sigma": 3630, + "▁ha": 3631, + "ji": 3632, + "▁comput": 3633, + "гра": 3634, + "▁None": 3635, + "▁ter": 3636, + "▁anyone": 3637, + "▁task": 3638, + "ente": 3639, + "position": 3640, + "pped": 3641, + "▁aus": 3642, + "Attribute": 3643, + "req": 3644, + "addr": 3645, + "light": 3646, + "ше": 3647, + "▁arm": 3648, + "cover": 3649, + "upport": 3650, + "▁Gl": 3651, + "▁San": 3652, + "▁writing": 3653, + "▁lost": 3654, + "▁Mark": 3655, + "▁gre": 3656, + "TYPE": 3657, + "▁South": 3658, + "▁perfect": 3659, + "▁package": 3660, + "▁infl": 3661, + "haps": 3662, + "▁Ang": 3663, + "respon": 3664, + "ris": 3665, + "ptember": 3666, + "▁building": 3667, + "VAL": 3668, + "free": 3669, + "▁ce": 3670, + "HT": 3671, + "▁From": 3672, + "ds": 3673, + "roy": 3674, + "achine": 3675, + "nown": 3676, + "▁saying": 3677, + "▁бы": 3678, + "oe": 3679, + "Ref": 3680, + "▁network": 3681, + "parent": 3682, + "uge": 3683, + "▁similar": 3684, + ">\r": 3685, + "Builder": 3686, + "▁living": 3687, + "▁continue": 3688, + "anger": 3689, + "▁Red": 3690, + "▁hair": 3691, + "anced": 3692, + "ians": 3693, + "▁dead": 3694, + "▁boolean": 3695, + "ication": 3696, + "▁де": 3697, + "▁client": 3698, + "uct": 3699, + "▁•": 3700, + "SP": 3701, + "older": 3702, + "пе": 3703, + "udio": 3704, + "▁deg": 3705, + "asing": 3706, + "▁step": 3707, + "▁pers": 3708, + "ção": 3709, + "obj": 3710, + "oz": 3711, + "ula": 3712, + "▁round": 3713, + "▁upon": 3714, + "▁resource": 3715, + "▁valid": 3716, + "▁II": 3717, + "bug": 3718, + "std": 3719, + "▁ang": 3720, + "span": 3721, + "pol": 3722, + "ialog": 3723, + "▁phot": 3724, + "?'": 3725, + "DB": 3726, + "▁Fin": 3727, + "VE": 3728, + "Em": 3729, + "▁cam": 3730, + "target": 3731, + "pected": 3732, + "Hel": 3733, + "▁ut": 3734, + "▁Test": 3735, + "▁town": 3736, + "align": 3737, + "▁webs": 3738, + "inner": 3739, + "augh": 3740, + "▁except": 3741, + "▁initial": 3742, + "enty": 3743, + "lich": 3744, + "▁Aut": 3745, + "top": 3746, + "▁fail": 3747, + "ona": 3748, + "▁benef": 3749, + "anks": 3750, + "ische": 3751, + ".*": 3752, + "▁signific": 3753, + "▁contact": 3754, + "Rec": 3755, + "ario": 3756, + "ottom": 3757, + "▁relationship": 3758, + "]);": 3759, + "▁На": 3760, + "Head": 3761, + "format": 3762, + "▁ét": 3763, + "▁More": 3764, + "actory": 3765, + "portun": 3766, + "+\\": 3767, + "▁simply": 3768, + "▁ep": 3769, + "▁Russ": 3770, + "ní": 3771, + "ua": 3772, + "erc": 3773, + "▁longer": 3774, + "inition": 3775, + "ector": 3776, + "aption": 3777, + "▁profess": 3778, + "▁Mus": 3779, + "ilities": 3780, + "ès": 3781, + "▁Act": 3782, + "offset": 3783, + "▁ill": 3784, + "band": 3785, + "▁Ag": 3786, + "▁По": 3787, + "би": 3788, + "content": 3789, + "icon": 3790, + "▁works": 3791, + "ynam": 3792, + "plement": 3793, + "Resource": 3794, + "Action": 3795, + "▁difficult": 3796, + "▁West": 3797, + "▁video": 3798, + "▁THE": 3799, + "▁decl": 3800, + "ondon": 3801, + "ded": 3802, + "}{\\": 3803, + "ocr": 3804, + "▁City": 3805, + "▁я": 3806, + "uer": 3807, + "cz": 3808, + "▁imag": 3809, + "cr": 3810, + "ete": 3811, + "idget": 3812, + "▁Mod": 3813, + "▁forward": 3814, + "▁pict": 3815, + "orge": 3816, + "▁subject": 3817, + "update": 3818, + "attle": 3819, + "sa": 3820, + "▁Ant": 3821, + "▁running": 3822, + "▁sal": 3823, + "conne": 3824, + "▁output": 3825, + "adata": 3826, + "ML": 3827, + "Check": 3828, + "ledge": 3829, + "▁paper": 3830, + "params": 3831, + "avy": 3832, + "▁af": 3833, + "▁eine": 3834, + "▁jour": 3835, + "AY": 3836, + "▁itself": 3837, + "▁Str": 3838, + "style": 3839, + "That": 3840, + "▁million": 3841, + "▁language": 3842, + "OS": 3843, + "ving": 3844, + "▁ма": 3845, + "▁то": 3846, + ")(": 3847, + "▁buy": 3848, + "./": 3849, + "▁...": 3850, + "▁tried": 3851, + "▁compl": 3852, + "▁activ": 3853, + "apped": 3854, + "Button": 3855, + "Token": 3856, + "▁provided": 3857, + "iber": 3858, + "▁created": 3859, + "curity": 3860, + "End": 3861, + "ał": 3862, + "uster": 3863, + "izing": 3864, + "omb": 3865, + "▁sich": 3866, + "▁compon": 3867, + "▁See": 3868, + "▁uint": 3869, + "▁label": 3870, + "vol": 3871, + "ów": 3872, + "ocol": 3873, + "▁received": 3874, + "▁intern": 3875, + "це": 3876, + "Run": 3877, + "▁road": 3878, + "▁Oct": 3879, + "▁Comp": 3880, + "▁study": 3881, + "▁те": 3882, + "Act": 3883, + "▁tour": 3884, + "▁State": 3885, + "▁added": 3886, + "https": 3887, + "stream": 3888, + "▁lower": 3889, + "▁box": 3890, + "▁Sk": 3891, + "▁themselves": 3892, + "▁cross": 3893, + "▁echo": 3894, + "▁device": 3895, + "pose": 3896, + "▁games": 3897, + "PL": 3898, + "Window": 3899, + "ises": 3900, + "title": 3901, + "Stream": 3902, + "zt": 3903, + "▁Sw": 3904, + "▁role": 3905, + "iant": 3906, + "ku": 3907, + "sequ": 3908, + "▁late": 3909, + "▁sold": 3910, + "ря": 3911, + "Comm": 3912, + "▁entre": 3913, + "▁dog": 3914, + "device": 3915, + "Par": 3916, + "▁likely": 3917, + "^{-": 3918, + "▁len": 3919, + "▁Paul": 3920, + "▁tool": 3921, + "Off": 3922, + "▁famil": 3923, + "▁draw": 3924, + "apping": 3925, + "▁events": 3926, + "cret": 3927, + "rought": 3928, + "Content": 3929, + "▁software": 3930, + "ria": 3931, + "msg": 3932, + "gamma": 3933, + "▁hear": 3934, + "Oper": 3935, + "▁yourself": 3936, + "▁liter": 3937, + "emp": 3938, + "▁separ": 3939, + "▁З": 3940, + "▁title": 3941, + "Method": 3942, + "mathrm": 3943, + "▁slow": 3944, + "▁Rom": 3945, + "!!": 3946, + "▁tax": 3947, + "ска": 3948, + "emplate": 3949, + "oi": 3950, + "▁Art": 3951, + "false": 3952, + "astic": 3953, + "сть": 3954, + "ocket": 3955, + "▁ens": 3956, + "TO": 3957, + "amente": 3958, + "local": 3959, + "chie": 3960, + "▁pan": 3961, + "ний": 3962, + "chema": 3963, + "▁North": 3964, + "зо": 3965, + "▁>=": 3966, + "Aut": 3967, + "▁dig": 3968, + "▁seems": 3969, + "▁morning": 3970, + "sole": 3971, + "umer": 3972, + "delta": 3973, + "ité": 3974, + "abase": 3975, + "raf": 3976, + "▁observ": 3977, + "▁Est": 3978, + "▁seg": 3979, + "▁[]": 3980, + "▁Pres": 3981, + "iful": 3982, + "push": 3983, + "▁Off": 3984, + "ipe": 3985, + "ati": 3986, + "▁dim": 3987, + "ceed": 3988, + "Ent": 3989, + "____": 3990, + "entry": 3991, + "▁fight": 3992, + "▁cred": 3993, + "▁OR": 3994, + "▁Dep": 3995, + "${": 3996, + "лен": 3997, + "Create": 3998, + "▁April": 3999, + "ministr": 4000, + "FL": 4001, + "▁Ap": 4002, + "▁Here": 4003, + "private": 4004, + "Instance": 4005, + "iem": 4006, + "▁office": 4007, + "▁third": 4008, + "▁update": 4009, + "Line": 4010, + "tag": 4011, + "▁especially": 4012, + "▁года": 4013, + "▁cu": 4014, + "▁kill": 4015, + "aught": 4016, + "▁swe": 4017, + "Options": 4018, + "IM": 4019, + "CC": 4020, + "▁compan": 4021, + "just": 4022, + "▁While": 4023, + "izer": 4024, + "▁мо": 4025, + "ке": 4026, + "▁auto": 4027, + "▁band": 4028, + "мен": 4029, + "iques": 4030, + "▁ple": 4031, + "NO": 4032, + "▁OF": 4033, + "▁song": 4034, + "▁Acc": 4035, + "EXT": 4036, + "ensor": 4037, + "ining": 4038, + "▁lat": 4039, + "big": 4040, + "▁King": 4041, + "och": 4042, + "si": 4043, + "▁Hist": 4044, + "▁quality": 4045, + "mode": 4046, + "▁opportun": 4047, + "▁wouldn": 4048, + ":**": 4049, + "output": 4050, + "▁feet": 4051, + "▁mis": 4052, + "df": 4053, + "aging": 4054, + "▁ме": 4055, + "▁tro": 4056, + "▁defined": 4057, + "▁review": 4058, + "▁Fil": 4059, + ">>": 4060, + "▁princip": 4061, + "Base": 4062, + "dict": 4063, + "verage": 4064, + "icient": 4065, + "IF": 4066, + "▁hit": 4067, + "Page": 4068, + "▁perm": 4069, + "cel": 4070, + "ít": 4071, + "▁express": 4072, + "▁indic": 4073, + "▁September": 4074, + "image": 4075, + "▁products": 4076, + "▁media": 4077, + "change": 4078, + "igger": 4079, + "▁send": 4080, + "last": 4081, + "ming": 4082, + "pa": 4083, + "uary": 4084, + "▁speak": 4085, + "ный": 4086, + "ще": 4087, + "ysis": 4088, + "lying": 4089, + "▁ч": 4090, + "like": 4091, + "ры": 4092, + "ві": 4093, + "▁Mich": 4094, + "MO": 4095, + "▁Jah": 4096, + "ensive": 4097, + "▁share": 4098, + "▁development": 4099, + "CP": 4100, + "spec": 4101, + "▁fast": 4102, + "het": 4103, + "HO": 4104, + "▁particip": 4105, + "Block": 4106, + "▁viol": 4107, + "▁frame": 4108, + "▁qual": 4109, + "tre": 4110, + "▁Ф": 4111, + "▁toward": 4112, + "fg": 4113, + "Box": 4114, + "Column": 4115, + "▁milit": 4116, + "▁March": 4117, + "▁various": 4118, + "pass": 4119, + "▁Park": 4120, + "▁Ben": 4121, + "Frame": 4122, + "▁normal": 4123, + "open": 4124, + "px": 4125, + "▁phone": 4126, + "▁Even": 4127, + "▁ma": 4128, + "ibrary": 4129, + "Start": 4130, + "idden": 4131, + "rho": 4132, + "graph": 4133, + "acing": 4134, + "'.": 4135, + "arter": 4136, + "mes": 4137, + "inst": 4138, + "▁ir": 4139, + "active": 4140, + "▁fem": 4141, + "▁moved": 4142, + "▁store": 4143, + "▁price": 4144, + "\").": 4145, + "berg": 4146, + "▁nov": 4147, + "▁card": 4148, + "ellow": 4149, + "▁party": 4150, + "▁Mor": 4151, + "ael": 4152, + "▁percent": 4153, + "▁training": 4154, + "▁ing": 4155, + "imer": 4156, + "▁Sam": 4157, + "Default": 4158, + "▁fuck": 4159, + "▁complete": 4160, + "uid": 4161, + "▁details": 4162, + "▁led": 4163, + "Point": 4164, + "▁Count": 4165, + "▁regard": 4166, + "zo": 4167, + "▁Bro": 4168, + "▁recogn": 4169, + "▁Hol": 4170, + "UM": 4171, + "element": 4172, + "Mode": 4173, + "▁exam": 4174, + "▁EX": 4175, + "Image": 4176, + "verse": 4177, + "riter": 4178, + "soft": 4179, + "▁introdu": 4180, + "▁surpr": 4181, + "Buffer": 4182, + "lector": 4183, + "aren": 4184, + "anged": 4185, + "▁Pat": 4186, + "▁Pal": 4187, + "▁contr": 4188, + "Handler": 4189, + "▁features": 4190, + "iple": 4191, + "▁CON": 4192, + "Fil": 4193, + "▁Port": 4194, + "▁thinking": 4195, + "doc": 4196, + "wer": 4197, + "▁worked": 4198, + "PC": 4199, + "cm": 4200, + "dat": 4201, + "PRO": 4202, + "▁Every": 4203, + "▁era": 4204, + "▁First": 4205, + "gn": 4206, + "▁immedi": 4207, + "ovember": 4208, + "apan": 4209, + "▁extra": 4210, + "▁section": 4211, + "▁June": 4212, + "▁via": 4213, + "▁gone": 4214, + "come": 4215, + "▁stri": 4216, + "^\\": 4217, + "antly": 4218, + "▁arch": 4219, + "Source": 4220, + "▁conv": 4221, + "▁London": 4222, + "Number": 4223, + "▁questions": 4224, + "andid": 4225, + "▁played": 4226, + "env": 4227, + "▁School": 4228, + "▁natural": 4229, + "can": 4230, + "▁news": 4231, + "DR": 4232, + "▁chall": 4233, + "▁Soc": 4234, + "▁э": 4235, + "▁attempt": 4236, + "*}": 4237, + "Null": 4238, + "rote": 4239, + "▁bi": 4240, + "▁written": 4241, + "▁blood": 4242, + "▁happened": 4243, + "▁cause": 4244, + "ashing": 4245, + "▁William": 4246, + "adem": 4247, + "▁brought": 4248, + "▁display": 4249, + "ima": 4250, + "▁finally": 4251, + "tab": 4252, + "▁returned": 4253, + "ных": 4254, + "nie": 4255, + "▁q": 4256, + "▁hers": 4257, + "▁Pre": 4258, + "▁dou": 4259, + "buffer": 4260, + "▁effort": 4261, + "aine": 4262, + "xy": 4263, + "▁histor": 4264, + "enu": 4265, + "▁arriv": 4266, + "▁Dem": 4267, + "▁favor": 4268, + "▁handle": 4269, + "SET": 4270, + "▁Public": 4271, + "rupt": 4272, + "▁ur": 4273, + "▁force": 4274, + "▁és": 4275, + "ube": 4276, + "Pre": 4277, + "рі": 4278, + "iny": 4279, + "theta": 4280, + "isf": 4281, + "▁national": 4282, + "Equal": 4283, + "rench": 4284, + "▁wife": 4285, + "▁capt": 4286, + "▁Inter": 4287, + "tau": 4288, + "▁sleep": 4289, + "../../": 4290, + "▁issue": 4291, + "▁member": 4292, + "▁await": 4293, + "▁Dan": 4294, + "zi": 4295, + "inate": 4296, + "▁sym": 4297, + "chan": 4298, + "▁Jack": 4299, + "▁English": 4300, + "▁sz": 4301, + "ributes": 4302, + "▁ign": 4303, + "ál": 4304, + "▁appear": 4305, + "rad": 4306, + "idge": 4307, + "▁couple": 4308, + "▁ship": 4309, + "lig": 4310, + "web": 4311, + "▁usually": 4312, + "▁ready": 4313, + "▁vill": 4314, + "▁Why": 4315, + "ebru": 4316, + "▁grad": 4317, + "ords": 4318, + "▁inf": 4319, + "▁loss": 4320, + "▁od": 4321, + "▁Phil": 4322, + "server": 4323, + "▁Up": 4324, + "▁buff": 4325, + "▁filename": 4326, + "ABLE": 4327, + "iting": 4328, + "efore": 4329, + "()->": 4330, + "▁conditions": 4331, + "vm": 4332, + "eld": 4333, + "itz": 4334, + "▁Trans": 4335, + "▁weight": 4336, + "▁higher": 4337, + "▁rate": 4338, + "▁accom": 4339, + "vider": 4340, + "OM": 4341, + "▁ways": 4342, + "coming": 4343, + "▁lock": 4344, + "▁etc": 4345, + "▁avec": 4346, + "▁takes": 4347, + "▁Char": 4348, + "▁November": 4349, + "method": 4350, + "▁Austral": 4351, + "▁America": 4352, + "long": 4353, + "cember": 4354, + "▁political": 4355, + "flow": 4356, + "▁maybe": 4357, + "▁amb": 4358, + "Layout": 4359, + "iled": 4360, + "omen": 4361, + "ola": 4362, + "icip": 4363, + "partial": 4364, + "True": 4365, + "▁floor": 4366, + "▁Def": 4367, + "▁concern": 4368, + "yr": 4369, + "▁shows": 4370, + "ih": 4371, + "▁answer": 4372, + "acc": 4373, + "▁ball": 4374, + "▁Rev": 4375, + "▁sun": 4376, + "▁quickly": 4377, + "▁somet": 4378, + "mente": 4379, + "▁Mal": 4380, + "undred": 4381, + "▁issues": 4382, + "ecause": 4383, + "pes": 4384, + "▁player": 4385, + "▁parents": 4386, + "▁popular": 4387, + "▁mode": 4388, + "▁mention": 4389, + "NE": 4390, + "Load": 4391, + "▁regular": 4392, + "aved": 4393, + "?:": 4394, + "year": 4395, + "func": 4396, + "▁performance": 4397, + "▁July": 4398, + "thern": 4399, + "▁website": 4400, + "ford": 4401, + "PR": 4402, + "ela": 4403, + "level": 4404, + "uit": 4405, + "flags": 4406, + "▁worth": 4407, + "▁correspon": 4408, + "▁British": 4409, + "sim": 4410, + "▁alone": 4411, + "▁har": 4412, + "▁ones": 4413, + "obile": 4414, + "▁dru": 4415, + "chi": 4416, + "▁David": 4417, + "▁problems": 4418, + "▁column": 4419, + "();\r": 4420, + "ZE": 4421, + "▁relig": 4422, + "ological": 4423, + "▁region": 4424, + "ady": 4425, + "IO": 4426, + "ander": 4427, + "Net": 4428, + "▁built": 4429, + "▁install": 4430, + "▁approach": 4431, + "Cur": 4432, + "▁fine": 4433, + "▁talking": 4434, + "▁changes": 4435, + "Style": 4436, + "▁Mart": 4437, + "лю": 4438, + "response": 4439, + "teger": 4440, + "{\r": 4441, + "irit": 4442, + "▁protected": 4443, + "▁rele": 4444, + "ership": 4445, + "тель": 4446, + "unsigned": 4447, + "ialize": 4448, + "▁https": 4449, + "Tag": 4450, + "▁$(": 4451, + "more": 4452, + "ypes": 4453, + "▁stream": 4454, + "etch": 4455, + "▁engine": 4456, + "KE": 4457, + "cmd": 4458, + "script": 4459, + "ttp": 4460, + "▁avoid": 4461, + "▁terr": 4462, + "▁rock": 4463, + "▁ful": 4464, + "Update": 4465, + "▁environment": 4466, + "▁prec": 4467, + "▁са": 4468, + "▁cases": 4469, + "▁offset": 4470, + "▁rais": 4471, + "lib": 4472, + "ées": 4473, + "aa": 4474, + "yt": 4475, + "▁arr": 4476, + "opyright": 4477, + "first": 4478, + "▁util": 4479, + "▁feature": 4480, + "posed": 4481, + "ffect": 4482, + "жа": 4483, + "itude": 4484, + "ements": 4485, + "asc": 4486, + "ador": 4487, + "lections": 4488, + "▁club": 4489, + "]{": 4490, + "▁*)": 4491, + "ство": 4492, + "▁imm": 4493, + "▁former": 4494, + "▁rights": 4495, + "▁decided": 4496, + "▁rev": 4497, + "▁ment": 4498, + "ani": 4499, + "▁stru": 4500, + "▁attention": 4501, + "artment": 4502, + "▁Ital": 4503, + "alle": 4504, + "▁bis": 4505, + "gener": 4506, + "▁integr": 4507, + "ello": 4508, + "rypt": 4509, + "▁achie": 4510, + "nes": 4511, + "▁stra": 4512, + "sb": 4513, + "▁types": 4514, + "▁RE": 4515, + "Init": 4516, + "▁comment": 4517, + "▁addition": 4518, + "▁ID": 4519, + "ART": 4520, + "FO": 4521, + "щи": 4522, + "Conne": 4523, + "▁squ": 4524, + "▁considered": 4525, + "idad": 4526, + "▁October": 4527, + "cial": 4528, + "▁Of": 4529, + "▁travel": 4530, + "▁boy": 4531, + "').": 4532, + "uy": 4533, + "illa": 4534, + "istry": 4535, + "▁va": 4536, + "▁Che": 4537, + "ERT": 4538, + "ende": 4539, + "ungen": 4540, + "aby": 4541, + "▁Rober": 4542, + "▁playing": 4543, + "ils": 4544, + "▁sam": 4545, + "▁execut": 4546, + "▁Us": 4547, + "▁mut": 4548, + "▁bal": 4549, + "asse": 4550, + "▁kids": 4551, + "▁financ": 4552, + "gor": 4553, + "▁Sec": 4554, + "bert": 4555, + "▁High": 4556, + "▁је": 4557, + "▁kept": 4558, + "button": 4559, + "itory": 4560, + "▁Rem": 4561, + "▁DE": 4562, + "▁reach": 4563, + "▁bur": 4564, + "Label": 4565, + "át": 4566, + "ago": 4567, + "▁passed": 4568, + "▁behav": 4569, + "xFF": 4570, + "▁Return": 4571, + "STR": 4572, + "▁Les": 4573, + "▁ord": 4574, + "ala": 4575, + "inger": 4576, + "▁Since": 4577, + "▁experi": 4578, + "▁shall": 4579, + "▁star": 4580, + "non": 4581, + "▁gun": 4582, + "▁Bel": 4583, + "▁obj": 4584, + "ares": 4585, + "rs": 4586, + "▁weeks": 4587, + "nen": 4588, + "▁Stre": 4589, + "oring": 4590, + "▁î": 4591, + "▁serious": 4592, + "times": 4593, + "▁House": 4594, + "▁roll": 4595, + "▁register": 4596, + "▁module": 4597, + "▁applic": 4598, + "IR": 4599, + "▁cook": 4600, + "aux": 4601, + "▁save": 4602, + "▁Cr": 4603, + ",\r": 4604, + "▁states": 4605, + "▁empty": 4606, + "▁autom": 4607, + "figure": 4608, + "iance": 4609, + "▁happy": 4610, + "▁fn": 4611, + "▁jud": 4612, + "▁hat": 4613, + "ACK": 4614, + "▁Fe": 4615, + "$-": 4616, + "ivil": 4617, + "oted": 4618, + "▁sizeof": 4619, + "▁situation": 4620, + "▁lives": 4621, + "▁feeling": 4622, + "▁risk": 4623, + "▁January": 4624, + "▁Object": 4625, + "▁recomm": 4626, + "▁вы": 4627, + "▁potential": 4628, + "eah": 4629, + "▁complex": 4630, + "printf": 4631, + "istance": 4632, + "irth": 4633, + "lik": 4634, + "aste": 4635, + "▁whose": 4636, + "Arg": 4637, + "▁modern": 4638, + "iones": 4639, + "▁че": 4640, + "▁sett": 4641, + "▁Mag": 4642, + "ae": 4643, + "▁condition": 4644, + "Length": 4645, + "▁fit": 4646, + "ounds": 4647, + "▁changed": 4648, + "▁guy": 4649, + "filter": 4650, + "atever": 4651, + "éd": 4652, + "remove": 4653, + "▁hop": 4654, + "▁Out": 4655, + "▁Rich": 4656, + "child": 4657, + "▁included": 4658, + "$\\": 4659, + "▁Tom": 4660, + "eline": 4661, + "▁sometimes": 4662, + "▁drink": 4663, + "▁quant": 4664, + "▁please": 4665, + "▁Int": 4666, + "rief": 4667, + "▁exactly": 4668, + "cing": 4669, + "▁allowed": 4670, + "build": 4671, + "▁beautiful": 4672, + "▁Well": 4673, + "▁looks": 4674, + "▁ü": 4675, + "▁chance": 4676, + "▁wrote": 4677, + "▁nor": 4678, + "▁failed": 4679, + "Met": 4680, + "▁prior": 4681, + "▁hundred": 4682, + "ской": 4683, + "oria": 4684, + "▁cy": 4685, + "▁web": 4686, + "▁mess": 4687, + "leq": 4688, + "dy": 4689, + "tex": 4690, + "▁anim": 4691, + "atur": 4692, + "▁structure": 4693, + "option": 4694, + "▁actual": 4695, + "▁Franc": 4696, + "enced": 4697, + ".": 4884, + "▁production": 4885, + "iger": 4886, + "▁ст": 4887, + "show": 4888, + "▁population": 4889, + "▁park": 4890, + "▁Ze": 4891, + "▁necessary": 4892, + "▁trust": 4893, + "▁shown": 4894, + "module": 4895, + "GE": 4896, + "▁lay": 4897, + "▁announ": 4898, + "▁className": 4899, + "▁calcul": 4900, + "Function": 4901, + "▁Sal": 4902, + "OK": 4903, + "TP": 4904, + "▁entry": 4905, + "▁Stud": 4906, + "▁items": 4907, + "▁security": 4908, + "Entry": 4909, + "float": 4910, + "ls": 4911, + "ibly": 4912, + "▁contribut": 4913, + "▁Check": 4914, + "MD": 4915, + "▁improve": 4916, + "Part": 4917, + "▁systems": 4918, + "Bl": 4919, + "▁policy": 4920, + "▁screen": 4921, + "▁Any": 4922, + "▁opened": 4923, + "alloc": 4924, + "▁December": 4925, + "▁É": 4926, + "▁email": 4927, + "ader": 4928, + "=>": 4929, + "▁Hen": 4930, + "▁info": 4931, + "▁float": 4932, + "▁switch": 4933, + "ран": 4934, + "urance": 4935, + "▁assum": 4936, + "ustr": 4937, + "▁groups": 4938, + "▁Read": 4939, + "▁wat": 4940, + "Sp": 4941, + "вер": 4942, + "RAN": 4943, + "hib": 4944, + "ALL": 4945, + "▁hus": 4946, + "Spec": 4947, + "\"))": 4948, + "▁French": 4949, + "▁Class": 4950, + "▁president": 4951, + "▁definit": 4952, + "▁Nor": 4953, + "▁Thom": 4954, + "aign": 4955, + "Width": 4956, + "Do": 4957, + "▁{@": 4958, + "agon": 4959, + "▁Lu": 4960, + "▁followed": 4961, + "MM": 4962, + "asons": 4963, + "tmp": 4964, + "▁throws": 4965, + "ITY": 4966, + "ном": 4967, + "▁fair": 4968, + "▁pen": 4969, + "ég": 4970, + "▁interface": 4971, + "▁saf": 4972, + "oon": 4973, + "Back": 4974, + "▁speed": 4975, + "▁extends": 4976, + "empty": 4977, + "▁пере": 4978, + "▁proper": 4979, + "▁driv": 4980, + "фи": 4981, + "▁center": 4982, + "header": 4983, + "▁})": 4984, + "wa": 4985, + "▁middle": 4986, + "▁choose": 4987, + "▁Stad": 4988, + "SO": 4989, + "Factory": 4990, + "Dev": 4991, + "icles": 4992, + "▁application": 4993, + "▁models": 4994, + "pite": 4995, + "cap": 4996, + "xi": 4997, + "ospital": 4998, + "▁dream": 4999, + "END": 5000, + "▁contract": 5001, + "icrosoft": 5002, + "▁thous": 5003, + "izes": 5004, + "▁да": 5005, + "▁CO": 5006, + "▁direction": 5007, + "▁``": 5008, + "▁drive": 5009, + "Max": 5010, + "cia": 5011, + "▁continu": 5012, + "▁Alex": 5013, + "▁gold": 5014, + "▁prep": 5015, + "▁origin": 5016, + "▁rap": 5017, + "Op": 5018, + "ously": 5019, + "▁areas": 5020, + "PORT": 5021, + "она": 5022, + "▁safe": 5023, + "▁professional": 5024, + "apache": 5025, + "▁temper": 5026, + "sz": 5027, + "▁unit": 5028, + "▁cop": 5029, + "eqn": 5030, + "Listener": 5031, + "▁format": 5032, + "select": 5033, + "▁comfort": 5034, + "▁meant": 5035, + "iday": 5036, + "eme": 5037, + "▁active": 5038, + "▁note": 5039, + "▁Mil": 5040, + "only": 5041, + "▁<=": 5042, + "▁neigh": 5043, + "ao": 5044, + "▁blue": 5045, + "▁TV": 5046, + "Child": 5047, + "▁reached": 5048, + "Address": 5049, + "ств": 5050, + "▁closed": 5051, + "inder": 5052, + "olo": 5053, + "▁alt": 5054, + "▁adm": 5055, + "Format": 5056, + "UI": 5057, + "▁Ham": 5058, + "▁frequ": 5059, + "▁independ": 5060, + "▁easily": 5061, + "▁Land": 5062, + "▁tor": 5063, + "ography": 5064, + "infty": 5065, + "▁Work": 5066, + "iven": 5067, + "▁County": 5068, + "▁src": 5069, + "}$,": 5070, + "parse": 5071, + "CD": 5072, + "▁Cour": 5073, + "▁fol": 5074, + "Entity": 5075, + "pgf": 5076, + "▁China": 5077, + "▁Sub": 5078, + "hood": 5079, + "▁fields": 5080, + "▁yes": 5081, + "rend": 5082, + "▁towards": 5083, + "▁staff": 5084, + "▁Air": 5085, + "▁station": 5086, + "atives": 5087, + "▁impact": 5088, + "вы": 5089, + "▁directly": 5090, + "issions": 5091, + "iva": 5092, + "|\\": 5093, + "Ptr": 5094, + "▁Sant": 5095, + "Pol": 5096, + "▁progress": 5097, + "itar": 5098, + "▁parts": 5099, + "▁plant": 5100, + "▁absolut": 5101, + "▁guess": 5102, + "eqref": 5103, + "▁tim": 5104, + "▁Lou": 5105, + "▁cool": 5106, + "alu": 5107, + "▁mouth": 5108, + "них": 5109, + "▁height": 5110, + "gest": 5111, + "▁Post": 5112, + "▁board": 5113, + "▁tit": 5114, + "▁hour": 5115, + "▁server": 5116, + "▁players": 5117, + "rier": 5118, + "Link": 5119, + "▁President": 5120, + "](": 5121, + "▁construct": 5122, + "handle": 5123, + "}$.": 5124, + "rying": 5125, + "▁shop": 5126, + "iana": 5127, + "exp": 5128, + "Helper": 5129, + "Offset": 5130, + "aches": 5131, + "▁connection": 5132, + "▁difference": 5133, + "service": 5134, + "▁gas": 5135, + "▁priv": 5136, + "▁univers": 5137, + "▁wish": 5138, + "Rem": 5139, + "Url": 5140, + "geb": 5141, + "So": 5142, + "ensions": 5143, + "Module": 5144, + "SIZE": 5145, + "▁prem": 5146, + "window": 5147, + "▁dies": 5148, + "del": 5149, + "▁row": 5150, + "▁average": 5151, + "xim": 5152, + "▁pu": 5153, + "anç": 5154, + "Det": 5155, + "ker": 5156, + "ya": 5157, + "▁Det": 5158, + "▁på": 5159, + "▁named": 5160, + "▁decision": 5161, + "win": 5162, + "▁George": 5163, + "arily": 5164, + "▁solution": 5165, + "▁multiple": 5166, + "ategy": 5167, + "▁learning": 5168, + "▁secret": 5169, + "DO": 5170, + "▁nice": 5171, + "////////////////": 5172, + "Su": 5173, + "itation": 5174, + "▁join": 5175, + "▁elements": 5176, + "▁emer": 5177, + "tilde": 5178, + "▁dep": 5179, + "▁shot": 5180, + "▁platform": 5181, + "othing": 5182, + "My": 5183, + "edia": 5184, + "oms": 5185, + "aily": 5186, + "([": 5187, + "▁dress": 5188, + "▁official": 5189, + "estern": 5190, + "▁discover": 5191, + "▁mi": 5192, + "ные": 5193, + "CA": 5194, + "oding": 5195, + "▁Found": 5196, + "▁affect": 5197, + "Vis": 5198, + "stract": 5199, + "iced": 5200, + "debug": 5201, + "▁related": 5202, + "▁spect": 5203, + "ushed": 5204, + "сько": 5205, + "▁bank": 5206, + "▁cele": 5207, + "AND": 5208, + "olf": 5209, + "ем": 5210, + "▁fill": 5211, + "▁gives": 5212, + "▁бу": 5213, + "aron": 5214, + "▁Jes": 5215, + "REG": 5216, + "▁sudd": 5217, + "dated": 5218, + "vi": 5219, + "▁gi": 5220, + "send": 5221, + "cpp": 5222, + "▁spent": 5223, + "ande": 5224, + "▁operation": 5225, + "process": 5226, + "▁inform": 5227, + "▁Free": 5228, + "yond": 5229, + "▁perhaps": 5230, + "▁surv": 5231, + "▁Loc": 5232, + "▁concl": 5233, + "▁раз": 5234, + "▁Over": 5235, + "hol": 5236, + "raz": 5237, + "Write": 5238, + "▁giving": 5239, + "rd": 5240, + "instance": 5241, + "▁released": 5242, + "▁Ro": 5243, + "RA": 5244, + "▁practice": 5245, + "▁graph": 5246, + "▁increase": 5247, + "▁figure": 5248, + "Filter": 5249, + "HECK": 5250, + "idx": 5251, + "▁glass": 5252, + "ski": 5253, + "comes": 5254, + "▁cat": 5255, + "▁cold": 5256, + "goto": 5257, + "ufact": 5258, + "▁Copyright": 5259, + "}}\\": 5260, + "▁streng": 5261, + "▁dir": 5262, + "token": 5263, + "▁occur": 5264, + "arlier": 5265, + "▁measure": 5266, + "▁sec": 5267, + "▁más": 5268, + "▁Net": 5269, + "▁argument": 5270, + "▁sou": 5271, + "▁moving": 5272, + "▁prefer": 5273, + "mask": 5274, + "<<": 5275, + "▁breath": 5276, + "▁physical": 5277, + "▁positive": 5278, + "▁sor": 5279, + "▁depart": 5280, + "▁remove": 5281, + "▁kit": 5282, + "▁meeting": 5283, + "▁Data": 5284, + "ograf": 5285, + "actions": 5286, + "▁parameters": 5287, + "▁Att": 5288, + "esch": 5289, + "▁involved": 5290, + "ät": 5291, + "LL": 5292, + "Bar": 5293, + "▁си": 5294, + "ech": 5295, + "GET": 5296, + "▁prevent": 5297, + "▁beyond": 5298, + "▁Other": 5299, + "än": 5300, + "byte": 5301, + "▁sudden": 5302, + "olve": 5303, + "▁но": 5304, + "LOG": 5305, + "unit": 5306, + "▁truth": 5307, + "rat": 5308, + "SD": 5309, + "▁eat": 5310, + "▁Mad": 5311, + "▁provides": 5312, + "▁session": 5313, + "Dele": 5314, + "▁convers": 5315, + "center": 5316, + "▁continued": 5317, + "otion": 5318, + "cache": 5319, + "display": 5320, + "▁protect": 5321, + "ams": 5322, + "▁pow": 5323, + "CTION": 5324, + "▁Mac": 5325, + "mo": 5326, + "ха": 5327, + "▁distance": 5328, + "▁Time": 5329, + "gi": 5330, + "▁sequ": 5331, + "Target": 5332, + "сле": 5333, + "Server": 5334, + "▁wide": 5335, + "close": 5336, + "▁cru": 5337, + "Ext": 5338, + "▁select": 5339, + "▁pattern": 5340, + "\"));": 5341, + "Provider": 5342, + "URL": 5343, + "▁green": 5344, + "▁waiting": 5345, + "proto": 5346, + "▁immediately": 5347, + "common": 5348, + "azione": 5349, + "river": 5350, + "▁sen": 5351, + "▁!==": 5352, + "▁February": 5353, + "urb": 5354, + "▁Sen": 5355, + "dest": 5356, + ">": 6122, + "command": 6123, + "atz": 6124, + "▁mal": 6125, + "став": 6126, + "▁Press": 6127, + "▁characters": 6128, + "▁zero": 6129, + "AGE": 6130, + "rapper": 6131, + "▁kitchen": 6132, + "aming": 6133, + "▁restr": 6134, + "XX": 6135, + "▁College": 6136, + "▁Array": 6137, + "▁fresh": 6138, + "▁shift": 6139, + "▁specified": 6140, + "plete": 6141, + "ITE": 6142, + "▁Camp": 6143, + "rial": 6144, + "cb": 6145, + "▁TH": 6146, + "IB": 6147, + "osen": 6148, + "▁ú": 6149, + "▁params": 6150, + "ignment": 6151, + "adding": 6152, + "▁degree": 6153, + "Local": 6154, + "Oh": 6155, + "▁zur": 6156, + "▁levels": 6157, + "CS": 6158, + "finished": 6159, + "Case": 6160, + "riage": 6161, + "Vector": 6162, + "▁sea": 6163, + "antic": 6164, + "▁League": 6165, + "▁therefore": 6166, + "One": 6167, + "Return": 6168, + "Access": 6169, + "vas": 6170, + "▁ос": 6171, + "▁rat": 6172, + "Big": 6173, + "▁behavior": 6174, + "kr": 6175, + "▁undefined": 6176, + "▁Es": 6177, + "▁appeared": 6178, + "eles": 6179, + "▁WAR": 6180, + "Stat": 6181, + "▁Google": 6182, + "▁credit": 6183, + "▁File": 6184, + "anging": 6185, + "house": 6186, + "romise": 6187, + "gent": 6188, + "▁habit": 6189, + "▁society": 6190, + "▁encour": 6191, + "▁paint": 6192, + "pet": 6193, + "▁UK": 6194, + "aws": 6195, + "onom": 6196, + "Gl": 6197, + "}_{\\": 6198, + "eless": 6199, + "emy": 6200, + "▁Cong": 6201, + "▁developed": 6202, + "▁images": 6203, + "▁ö": 6204, + "▁font": 6205, + "clear": 6206, + "gin": 6207, + "▁Lord": 6208, + "▁transport": 6209, + "▁::": 6210, + "▁cup": 6211, + "ulate": 6212, + "▁During": 6213, + "priv": 6214, + "▁extrem": 6215, + "▁Di": 6216, + "▁doubt": 6217, + "Py": 6218, + "ifying": 6219, + "split": 6220, + "ego": 6221, + "github": 6222, + "▁),": 6223, + "ROM": 6224, + "▁chair": 6225, + "▁trade": 6226, + "▁nicht": 6227, + "Top": 6228, + "Store": 6229, + "▁parte": 6230, + "project": 6231, + "nia": 6232, + "▁від": 6233, + "war": 6234, + "▁Prof": 6235, + "▁caught": 6236, + "Thread": 6237, + "ства": 6238, + "author": 6239, + "▁doll": 6240, + "▁harm": 6241, + "▁Gen": 6242, + "tree": 6243, + "etime": 6244, + "cfg": 6245, + "▁guys": 6246, + "▁California": 6247, + "▁Green": 6248, + "▁movement": 6249, + "iej": 6250, + "▁statement": 6251, + "▁seeing": 6252, + "▁haven": 6253, + "vention": 6254, + "SL": 6255, + "chedul": 6256, + "iert": 6257, + "▁primary": 6258, + "▁civil": 6259, + "rian": 6260, + "▁button": 6261, + "▁lived": 6262, + "Pass": 6263, + "sor": 6264, + "▁watching": 6265, + "▁skills": 6266, + "tee": 6267, + "Level": 6268, + "▁scient": 6269, + "hs": 6270, + "▁agre": 6271, + "cat": 6272, + "▁tend": 6273, + "▁Mill": 6274, + "▁Cap": 6275, + "ORD": 6276, + "gle": 6277, + "▁сво": 6278, + "»,": 6279, + "▁ahead": 6280, + "vest": 6281, + "▁Jose": 6282, + "ischer": 6283, + "și": 6284, + "▁leaving": 6285, + "▁для": 6286, + "▁south": 6287, + "▁consum": 6288, + "Range": 6289, + "▁activities": 6290, + "Sec": 6291, + "▁sales": 6292, + "▁fix": 6293, + "▁jed": 6294, + "rum": 6295, + "vector": 6296, + "▁spot": 6297, + "▁manufact": 6298, + "кт": 6299, + "orrow": 6300, + "sign": 6301, + "▁college": 6302, + "▁driver": 6303, + "▁definitely": 6304, + "▁spend": 6305, + "mission": 6306, + "зу": 6307, + "atively": 6308, + "bi": 6309, + "Callback": 6310, + "▁particularly": 6311, + "▁hell": 6312, + "▁pool": 6313, + "PRE": 6314, + "▁clearly": 6315, + "PT": 6316, + "othes": 6317, + "▁Id": 6318, + "Location": 6319, + "▁Run": 6320, + "▁fixed": 6321, + "▁Hand": 6322, + "bal": 6323, + "double": 6324, + "Can": 6325, + "Omega": 6326, + "▁challeng": 6327, + "▁standing": 6328, + "iten": 6329, + "▁mechan": 6330, + "▁durch": 6331, + "▁dell": 6332, + "▁raised": 6333, + "▁weak": 6334, + "▁Du": 6335, + "grad": 6336, + "▁scene": 6337, + "poss": 6338, + "▁ton": 6339, + "▁earth": 6340, + "ulations": 6341, + "▁strength": 6342, + "aked": 6343, + "▁remain": 6344, + "▁Bi": 6345, + "▁customer": 6346, + "range": 6347, + "▁interested": 6348, + "ONE": 6349, + "▁coff": 6350, + "require": 6351, + "▁Only": 6352, + "▁Web": 6353, + "▁farm": 6354, + "▁activity": 6355, + "▁rout": 6356, + "bling": 6357, + "SY": 6358, + "▁Richard": 6359, + "▁Ref": 6360, + "▁кон": 6361, + "▁jun": 6362, + "born": 6363, + "ijn": 6364, + "Configuration": 6365, + "uman": 6366, + "EE": 6367, + "▁married": 6368, + "▁За": 6369, + "▁fat": 6370, + "▁kid": 6371, + "▁Tur": 6372, + "▁offered": 6373, + "nic": 6374, + "▁Big": 6375, + "Gamma": 6376, + "▁Health": 6377, + "▁TR": 6378, + "▁się": 6379, + "▁construction": 6380, + "▁Church": 6381, + "▁Bet": 6382, + "bus": 6383, + "▁earn": 6384, + "rict": 6385, + "▁пра": 6386, + "▁brain": 6387, + "▁fra": 6388, + "▁Op": 6389, + "FIG": 6390, + "ema": 6391, + "▁European": 6392, + "▁Saint": 6393, + "ARE": 6394, + "uri": 6395, + "▁River": 6396, + "{}": 6397, + "▁sitting": 6398, + "▁understanding": 6399, + "▁plans": 6400, + "ropri": 6401, + "▁older": 6402, + "▁pressure": 6403, + "Impl": 6404, + "▁peace": 6405, + "Connection": 6406, + "▁fi": 6407, + "rich": 6408, + "▁shut": 6409, + "apers": 6410, + "Port": 6411, + "▁Look": 6412, + "rim": 6413, + "auth": 6414, + "auto": 6415, + "▁highly": 6416, + "▁unless": 6417, + "▁Wal": 6418, + "▁ren": 6419, + "ws": 6420, + "▁core": 6421, + "(-": 6422, + "▁clim": 6423, + "ruit": 6424, + "▁callback": 6425, + "hest": 6426, + "▁Charles": 6427, + "▁Long": 6428, + "}=": 6429, + "ър": 6430, + "▁shared": 6431, + "ulated": 6432, + "gorithm": 6433, + "▁Home": 6434, + "▁village": 6435, + "ees": 6436, + "sv": 6437, + "▁restaur": 6438, + "rey": 6439, + "▁Cast": 6440, + "▁Person": 6441, + "кий": 6442, + "▁organiz": 6443, + "▁Rad": 6444, + "ponents": 6445, + "▁werden": 6446, + "▁bow": 6447, + "sen": 6448, + "ami": 6449, + "Interface": 6450, + "▁basis": 6451, + "▁Company": 6452, + "ernel": 6453, + "itu": 6454, + "Hash": 6455, + "▁aan": 6456, + "▁х": 6457, + "▁smile": 6458, + "xml": 6459, + "▁scen": 6460, + "amm": 6461, + "tool": 6462, + "aria": 6463, + "▁accur": 6464, + "settings": 6465, + "▁Jesus": 6466, + "acement": 6467, + "power": 6468, + "(!": 6469, + "▁calls": 6470, + "▁basic": 6471, + "▁settings": 6472, + "ript": 6473, + "pool": 6474, + "ctors": 6475, + "▁Foundation": 6476, + "▁weap": 6477, + "KEY": 6478, + "foot": 6479, + "▁radio": 6480, + "▁helped": 6481, + "mann": 6482, + "▁jump": 6483, + "▁tick": 6484, + "▁growing": 6485, + "aten": 6486, + "real": 6487, + "▁increasing": 6488, + "Device": 6489, + "varepsilon": 6490, + "▁sets": 6491, + "▁advant": 6492, + "Open": 6493, + "▁reasons": 6494, + "▁supposed": 6495, + "oes": 6496, + "ede": 6497, + "teen": 6498, + "ifdef": 6499, + "▁delete": 6500, + "▁&=": 6501, + "▁Bill": 6502, + "▁aim": 6503, + "▁Ok": 6504, + "▁Av": 6505, + "reci": 6506, + "acks": 6507, + "iste": 6508, + "Properties": 6509, + "▁tmp": 6510, + "▁dei": 6511, + "PER": 6512, + "DC": 6513, + "sta": 6514, + "нии": 6515, + "▁limited": 6516, + "▁greater": 6517, + "description": 6518, + "ori": 6519, + "aints": 6520, + "▁hy": 6521, + "▁Mel": 6522, + "▁CH": 6523, + "cons": 6524, + "▁surround": 6525, + "▁Who": 6526, + "arc": 6527, + "▁telev": 6528, + "itution": 6529, + "▁equal": 6530, + "кі": 6531, + "▁Israel": 6532, + "äh": 6533, + "▁Caption": 6534, + "▁exerc": 6535, + "empor": 6536, + "▁++": 6537, + "▁lib": 6538, + "make": 6539, + "▁MA": 6540, + "copy": 6541, + "friend": 6542, + "▁кото": 6543, + "▁damage": 6544, + "▁\\,": 6545, + "oded": 6546, + "▁none": 6547, + "▁evalu": 6548, + "ston": 6549, + ">,": 6550, + "FOR": 6551, + "▁norm": 6552, + "appe": 6553, + "Session": 6554, + "▁adult": 6555, + "▁hospital": 6556, + "▁recommend": 6557, + "property": 6558, + "stein": 6559, + "final": 6560, + "▁nu": 6561, + "second": 6562, + "▁aspect": 6563, + "\")]": 6564, + "жен": 6565, + "amento": 6566, + "▁rac": 6567, + "save": 6568, + "▁football": 6569, + "Ab": 6570, + "ungs": 6571, + "abil": 6572, + "▁Arch": 6573, + "system": 6574, + "hist": 6575, + "▁luck": 6576, + "render": 6577, + "▁sein": 6578, + "ioni": 6579, + "▁rot": 6580, + "▁corner": 6581, + "▁appropri": 6582, + "▁Software": 6583, + "▁tele": 6584, + "Delete": 6585, + "▁According": 6586, + "▁prison": 6587, + "▁lic": 6588, + "▁ми": 6589, + "term": 6590, + "sets": 6591, + "▁vel": 6592, + "▁rank": 6593, + "▁existing": 6594, + "▁Vir": 6595, + "▁trip": 6596, + "▁му": 6597, + "avax": 6598, + "▁ris": 6599, + "▁define": 6600, + "▁heat": 6601, + "car": 6602, + "▁convert": 6603, + "email": 6604, + "▁Under": 6605, + "▁Ш": 6606, + "▁Grand": 6607, + "▁exists": 6608, + "sys": 6609, + "eff": 6610, + "▁Top": 6611, + "▁č": 6612, + "▁tempor": 6613, + "▁arguments": 6614, + "▁supported": 6615, + "ensed": 6616, + "▁Francis": 6617, + "▁coord": 6618, + "▁achieve": 6619, + "▁Name": 6620, + "▁Jahr": 6621, + "▁Gi": 6622, + "she": 6623, + "▁Dev": 6624, + "▁alla": 6625, + "▁WIT": 6626, + "agment": 6627, + "custom": 6628, + "alls": 6629, + "&&": 6630, + "WE": 6631, + "▁holding": 6632, + "prototype": 6633, + "▁fing": 6634, + "▁bag": 6635, + "▁Party": 6636, + "stack": 6637, + "▁economic": 6638, + "▁Gal": 6639, + "idents": 6640, + "▁Jun": 6641, + "▁showed": 6642, + "osh": 6643, + "▁Bay": 6644, + "mail": 6645, + "▁SO": 6646, + "▁\"<": 6647, + "graphics": 6648, + "▁fu": 6649, + "click": 6650, + "▁battle": 6651, + "{{": 6652, + "▁Event": 6653, + "rior": 6654, + "chaft": 6655, + "▁favorite": 6656, + "usive": 6657, + "support": 6658, + "bm": 6659, + "Kind": 6660, + "▁safety": 6661, + "▁Ent": 6662, + "cup": 6663, + "▁Australia": 6664, + "▁destroy": 6665, + "▁organization": 6666, + "iden": 6667, + "################": 6668, + "dec": 6669, + "▁za": 6670, + "▁seven": 6671, + "arely": 6672, + "▁flag": 6673, + "Dir": 6674, + "▁Carl": 6675, + "▁doctor": 6676, + "▁variety": 6677, + "▁Lin": 6678, + "▁tom": 6679, + "^{(": 6680, + "Bo": 6681, + "antes": 6682, + "▁mine": 6683, + "▁Mit": 6684, + "▁describe": 6685, + "Args": 6686, + "LS": 6687, + "API": 6688, + "▁Luc": 6689, + "phone": 6690, + "▁science": 6691, + "▁Oper": 6692, + "Next": 6693, + "▁investig": 6694, + "▁demonstr": 6695, + "▁Govern": 6696, + "▁objects": 6697, + "▁Louis": 6698, + "▁Returns": 6699, + "▁han": 6700, + "nam": 6701, + "▁comme": 6702, + "▁presence": 6703, + "▁pel": 6704, + "▁detect": 6705, + ")=": 6706, + "▁Chinese": 6707, + "▁rich": 6708, + "▁classes": 6709, + "▁expand": 6710, + "▁Dom": 6711, + "▁Dec": 6712, + "sn": 6713, + "peed": 6714, + "▁Jim": 6715, + "should": 6716, + "▁Smith": 6717, + "▁pages": 6718, + "▁Jean": 6719, + "rics": 6720, + "▁Sund": 6721, + "ads": 6722, + "▁Their": 6723, + "unicip": 6724, + "ву": 6725, + "▁download": 6726, + "▁stress": 6727, + "▁Pet": 6728, + "menu": 6729, + "reme": 6730, + "▁compared": 6731, + "Ste": 6732, + "IND": 6733, + "container": 6734, + "▁Indian": 6735, + "oren": 6736, + "▁ses": 6737, + "▁Whe": 6738, + "▁roku": 6739, + "▁established": 6740, + "▁generally": 6741, + "▁fle": 6742, + "__(": 6743, + "=\"+": 6744, + "Var": 6745, + "▁Make": 6746, + "▁removed": 6747, + "zz": 6748, + "ün": 6749, + "▁mix": 6750, + "erk": 6751, + "iation": 6752, + "outer": 6753, + "SK": 6754, + "▁becomes": 6755, + "▁Hall": 6756, + "scious": 6757, + "▁watched": 6758, + "▁gather": 6759, + "▁Result": 6760, + "proof": 6761, + "pay": 6762, + "▁produced": 6763, + "▁|=": 6764, + "▁border": 6765, + "▁din": 6766, + "▁script": 6767, + "▁actions": 6768, + "▁mas": 6769, + "ща": 6770, + "ooth": 6771, + "▁Techn": 6772, + "Json": 6773, + "▁filled": 6774, + "ден": 6775, + "undle": 6776, + "сту": 6777, + "Tool": 6778, + "▁king": 6779, + "▁ven": 6780, + "stra": 6781, + "▁predict": 6782, + "▁lui": 6783, + "▁WARRAN": 6784, + "▁Fun": 6785, + "Script": 6786, + "▁powerful": 6787, + "▁lose": 6788, + "atically": 6789, + "▁daily": 6790, + "▁ring": 6791, + "▁arrived": 6792, + "Stack": 6793, + "scope": 6794, + "▁Back": 6795, + "elij": 6796, + "▁ze": 6797, + "keys": 6798, + "{\"": 6799, + "VID": 6800, + "▁license": 6801, + "what": 6802, + "▁proced": 6803, + "rant": 6804, + "estival": 6805, + "agram": 6806, + "▁LO": 6807, + "▁Henry": 6808, + "▁flags": 6809, + "Down": 6810, + "scription": 6811, + "▁families": 6812, + "isse": 6813, + "bour": 6814, + "▁Bur": 6815, + "—\"": 6816, + "▁brief": 6817, + "▁creating": 6818, + "▁clients": 6819, + "rangle": 6820, + "▁amazing": 6821, + "▁sind": 6822, + "▁covered": 6823, + "Well": 6824, + "сте": 6825, + "тор": 6826, + "▁Bas": 6827, + "total": 6828, + "▁Init": 6829, + "▁sand": 6830, + "Unit": 6831, + "▁murder": 6832, + "▁bright": 6833, + "▁trav": 6834, + "icans": 6835, + "▁attribute": 6836, + "fc": 6837, + "▁placed": 6838, + "EST": 6839, + "Vari": 6840, + "▁cos": 6841, + "▁attract": 6842, + "anel": 6843, + "}).": 6844, + "bytes": 6845, + "▁parse": 6846, + "▁belong": 6847, + "BN": 6848, + "▁Sol": 6849, + "Po": 6850, + "`,": 6851, + "▁calling": 6852, + "▁?>": 6853, + "▁iter": 6854, + "▁url": 6855, + "▁evening": 6856, + "reek": 6857, + "▁honest": 6858, + "▁director": 6859, + "RC": 6860, + "▁solid": 6861, + "▁phil": 6862, + "iene": 6863, + "FAULT": 6864, + "cope": 6865, + "▁History": 6866, + "▁Team": 6867, + "reedom": 6868, + "▁ru": 6869, + "UB": 6870, + "▁worse": 6871, + "imo": 6872, + "Mat": 6873, + "▁Mex": 6874, + "actor": 6875, + "▁vor": 6876, + "ться": 6877, + "▁experiment": 6878, + "▁Play": 6879, + "▁Another": 6880, + "▁happens": 6881, + "uan": 6882, + "▁patients": 6883, + "▁rend": 6884, + "▁Mo": 6885, + "▁Tex": 6886, + "▁wed": 6887, + "tn": 6888, + "insert": 6889, + "▁па": 6890, + "▁anti": 6891, + "Match": 6892, + "ampionship": 6893, + "▁forces": 6894, + "▁Hot": 6895, + "▁phase": 6896, + "▁template": 6897, + "stop": 6898, + "icated": 6899, + "▁managed": 6900, + "wait": 6901, + "▁*(": 6902, + "GB": 6903, + "▁appoint": 6904, + "ła": 6905, + "▁stick": 6906, + "▁FOR": 6907, + "▁Vis": 6908, + "tor": 6909, + "▁př": 6910, + "quest": 6911, + "uses": 6912, + "\");\r": 6913, + "▁suddenly": 6914, + "éc": 6915, + "ND": 6916, + "urop": 6917, + "ред": 6918, + "▁insurance": 6919, + "access": 6920, + "unfinished": 6921, + "▁tamb": 6922, + "▁sac": 6923, + "▁Court": 6924, + "▁missing": 6925, + "▁Where": 6926, + "▁Sum": 6927, + "}^{\\": 6928, + "▁sua": 6929, + "_,": 6930, + "▁thick": 6931, + "▁Trump": 6932, + "▁operations": 6933, + "FS": 6934, + "▁deux": 6935, + "dz": 6936, + "Template": 6937, + "▁\"/": 6938, + "▁odd": 6939, + "▁reality": 6940, + "▁teams": 6941, + "▁cer": 6942, + "oma": 6943, + "▁și": 6944, + "▁cloud": 6945, + "▁Department": 6946, + "Ne": 6947, + "▁requires": 6948, + "items": 6949, + "▁III": 6950, + "rightarrow": 6951, + ")->": 6952, + "▁writer": 6953, + "replace": 6954, + "▁thr": 6955, + "jen": 6956, + "▁ot": 6957, + "▁occup": 6958, + "▁eventually": 6959, + "▁Math": 6960, + "▁conserv": 6961, + "amer": 6962, + "▁Fort": 6963, + "▁dry": 6964, + "▁sexual": 6965, + "▁costs": 6966, + "▁forms": 6967, + "▁Vict": 6968, + "PAR": 6969, + "framework": 6970, + "▁ди": 6971, + "Operation": 6972, + "зна": 6973, + "which": 6974, + "▁tight": 6975, + "Invalid": 6976, + "▁partner": 6977, + "▁пред": 6978, + "▁thank": 6979, + "▁guard": 6980, + "hem": 6981, + "Body": 6982, + "▁emot": 6983, + "IX": 6984, + "fast": 6985, + "що": 6986, + "ño": 6987, + "night": 6988, + "▁Sci": 6989, + "ника": 6990, + "▁TO": 6991, + "▁individuals": 6992, + "сси": 6993, + "}),": 6994, + "False": 6995, + "(\"%": 6996, + "▁optim": 6997, + "▁-->": 6998, + "▁factor": 6999, + "▁smaller": 7000, + "▁contain": 7001, + "spect": 7002, + "Engine": 7003, + "▁announced": 7004, + "▁Democr": 7005, + "▁rob": 7006, + "▁flat": 7007, + "osoph": 7008, + "Search": 7009, + "ahl": 7010, + "▁Exception": 7011, + "▁Ol": 7012, + "equals": 7013, + "▁unter": 7014, + "shape": 7015, + "NS": 7016, + "Obj": 7017, + "▁species": 7018, + "weight": 7019, + "you": 7020, + "▁este": 7021, + "▁View": 7022, + "▁mission": 7023, + "▁journal": 7024, + "Values": 7025, + "▁einem": 7026, + "ismo": 7027, + "▁projects": 7028, + "▁Das": 7029, + "rible": 7030, + "▁serve": 7031, + "▁opening": 7032, + "▁hur": 7033, + "▁programs": 7034, + "▁USA": 7035, + "iliar": 7036, + "idos": 7037, + "Br": 7038, + "estamp": 7039, + "▁tools": 7040, + "anner": 7041, + "RT": 7042, + "▁Start": 7043, + "▁bath": 7044, + "▁coffee": 7045, + "orter": 7046, + "internal": 7047, + "files": 7048, + "INVAL": 7049, + "ako": 7050, + "dt": 7051, + "▁Second": 7052, + "▁alloc": 7053, + "▁ended": 7054, + "acional": 7055, + "▁manager": 7056, + "▁Sun": 7057, + "agg": 7058, + "▁leader": 7059, + "olved": 7060, + "▁что": 7061, + "▁traditional": 7062, + "shot": 7063, + "rup": 7064, + "CF": 7065, + "▁Each": 7066, + "wr": 7067, + "▁Som": 7068, + "▁materials": 7069, + "▁msg": 7070, + "▁syn": 7071, + "▁produce": 7072, + "▁storage": 7073, + "subsection": 7074, + "▁Sie": 7075, + "▁IP": 7076, + "CESS": 7077, + "▁wa": 7078, + "Record": 7079, + "▁marketing": 7080, + "plet": 7081, + "Dialog": 7082, + "▁mentioned": 7083, + "▁Na": 7084, + "▁Union": 7085, + "▁API": 7086, + "▁negative": 7087, + "txt": 7088, + "▁easier": 7089, + "legal": 7090, + "Dep": 7091, + "▁novel": 7092, + "eur": 7093, + "ació": 7094, + "▁Bud": 7095, + "▁carry": 7096, + "schaft": 7097, + "▁broken": 7098, + "▁trees": 7099, + ">();": 7100, + "▁emb": 7101, + "ieder": 7102, + "▁route": 7103, + "ikel": 7104, + "▁listen": 7105, + "ashion": 7106, + "▁Mrs": 7107, + "▁equipment": 7108, + "agger": 7109, + "▁Thus": 7110, + "▁matrix": 7111, + "alla": 7112, + "▁Tour": 7113, + "▁conversation": 7114, + "Mon": 7115, + "ournal": 7116, + "▁minute": 7117, + "Am": 7118, + "Api": 7119, + "▁forget": 7120, + "Me": 7121, + "levant": 7122, + "temp": 7123, + "▁telling": 7124, + "move": 7125, + "▁independent": 7126, + "toString": 7127, + "edit": 7128, + "▁Jac": 7129, + "azz": 7130, + "react": 7131, + "▁cin": 7132, + "▁Prov": 7133, + "isted": 7134, + "▁hash": 7135, + "onna": 7136, + "iki": 7137, + "▁generated": 7138, + "Render": 7139, + "▁psych": 7140, + "nav": 7141, + "▁entr": 7142, + "пра": 7143, + "rx": 7144, + "ATH": 7145, + "▁assume": 7146, + "Tree": 7147, + "sembly": 7148, + "▁Matt": 7149, + "caption": 7150, + "▁solutions": 7151, + "▁faith": 7152, + "▁digital": 7153, + "▁excell": 7154, + "▁Version": 7155, + "Debug": 7156, + "▁жи": 7157, + "▁carried": 7158, + "reset": 7159, + "▁slowly": 7160, + "ancing": 7161, + "▁owner": 7162, + "▁Ter": 7163, + "▁Did": 7164, + "▁gest": 7165, + "▁été": 7166, + "▁proof": 7167, + "Font": 7168, + "▁nob": 7169, + "Co": 7170, + "▁GNU": 7171, + "▁liber": 7172, + "itness": 7173, + "▁hij": 7174, + "▁vert": 7175, + "ша": 7176, + "FLAG": 7177, + "MENT": 7178, + "▁Son": 7179, + "Mult": 7180, + "▁district": 7181, + "connect": 7182, + "jection": 7183, + "lymp": 7184, + "▁realized": 7185, + "mos": 7186, + "ye": 7187, + "▁render": 7188, + "rio": 7189, + "▁interpret": 7190, + "▁slightly": 7191, + "fix": 7192, + "▁studies": 7193, + "▁rid": 7194, + "atre": 7195, + "▁benefits": 7196, + "▁Face": 7197, + "ivery": 7198, + "рия": 7199, + "document": 7200, + "▁asking": 7201, + "Last": 7202, + "arante": 7203, + "▁Martin": 7204, + "▁Ell": 7205, + "▁vector": 7206, + "▁forced": 7207, + "оло": 7208, + "PH": 7209, + "WR": 7210, + "▁Kl": 7211, + "▁sky": 7212, + "▁strategy": 7213, + "ocked": 7214, + "▁neck": 7215, + "ści": 7216, + "OUT": 7217, + ")),": 7218, + "Custom": 7219, + "▁wie": 7220, + "▁sweet": 7221, + "▁temp": 7222, + "▁foreign": 7223, + "▁hall": 7224, + "astr": 7225, + "Ass": 7226, + "MODE": 7227, + "▁maximum": 7228, + "annels": 7229, + "▁tip": 7230, + "▁seconds": 7231, + "▁stack": 7232, + "iga": 7233, + "▁raise": 7234, + "enable": 7235, + "oir": 7236, + "▁soul": 7237, + "Ke": 7238, + ")$.": 7239, + "▁Tim": 7240, + "ALSE": 7241, + "iser": 7242, + "contin": 7243, + "bel": 7244, + "▁mad": 7245, + "lichen": 7246, + "abe": 7247, + "safe": 7248, + "▁concent": 7249, + "bound": 7250, + "▁Requ": 7251, + "switch": 7252, + "▁stone": 7253, + "▁transl": 7254, + "▁vac": 7255, + "andon": 7256, + "▁Fore": 7257, + "▁sounds": 7258, + "▁Pop": 7259, + "▁HT": 7260, + "lia": 7261, + "enter": 7262, + "▁helps": 7263, + "edy": 7264, + "ствен": 7265, + "anted": 7266, + "▁Its": 7267, + "▁Step": 7268, + "Icon": 7269, + "▁EXPECT": 7270, + "ialized": 7271, + "Post": 7272, + "aze": 7273, + "▁Carol": 7274, + "▁req": 7275, + "▁critical": 7276, + "DS": 7277, + "▁seat": 7278, + "aped": 7279, + "▁upper": 7280, + "▁Sy": 7281, + "▁explain": 7282, + "▁'./": 7283, + "utils": 7284, + "possible": 7285, + "▁dont": 7286, + "Host": 7287, + "▁approxim": 7288, + "Async": 7289, + "▁grab": 7290, + "▁sources": 7291, + "▁Mos": 7292, + "▁Germany": 7293, + "▁rub": 7294, + "CHAN": 7295, + "▁rain": 7296, + "▁truly": 7297, + "▁joined": 7298, + "▁": 8276, + "agnost": 8277, + "▁proposed": 8278, + "▁Game": 8279, + "▁efforts": 8280, + "вя": 8281, + "tc": 8282, + "ск": 8283, + "▁intent": 8284, + "▁Bre": 8285, + "isc": 8286, + "▁protest": 8287, + "▁holds": 8288, + "ometry": 8289, + "▁Have": 8290, + "▁detail": 8291, + "▁WITHOUT": 8292, + "yer": 8293, + "▁Kon": 8294, + "▁noticed": 8295, + "▁requirements": 8296, + "DEBUG": 8297, + "kins": 8298, + "▁Span": 8299, + "▁cars": 8300, + "meta": 8301, + "▁kil": 8302, + "▁Bron": 8303, + "▁experienced": 8304, + "▁remind": 8305, + "ourse": 8306, + "▁Western": 8307, + "tered": 8308, + "▁devices": 8309, + "▁pictures": 8310, + "▁tut": 8311, + "\"`": 8312, + "▁impossible": 8313, + "▁rail": 8314, + "▁feels": 8315, + "icas": 8316, + "illing": 8317, + "▁accident": 8318, + "▁'@": 8319, + "________": 8320, + "▁notes": 8321, + "oman": 8322, + "Parser": 8323, + "▁discovered": 8324, + "▁Roman": 8325, + "▁budget": 8326, + "▁guide": 8327, + "king": 8328, + "▁incred": 8329, + "olar": 8330, + "enden": 8331, + "Desc": 8332, + "▁wave": 8333, + "бли": 8334, + "igt": 8335, + "▁restrict": 8336, + "▁Ret": 8337, + "▁mac": 8338, + "ур": 8339, + "BS": 8340, + "ís": 8341, + "▁generation": 8342, + "dem": 8343, + "alo": 8344, + "бра": 8345, + "▁ordered": 8346, + "drop": 8347, + "▁pp": 8348, + "▁Review": 8349, + "▁literally": 8350, + "▁Sir": 8351, + "▁Yeah": 8352, + "▁density": 8353, + "riz": 8354, + "inde": 8355, + "▁gain": 8356, + "▁panel": 8357, + "jet": 8358, + "▁Times": 8359, + "▁nella": 8360, + "▁previously": 8361, + "points": 8362, + "Send": 8363, + "▁Brown": 8364, + "each": 8365, + "▁trigger": 8366, + "ometimes": 8367, + "icos": 8368, + "GR": 8369, + "Panel": 8370, + "ogen": 8371, + "▁cm": 8372, + "ructions": 8373, + "▁kiss": 8374, + "▁solo": 8375, + "▁famous": 8376, + "ran": 8377, + "про": 8378, + "▁thro": 8379, + "Graph": 8380, + "imit": 8381, + "▁Value": 8382, + "▁starts": 8383, + "ipeline": 8384, + "hd": 8385, + "TC": 8386, + "▁discussion": 8387, + "▁truck": 8388, + "aka": 8389, + "Only": 8390, + "▁Equ": 8391, + "▁kö": 8392, + "▁Bes": 8393, + "▁critic": 8394, + "▁propos": 8395, + "▁batt": 8396, + "▁Section": 8397, + "Show": 8398, + "gp": 8399, + "STATE": 8400, + "POST": 8401, + "▁Nord": 8402, + "▁innov": 8403, + "▁crim": 8404, + "axis": 8405, + "▁Turn": 8406, + "conn": 8407, + "Runtime": 8408, + "▁remaining": 8409, + "oston": 8410, + "▁Э": 8411, + "▁windows": 8412, + "▁Royal": 8413, + "▁vide": 8414, + "PP": 8415, + "chron": 8416, + "▁san": 8417, + "▁rise": 8418, + "▁delle": 8419, + "▁Dur": 8420, + "▁rapid": 8421, + "cert": 8422, + "LA": 8423, + "edge": 8424, + "▁\\]": 8425, + "▁entered": 8426, + "▁laws": 8427, + "▁photo": 8428, + "▁applications": 8429, + "▁Berlin": 8430, + "▁arrest": 8431, + "▁federal": 8432, + "▁Russia": 8433, + "▁usual": 8434, + "▁raw": 8435, + "▁più": 8436, + "être": 8437, + "JSON": 8438, + "SION": 8439, + "xture": 8440, + "istent": 8441, + "▁Power": 8442, + "Bit": 8443, + "▁capacity": 8444, + "▁cards": 8445, + "UID": 8446, + "iments": 8447, + "▁dar": 8448, + "▁Chicago": 8449, + "▁comfortable": 8450, + "tip": 8451, + "bas": 8452, + "▁mu": 8453, + "▁enemy": 8454, + "yan": 8455, + "▁фи": 8456, + "▁updated": 8457, + "ango": 8458, + "Ev": 8459, + "Effect": 8460, + "osing": 8461, + "rence": 8462, + "▁Congress": 8463, + "▁defe": 8464, + "▁ip": 8465, + "▁tout": 8466, + "▁freedom": 8467, + "▁ao": 8468, + "▁Therefore": 8469, + "Edit": 8470, + "▁Virgin": 8471, + "REE": 8472, + "argo": 8473, + "▁Dam": 8474, + "▁traffic": 8475, + "ños": 8476, + "▁alle": 8477, + "▁depth": 8478, + "Now": 8479, + "▁sides": 8480, + "▁годи": 8481, + "Descriptor": 8482, + "▁artikel": 8483, + "▁narrow": 8484, + "___": 8485, + "kw": 8486, + "uto": 8487, + "▁Facebook": 8488, + "tegr": 8489, + "boolean": 8490, + "nik": 8491, + "bd": 8492, + "Track": 8493, + "▁gran": 8494, + "reshold": 8495, + "вет": 8496, + "wrap": 8497, + "▁noise": 8498, + "igu": 8499, + "▁Bon": 8500, + "▁wy": 8501, + "linux": 8502, + "cks": 8503, + "▁fans": 8504, + "▁mach": 8505, + "▁prices": 8506, + "év": 8507, + "outs": 8508, + "standing": 8509, + "▁categ": 8510, + ";\\": 8511, + "▁decre": 8512, + "▁Saturday": 8513, + "▁menu": 8514, + "▁Nov": 8515, + "▁Yet": 8516, + "▁так": 8517, + "liche": 8518, + "▁Academ": 8519, + "▁communication": 8520, + "using": 8521, + "▁Society": 8522, + "▁nuc": 8523, + "pective": 8524, + "orial": 8525, + "▁afraid": 8526, + "▁animal": 8527, + "▁turning": 8528, + "dst": 8529, + "mathfrak": 8530, + "lers": 8531, + "▁lots": 8532, + "▁á": 8533, + "▁Tra": 8534, + "np": 8535, + "▁rose": 8536, + "▁GL": 8537, + "▁helping": 8538, + "▁winter": 8539, + "▁ком": 8540, + "Mock": 8541, + "▁investment": 8542, + "Use": 8543, + "▁Canad": 8544, + "нд": 8545, + "Copy": 8546, + "▁fly": 8547, + "SER": 8548, + "▁Far": 8549, + "▁Ros": 8550, + "amil": 8551, + "▁fighting": 8552, + "▁religious": 8553, + "super": 8554, + "screen": 8555, + "▁furn": 8556, + "▁surprised": 8557, + "▁replied": 8558, + "Activity": 8559, + "▁Down": 8560, + "▁insert": 8561, + "▁Olymp": 8562, + "▁pointed": 8563, + "▁Card": 8564, + "driver": 8565, + "▁Da": 8566, + "!--": 8567, + "roud": 8568, + "undo": 8569, + "▁messages": 8570, + "▁Point": 8571, + "VM": 8572, + "▁plane": 8573, + "xc": 8574, + "▁television": 8575, + "ён": 8576, + "▁thousands": 8577, + "▁cris": 8578, + "▁delay": 8579, + "▁Next": 8580, + "▁nombre": 8581, + "▁tu": 8582, + "▁skip": 8583, + "road": 8584, + "istration": 8585, + "▁tur": 8586, + "▁Develop": 8587, + "▁Па": 8588, + "▁дру": 8589, + "▁wonderful": 8590, + ">&": 8591, + "▁Liber": 8592, + "▁scope": 8593, + "▁manage": 8594, + "▁dass": 8595, + "▁recall": 8596, + "PM": 8597, + "▁relevant": 8598, + "▁Earth": 8599, + "▁как": 8600, + "▁apr": 8601, + "▁ASS": 8602, + "ién": 8603, + "▁SH": 8604, + "oom": 8605, + "itet": 8606, + "none": 8607, + "asi": 8608, + "▁motor": 8609, + "▁Show": 8610, + "nb": 8611, + "▁factors": 8612, + "▁forest": 8613, + "▁вре": 8614, + "thm": 8615, + "▁municip": 8616, + "▁turns": 8617, + "▁Division": 8618, + "EC": 8619, + "▁disappe": 8620, + "structor": 8621, + "▁somewhere": 8622, + "▁African": 8623, + "▁Institute": 8624, + "Grid": 8625, + "▁teacher": 8626, + "uries": 8627, + "▁respectively": 8628, + "▁SD": 8629, + "▁alive": 8630, + "▁pou": 8631, + "▁Water": 8632, + "фе": 8633, + "▁changing": 8634, + "▁afternoon": 8635, + "▁orders": 8636, + "Ret": 8637, + "Pointer": 8638, + "▁sav": 8639, + "erg": 8640, + "oked": 8641, + "essions": 8642, + "▁Fire": 8643, + "aret": 8644, + "imm": 8645, + "▁desire": 8646, + "▁що": 8647, + "▁Design": 8648, + "uture": 8649, + "▁Office": 8650, + "▁cmd": 8651, + "▁eating": 8652, + "Network": 8653, + "▁rough": 8654, + "operator": 8655, + "IGN": 8656, + "▁sports": 8657, + "▁weren": 8658, + "▁noted": 8659, + "▁twice": 8660, + "III": 8661, + "▁anx": 8662, + "▁elim": 8663, + "▁ав": 8664, + "▁io": 8665, + "▁speech": 8666, + "▁condu": 8667, + "elles": 8668, + "idade": 8669, + "▁advance": 8670, + "RI": 8671, + "oca": 8672, + "/\\": 8673, + "apshot": 8674, + "▁tail": 8675, + "models": 8676, + "ogy": 8677, + "▁Jeff": 8678, + "iration": 8679, + "▁Kore": 8680, + "▁leads": 8681, + "bat": 8682, + "Adapter": 8683, + "category": 8684, + "angular": 8685, + "▁saved": 8686, + "▁uniform": 8687, + "▁né": 8688, + "▁businesses": 8689, + "Hist": 8690, + "▁ар": 8691, + "domain": 8692, + "▁Si": 8693, + "raise": 8694, + "▁warn": 8695, + "hetic": 8696, + "▁Gro": 8697, + ")).": 8698, + "}>": 8699, + "зе": 8700, + "▁Amazon": 8701, + "▁Organ": 8702, + "▁Lake": 8703, + "▁agreement": 8704, + "xa": 8705, + "▁perman": 8706, + "▁containing": 8707, + "▁strange": 8708, + "сті": 8709, + "▁stupid": 8710, + "▁speaking": 8711, + "▁Internet": 8712, + "prefix": 8713, + "esc": 8714, + "Assert": 8715, + "prote": 8716, + "▁manner": 8717, + "▁Sz": 8718, + "unte": 8719, + "iot": 8720, + "Profile": 8721, + "oven": 8722, + "▁formed": 8723, + "▁lit": 8724, + "▁economy": 8725, + "▁cz": 8726, + "wid": 8727, + "REQ": 8728, + "▁chosen": 8729, + "▁Produ": 8730, + "oster": 8731, + "stances": 8732, + "awa": 8733, + "▁Ren": 8734, + "▁confirm": 8735, + "▁Бо": 8736, + "▁billion": 8737, + "▁déc": 8738, + "ých": 8739, + "▁illustr": 8740, + "TIES": 8741, + "▁Pub": 8742, + "▁ban": 8743, + "aded": 8744, + "ahn": 8745, + "▁Cath": 8746, + "nonumber": 8747, + "▁worst": 8748, + "▁Ме": 8749, + "▁suggested": 8750, + "stats": 8751, + "▁cant": 8752, + "▁align": 8753, + "kappa": 8754, + "▁hen": 8755, + "▁initi": 8756, + "'])": 8757, + "BI": 8758, + "▁garden": 8759, + "▁secure": 8760, + "▁\\[": 8761, + "handler": 8762, + "elli": 8763, + "ldots": 8764, + "secut": 8765, + "▁extended": 8766, + "}-": 8767, + "anie": 8768, + "▁Find": 8769, + "▁Museum": 8770, + "▁Conne": 8771, + "yy": 8772, + "▁passion": 8773, + "akers": 8774, + "ahr": 8775, + "ologies": 8776, + "▁equation": 8777, + "▁occasion": 8778, + "Let": 8779, + "']['": 8780, + "Print": 8781, + "anes": 8782, + "iente": 8783, + "▁Today": 8784, + "LECT": 8785, + "▁Af": 8786, + ",,": 8787, + "▁Та": 8788, + "▁```": 8789, + "even": 8790, + "sin": 8791, + "urer": 8792, + "▁°": 8793, + "otimes": 8794, + "▁IO": 8795, + "▁poet": 8796, + "()));": 8797, + "▁−": 8798, + "▁adopt": 8799, + "phere": 8800, + "#[": 8801, + "▁centre": 8802, + "oves": 8803, + "▁ans": 8804, + "dp": 8805, + "▁Kir": 8806, + "▁applicable": 8807, + "fp": 8808, + "▁visual": 8809, + "▁okay": 8810, + "oro": 8811, + "▁opportunities": 8812, + "Repository": 8813, + "▁ll": 8814, + "▁Rod": 8815, + "▁shel": 8816, + "▁launch": 8817, + "▁conven": 8818, + "▁Spe": 8819, + "Amer": 8820, + "▁cette": 8821, + "Cond": 8822, + "dep": 8823, + "Own": 8824, + "▁hook": 8825, + "▁dict": 8826, + "▁Those": 8827, + "▁fellow": 8828, + "▁philosoph": 8829, + "vin": 8830, + "ferences": 8831, + "hav": 8832, + "▁adding": 8833, + "iverse": 8834, + "game": 8835, + "▁Blue": 8836, + "▁clin": 8837, + "note": 8838, + "▁Ram": 8839, + "мер": 8840, + "covery": 8841, + "ña": 8842, + "▁би": 8843, + "▁fashion": 8844, + "▁broke": 8845, + "▁'\\": 8846, + "▁reader": 8847, + "ное": 8848, + "ности": 8849, + "▁payment": 8850, + "▁Lic": 8851, + "▁lips": 8852, + "▁academ": 8853, + "▁Mot": 8854, + "ells": 8855, + "CHECK": 8856, + "▁ру": 8857, + "▁MS": 8858, + "Editor": 8859, + "▁zone": 8860, + "iture": 8861, + "▁IT": 8862, + "runtime": 8863, + "▁proceed": 8864, + "лов": 8865, + "▁Maria": 8866, + "olver": 8867, + "▁Thanks": 8868, + "▁shouldn": 8869, + "▁Joh": 8870, + "▁Model": 8871, + "▁Sov": 8872, + "!'": 8873, + "Di": 8874, + "▁cancer": 8875, + "Ident": 8876, + "▁exchange": 8877, + "iller": 8878, + "inf": 8879, + "LEN": 8880, + "(){": 8881, + "aga": 8882, + "\"],": 8883, + "uh": 8884, + "▁Ken": 8885, + "▁photos": 8886, + "▁tiny": 8887, + "▁gent": 8888, + "ül": 8889, + "▁Take": 8890, + "idel": 8891, + "outing": 8892, + "Internal": 8893, + "▁cells": 8894, + "ним": 8895, + "hard": 8896, + "▁Town": 8897, + "obe": 8898, + "plex": 8899, + "тер": 8900, + "tons": 8901, + "▁concentr": 8902, + "mock": 8903, + "vc": 8904, + "áz": 8905, + "▁Championship": 8906, + "▁бе": 8907, + "??": 8908, + "éri": 8909, + "aly": 8910, + "▁Ц": 8911, + "ierte": 8912, + "▁totally": 8913, + "▁Auf": 8914, + "▁ourselves": 8915, + "▁Self": 8916, + "Forms": 8917, + "ighter": 8918, + "▁island": 8919, + "fmt": 8920, + "▁rc": 8921, + "▁tells": 8922, + "BB": 8923, + "dit": 8924, + "▁variables": 8925, + "▁intended": 8926, + "izont": 8927, + "▁plays": 8928, + "dam": 8929, + "seq": 8930, + "▁Sup": 8931, + "▁cultural": 8932, + "▁scream": 8933, + "__,": 8934, + "cipl": 8935, + "Timeout": 8936, + "▁ж": 8937, + "orte": 8938, + "▁replaced": 8939, + "EM": 8940, + "▁abandon": 8941, + "▁Special": 8942, + "ellen": 8943, + "▁Bru": 8944, + "irmed": 8945, + "Te": 8946, + "olt": 8947, + "ju": 8948, + "Argument": 8949, + "▁neut": 8950, + "scape": 8951, + "▁Ray": 8952, + "▁Polit": 8953, + "▁crowd": 8954, + "▁Windows": 8955, + "iego": 8956, + "▁escape": 8957, + "▁Apache": 8958, + "sync": 8959, + "eben": 8960, + "ifies": 8961, + "ether": 8962, + "Meta": 8963, + "▁biggest": 8964, + "Game": 8965, + "▁transaction": 8966, + "Env": 8967, + "▁Мо": 8968, + "▁plenty": 8969, + "▁mel": 8970, + "пре": 8971, + "▁motiv": 8972, + "▁ор": 8973, + "organ": 8974, + "▁mock": 8975, + "▁$_": 8976, + "ене": 8977, + "▁Number": 8978, + "cknow": 8979, + "▁Update": 8980, + "zero": 8981, + "▁surprise": 8982, + "cean": 8983, + "pdf": 8984, + "Global": 8985, + "▁attend": 8986, + "▁fond": 8987, + "▁understood": 8988, + "Nav": 8989, + "▁Mic": 8990, + "=$": 8991, + "oking": 8992, + "▁Stadium": 8993, + "Close": 8994, + "▁competition": 8995, + "▁soldiers": 8996, + "▁OP": 8997, + "agne": 8998, + "▁Anton": 8999, + "Main": 9000, + "ák": 9001, + "▁#[": 9002, + "▁Commit": 9003, + "pyx": 9004, + "▁east": 9005, + "▁Order": 9006, + "Float": 9007, + "▁accepted": 9008, + "▁monitor": 9009, + "▁pad": 9010, + "onic": 9011, + "▁pushed": 9012, + "▁replace": 9013, + "CRE": 9014, + "▁ride": 9015, + "found": 9016, + "=%": 9017, + "вой": 9018, + "▁matches": 9019, + "▁Lie": 9020, + "▁experiences": 9021, + "Pool": 9022, + "ups": 9023, + "AV": 9024, + "▁existence": 9025, + "▁thin": 9026, + "▁magn": 9027, + "COMP": 9028, + "home": 9029, + "▁ni": 9030, + "▁wurden": 9031, + "лав": 9032, + "▁teeth": 9033, + "▁Stan": 9034, + "appro": 9035, + "anny": 9036, + "ifts": 9037, + "▁unknown": 9038, + "▁homes": 9039, + "▁entity": 9040, + "cie": 9041, + "ление": 9042, + "iar": 9043, + "▁compliance": 9044, + "▁focused": 9045, + "uzz": 9046, + "=\\\"": 9047, + "components": 9048, + "Attr": 9049, + "allery": 9050, + "▁identify": 9051, + "Ok": 9052, + "pie": 9053, + "▁Still": 9054, + "▁offering": 9055, + "▁busy": 9056, + "ctl": 9057, + "itors": 9058, + "▁concerned": 9059, + "▁brown": 9060, + "clk": 9061, + "Selected": 9062, + "▁Block": 9063, + "▁egy": 9064, + "icing": 9065, + "▁URL": 9066, + "▁topic": 9067, + "▁Product": 9068, + "▁чи": 9069, + "▁trial": 9070, + "▁weekend": 9071, + "lu": 9072, + "▁IV": 9073, + "▁Egy": 9074, + "xC": 9075, + "▁nove": 9076, + "▁lett": 9077, + "enne": 9078, + "()).": 9079, + ".**": 9080, + "▁promise": 9081, + "election": 9082, + "Auth": 9083, + "rv": 9084, + "ril": 9085, + "▁conduct": 9086, + "▁maintain": 9087, + "▁boat": 9088, + "▁opposite": 9089, + "spin": 9090, + "webpack": 9091, + "anta": 9092, + "▁orient": 9093, + "▁suc": 9094, + "▁exercise": 9095, + "▁efficient": 9096, + "▁tradition": 9097, + "▁zw": 9098, + "▁Sud": 9099, + "going": 9100, + "▁Pier": 9101, + "inv": 9102, + "ipes": 9103, + "ensuremath": 9104, + "▁conver": 9105, + "creen": 9106, + "▁terror": 9107, + "▁Dou": 9108, + "▁invalid": 9109, + "ceived": 9110, + "▁Arab": 9111, + "▁wire": 9112, + "application": 9113, + "shift": 9114, + "Generic": 9115, + "▁Plan": 9116, + "▁Wall": 9117, + "▁directory": 9118, + "▁egg": 9119, + "▁wealth": 9120, + "random": 9121, + "attribute": 9122, + "▁hide": 9123, + "Serial": 9124, + "cam": 9125, + "▁ital": 9126, + "▁Line": 9127, + "▁CHECK": 9128, + "ployment": 9129, + "▁massive": 9130, + "▁extract": 9131, + "chain": 9132, + "Rest": 9133, + "▁Las": 9134, + "▁bear": 9135, + "▁links": 9136, + "▁newsp": 9137, + "▁FC": 9138, + "Card": 9139, + "aks": 9140, + "▁visible": 9141, + "▁Marc": 9142, + "▁Boston": 9143, + "▁reserved": 9144, + "▁roof": 9145, + "licenses": 9146, + "dc": 9147, + "▁Information": 9148, + "▁witness": 9149, + "Sk": 9150, + "*),": 9151, + "Scope": 9152, + "'];": 9153, + "▁Mir": 9154, + "uding": 9155, + "▁trend": 9156, + "rep": 9157, + "▁musical": 9158, + "▁neither": 9159, + "▁Creat": 9160, + "▁positions": 9161, + "LC": 9162, + "ridge": 9163, + "▁officers": 9164, + "▁violence": 9165, + "▁Tem": 9166, + "▁Sus": 9167, + "▁Way": 9168, + "After": 9169, + "acket": 9170, + "▁Sou": 9171, + "acer": 9172, + "||": 9173, + "▁remark": 9174, + "water": 9175, + "ně": 9176, + "▁Са": 9177, + "▁sed": 9178, + "Each": 9179, + "▁photograph": 9180, + "▁letters": 9181, + "▁invent": 9182, + "▁Mas": 9183, + "▁songs": 9184, + "ól": 9185, + "kind": 9186, + "▁Non": 9187, + "▁dust": 9188, + "**:": 9189, + "nabla": 9190, + ".\",": 9191, + "Lock": 9192, + "▁До": 9193, + "▁cluster": 9194, + "loss": 9195, + "▁ASSERT": 9196, + "fall": 9197, + "▁reject": 9198, + "▁Spring": 9199, + "▁wedding": 9200, + "▁grav": 9201, + "ression": 9202, + "limit": 9203, + "RES": 9204, + "]}": 9205, + "▁listed": 9206, + "▁Tele": 9207, + "hline": 9208, + "▁chief": 9209, + "MEM": 9210, + "дар": 9211, + "▁expensive": 9212, + "trace": 9213, + "▁Rog": 9214, + "▁Coll": 9215, + "▁Author": 9216, + "▁Board": 9217, + "▁Capt": 9218, + "TEXT": 9219, + "▁recon": 9220, + "esta": 9221, + "▁properly": 9222, + "▁&\\": 9223, + "leton": 9224, + "iker": 9225, + "Gu": 9226, + "▁Kom": 9227, + "oco": 9228, + "▁anymore": 9229, + "▁taste": 9230, + "▁Santa": 9231, + "gex": 9232, + "▁Secret": 9233, + "▁talent": 9234, + "▁moments": 9235, + "▁Ba": 9236, + "▁extr": 9237, + "▁Commission": 9238, + "▁modify": 9239, + "▁Figure": 9240, + "▁domin": 9241, + "▁plot": 9242, + "enger": 9243, + "utch": 9244, + "▁cities": 9245, + "▁nut": 9246, + "profile": 9247, + "▁Stat": 9248, + "▁nodes": 9249, + "▁ns": 9250, + "essages": 9251, + "impl": 9252, + "icker": 9253, + "▁examples": 9254, + "abeth": 9255, + "▁stated": 9256, + "fire": 9257, + "bul": 9258, + "▁dangerous": 9259, + "▁Pay": 9260, + "▁Gre": 9261, + "▁Monday": 9262, + "esome": 9263, + "igan": 9264, + "rund": 9265, + "prise": 9266, + "fail": 9267, + "▁Never": 9268, + "Av": 9269, + "▁linear": 9270, + "▁ul": 9271, + "WAR": 9272, + "рен": 9273, + "▁AT": 9274, + "▁dop": 9275, + "▁nou": 9276, + "Dest": 9277, + "▁claims": 9278, + "enda": 9279, + "▁crazy": 9280, + "gel": 9281, + "oggle": 9282, + "▁representation": 9283, + "inen": 9284, + "▁alternative": 9285, + "DM": 9286, + "ABILITY": 9287, + "faces": 9288, + "▁doors": 9289, + "ativ": 9290, + "Look": 9291, + "▁JSON": 9292, + "▁appearance": 9293, + "бря": 9294, + "SQL": 9295, + "▁silence": 9296, + "udo": 9297, + "▁Director": 9298, + "Statement": 9299, + "selected": 9300, + "high": 9301, + "prime": 9302, + "▁ignore": 9303, + "▁colors": 9304, + "ushing": 9305, + "▁virt": 9306, + "manager": 9307, + "▁remote": 9308, + "ło": 9309, + "small": 9310, + "▁crime": 9311, + "rb": 9312, + "▁creation": 9313, + "▁flight": 9314, + "▁Sign": 9315, + "ILE": 9316, + "▁DO": 9317, + "comment": 9318, + "▁Cost": 9319, + ".__": 9320, + "▁Cop": 9321, + "▁vom": 9322, + "▁Science": 9323, + "ления": 9324, + "oop": 9325, + "interface": 9326, + "▁WARRANTIES": 9327, + "▁Page": 9328, + "******": 9329, + "ском": 9330, + "TRUE": 9331, + "▁repeated": 9332, + "▁его": 9333, + "шо": 9334, + "▁roz": 9335, + "Pe": 9336, + "▁ISBN": 9337, + "irts": 9338, + "poses": 9339, + "})$": 9340, + "▁І": 9341, + "children": 9342, + "bles": 9343, + "ECT": 9344, + "▁iz": 9345, + "▁builder": 9346, + "▁Media": 9347, + "iat": 9348, + "▁contrast": 9349, + "”,": 9350, + "▁Link": 9351, + "▁Education": 9352, + "▁joint": 9353, + "▁external": 9354, + "▁роз": 9355, + "▁bits": 9356, + "FORM": 9357, + "erman": 9358, + "wp": 9359, + "▁Mike": 9360, + "▁Master": 9361, + "▁senior": 9362, + "▁Nav": 9363, + "▁recorded": 9364, + "eling": 9365, + "esh": 9366, + "fx": 9367, + "кан": 9368, + "▁tall": 9369, + "▁Johnson": 9370, + "▁sono": 9371, + "▁anche": 9372, + "icken": 9373, + "loop": 9374, + "iciency": 9375, + "emporary": 9376, + "▁Does": 9377, + "▁relation": 9378, + "мы": 9379, + "was": 9380, + "low": 9381, + "ichte": 9382, + "▁Jones": 9383, + "▁bedroom": 9384, + "DIS": 9385, + "▁magnet": 9386, + "▁Engine": 9387, + "▁feelings": 9388, + "GC": 9389, + "▁torn": 9390, + "▁relationships": 9391, + "▁Ре": 9392, + "▁proud": 9393, + "▁twe": 9394, + "oval": 9395, + "▁waste": 9396, + "▁reduced": 9397, + "ilton": 9398, + "BP": 9399, + "▁forgot": 9400, + "▁bodies": 9401, + "▁Haw": 9402, + "lag": 9403, + "▁www": 9404, + "door": 9405, + "▁sufficient": 9406, + "▁dollars": 9407, + "Len": 9408, + "▁talked": 9409, + "▁bond": 9410, + "▁Bor": 9411, + "}}{": 9412, + "rod": 9413, + "Password": 9414, + "quare": 9415, + "▁lights": 9416, + "eren": 9417, + "▁thirty": 9418, + "NC": 9419, + "▁TODO": 9420, + "▁respond": 9421, + "ких": 9422, + "direct": 9423, + "ação": 9424, + "▁heav": 9425, + "Media": 9426, + "exit": 9427, + "License": 9428, + "`.": 9429, + "▁mixed": 9430, + "▁desk": 9431, + "▁teaching": 9432, + "▁maj": 9433, + "▁nerv": 9434, + "inations": 9435, + "typeof": 9436, + "▁coast": 9437, + "▁же": 9438, + "▁beside": 9439, + "ummy": 9440, + "Doc": 9441, + "▁schedule": 9442, + "▁recover": 9443, + "▁Further": 9444, + "▁steel": 9445, + "boot": 9446, + "▁Perhaps": 9447, + "▁съ": 9448, + "▁Os": 9449, + "rick": 9450, + "▁Ви": 9451, + "Support": 9452, + "▁(_": 9453, + "nil": 9454, + "pis": 9455, + "xpected": 9456, + "▁processing": 9457, + "Build": 9458, + "arian": 9459, + "▁icon": 9460, + "▁CA": 9461, + "wick": 9462, + "=(": 9463, + "▁algorithm": 9464, + "▁Young": 9465, + "▁Management": 9466, + "▁ancient": 9467, + "ность": 9468, + "oti": 9469, + "▁combination": 9470, + "world": 9471, + "nn": 9472, + "▁dram": 9473, + "enabled": 9474, + "Ac": 9475, + "CCESS": 9476, + "aration": 9477, + "▁blocks": 9478, + "▁Angeles": 9479, + "▁Qual": 9480, + "▁succeed": 9481, + "network": 9482, + "▁oblig": 9483, + "springframework": 9484, + "▁Tre": 9485, + "okes": 9486, + "mun": 9487, + "▁Network": 9488, + "Del": 9489, + "▁estate": 9490, + "▁liqu": 9491, + "▁pob": 9492, + "▁dad": 9493, + "▁distinct": 9494, + "▁Tit": 9495, + "▁Lear": 9496, + "ferred": 9497, + "android": 9498, + "▁subsequ": 9499, + "▁Florida": 9500, + "subset": 9501, + "▁whisper": 9502, + "Vol": 9503, + "ulous": 9504, + "▁crew": 9505, + "▁lug": 9506, + "pid": 9507, + "ocity": 9508, + "skb": 9509, + "▁tea": 9510, + "ун": 9511, + "▁honor": 9512, + "▁Ins": 9513, + "▁gew": 9514, + "Details": 9515, + "eneath": 9516, + "atar": 9517, + "▁_{": 9518, + "amen": 9519, + "▁setup": 9520, + "Transaction": 9521, + "▁blank": 9522, + "Failed": 9523, + "job": 9524, + "▁pret": 9525, + "ße": 9526, + "loor": 9527, + "ří": 9528, + "ncia": 9529, + "▁anywhere": 9530, + "▁Light": 9531, + "▁Ak": 9532, + "BD": 9533, + "▁excited": 9534, + "agers": 9535, + "▁warning": 9536, + "▁processes": 9537, + "hu": 9538, + "▁youth": 9539, + "▁dogs": 9540, + "▁oct": 9541, + "▁nine": 9542, + "Writer": 9543, + "grid": 9544, + "▁importance": 9545, + "estic": 9546, + "▁carefully": 9547, + "master": 9548, + "▁decisions": 9549, + "▁pin": 9550, + "▁crack": 9551, + "TEST": 9552, + "▁Local": 9553, + "▁Right": 9554, + "▁vast": 9555, + "▁faster": 9556, + "▁institut": 9557, + "▁annual": 9558, + "LAN": 9559, + "▁episode": 9560, + "▁XV": 9561, + "▁delivery": 9562, + "tl": 9563, + "FP": 9564, + "circ": 9565, + "▁typically": 9566, + "igo": 9567, + "▁intel": 9568, + "nat": 9569, + "xb": 9570, + "стро": 9571, + ")-": 9572, + "▁Bal": 9573, + "▁Jos": 9574, + "▁gonna": 9575, + "▁Rest": 9576, + "jor": 9577, + "onia": 9578, + "orship": 9579, + "overy": 9580, + "LINE": 9581, + "]:": 9582, + "Queue": 9583, + "▁compare": 9584, + "▁apartment": 9585, + "▁rul": 9586, + "Dr": 9587, + "gency": 9588, + "▁obviously": 9589, + "zie": 9590, + "ycl": 9591, + "fortunately": 9592, + "▁stepped": 9593, + "▁Seg": 9594, + "▁Which": 9595, + "▁PC": 9596, + "▁ast": 9597, + "endor": 9598, + "▁permission": 9599, + "COL": 9600, + "▁TEST": 9601, + "Pay": 9602, + "ères": 9603, + "▁studied": 9604, + "▁accompl": 9605, + "role": 9606, + "Where": 9607, + "protobuf": 9608, + "metadata": 9609, + "Job": 9610, + "▁Four": 9611, + "plements": 9612, + "disable": 9613, + "▁loud": 9614, + "▁happening": 9615, + "▁Using": 9616, + "rog": 9617, + "▁depends": 9618, + "ím": 9619, + "'\\": 9620, + "▁taught": 9621, + "shared": 9622, + "▁attributes": 9623, + "▁Action": 9624, + "▁dess": 9625, + "▁houses": 9626, + "▁reset": 9627, + "▁bien": 9628, + "▁explicit": 9629, + "LOW": 9630, + "->_": 9631, + "▁PM": 9632, + "Category": 9633, + "oice": 9634, + "into": 9635, + "▁mail": 9636, + "▁authority": 9637, + "▁unable": 9638, + "filename": 9639, + "ék": 9640, + "лей": 9641, + "▁sector": 9642, + "appoint": 9643, + "▁hang": 9644, + "▁cel": 9645, + "related": 9646, + "itate": 9647, + "▁'<": 9648, + "amber": 9649, + "▁cheap": 9650, + "▁enabled": 9651, + "▁division": 9652, + "Any": 9653, + "▁hier": 9654, + "▁Head": 9655, + "ntax": 9656, + "uda": 9657, + "▁limitations": 9658, + "▁studio": 9659, + "media": 9660, + "▁circle": 9661, + "нова": 9662, + "▁laug": 9663, + "acts": 9664, + "▁Во": 9665, + "ód": 9666, + "pled": 9667, + "LOC": 9668, + "Expr": 9669, + ">:": 9670, + "▁prés": 9671, + "▁laughed": 9672, + "▁Three": 9673, + "лы": 9674, + "▁ends": 9675, + "▁fundament": 9676, + "▁inher": 9677, + "▁liv": 9678, + "bid": 9679, + "▁responsibility": 9680, + "▁checked": 9681, + "▁Pac": 9682, + "▁fault": 9683, + "▁yellow": 9684, + "▁salt": 9685, + "▁Francisco": 9686, + "▁^": 9687, + "▁ON": 9688, + "▁beauty": 9689, + "yg": 9690, + "▁Aff": 9691, + "▁Eq": 9692, + "▁magic": 9693, + "▁handler": 9694, + "xE": 9695, + "▁numerous": 9696, + "▁hole": 9697, + "▁rooms": 9698, + "cción": 9699, + "▁Arm": 9700, + "person": 9701, + "▁buildings": 9702, + "▁plate": 9703, + "bled": 9704, + "errors": 9705, + "▁Again": 9706, + "▁Default": 9707, + "▁Hard": 9708, + "tó": 9709, + "hus": 9710, + "▁dimension": 9711, + "iale": 9712, + "▁Mult": 9713, + "▁Government": 9714, + "Func": 9715, + "▁blow": 9716, + "▁rect": 9717, + "erra": 9718, + "connection": 9719, + "▁passing": 9720, + "ßen": 9721, + "phas": 9722, + "ensional": 9723, + "record": 9724, + "cohol": 9725, + "▁Harry": 9726, + "izontal": 9727, + "▁finger": 9728, + "▁younger": 9729, + "▁SC": 9730, + "operation": 9731, + "BY": 9732, + "heim": 9733, + "▁Bad": 9734, + "▁storm": 9735, + "▁Nat": 9736, + "▁buying": 9737, + "▁Sometimes": 9738, + "▁Ста": 9739, + "essed": 9740, + "▁damn": 9741, + "▁meg": 9742, + "umes": 9743, + "ünd": 9744, + "тра": 9745, + "▁silver": 9746, + "wd": 9747, + "hidden": 9748, + "ardo": 9749, + "▁communities": 9750, + "▁diet": 9751, + "otted": 9752, + "▁bat": 9753, + "ancer": 9754, + "▁fmt": 9755, + "▁Pen": 9756, + "▁til": 9757, + "Enum": 9758, + "PATH": 9759, + "▁matters": 9760, + "timeout": 9761, + "------------": 9762, + "kan": 9763, + "▁Corpor": 9764, + "=\"../../": 9765, + "▁Ale": 9766, + "hentication": 9767, + "▁complic": 9768, + "▁Security": 9769, + "OFF": 9770, + "Rad": 9771, + "apse": 9772, + "▁dance": 9773, + "▁permissions": 9774, + "▁warrant": 9775, + "▁lad": 9776, + "▁isol": 9777, + "dl": 9778, + "▁Au": 9779, + "yes": 9780, + "▁tv": 9781, + "▁provider": 9782, + "▁terrible": 9783, + "▁department": 9784, + "eral": 9785, + "▁implementation": 9786, + "SR": 9787, + "▁hearing": 9788, + "▁Kn": 9789, + "FR": 9790, + "tv": 9791, + "▁diss": 9792, + "FUN": 9793, + "▁durante": 9794, + "osis": 9795, + "▁tasks": 9796, + "▁Blo": 9797, + "вод": 9798, + "▁branch": 9799, + "▁politics": 9800, + "▁Elle": 9801, + "▁leadership": 9802, + "expr": 9803, + "▁techniques": 9804, + "prec": 9805, + "Sigma": 9806, + "imately": 9807, + "tk": 9808, + "achment": 9809, + "▁Enter": 9810, + "▁creative": 9811, + "▁зна": 9812, + "appy": 9813, + "unched": 9814, + "▁'',": 9815, + "onder": 9816, + "{-": 9817, + "NUM": 9818, + "▁narr": 9819, + "Memory": 9820, + "▁winning": 9821, + "▁Follow": 9822, + "*/\r": 9823, + "vision": 9824, + "resents": 9825, + "zione": 9826, + "▁latter": 9827, + "▁requests": 9828, + "▁margin": 9829, + "▁{\"": 9830, + "video": 9831, + "cn": 9832, + "▁Image": 9833, + "Tim": 9834, + "CONFIG": 9835, + "▁allowing": 9836, + "▁combined": 9837, + "PUT": 9838, + "▁instanceof": 9839, + "igin": 9840, + "▁pero": 9841, + "▁''": 9842, + "▁confidence": 9843, + "▁equivalent": 9844, + "pad": 9845, + "effect": 9846, + "RX": 9847, + "▁lang": 9848, + "strong": 9849, + "▁bridge": 9850, + "aya": 9851, + "▁treated": 9852, + "▁forth": 9853, + "SW": 9854, + "▁accounts": 9855, + "▁PO": 9856, + "▁listening": 9857, + "Route": 9858, + "()))": 9859, + "cpy": 9860, + "▁reform": 9861, + "▁gate": 9862, + "▁Walk": 9863, + "▁somehow": 9864, + "tf": 9865, + "▁layout": 9866, + "umin": 9867, + "▁considering": 9868, + "▁premi": 9869, + "▁Mom": 9870, + "athan": 9871, + "Gen": 9872, + "▁planet": 9873, + "amples": 9874, + "▁MO": 9875, + "shop": 9876, + "▁premier": 9877, + "▁simpl": 9878, + "▁segu": 9879, + "LY": 9880, + "Sum": 9881, + "▁tables": 9882, + "ska": 9883, + "▁ž": 9884, + "pd": 9885, + "▁sous": 9886, + "▁conference": 9887, + "▁Dat": 9888, + "Scroll": 9889, + "▁standards": 9890, + "▁гру": 9891, + "esse": 9892, + "▁citizens": 9893, + "▁occurred": 9894, + "▁democr": 9895, + "▁elev": 9896, + "▁Sem": 9897, + "ensus": 9898, + "headers": 9899, + "▁Chris": 9900, + "imento": 9901, + "kom": 9902, + "Cor": 9903, + "MIN": 9904, + "usher": 9905, + "Database": 9906, + "▁formal": 9907, + "igne": 9908, + "▁organizations": 9909, + "▁Ire": 9910, + "Xml": 9911, + "из": 9912, + "▁pray": 9913, + "▁bomb": 9914, + "▁mand": 9915, + "erts": 9916, + "▁clock": 9917, + "▁buck": 9918, + "вали": 9919, + "ensch": 9920, + "▁volt": 9921, + "▁films": 9922, + "▁plants": 9923, + "inode": 9924, + "Boolean": 9925, + "▁restaurant": 9926, + "ían": 9927, + "▁debut": 9928, + "pages": 9929, + "▁wordt": 9930, + "▁Ба": 9931, + "▁greatest": 9932, + "(\"/": 9933, + "▁copyright": 9934, + "▁rit": 9935, + "sizeof": 9936, + "Trace": 9937, + "uent": 9938, + "тур": 9939, + "▁ko": 9940, + ":\\": 9941, + "▁bigger": 9942, + "▁perfectly": 9943, + "tenance": 9944, + "MASK": 9945, + "ré": 9946, + "▁ett": 9947, + "▁nose": 9948, + "▁craft": 9949, + "iteral": 9950, + "▁discussed": 9951, + "▁Jewish": 9952, + "Cap": 9953, + "▁Unless": 9954, + "▁Jackson": 9955, + "Attributes": 9956, + "▁lunch": 9957, + "öl": 9958, + "atr": 9959, + "▁paying": 9960, + "Parse": 9961, + "()\r": 9962, + "lad": 9963, + "▁rare": 9964, + "▁[];": 9965, + "stone": 9966, + "▁unc": 9967, + "▁defense": 9968, + "}+": 9969, + "▁Global": 9970, + "▁Soviet": 9971, + "▁Australian": 9972, + "▁gli": 9973, + "variant": 9974, + "▁Ron": 9975, + "▁loan": 9976, + "Step": 9977, + "member": 9978, + "Sch": 9979, + "▁Committee": 9980, + "▁spending": 9981, + "▁Tri": 9982, + "▁Journal": 9983, + "▁sugar": 9984, + "elly": 9985, + "HTML": 9986, + "▁advent": 9987, + "wing": 9988, + "▁Whether": 9989, + "oration": 9990, + "▁NE": 9991, + "iveness": 9992, + "▁hav": 9993, + "▁conscious": 9994, + "een": 9995, + "Symbol": 9996, + "▁ку": 9997, + "Logger": 9998, + "▁Little": 9999, + "widet": 10000, + "ocation": 10001, + "pin": 10002, + "▁symmet": 10003, + "▁AD": 10004, + "▁posts": 10005, + "shal": 10006, + "▁Conf": 10007, + "▁chose": 10008, + "mal": 10009, + "ulo": 10010, + "▁Method": 10011, + "▁missed": 10012, + "Remove": 10013, + "Auto": 10014, + "VALUE": 10015, + "thlet": 10016, + "▁Force": 10017, + "pf": 10018, + "▁Я": 10019, + "late": 10020, + "▁pul": 10021, + "Pop": 10022, + "▁advanced": 10023, + "aires": 10024, + "ressed": 10025, + "AME": 10026, + "bell": 10027, + "aching": 10028, + "ić": 10029, + "echo": 10030, + "HS": 10031, + "▁funny": 10032, + "рии": 10033, + "▁eer": 10034, + "▁veget": 10035, + "▁fourth": 10036, + "cf": 10037, + "transform": 10038, + "▁grown": 10039, + "▁McC": 10040, + "site": 10041, + "▁beneath": 10042, + "▁shell": 10043, + "xd": 10044, + "Play": 10045, + "short": 10046, + "Role": 10047, + "▁religion": 10048, + "inator": 10049, + "}<": 10123, + "asp": 10124, + "ajo": 10125, + "exports": 10126, + "▁Node": 10127, + "▁jako": 10128, + "▁ya": 10129, + "▁successfully": 10130, + "▁friendly": 10131, + "buff": 10132, + "DEFAULT": 10133, + "▁pregn": 10134, + "Required": 10135, + "▁binary": 10136, + "isting": 10137, + "▁stared": 10138, + "▁circumstances": 10139, + "▁хо": 10140, + "rei": 10141, + "▁Го": 10142, + "Transform": 10143, + "cnt": 10144, + "▁Ext": 10145, + "report": 10146, + "VERSION": 10147, + "▁analy": 10148, + "▁Marg": 10149, + "▁alleg": 10150, + "builder": 10151, + "ToString": 10152, + "Layer": 10153, + "íst": 10154, + "Prop": 10155, + "▁Emp": 10156, + "}]": 10157, + "▁selling": 10158, + "▁queue": 10159, + "▁seriously": 10160, + "▁Lead": 10161, + "textit": 10162, + "testing": 10163, + "▁Пре": 10164, + "security": 10165, + "iał": 10166, + "ún": 10167, + "chip": 10168, + "▁candidate": 10169, + "▁minister": 10170, + "eria": 10171, + "▁Het": 10172, + "дин": 10173, + "▁Britain": 10174, + "▁barely": 10175, + "▁sty": 10176, + "▁Spanish": 10177, + "▁Ven": 10178, + "timer": 10179, + "ків": 10180, + "▁documents": 10181, + "('.": 10182, + "▁debug": 10183, + "▁contro": 10184, + "стоя": 10185, + "▁joy": 10186, + "Sn": 10187, + "Inv": 10188, + "▁protocol": 10189, + "▁faces": 10190, + "▁Despite": 10191, + "sed": 10192, + "Conf": 10193, + "ARG": 10194, + "▁evolution": 10195, + "▁tod": 10196, + "▁Promise": 10197, + "▁posted": 10198, + "Perm": 10199, + "bet": 10200, + "Ang": 10201, + "Just": 10202, + "▁rum": 10203, + "layer": 10204, + "▁behavi": 10205, + "ipping": 10206, + "▁dynam": 10207, + "▁scheme": 10208, + "▁proto": 10209, + ")/": 10210, + "Collections": 10211, + "riev": 10212, + "▁Click": 10213, + "▁uns": 10214, + "widetilde": 10215, + "▁remembered": 10216, + "гі": 10217, + "inates": 10218, + "▁incorpor": 10219, + "▁Description": 10220, + "▁prepare": 10221, + "▁Final": 10222, + "uation": 10223, + "▁Queen": 10224, + ">;": 10225, + "▁automatically": 10226, + "▁sharp": 10227, + "▁meat": 10228, + "ateur": 10229, + "astern": 10230, + "▁stuck": 10231, + "ASSERT": 10232, + "▁planned": 10233, + "dots": 10234, + "ookie": 10235, + "▁Histor": 10236, + "▁reviews": 10237, + "IMP": 10238, + "▁answered": 10239, + "Total": 10240, + "▁sau": 10241, + "▁Mexico": 10242, + "continue": 10243, + "▁Apple": 10244, + "likely": 10245, + "зва": 10246, + "users": 10247, + "▁identified": 10248, + "▁Lev": 10249, + "▁mol": 10250, + "▁Islam": 10251, + "▁committed": 10252, + "writ": 10253, + "бер": 10254, + "rift": 10255, + "▁interrupt": 10256, + "▁readonly": 10257, + "schema": 10258, + "Sm": 10259, + "Double": 10260, + "aza": 10261, + "▁Hal": 10262, + "Move": 10263, + "▁Series": 10264, + "inline": 10265, + "▁которы": 10266, + "soc": 10267, + "▁tent": 10268, + "▁amer": 10269, + "aki": 10270, + "▁lady": 10271, + "▁tired": 10272, + "ifi": 10273, + "▁même": 10274, + "ouver": 10275, + "▁aside": 10276, + "Did": 10277, + "',\r": 10278, + "▁bringing": 10279, + "Drawing": 10280, + "aro": 10281, + "▁Rh": 10282, + "▁Naz": 10283, + "esso": 10284, + "▁reaction": 10285, + "mitted": 10286, + "▁absolute": 10287, + "haust": 10288, + "(()": 10289, + "▁Task": 10290, + "ERS": 10291, + "▁^{": 10292, + "VD": 10293, + "▁tone": 10294, + "dist": 10295, + "vs": 10296, + "▁wheel": 10297, + "▁administration": 10298, + "▁interests": 10299, + "▁pointer": 10300, + "▁encounter": 10301, + "aver": 10302, + "▁nord": 10303, + "ket": 10304, + "▁beach": 10305, + "▁enjoyed": 10306, + "contains": 10307, + "▁append": 10308, + "Wait": 10309, + "▁squad": 10310, + "zel": 10311, + "▁medium": 10312, + "▁sending": 10313, + "▁Lady": 10314, + "ções": 10315, + "▁destination": 10316, + "nych": 10317, + "▁conflict": 10318, + "▁Ly": 10319, + "▁vul": 10320, + "▁basically": 10321, + "reated": 10322, + "black": 10323, + "ugins": 10324, + "▁calm": 10325, + "érie": 10326, + "har": 10327, + "лан": 10328, + "▁Се": 10329, + "watch": 10330, + "▁Put": 10331, + "▁dump": 10332, + "acher": 10333, + "scroll": 10334, + "▁claimed": 10335, + "▁Control": 10336, + "▁blind": 10337, + "enti": 10338, + "▁Keep": 10339, + "▁Development": 10340, + "images": 10341, + "▁tough": 10342, + "gebra": 10343, + "▁sept": 10344, + "hew": 10345, + "▁skill": 10346, + "▁Tay": 10347, + "▁któ": 10348, + "owner": 10349, + "pare": 10350, + "▁fee": 10351, + "▁continues": 10352, + "▁kan": 10353, + "bes": 10354, + "▁cha": 10355, + "ovo": 10356, + "▁Night": 10357, + "icture": 10358, + "shire": 10359, + "▁essay": 10360, + "▁suppose": 10361, + "etic": 10362, + "Art": 10363, + "acon": 10364, + "lla": 10365, + "words": 10366, + "▁comparison": 10367, + "▁BE": 10368, + "▁challenges": 10369, + "▁ol": 10370, + "citep": 10371, + "▁Foot": 10372, + "▁Such": 10373, + "▁papers": 10374, + "activ": 10375, + "quer": 10376, + "тя": 10377, + "▁То": 10378, + "ський": 10379, + "thur": 10380, + "done": 10381, + "▁shock": 10382, + "▁dedicated": 10383, + "▁correspond": 10384, + "Second": 10385, + "▁bull": 10386, + "life": 10387, + "indent": 10388, + "▁figures": 10389, + "▁Andrew": 10390, + "isp": 10391, + "▁favour": 10392, + "зда": 10393, + "▁Elect": 10394, + "Full": 10395, + "▁nearby": 10396, + "▁Register": 10397, + "Scale": 10398, + "ications": 10399, + "ин": 10400, + "▁AM": 10401, + "pair": 10402, + "▁perspective": 10403, + "▁nos": 10404, + "apa": 10405, + "ostał": 10406, + "▁Pers": 10407, + "icer": 10408, + "▁plastic": 10409, + "дов": 10410, + "ciples": 10411, + "zą": 10412, + "clos": 10413, + "▁уча": 10414, + "▁Á": 10415, + "plugin": 10416, + "▁angle": 10417, + "▁commission": 10418, + "▁funds": 10419, + "▁indu": 10420, + "▁drawn": 10421, + "ám": 10422, + "▁developing": 10423, + "▁segment": 10424, + "isme": 10425, + "scr": 10426, + "▁lies": 10427, + "▁IL": 10428, + "▁api": 10429, + "Extension": 10430, + "▁scal": 10431, + "install": 10432, + "▁Week": 10433, + "▁gentle": 10434, + "▁Canadian": 10435, + "▁dialog": 10436, + "▁articles": 10437, + "Theme": 10438, + "SM": 10439, + "▁Bul": 10440, + "▁leur": 10441, + "▁stom": 10442, + "Plugin": 10443, + "▁после": 10444, + "▁stead": 10445, + "▁ś": 10446, + "ipher": 10447, + "▁prze": 10448, + "▁draft": 10449, + "bottom": 10450, + "▁{};": 10451, + "▁stayed": 10452, + "feature": 10453, + "▁vot": 10454, + "▁fabric": 10455, + "ça": 10456, + "('#": 10457, + "rea": 10458, + "▁reput": 10459, + "▁Cir": 10460, + "▁AL": 10461, + "▁assertEquals": 10462, + "results": 10463, + "▁Cross": 10464, + "ursday": 10465, + "▁audio": 10466, + "▁gap": 10467, + "▁streets": 10468, + "▁scientific": 10469, + "platform": 10470, + "▁auss": 10471, + "▁Cro": 10472, + "▁partial": 10473, + "unc": 10474, + "▁choices": 10475, + "▁или": 10476, + "pred": 10477, + "▁heads": 10478, + "terday": 10479, + "▁Nick": 10480, + "▁weird": 10481, + "asant": 10482, + "▁represented": 10483, + "▁пи": 10484, + "DP": 10485, + "orders": 10486, + "clock": 10487, + "▁Ho": 10488, + "arters": 10489, + "Cmd": 10490, + "oga": 10491, + "Keys": 10492, + "Report": 10493, + "▁Vill": 10494, + "▁Mu": 10495, + "▁owned": 10496, + "SUCCESS": 10497, + "▁typeof": 10498, + "hdr": 10499, + "uable": 10500, + "▁neighborhood": 10501, + "▁AP": 10502, + "▁resulting": 10503, + "▁shadow": 10504, + "STRING": 10505, + "▁videos": 10506, + "лення": 10507, + "expect": 10508, + "▁Valley": 10509, + "▁goto": 10510, + "▁Sher": 10511, + "frastr": 10512, + "▁operating": 10513, + "▁это": 10514, + "▁Licensed": 10515, + "Variable": 10516, + "▁PR": 10517, + "▁Hans": 10518, + "clone": 10519, + "▁Gesch": 10520, + "▁Band": 10521, + "........": 10522, + "uing": 10523, + "▁hundreds": 10524, + "▁ок": 10525, + "▁emotional": 10526, + "▁Indust": 10527, + ")+": 10528, + "▁Egypt": 10529, + "▁franç": 10530, + "▁š": 10531, + "▁fasc": 10532, + "onto": 10533, + "▁Adam": 10534, + "▁laid": 10535, + "▁rig": 10536, + "▁detailed": 10537, + "▁implements": 10538, + "▁university": 10539, + "▁Hy": 10540, + "▁grid": 10541, + "▁regions": 10542, + "Stop": 10543, + "▁slot": 10544, + "▁angry": 10545, + "▁-=": 10546, + "▁waited": 10547, + "Vert": 10548, + "\":\"": 10549, + "▁elem": 10550, + "▁rég": 10551, + "owed": 10552, + "Member": 10553, + "▁ratio": 10554, + "isen": 10555, + "▁Lem": 10556, + "gery": 10557, + "▁cream": 10558, + "▁était": 10559, + "▁geb": 10560, + "unique": 10561, + "▁Deb": 10562, + "▁factory": 10563, + "że": 10564, + "dialog": 10565, + "▁Config": 10566, + "Sync": 10567, + "angers": 10568, + "▁governing": 10569, + "▁Hun": 10570, + "Space": 10571, + "▁jest": 10572, + "icious": 10573, + "▁emphas": 10574, + "umps": 10575, + "▁Esp": 10576, + "▁sul": 10577, + "▁historical": 10578, + "ija": 10579, + "▁lying": 10580, + "▁Steve": 10581, + "▁measures": 10582, + "osto": 10583, + "?”": 10584, + "▁pocket": 10585, + "▁Sat": 10586, + "▁pitch": 10587, + "▁natur": 10588, + "▁humans": 10589, + "▁Simon": 10590, + "adores": 10591, + "(\"\\": 10592, + "inking": 10593, + "▁expos": 10594, + "material": 10595, + "▁apparently": 10596, + "▁Camb": 10597, + "▁Box": 10598, + "▁spaces": 10599, + "exists": 10600, + "▁acting": 10601, + "ORY": 10602, + "зова": 10603, + "Good": 10604, + "ienne": 10605, + "▁Williams": 10606, + "▁fruit": 10607, + "iera": 10608, + "▁Lim": 10609, + "▁trait": 10610, + "▁artists": 10611, + "▁absor": 10612, + "rait": 10613, + "LOAD": 10614, + "▁movies": 10615, + "▁dynamic": 10616, + "asts": 10617, + "▁Integer": 10618, + "▁smoke": 10619, + "пі": 10620, + "angel": 10621, + ">(\"": 10622, + "▁instrument": 10623, + "▁fuel": 10624, + "ної": 10625, + "atalogue": 10626, + "▁serial": 10627, + "Files": 10628, + "▁bathroom": 10629, + "ilo": 10630, + "esto": 10631, + "▁pm": 10632, + "entials": 10633, + "▁Online": 10634, + "white": 10635, + "▁tips": 10636, + "▁capable": 10637, + "Fig": 10638, + "TV": 10639, + "▁он": 10640, + "ké": 10641, + "bitr": 10642, + "Mapping": 10643, + "▁tak": 10644, + "ющи": 10645, + "вля": 10646, + ")\",": 10647, + "▁Karl": 10648, + "▁Human": 10649, + "▁Pot": 10650, + "▁represents": 10651, + "▁consistent": 10652, + "_(": 10653, + "wen": 10654, + "▁Rose": 10655, + "law": 10656, + "▁FROM": 10657, + "▁begins": 10658, + "▁edit": 10659, + "▁mountain": 10660, + "▁chapter": 10661, + "▁wondered": 10662, + "▁industrial": 10663, + "▁Major": 10664, + "▁ges": 10665, + "▁directed": 10666, + "eros": 10667, + "▁Wild": 10668, + "liament": 10669, + "Book": 10670, + "username": 10671, + "hot": 10672, + "▁nam": 10673, + "▁league": 10674, + "bra": 10675, + "кон": 10676, + "▁Tal": 10677, + "▁Ва": 10678, + "▁exports": 10679, + "(@": 10680, + "▁sharing": 10681, + "▁Tro": 10682, + "ść": 10683, + "uesday": 10684, + "ylv": 10685, + "▁guitar": 10686, + "elen": 10687, + "Selection": 10688, + "▁confident": 10689, + "rypto": 10690, + "▁hors": 10691, + "editor": 10692, + "▁shoulders": 10693, + "getName": 10694, + "encing": 10695, + "SELECT": 10696, + "вши": 10697, + "▁kinds": 10698, + "▁Wel": 10699, + "▁purposes": 10700, + "Matrix": 10701, + "invalid": 10702, + "▁owners": 10703, + "▁Records": 10704, + "▁Process": 10705, + "▁chat": 10706, + "▁Dor": 10707, + "▁bin": 10708, + "redit": 10709, + "oire": 10710, + "▁Total": 10711, + "▁Family": 10712, + "ARY": 10713, + "▁bread": 10714, + "▁compre": 10715, + "▁shoes": 10716, + "▁raz": 10717, + "▁trace": 10718, + "nej": 10719, + "orted": 10720, + "hn": 10721, + "▁procedure": 10722, + "properties": 10723, + "plier": 10724, + "▁hero": 10725, + "panel": 10726, + "▁marked": 10727, + "▁worried": 10728, + "\\|": 10729, + "pts": 10730, + "▁Support": 10731, + "▁serving": 10732, + "Fail": 10733, + "▁disappoint": 10734, + "▁Scot": 10735, + "▁pleasure": 10736, + "▁judge": 10737, + "zeich": 10738, + "▁forever": 10739, + "▁Zeit": 10740, + "uous": 10741, + "inent": 10742, + "▁dw": 10743, + "▁waren": 10744, + "▁flash": 10745, + "▁troops": 10746, + "▁drugs": 10747, + "▁diam": 10748, + ".~": 10749, + "imp": 10750, + "inned": 10751, + "▁EV": 10752, + "Struct": 10753, + "▁justice": 10754, + "▁officials": 10755, + "ffff": 10756, + "▁Common": 10757, + "▁Cat": 10758, + "▁tomorrow": 10759, + "▁él": 10760, + "Texture": 10761, + "qpoint": 10762, + "▁Fried": 10763, + "▁Term": 10764, + "pgfqpoint": 10765, + "▁nem": 10766, + "norm": 10767, + "▁hardly": 10768, + "oda": 10769, + "zeta": 10770, + "emic": 10771, + "▁полу": 10772, + "▁loaded": 10773, + "kes": 10774, + "ció": 10775, + "▁fool": 10776, + "▁trick": 10777, + "▁dst": 10778, + "Find": 10779, + "▁все": 10780, + "}},": 10781, + "▁framework": 10782, + "▁merely": 10783, + "▁union": 10784, + "▁Edward": 10785, + "rif": 10786, + "Flag": 10787, + "▁crisis": 10788, + "▁finite": 10789, + "▁lol": 10790, + "▁Kim": 10791, + "ната": 10792, + "since": 10793, + "▁compat": 10794, + "▁pert": 10795, + "ibilities": 10796, + "▁también": 10797, + "ibli": 10798, + "▁teen": 10799, + "▁sympt": 10800, + "oral": 10801, + "ders": 10802, + "otte": 10803, + "при": 10804, + "▁Jane": 10805, + "▁originally": 10806, + "▁throat": 10807, + "mag": 10808, + "sup": 10809, + "uni": 10810, + "$$": 10811, + "▁Library": 10812, + "▁attacks": 10813, + "ingen": 10814, + "('/": 10815, + "▁hes": 10816, + "coin": 10817, + "ounce": 10818, + "▁Academy": 10819, + "MODULE": 10820, + "isms": 10821, + "▁Adv": 10822, + "▁Bol": 10823, + "▁incident": 10824, + ")^{": 10825, + "▁bij": 10826, + "▁Rome": 10827, + "▁Italy": 10828, + "events": 10829, + "▁Fern": 10830, + "▁ber": 10831, + "▁silent": 10832, + "▁pier": 10833, + "▁YO": 10834, + "▁plain": 10835, + "Bas": 10836, + "▁pill": 10837, + "rase": 10838, + "▁carrying": 10839, + "▁resp": 10840, + "ную": 10841, + "▁typical": 10842, + "Wrapper": 10843, + "▁gau": 10844, + "▁chemical": 10845, + "▁hal": 10846, + "throw": 10847, + "Cluster": 10848, + "▁Gab": 10849, + "▁Girl": 10850, + "quir": 10851, + "▁Arg": 10852, + "▁relief": 10853, + "▁Ве": 10854, + "dm": 10855, + "▁frustr": 10856, + "\\%": 10857, + "▁stores": 10858, + "▁bottle": 10859, + "▁Lew": 10860, + "two": 10861, + "stad": 10862, + "▁cheek": 10863, + "▁concerns": 10864, + "▁helpful": 10865, + "▁coverage": 10866, + "isi": 10867, + "ADD": 10868, + "async": 10869, + "▁approximately": 10870, + "iffer": 10871, + "hook": 10872, + "▁enum": 10873, + "ová": 10874, + "▁evil": 10875, + "▁constantly": 10876, + "apply": 10877, + "▁siè": 10878, + "▁practices": 10879, + "▁teachers": 10880, + "▁Sn": 10881, + "▁Awards": 10882, + "▁substant": 10883, + "▁$.": 10884, + "dk": 10885, + "▁mob": 10886, + "▁ingred": 10887, + "vere": 10888, + "Multi": 10889, + "пер": 10890, + "stal": 10891, + "yard": 10892, + "required": 10893, + "vement": 10894, + "▁intelligence": 10895, + "▁thinks": 10896, + "▁personally": 10897, + "▁trained": 10898, + "orney": 10899, + ")\\": 11266, + "anal": 11267, + "Section": 11268, + "plus": 11269, + "üt": 11270, + "▁embed": 11271, + "▁strings": 11272, + "Before": 11273, + "proc": 11274, + "▁спо": 11275, + "trl": 11276, + "vr": 11277, + "Background": 11278, + "logger": 11279, + "agraph": 11280, + "iest": 11281, + "▁goods": 11282, + "batch": 11283, + "▁optional": 11284, + "▁Taylor": 11285, + "▁recognize": 11286, + "walk": 11287, + "▁Hit": 11288, + "▁Elizabeth": 11289, + "}:": 11290, + "▁careful": 11291, + "краї": 11292, + "▁locations": 11293, + "▁structures": 11294, + "▁disk": 11295, + "▁ships": 11296, + "▁suo": 11297, + "▁sowie": 11298, + "▁Ess": 11299, + "▁Hash": 11300, + "▁reasonable": 11301, + "▁Moreover": 11302, + "▁formula": 11303, + "▁Centre": 11304, + "▁residents": 11305, + "RS": 11306, + "Ids": 11307, + "▁Know": 11308, + "▁trib": 11309, + "▁rés": 11310, + "▁stable": 11311, + "▁Would": 11312, + "▁breaking": 11313, + "▁meal": 11314, + "▁phen": 11315, + "▁fel": 11316, + "▁Fred": 11317, + "Author": 11318, + "▁capture": 11319, + "opts": 11320, + "▁everywhere": 11321, + "▁sque": 11322, + "▁moder": 11323, + "setup": 11324, + "▁Supp": 11325, + "▁whenever": 11326, + "{(": 11327, + "wart": 11328, + "▁toe": 11329, + "Prefix": 11330, + "hou": 11331, + "gage": 11332, + ">\"": 11333, + "▁frag": 11334, + "▁Theorem": 11335, + "memory": 11336, + "▁contents": 11337, + "docs": 11338, + "}'": 11339, + "▁Irish": 11340, + "Then": 11341, + "aats": 11342, + "Save": 11343, + "▁agency": 11344, + "▁име": 11345, + "дова": 11346, + "▁Function": 11347, + "NN": 11348, + "destroy": 11349, + "▁Message": 11350, + "▁cancel": 11351, + "▁superior": 11352, + "▁ec": 11353, + "▁literature": 11354, + "▁PART": 11355, + "Il": 11356, + "▁Cab": 11357, + "engine": 11358, + "▁basket": 11359, + "worth": 11360, + "▁Sel": 11361, + "fetch": 11362, + "▁Stadt": 11363, + "▁Ки": 11364, + "▁conj": 11365, + "▁seiner": 11366, + "▁confirmed": 11367, + "▁Argent": 11368, + "amar": 11369, + "pgfpath": 11370, + "▁struggle": 11371, + "Pattern": 11372, + "▁Middle": 11373, + "itan": 11374, + "▁moon": 11375, + "orough": 11376, + "▁Catholic": 11377, + "▁struck": 11378, + "]->": 11379, + "▁weapon": 11380, + "▁subst": 11381, + "▁instructions": 11382, + "▁occas": 11383, + "protected": 11384, + "▁Less": 11385, + "▁batch": 11386, + "▁contra": 11387, + "▁deck": 11388, + "▁ignored": 11389, + "▁refused": 11390, + "trigger": 11391, + "▁criminal": 11392, + "GA": 11393, + "olly": 11394, + "▁Bell": 11395, + "▁Ю": 11396, + "forward": 11397, + "▁prefix": 11398, + "▁immediate": 11399, + "▁assigned": 11400, + "▁elected": 11401, + "▁tonight": 11402, + "▁Dies": 11403, + "▁Beach": 11404, + "▁preced": 11405, + "ował": 11406, + "▁galax": 11407, + "▁logic": 11408, + "enza": 11409, + "▁Captain": 11410, + "▁Hay": 11411, + "▁facts": 11412, + "▁ни": 11413, + "té": 11414, + "▁sb": 11415, + "oped": 11416, + "▁combat": 11417, + "▁explore": 11418, + "▁(-": 11419, + "Loader": 11420, + "▁Wilson": 11421, + "▁locked": 11422, + ":)": 12970, + "▁quel": 12971, + "▁Га": 12972, + "Ty": 12973, + "▁temps": 12974, + "▁ghost": 12975, + "Material": 12976, + "ERCHANT": 12977, + "pointer": 12978, + "жда": 12979, + "aha": 12980, + "ulf": 12981, + "▁supplement": 12982, + "▁dismiss": 12983, + "▁closing": 12984, + "▁vulner": 12985, + "▁après": 12986, + "▁overwhel": 12987, + "ское": 12988, + "▁disag": 12989, + "acia": 12990, + "oured": 12991, + "ruption": 12992, + "▁PS": 12993, + "Endpoint": 12994, + "Real": 12995, + "▁Tag": 12996, + "▁stairs": 12997, + "lyn": 12998, + "▁eleg": 12999, + "▁veter": 13000, + "factory": 13001, + "anne": 13002, + "▁Bat": 13003, + "▁franc": 13004, + "lung": 13005, + "▁\"'": 13006, + ".',": 13007, + "▁Country": 13008, + "^{[": 13009, + "▁yours": 13010, + "ailability": 13011, + "Clear": 13012, + "ätt": 13013, + "пис": 13014, + "▁joke": 13015, + "▁annoy": 13016, + "▁rag": 13017, + "vari": 13018, + "лекс": 13019, + "▁Psy": 13020, + "ilty": 13021, + "mount": 13022, + "▁cual": 13023, + "▁solar": 13024, + "}^{(": 13025, + "Short": 13026, + "▁taxes": 13027, + "Append": 13028, + "Win": 13029, + "estyle": 13030, + "▁facil": 13031, + "вро": 13032, + "▁sought": 13033, + "▁bare": 13034, + "▁react": 13035, + "jar": 13036, + "MAC": 13037, + "lov": 13038, + "warn": 13039, + "▁crucial": 13040, + "▁museum": 13041, + "ниц": 13042, + "▁Kent": 13043, + "Maybe": 13044, + "▁bike": 13045, + "▁Address": 13046, + "XML": 13047, + "▁admitted": 13048, + "▁$(\\": 13049, + "▁spell": 13050, + "▁vic": 13051, + "gre": 13052, + "▁proc": 13053, + "theless": 13054, + "▁Nom": 13055, + "▁Rail": 13056, + "▁acceler": 13057, + "▁convin": 13058, + "▁Property": 13059, + "▁DA": 13060, + "▁clip": 13061, + "▁plugin": 13062, + "Limit": 13063, + "views": 13064, + "bru": 13065, + "▁pra": 13066, + "▁ak": 13067, + "▁ej": 13068, + "▁opts": 13069, + "▁slip": 13070, + "▁gang": 13071, + "asted": 13072, + "uals": 13073, + "▁dying": 13074, + "Coll": 13075, + "ammen": 13076, + "▁Policy": 13077, + "ERCHANTABILITY": 13078, + "▁Collection": 13079, + "▁vec": 13080, + "▁Dick": 13081, + "stud": 13082, + "▁layers": 13083, + "▁tied": 13084, + "}\\\\": 13085, + "▁alors": 13086, + "▁jou": 13087, + "▁chicken": 13088, + "▁permanent": 13089, + "▁Everything": 13090, + "▁Low": 13091, + "▁Cook": 13092, + "▁peak": 13093, + "▁PARTICULAR": 13094, + "▁dear": 13095, + "ič": 13096, + "▁introduce": 13097, + "▁causing": 13098, + "писа": 13099, + "Bound": 13100, + "hund": 13101, + "multi": 13102, + "▁pare": 13103, + "annt": 13104, + "▁breat": 13105, + "▁commitment": 13106, + "▁increasingly": 13107, + "кой": 13108, + "▁Friend": 13109, + "▁statistics": 13110, + "▁Manager": 13111, + "plicate": 13112, + "Cloud": 13113, + "aci": 13114, + "▁Conference": 13115, + "Span": 13116, + "▁CEO": 13117, + "▁Wait": 13118, + "▁Ober": 13119, + "ifting": 13120, + "imiento": 13121, + "getElement": 13122, + "▁gle": 13123, + "лия": 13124, + "▁wieder": 13125, + "▁instruction": 13126, + "gly": 13127, + "▁blame": 13128, + "▁listade": 13129, + "▁aapt": 13130, + "▁Lewis": 13131, + "Fragment": 13132, + "▁gear": 13133, + "mill": 13134, + "prod": 13135, + "▁burning": 13136, + "ється": 13137, + "▁mé": 13138, + "ène": 13139, + "▁complicated": 13140, + "bh": 13141, + "▁Justice": 13142, + "▁tested": 13143, + "▁staring": 13144, + "▁survive": 13145, + "▁cous": 13146, + "▁rib": 13147, + "aml": 13148, + "▁Trust": 13149, + "▁cad": 13150, + "▁Terr": 13151, + "▁mapping": 13152, + "▁twelve": 13153, + "▁grant": 13154, + "▁thorough": 13155, + "▁Ü": 13156, + "▁folks": 13157, + "▁Content": 13158, + "▁childhood": 13159, + "cker": 13160, + "сно": 13161, + "RECT": 13162, + "▁finale": 13163, + "▁shower": 13164, + "éric": 13165, + "▁spat": 13166, + "odge": 13167, + "рь": 13168, + "▁pes": 13169, + "eda": 13170, + "Db": 13171, + "▁Antonio": 13172, + "▁engaged": 13173, + "▁vess": 13174, + "vals": 13175, + "▁electronic": 13176, + "lemma": 13177, + "▁Wy": 13178, + "mad": 13179, + "merge": 13180, + "apon": 13181, + "▁privile": 13182, + "▁novembre": 13183, + "▁Sports": 13184, + "will": 13185, + "▁controls": 13186, + "▁categories": 13187, + "▁Georgia": 13188, + "ipedia": 13189, + "▁AV": 13190, + "atori": 13191, + "▁___": 13192, + "▁À": 13193, + "▁Ryan": 13194, + "▁Charlie": 13195, + "▁исто": 13196, + "▁emotion": 13197, + "▁cooking": 13198, + "▁attempts": 13199, + "▁FITNESS": 13200, + "äter": 13201, + "Enable": 13202, + "DT": 13203, + "▁Change": 13204, + "AspNet": 13205, + "▁га": 13206, + "▁ordinary": 13207, + "▁SQL": 13208, + "plane": 13209, + "%.": 13210, + "▁Summer": 13211, + "▁avait": 13212, + "upp": 13213, + "▁illness": 13214, + "UINT": 13215, + ">{": 13216, + "▁zwischen": 13217, + "▁hardware": 13218, + "▁sounded": 13219, + "equiv": 13220, + "▁piano": 13221, + "uset": 13222, + "kn": 13223, + "TRY": 13224, + "▁bab": 13225, + "нен": 13226, + "▁reliable": 13227, + "▁Bronnen": 13228, + "▁Store": 13229, + "Az": 13230, + "▁»,": 13231, + "Static": 13232, + "dw": 13233, + "green": 13234, + "▁'';": 13235, + "lij": 13236, + "eva": 13237, + "ній": 13238, + "▁Syd": 13239, + "inois": 13240, + "convert": 13241, + "▁declare": 13242, + "bres": 13243, + "INK": 13244, + "itled": 13245, + "▁accord": 13246, + "▁mars": 13247, + "Sequence": 13248, + "zip": 13249, + "▁Brazil": 13250, + "▁meetings": 13251, + "▁accuracy": 13252, + "▁Machine": 13253, + "▁autor": 13254, + "▁ainsi": 13255, + "Simple": 13256, + "Resources": 13257, + "каза": 13258, + "▁MP": 13259, + "they": 13260, + "▁Bang": 13261, + "▁eing": 13262, + "ateful": 13263, + "▁Something": 13264, + "▁upset": 13265, + "History": 13266, + "dimensional": 13267, + "▁explanation": 13268, + "▁civ": 13269, + "▁conce": 13270, + "▁köz": 13271, + "▁promised": 13272, + "жду": 13273, + "wed": 13274, + "Fore": 13275, + "Amount": 13276, + "abb": 13277, + "▁clothing": 13278, + "лись": 13279, + "oen": 13280, + "▁Print": 13281, + "▁sizes": 13282, + "▁banks": 13283, + "ribed": 13284, + "▁'../": 13285, + "FIX": 13286, + "▁Hug": 13287, + "▁zn": 13288, + "▁INT": 13289, + "▁instances": 13290, + "▁alongside": 13291, + "Namespace": 13292, + "▁renew": 13293, + "▁asc": 13294, + "▁waves": 13295, + "▁pom": 13296, + "Duration": 13297, + "days": 13298, + "$(": 13299, + "▁grabbed": 13300, + "▁surgery": 13301, + "▁restore": 13302, + "Normal": 13303, + "▁Leb": 13304, + "▁analyt": 13305, + "Literal": 13306, + "HA": 13307, + "▁shares": 13308, + "illet": 13309, + "ols": 13310, + "▁Dog": 13311, + "orno": 13312, + "▁manip": 13313, + "jav": 13314, + "▁essentially": 13315, + "▁casual": 13316, + "opl": 13317, + "▁р": 13318, + "▁SU": 13319, + "▁engineering": 13320, + "▁Prime": 13321, + "▁SW": 13322, + "▁reaching": 13323, + "▁вла": 13324, + "▁Росси": 13325, + "▁Kre": 13326, + "erry": 13327, + "▁oppon": 13328, + "program": 13329, + "emper": 13330, + "isEmpty": 13331, + "▁Unit": 13332, + "INTER": 13333, + "ethe": 13334, + "zd": 13335, + "CUR": 13336, + "▁vm": 13337, + "conv": 13338, + "ropol": 13339, + "▁Coast": 13340, + "▁Select": 13341, + "▁была": 13342, + "▁Ve": 13343, + "owy": 13344, + "▁myth": 13345, + "ceptions": 13346, + "classes": 13347, + "▁worden": 13348, + "▁assault": 13349, + "▁dual": 13350, + "ORK": 13351, + "▁inches": 13352, + "▁FA": 13353, + "▁Station": 13354, + "▁personality": 13355, + "▁scar": 13356, + "▁regime": 13357, + "▁noten": 13358, + "▁rural": 13359, + "iza": 13360, + "Audio": 13361, + "▁disput": 13362, + "▁aver": 13363, + "▁obst": 13364, + "▁Region": 13365, + "utf": 13366, + "▁Cass": 13367, + "hspace": 13368, + "▁shipping": 13369, + "iko": 13370, + "icked": 13371, + "numer": 13372, + "дна": 13373, + "riel": 13374, + "disabled": 13375, + "opol": 13376, + "looking": 13377, + "▁classical": 13378, + "▁constructed": 13379, + "▁referenties": 13380, + "]+": 13381, + "▁captured": 13382, + "▁minimal": 13383, + "▁sock": 13384, + "father": 13385, + "isión": 13386, + "▁equally": 13387, + "▁reduction": 13388, + "Ant": 13389, + "aison": 13390, + "▁argue": 13391, + "circle": 13392, + "▁toler": 13393, + "}\",": 13394, + "▁primarily": 13395, + "usal": 13396, + "▁algebra": 13397, + "▁gathered": 13398, + "▁Remember": 13399, + "_);": 13400, + "UTE": 13401, + "▁Kit": 13402, + "Sy": 13403, + "HEAD": 13404, + "▁recipe": 13405, + "▁scenario": 13406, + "▁Following": 13407, + "VAR": 13408, + "▁yard": 13409, + "▁stad": 13410, + "*(": 13411, + "▁validate": 13412, + "DEX": 13413, + "▁committee": 13414, + "▁temporary": 13415, + "▁consequences": 13416, + "▁également": 13417, + "ктив": 13418, + "▁ra": 13419, + "▁displ": 13420, + "▁apps": 13421, + "▁Teil": 13422, + "▁».": 13423, + "▁adopted": 13424, + "tensor": 13425, + "▁femin": 13426, + "▁мар": 13427, + "логи": 13428, + "tech": 13429, + "▁Rot": 13430, + "▁knees": 13431, + "phys": 13432, + "owej": 13433, + "▁Oxford": 13434, + "анд": 13435, + "hell": 13436, + "ografia": 13437, + "▁exposed": 13438, + "ktop": 13439, + "oby": 13440, + "lower": 13441, + "▁Senate": 13442, + "▁sword": 13443, + "Flow": 13444, + "▁Unfortunately": 13445, + "▁boxes": 13446, + "▁cuando": 13447, + "▁pilot": 13448, + "▁Album": 13449, + "Bal": 13450, + "Sort": 13451, + "FIELD": 13452, + "▁desert": 13453, + "COMM": 13454, + "rons": 13455, + "adows": 13456, + "▁loyal": 13457, + "▁asset": 13458, + "▁mud": 13459, + "фа": 13460, + "▁secondary": 13461, + "▁Ар": 13462, + "▁cul": 13463, + "▁Asian": 13464, + "▁staying": 13465, + "▁dataset": 13466, + "▁USE": 13467, + "▁loves": 13468, + "▁velocity": 13469, + "áv": 13470, + "▁purchased": 13471, + "SOC": 13472, + "▁competitive": 13473, + "▁Football": 13474, + "iska": 13475, + "▁knock": 13476, + "stairs": 13477, + "azy": 13478, + "▁vend": 13479, + "▁arts": 13480, + "▁Bras": 13481, + "uela": 13482, + "кто": 13483, + "trim": 13484, + "▁dirty": 13485, + "▁websites": 13486, + "▁Indep": 13487, + "▁стра": 13488, + "sr": 13489, + "▁ticket": 13490, + "atile": 13491, + "▁implemented": 13492, + "▁время": 13493, + "▁bowl": 13494, + "DATE": 13495, + "▁alter": 13496, + "▁Space": 13497, + "▁accompan": 13498, + "ordon": 13499, + "▁doctors": 13500, + "istas": 13501, + "Cast": 13502, + "дом": 13503, + "CTL": 13504, + "urers": 13505, + "▁ingredients": 13506, + "▁calculated": 13507, + "▁leather": 13508, + "▁sensitive": 13509, + "▁suspic": 13510, + "stan": 13511, + "▁anni": 13512, + "await": 13513, + "▁Franç": 13514, + "▁abort": 13515, + "▁Spirit": 13516, + "▁Walter": 13517, + "unkt": 13518, + "▁vertical": 13519, + "ORS": 13520, + "best": 13521, + "▁Client": 13522, + "itated": 13523, + "▁ва": 13524, + "▁Č": 13525, + "▁ville": 13526, + "▁diplom": 13527, + "orne": 13528, + "▁bars": 13529, + "Uri": 13530, + "APTER": 13531, + "pons": 13532, + "utz": 13533, + "Proto": 13534, + "▁stir": 13535, + "▁це": 13536, + "▁primer": 13537, + "igible": 13538, + "extra": 13539, + "▁Books": 13540, + "▁Bos": 13541, + "▁Et": 13542, + "▁Welt": 13543, + "▁Korea": 13544, + "рито": 13545, + "▁vibr": 13546, + "Self": 13547, + "linear": 13548, + "об": 13549, + "▁Lang": 13550, + "▁deeper": 13551, + "▁termin": 13552, + "enschaft": 13553, + "▁році": 13554, + "ammed": 13555, + "visible": 13556, + "▁IOException": 13557, + "▁Wind": 13558, + "usqu": 13559, + "▁Stop": 13560, + "▁орга": 13561, + "INVALID": 13562, + "▁cub": 13563, + "▁jew": 13564, + "▁captain": 13565, + "зі": 13566, + "chunk": 13567, + "apture": 13568, + "ashboard": 13569, + "▁divided": 13570, + "▁extensive": 13571, + "▁suffer": 13572, + "▁heading": 13573, + "created": 13574, + "▁quietly": 13575, + "▁ny": 13576, + "▁пол": 13577, + "\"+": 13578, + "ikan": 13579, + "▁designs": 13580, + "zu": 13581, + "}+\\": 13582, + "Operator": 13583, + "▁Lemma": 13584, + "▁нау": 13585, + "acji": 13586, + "лове": 13587, + "Servlet": 13588, + "▁Kevin": 13589, + "stage": 13590, + "bn": 13591, + "textwidth": 13592, + "failed": 13593, + "▁Staff": 13594, + "▁enem": 13595, + "unde": 13596, + "ень": 13597, + "Packet": 13598, + "▁Als": 13599, + "kar": 13600, + "]['": 13601, + "ked": 13602, + "Pers": 13603, + ">::": 13604, + "▁arc": 13605, + "▁synt": 13606, + "SPE": 13607, + "▁Да": 13608, + "▁Mi": 13609, + "▁Moh": 13610, + "▁Death": 13611, + "browser": 13612, + "▁Dave": 13613, + "▁succ": 13614, + "toggle": 13615, + "▁tack": 13616, + "Comment": 13617, + "eron": 13618, + "▁awareness": 13619, + "▁hug": 13620, + "▁contemporary": 13621, + "ulating": 13622, + "▁Title": 13623, + "▁THIS": 13624, + "havior": 13625, + "rank": 13626, + "▁dozen": 13627, + "▁cheese": 13628, + "coln": 13629, + "▁radius": 13630, + "▁dimensions": 13631, + "roduction": 13632, + "▁adds": 13633, + "▁household": 13634, + "▁Davis": 13635, + "pkg": 13636, + "{$": 13637, + "▁casino": 13638, + "▁Pierre": 13639, + "▁objective": 13640, + "train": 13641, + "▁Michigan": 13642, + "payload": 13643, + "▁rug": 13644, + "▁severe": 13645, + "mean": 13646, + "▁toss": 13647, + "▁embarrass": 13648, + "▁Very": 13649, + "▁appeal": 13650, + "▁Comput": 13651, + "▁forgotten": 13652, + "▁kernel": 13653, + "▁carbon": 13654, + "fw": 13655, + "▁Су": 13656, + "▁Empire": 13657, + "▁quote": 13658, + "etz": 13659, + "▁mini": 13660, + "▁pipe": 13661, + "▁nous": 13662, + "▁Move": 13663, + "▁ду": 13664, + "▁nervous": 13665, + "▁Мар": 13666, + "*\r": 13667, + "▁Bush": 13668, + "▁peer": 13669, + "▁Writ": 13670, + "▁satisfied": 13671, + "▁pulling": 13672, + "▁Pur": 13673, + "▁Miller": 13674, + "▁FL": 13675, + "amaz": 13676, + "▁mile": 13677, + "▁Need": 13678, + "▁supplies": 13679, + "▁año": 13680, + "▁pace": 13681, + "▁Victoria": 13682, + "▁ought": 13683, + "▁Player": 13684, + "agnostic": 13685, + "▁viv": 13686, + "▁Patrick": 13687, + "▁Š": 13688, + "▁Story": 13689, + "aca": 13690, + "▁mountains": 13691, + "CLASS": 13692, + "▁fragment": 13693, + "▁settlement": 13694, + "▁Furthermore": 13695, + "▁drivers": 13696, + "▁Ju": 13697, + "▁были": 13698, + "Rows": 13699, + "▁impression": 13700, + "▁infer": 13701, + "▁Expl": 13702, + "olute": 13703, + "ovan": 13704, + "arance": 13705, + "CAP": 13706, + "▁enforce": 13707, + "▁Burn": 13708, + "Reset": 13709, + "mother": 13710, + "▁Battle": 13711, + "padding": 13712, + "iate": 13713, + "▁cried": 13714, + "AK": 13715, + "uns": 13716, + "▁siècle": 13717, + "▁Contin": 13718, + "bank": 13719, + "junit": 13720, + "objects": 13721, + "Rot": 13722, + "issa": 13723, + "▁begun": 13724, + "*-": 13725, + "▁visiting": 13726, + "жде": 13727, + "▁targets": 13728, + "▁Latin": 13729, + "ут": 13730, + "▁Esc": 13731, + "*;": 13732, + "ång": 13733, + "▁({": 13734, + "▁diagram": 13735, + "Models": 13736, + "▁partnership": 13737, + "▁från": 13738, + "ulty": 13739, + "Pod": 13740, + "CALL": 13741, + "modal": 13742, + "sig": 13743, + "itzer": 13744, + "itel": 13745, + "▁convinced": 13746, + "abl": 13747, + "стве": 13748, + "▁cot": 13749, + "▁repeat": 13750, + "▁lists": 13751, + "sound": 13752, + "▁royal": 13753, + "▁grace": 13754, + "▁oraz": 13755, + "Notification": 13756, + "prite": 13757, + "▁arrival": 13758, + "ancell": 13759, + "hentic": 13760, + "decode": 13761, + "▁fantastic": 13762, + "progress": 13763, + "proxy": 13764, + "ző": 13765, + "kel": 13766, + "▁convenient": 13767, + "aque": 13768, + "riet": 13769, + "▁Digital": 13770, + "iors": 13771, + "▁Budd": 13772, + "andra": 13773, + "addy": 13774, + "▁overs": 13775, + "▁consumers": 13776, + "pn": 13777, + "mouse": 13778, + "▁BC": 13779, + "deg": 13780, + "perm": 13781, + "ités": 13782, + "▁испо": 13783, + "heast": 13784, + "hour": 13785, + "PARAM": 13786, + "conscious": 13787, + "▁wing": 13788, + "▁atmosphere": 13789, + "▁gig": 13790, + "▁contre": 13791, + "▁drama": 13792, + "ят": 13793, + "▁Front": 13794, + "▁philosophy": 13795, + "▁Hart": 13796, + "▁nurs": 13797, + "uras": 13798, + "▁Tru": 13799, + "▁sud": 13800, + "▁performing": 13801, + "пы": 13802, + "▁confused": 13803, + "▁checks": 13804, + "amt": 13805, + "Make": 13806, + "▁RO": 13807, + "▁df": 13808, + "izations": 13809, + "▁degli": 13810, + "▁architecture": 13811, + "Renderer": 13812, + "▁Ла": 13813, + "▁ptr": 13814, + "▁dieser": 13815, + "submit": 13816, + "▁topics": 13817, + "▁principles": 13818, + "vars": 13819, + "sock": 13820, + "▁tongue": 13821, + "▁percentage": 13822, + "▁SS": 13823, + "▁dol": 13824, + "▁rice": 13825, + "ío": 13826, + "▁Eastern": 13827, + "▁recognition": 13828, + "▁Ern": 13829, + "▁Ut": 13830, + "▁caut": 13831, + "▁Cloud": 13832, + "▁conversion": 13833, + "▁Ohio": 13834, + "▁ME": 13835, + "▁surely": 13836, + "▁gard": 13837, + "puis": 13838, + "▁urg": 13839, + "imi": 13840, + "▁absence": 13841, + "▁winner": 13842, + "Language": 13843, + "▁HTTP": 13844, + "wt": 13845, + "▁translation": 13846, + "сс": 13847, + "▁Kind": 13848, + "Two": 13849, + "▁Revolution": 13850, + "Insert": 13851, + "Every": 13852, + "orient": 13853, + "▁тра": 13854, + "▁emotions": 13855, + "details": 13856, + "▁flu": 13857, + "▁operate": 13858, + "Ag": 13859, + "unning": 13860, + "▁partie": 13861, + "tri": 13862, + "▁golden": 13863, + "▁Би": 13864, + "▁foundation": 13865, + "isten": 13866, + "▁Carlos": 13867, + "Children": 13868, + "▁neighb": 13869, + "▁Cart": 13870, + "Begin": 13871, + "гда": 13872, + "▁scheduled": 13873, + "'>": 13874, + "▁observations": 13875, + "▁producer": 13876, + "athers": 13877, + "ному": 13878, + "▁expectations": 13879, + "oso": 13880, + "zh": 13881, + "mutable": 13882, + "▁writes": 13883, + "▁pushing": 13884, + "▁seats": 13885, + "▁breast": 13886, + "aping": 13887, + "▁Simple": 13888, + "▁socket": 13889, + "▁slave": 13890, + "iley": 13891, + "▁assistant": 13892, + "▁trim": 13893, + "▁landscape": 13894, + "▁association": 13895, + "quant": 13896, + "▁Palest": 13897, + "▁sweat": 13898, + "engers": 13899, + "?_": 13900, + "ép": 13901, + ">.": 13902, + "▁curious": 13903, + "▁Component": 13904, + "▁replacement": 13905, + "раль": 13906, + "▁Track": 13907, + "▁Remove": 13908, + "▁Size": 13909, + "peror": 13910, + "▁calculate": 13911, + "▁sessions": 13912, + "▁typed": 13913, + "▁submit": 13914, + "!!!": 13915, + "▁partition": 13916, + "eding": 13917, + "-----": 13918, + "azioni": 13919, + "ließ": 13920, + "onal": 13921, + "▁shru": 13922, + "▁REG": 13923, + "▁Fac": 13924, + "configuration": 13925, + "▁было": 13926, + "▁Among": 13927, + "__);": 13928, + "▁Server": 13929, + "▁LOG": 13930, + "▁cand": 13931, + "']);": 13932, + "gov": 13933, + "▁Six": 13934, + "undefined": 13935, + "▁ty": 13936, + "asa": 13937, + "▁particles": 13938, + "▁фор": 13939, + "``": 13940, + "Tube": 13941, + "eland": 13942, + "fold": 13943, + "ogo": 13944, + "▁approaches": 13945, + "onda": 13946, + "agr": 13947, + ",$": 13948, + "▁{{": 13949, + "▁Modern": 13950, + "▁Winter": 13951, + "available": 13952, + "▁Lud": 13953, + "▁casa": 13954, + "▁Could": 13955, + "▁fifteen": 13956, + "▁potentially": 13957, + "^^": 13958, + "▁seit": 13959, + "Animation": 13960, + "кого": 13961, + "Zone": 13962, + "elif": 13963, + "▁acknowled": 13964, + "▁ownership": 13965, + "▁describes": 13966, + "▁reverse": 13967, + "▁contest": 13968, + "▁scored": 13969, + "▁opposed": 13970, + "flex": 13971, + "kre": 13972, + "▁merge": 13973, + "▁covering": 13974, + "▁honestly": 13975, + "▁Mess": 13976, + "▁rarely": 13977, + "▁incredible": 13978, + "itage": 13979, + "▁victims": 13980, + "ными": 13981, + "wl": 13982, + "izza": 13983, + "dn": 13984, + "onde": 13985, + "▁przy": 13986, + "▁HTML": 13987, + "▁payload": 13988, + "Bus": 13989, + "usb": 13990, + "Fn": 13991, + "▁displayed": 13992, + "▁ocean": 13993, + "▁Avenue": 13994, + "acion": 13995, + "ghan": 13996, + "metric": 13997, + "ieties": 13998, + "▁attractive": 13999, + "▁fö": 14000, + "Creat": 14001, + "verter": 14002, + "▁Alice": 14003, + "пол": 14004, + "▁fraction": 14005, + "▁behaviour": 14006, + "▁Jersey": 14007, + "▁revenue": 14008, + "▁tres": 14009, + "ILD": 14010, + "▁Ét": 14011, + "▁sync": 14012, + "wich": 14013, + "▁ancest": 14014, + "ът": 14015, + "omo": 14016, + "▁Ide": 14017, + "▁gained": 14018, + "▁momentum": 14019, + "▁Ko": 14020, + "ieu": 14021, + "ielt": 14022, + "▁bonus": 14023, + "▁texture": 14024, + "Modal": 14025, + "NEXT": 14026, + "▁године": 14027, + "▁languages": 14028, + "vt": 14029, + "▁representing": 14030, + "▁Dream": 14031, + "curr": 14032, + "qual": 14033, + "▁js": 14034, + "burn": 14035, + "▁contributions": 14036, + "▁ric": 14037, + "}-\\": 14038, + "={{": 14039, + "cart": 14040, + "FB": 14041, + "jud": 14042, + "esp": 14043, + "▁electron": 14044, + "▁ell": 14045, + "▁Runtime": 14046, + "achel": 14047, + "\\_": 14048, + "week": 14049, + "packet": 14050, + "▁Secretary": 14051, + "▁Jahrhund": 14052, + "▁threshold": 14053, + "bage": 14054, + "▁concer": 14055, + "▁bone": 14056, + "▁Hollywood": 14057, + "Cursor": 14058, + "▁awarded": 14059, + "▁summary": 14060, + "aggio": 14061, + "▁stell": 14062, + "▁flesh": 14063, + "Pair": 14064, + "▁Age": 14065, + "ington": 14066, + "▁'.": 14067, + "aser": 14068, + "кова": 14069, + "▁quart": 14070, + "ryption": 14071, + "Alloc": 14072, + "ften": 14073, + "Operand": 14074, + "▁indicated": 14075, + "($_": 14076, + "getString": 14077, + "▁listener": 14078, + "spir": 14079, + ")_": 14080, + "vens": 14081, + "▁foods": 14082, + "anza": 14083, + "teil": 14084, + "DESC": 14085, + "▁notion": 14086, + "▁employment": 14087, + "▁swing": 14088, + "nbsp": 14089, + "▁pounds": 14090, + "tools": 14091, + "▁participate": 14092, + "▁Tax": 14093, + "▁скла": 14094, + "apol": 14095, + "▁fost": 14096, + "compat": 14097, + "▁publication": 14098, + "▁rapidly": 14099, + "▁Wis": 14100, + "EventListener": 14101, + "▁première": 14102, + "uso": 14103, + "extend": 14104, + "▁MERCHANTABILITY": 14105, + "UTF": 14106, + "▁experiments": 14107, + "single": 14108, + "zk": 14109, + "▁naj": 14110, + "}}}": 14111, + "Lin": 14112, + "▁interact": 14113, + "▁cms": 14114, + "▁Roger": 14115, + "▁Ру": 14116, + ">'": 14117, + "commit": 14118, + "лось": 14119, + "▁outcome": 14120, + "▁hits": 14121, + "▁им": 14122, + "▁spark": 14123, + "console": 14124, + "▁verw": 14125, + "▁като": 14126, + "agnostics": 14127, + "▁soci": 14128, + "▁dining": 14129, + "▁tech": 14130, + "št": 14131, + "folio": 14132, + "ultane": 14133, + "ктор": 14134, + "▁Brand": 14135, + "Join": 14136, + "▁ию": 14137, + "▁pros": 14138, + "▁posit": 14139, + "Public": 14140, + "AspNetCore": 14141, + "▁Shop": 14142, + "▁coinc": 14143, + "нием": 14144, + "▁references": 14145, + "about": 14146, + "namespace": 14147, + "DL": 14148, + "▁IR": 14149, + "▁cada": 14150, + "▁Jordan": 14151, + "▁gep": 14152, + "▁bron": 14153, + "andidate": 14154, + "EXPECT": 14155, + "amo": 14156, + "▁Deutsch": 14157, + "auc": 14158, + "▁райо": 14159, + "▁Labor": 14160, + "▁surrounded": 14161, + "тро": 14162, + "▁nome": 14163, + "▁underlying": 14164, + "▁educational": 14165, + "RIGHT": 14166, + "COUNT": 14167, + "inch": 14168, + "Typ": 14169, + "umph": 14170, + "four": 14171, + "Controls": 14172, + "▁cp": 14173, + "cost": 14174, + "▁mechanism": 14175, + "eness": 14176, + "équ": 14177, + "▁acquired": 14178, + "▁falls": 14179, + "▁Hou": 14180, + "▁LE": 14181, + "forEach": 14182, + "▁vertex": 14183, + "▁IF": 14184, + "curs": 14185, + "'=>": 14186, + "тери": 14187, + "▁SA": 14188, + "riers": 14189, + "▁uw": 14190, + "▁marks": 14191, + "▁energ": 14192, + "hof": 14193, + "ylvania": 14194, + "▁Allen": 14195, + "umpy": 14196, + "ого": 14197, + "ству": 14198, + "voice": 14199, + "▁engage": 14200, + "▁mant": 14201, + "orse": 14202, + "===": 14203, + "▁improvement": 14204, + "Opt": 14205, + "▁arrested": 14206, + "тия": 14207, + "▁сле": 14208, + "itched": 14209, + "socket": 14210, + "▁cycl": 14211, + "▁SM": 14212, + "▁Sex": 14213, + "▁neutral": 14214, + "вав": 14215, + "▁Jess": 14216, + "▁dip": 14217, + "▁opposition": 14218, + "▁borrow": 14219, + "спе": 14220, + "▁avant": 14221, + "кола": 14222, + "▁ta": 14223, + "Anim": 14224, + "▁Gall": 14225, + "rgb": 14226, + "▁guilty": 14227, + "▁buried": 14228, + "▁gy": 14229, + "Initial": 14230, + "▁accomp": 14231, + "▁breathing": 14232, + "berry": 14233, + "GRO": 14234, + "▁subsequent": 14235, + "roupe": 14236, + "ulpt": 14237, + "tb": 14238, + "▁ä": 14239, + "Pi": 14240, + "argv": 14241, + "▁Must": 14242, + ":'": 14243, + "svg": 14244, + "oup": 14245, + "▁precisely": 14246, + "▁Ta": 14247, + "rena": 14248, + "▁folder": 14249, + "▁Channel": 14250, + "▁revol": 14251, + "Miss": 14252, + "лом": 14253, + "reddit": 14254, + "adelph": 14255, + "▁discrim": 14256, + "▁ave": 14257, + "pleted": 14258, + "▁gently": 14259, + "FFFF": 14260, + "ropy": 14261, + "▁dial": 14262, + "NotFound": 14263, + "▁\"[": 14264, + "Home": 14265, + "onte": 14266, + "▁relie": 14267, + "▁Context": 14268, + "▁stats": 14269, + "▁Energy": 14270, + "ounced": 14271, + "▁grave": 14272, + "▁recip": 14273, + "лин": 14274, + "blog": 14275, + "▁naam": 14276, + "▁wo": 14277, + "▁directions": 14278, + "▁Lincoln": 14279, + "!)": 14280, + "unci": 14281, + "neq": 14282, + "Tags": 14283, + "▁tum": 14284, + "▁saving": 14285, + "aille": 14286, + "itemize": 14287, + "▁Famil": 14288, + "msm": 14289, + "news": 14290, + "FFER": 14291, + "▁Dead": 14292, + "▁territory": 14293, + "▁Kat": 14294, + "ocker": 14295, + "integer": 14296, + "▁sne": 14297, + "▁fails": 14298, + "▁français": 14299, + "▁introduction": 14300, + "▁Grant": 14301, + "ycle": 14302, + "'].": 14303, + "▁vier": 14304, + "native": 14305, + "▁Kle": 14306, + "quote": 14307, + "Users": 14308, + "▁advis": 14309, + "▁gym": 14310, + "▁protein": 14311, + "ال": 14312, + "▁Mai": 14313, + "▁providers": 14314, + "▁soil": 14315, + "gui": 14316, + "▁Nation": 14317, + "reation": 14318, + "▁Tab": 14319, + "ensis": 14320, + "inas": 14321, + "▁Scotland": 14322, + "▁dispatch": 14323, + "union": 14324, + "▁bere": 14325, + "▁Pow": 14326, + "▁Hig": 14327, + "▁studying": 14328, + "REF": 14329, + "SSL": 14330, + "▁fright": 14331, + "▁SORT": 14332, + "▁compr": 14333, + "▁Madrid": 14334, + "rowned": 14335, + "opes": 14336, + "pdev": 14337, + "▁wash": 14338, + "▁'../../": 14339, + "}}_": 14340, + "▁accum": 14341, + "rolling": 14342, + "▁NC": 14343, + "▁fiction": 14344, + "ipt": 14345, + "connected": 14346, + "limits": 14347, + "▁lap": 14348, + "▁whereas": 14349, + "prom": 14350, + "▁appointment": 14351, + "Program": 14352, + "▁Пер": 14353, + "nah": 14354, + "Validation": 14355, + "icons": 14356, + "äll": 14357, + "▁radical": 14358, + "▁exclusive": 14359, + "emony": 14360, + "▁challenging": 14361, + "▁ms": 14362, + "▁Private": 14363, + "▁vida": 14364, + "▁други": 14365, + "▁campus": 14366, + "forms": 14367, + "дно": 14368, + "plaat": 14369, + "bst": 14370, + "ATED": 14371, + "▁Abstract": 14372, + "▁intense": 14373, + "▁Ltd": 14374, + "▁controvers": 14375, + "óg": 14376, + "▁să": 14377, + "▁landing": 14378, + "!=": 14379, + "▁scenes": 14380, + "▁Chap": 14381, + "▁spoken": 14382, + "cred": 14383, + "▁pride": 14384, + "quet": 14385, + "▁meter": 14386, + "▁deutsch": 14387, + "uum": 14388, + "▁bless": 14389, + "▁Hann": 14390, + "▁inputs": 14391, + "▁Row": 14392, + "▁withdraw": 14393, + "Pal": 14394, + "acles": 14395, + "assets": 14396, + "▁vl": 14397, + "веде": 14398, + "▁Got": 14399, + "▁airport": 14400, + "wind": 14401, + "▁Columbia": 14402, + "▁chocolate": 14403, + "▁hö": 14404, + "▁alarm": 14405, + "FTWARE": 14406, + "▁Jay": 14407, + "▁sake": 14408, + "▁registration": 14409, + "vid": 14410, + "▁lake": 14411, + "▁username": 14412, + "▁hack": 14413, + "indexOf": 14414, + "cx": 14415, + "▁festival": 14416, + "▁clubs": 14417, + "cases": 14418, + "CTRL": 14419, + "];\r": 14420, + "▁Aud": 14421, + "▁primera": 14422, + "ват": 14423, + "▁brilliant": 14424, + "uther": 14425, + "▁difficulty": 14426, + "itals": 14427, + "▁scores": 14428, + "▁polít": 14429, + "database": 14430, + "aska": 14431, + "▁######": 14432, + "▁acid": 14433, + "aton": 14434, + "atomic": 14435, + "freq": 14436, + "▁WARRANTY": 14437, + "▁reporting": 14438, + ".),": 14439, + "▁nights": 14440, + "▁programme": 14441, + ")}{": 14442, + "xic": 14443, + "▁spo": 14444, + "lined": 14445, + "quarters": 14446, + "eree": 14447, + "mers": 14448, + "▁serves": 14449, + "cow": 14450, + "лько": 14451, + "enso": 14452, + "▁environ": 14453, + "Like": 14454, + "anche": 14455, + "▁crash": 14456, + "▁Kap": 14457, + "noindent": 14458, + "Conn": 14459, + "▁авто": 14460, + "▁infrastructure": 14461, + "IME": 14462, + "▁Room": 14463, + "need": 14464, + "orer": 14465, + "▁Dest": 14466, + "▁Domin": 14467, + "atherine": 14468, + "▁Sydney": 14469, + "▁gauge": 14470, + "▁jet": 14471, + "bably": 14472, + "▁commonly": 14473, + "▁stations": 14474, + "iah": 14475, + "nl": 14476, + "жу": 14477, + "eten": 14478, + "_)": 14479, + "iac": 14480, + "amos": 14481, + "nement": 14482, + "kon": 14483, + "Interval": 14484, + "▁cabin": 14485, + "▁eg": 14486, + "▁shots": 14487, + "▁Area": 14488, + "smith": 14489, + "parameter": 14490, + "'}": 14491, + "▁hem": 14492, + "▁singing": 14493, + "▁accessible": 14494, + "▁Prin": 14495, + "optional": 14496, + "ancial": 14497, + "ships": 14498, + "▁canvas": 14499, + "spe": 14500, + "▁addresses": 14501, + "▁xml": 14502, + "▁'\"": 14503, + "▁kar": 14504, + "öff": 14505, + "▁ages": 14506, + "ёр": 14507, + "zing": 14508, + "▁över": 14509, + "▁Clean": 14510, + "▁Silver": 14511, + "▁осо": 14512, + "health": 14513, + "Ali": 14514, + "▁ts": 14515, + "atern": 14516, + "▁choosing": 14517, + "▁burned": 14518, + "brid": 14519, + "rooms": 14520, + "ött": 14521, + "KERN": 14522, + "▁dish": 14523, + "Sa": 14524, + "Detail": 14525, + "▁Hind": 14526, + "▁Dans": 14527, + "ię": 14528, + "▁Jahren": 14529, + "extension": 14530, + "allas": 14531, + "▁Billy": 14532, + "usammen": 14533, + "itud": 14534, + "geon": 14535, + "Temp": 14536, + "Leg": 14537, + "ittel": 14538, + "addle": 14539, + "▁muscle": 14540, + "▁scared": 14541, + "sson": 14542, + "▁denote": 14543, + "ieurs": 14544, + "▁orange": 14545, + "▁hub": 14546, + "▁reb": 14547, + "edi": 14548, + "▁voices": 14549, + "Folder": 14550, + "▁suspend": 14551, + "▁Heart": 14552, + "▁scrap": 14553, + "▁aggreg": 14554, + "▁Guide": 14555, + "transaction": 14556, + "▁riding": 14557, + "▁vá": 14558, + "▁breed": 14559, + "▁concert": 14560, + "approx": 14561, + "▁chances": 14562, + "Tok": 14563, + "Eq": 14564, + "parts": 14565, + "▁scholar": 14566, + "offs": 14567, + "flush": 14568, + "!”": 14569, + "▁login": 14570, + "▁soort": 14571, + "▁Mand": 14572, + "▁functional": 14573, + "▁Bou": 14574, + "▁subjects": 14575, + "mys": 14576, + "▁extraord": 14577, + "▁Building": 14578, + "ikt": 14579, + "Bad": 14580, + "iami": 14581, + "Driver": 14582, + "ête": 14583, + "▁kv": 14584, + "▁timer": 14585, + "itionally": 14586, + "▁athlet": 14587, + "▁\");": 14588, + "wy": 14589, + "CFG": 14590, + "▁heaven": 14591, + "ов": 14592, + "▁experimental": 14593, + "▁bounds": 14594, + "ICK": 14595, + "▁excit": 14596, + "▁quit": 14597, + "▁universal": 14598, + "дь": 14599, + "▁SP": 14600, + "▁stub": 14601, + "▁kle": 14602, + "▁Bart": 14603, + "▁\"@": 14604, + "pel": 14605, + "▁(!(": 14606, + "▁selector": 14607, + "EB": 14608, + "▁coc": 14609, + "eted": 14610, + "ють": 14611, + "▁possess": 14612, + "▁Rick": 14613, + "▁unusual": 14614, + "termin": 14615, + "▁bags": 14616, + "▁loading": 14617, + "▁tf": 14618, + "▁)\r": 14619, + "provider": 14620, + "pletion": 14621, + "▁cursor": 14622, + "▁paused": 14623, + "им": 14624, + "▁counsel": 14625, + "]<": 14626, + "zech": 14627, + "▁tie": 14628, + "▁Moon": 14629, + "▁armed": 14630, + "▁observe": 14631, + "▁permet": 14632, + "▁Job": 14633, + "för": 14634, + "argument": 14635, + "▁eggs": 14636, + "ást": 14637, + "▁incredibly": 14638, + "werken": 14639, + "izard": 14640, + "▁painted": 14641, + "▁Vietnam": 14642, + "▁violent": 14643, + "Est": 14644, + "ierra": 14645, + "reader": 14646, + "weise": 14647, + "▁Josh": 14648, + "▁Him": 14649, + "ashes": 14650, + "origin": 14651, + "▁spir": 14652, + "▁Tree": 14653, + "▁niet": 14654, + "WIN": 14655, + "margin": 14656, + "▁involves": 14657, + "▁organis": 14658, + "▁Nacional": 14659, + "bara": 14660, + "▁depuis": 14661, + "pio": 14662, + "features": 14663, + "stru": 14664, + "▁Disney": 14665, + "▁restaurants": 14666, + "Mill": 14667, + "))\r": 14668, + "сла": 14669, + "remote": 14670, + "▁Third": 14671, + "▁baseball": 14672, + "▁algun": 14673, + "]$": 14674, + "▁employed": 14675, + "pot": 14676, + "▁UnityEngine": 14677, + "▁integration": 14678, + "▁risks": 14679, + "▁stro": 14680, + "▁agosto": 14681, + "including": 14682, + "▁Mind": 14683, + "▁stroke": 14684, + "▁deals": 14685, + "ajax": 14686, + "ёт": 14687, + "▁\\|": 14688, + "tar": 14689, + "adelphia": 14690, + "▁sab": 14691, + "pur": 14692, + "▁screw": 14693, + "▁inev": 14694, + "▁\\;": 14695, + "▁Donald": 14696, + "öd": 14697, + "cca": 14698, + "esis": 14699, + "▁separated": 14700, + "DBG": 14701, + "agent": 14702, + "▁packed": 14703, + "ння": 14704, + "intern": 14705, + "▁Monte": 14706, + "▁province": 14707, + "▁expanded": 14708, + "▁approached": 14709, + "▁Ep": 14710, + "CLK": 14711, + "▁ore": 14712, + "Batch": 14713, + "▁impressive": 14714, + "RM": 14715, + "▁Location": 14716, + "▁shame": 14717, + "wrapper": 14718, + "unwrap": 14719, + "peer": 14720, + "Bits": 14721, + "▁SN": 14722, + "scar": 14723, + "Come": 14724, + "▁council": 14725, + "▁shouted": 14726, + "making": 14727, + "▁Maur": 14728, + "▁wis": 14729, + "LETE": 14730, + "▁fs": 14731, + "▁dz": 14732, + "unque": 14733, + "uego": 14734, + "Random": 14735, + "Html": 14736, + "zem": 14737, + "▁Dutch": 14738, + "▁Golden": 14739, + "▁Tar": 14740, + "▁Herm": 14741, + "▁stretch": 14742, + "vard": 14743, + "▁tries": 14744, + "WI": 14745, + "▁disappeared": 14746, + "▁crusher": 14747, + "▁Kan": 14748, + "Mag": 14749, + "ør": 14750, + "▁Cambridge": 14751, + "▁dopo": 14752, + "atura": 14753, + "heart": 14754, + "▁Spiel": 14755, + "/**\r": 14756, + "Direction": 14757, + "atting": 14758, + "wig": 14759, + "▁codes": 14760, + "▁powder": 14761, + "alert": 14762, + "sembl": 14763, + "▁ye": 14764, + "Star": 14765, + "▁roots": 14766, + "▁Holl": 14767, + "Rele": 14768, + "▁constitu": 14769, + "nc": 14770, + "“.": 14771, + "reference": 14772, + "ificial": 14773, + "closure": 14774, + "▁figured": 14775, + "▁assumption": 14776, + "getElementById": 14777, + "▁AG": 14778, + "oses": 14779, + "▁_\"": 14780, + "epper": 14781, + "obre": 14782, + "enumerate": 14783, + "ографи": 14784, + "▁lessons": 14785, + "▁qualified": 14786, + "Person": 14787, + "anse": 14788, + "▁Mort": 14789, + "sylvania": 14790, + "▁cré": 14791, + "Binding": 14792, + "іс": 14793, + "▁Vari": 14794, + "▁reminded": 14795, + "▁membership": 14796, + "iper": 14797, + "zte": 14798, + "▁cref": 14799, + "▁PA": 14800, + "plaatst": 14801, + "▁Environment": 14802, + "boy": 14803, + "▁phrase": 14804, + "rivial": 14805, + "rag": 14806, + "води": 14807, + "▁pse": 14808, + "▁tournament": 14809, + ")},": 14810, + "▁Sound": 14811, + "▁Vel": 14812, + "▁Berg": 14813, + "elson": 14814, + "▁refuge": 14815, + "▁elsewhere": 14816, + "quality": 14817, + "▁abandoned": 14818, + "▁Flo": 14819, + "ibil": 14820, + "UAL": 14821, + "▁Platz": 14822, + "▁delta": 14823, + "▁Buy": 14824, + "rière": 14825, + "▁flour": 14826, + "▁laughing": 14827, + "▁Looking": 14828, + "Agent": 14829, + "▁wx": 14830, + "▁Wales": 14831, + "Ctx": 14832, + "▁cake": 14833, + "▁crate": 14834, + "▁кла": 14835, + "anga": 14836, + "Zero": 14837, + "▁amounts": 14838, + "Tra": 14839, + "ometric": 14840, + "▁constraints": 14841, + "▁temple": 14842, + "▁installation": 14843, + "stroke": 14844, + "▁Neder": 14845, + "ți": 14846, + "▁Ibid": 14847, + "▁obs": 14848, + "entries": 14849, + "▁jusqu": 14850, + "ORM": 14851, + "▁Sky": 14852, + "ikes": 14853, + "nak": 14854, + "▁modes": 14855, + "▁Hitler": 14856, + "▁belt": 14857, + "▁pointing": 14858, + "▁Ban": 14859, + "ignore": 14860, + "▁persu": 14861, + "▁Besides": 14862, + "ynom": 14863, + "▁legis": 14864, + "▁CPU": 14865, + "anded": 14866, + "uis": 14867, + "bsite": 14868, + "▁Euro": 14869, + "▁utter": 14870, + "eclipse": 14871, + "▁irre": 14872, + "▁Document": 14873, + "▁Meanwhile": 14874, + "▁familie": 14875, + "verify": 14876, + "▁Jason": 14877, + "▁Ort": 14878, + "▁ciudad": 14879, + "▁technologies": 14880, + "▁части": 14881, + "nica": 14882, + "cancel": 14883, + "Virtual": 14884, + "▁evident": 14885, + "aman": 14886, + "▁Supreme": 14887, + "atoes": 14888, + "▁steady": 14889, + "▁monthly": 14890, + "▁SOFTWARE": 14891, + "Die": 14892, + "▁applying": 14893, + "Dig": 14894, + "vier": 14895, + "▁горо": 14896, + "▁WH": 14897, + "▁minds": 14898, + "▁kam": 14899, + "▁expertise": 14900, + "▁notification": 14901, + ".-": 14902, + "▁deliber": 14903, + "▁HE": 14904, + "▁resist": 14905, + "outes": 14906, + "▁Howard": 14907, + "special": 14908, + "▁presentation": 14909, + "▁YouTube": 14910, + "mir": 14911, + "▁rust": 14912, + "▁nations": 14913, + "▁Gets": 14914, + "▁responses": 14915, + "arded": 14916, + "immer": 14917, + "▁reveal": 14918, + "▁Meg": 14919, + "▁todos": 14920, + "▁ade": 14921, + "ategories": 14922, + "▁payments": 14923, + "ôt": 14924, + "Enumer": 14925, + "▁platforms": 14926, + "▁lifetime": 14927, + "Complete": 14928, + "Quest": 14929, + "enders": 14930, + "▁cum": 14931, + "pler": 14932, + "▁appl": 14933, + "ährend": 14934, + "зь": 14935, + "enez": 14936, + "overty": 14937, + "ynchron": 14938, + "▁argued": 14939, + "▁Kath": 14940, + "▁synchron": 14941, + "▁Builder": 14942, + "Border": 14943, + "Plan": 14944, + "rieb": 14945, + "nm": 14946, + "FORMAT": 14947, + "usk": 14948, + "▁jumped": 14949, + "charg": 14950, + "▁contribute": 14951, + "Mesh": 14952, + "Univers": 14953, + "rell": 14954, + "▁polar": 14955, + "▁trois": 14956, + "icio": 14957, + "Groups": 14958, + "▁(%": 14959, + "Loop": 14960, + "▁gaz": 14961, + "dbg": 14962, + "LAY": 14963, + "John": 14964, + "blocks": 14965, + "▁lung": 14966, + "▁kön": 14967, + "through": 14968, + "▁fifth": 14969, + "lisher": 14970, + "▁involving": 14971, + "▁Deep": 14972, + "▁области": 14973, + "▁sull": 14974, + "Export": 14975, + "▁Kate": 14976, + "period": 14977, + "charge": 14978, + "GT": 14979, + "\">\r": 14980, + "тин": 14981, + "▁Ott": 14982, + "▁interactions": 14983, + "▁Toronto": 14984, + "TRACE": 14985, + "▁difer": 14986, + "▁liberal": 14987, + "▁particle": 14988, + "▁surve": 14989, + "alous": 14990, + "reason": 14991, + "▁depression": 14992, + "ал": 14993, + "▁flower": 14994, + "▁waar": 14995, + "▁hade": 14996, + "▁centuries": 14997, + "uty": 14998, + "party": 14999, + "▁approval": 15000, + "generate": 15001, + "▁Barn": 15002, + "▁marg": 15003, + "▁monde": 15004, + "▁ook": 15005, + "▁Clark": 15006, + "▁theoret": 15007, + "viously": 15008, + "?)": 15009, + "▁Rud": 15010, + "stmt": 15011, + "inction": 15012, + "▁tun": 15013, + "▁roads": 15014, + "▁rotation": 15015, + "ppen": 15016, + "sensor": 15017, + "▁Kol": 15018, + "idelines": 15019, + "▁є": 15020, + "▁composed": 15021, + "▁virus": 15022, + "'$": 15023, + "SN": 15024, + "▁Von": 15025, + "mont": 15026, + "lar": 15027, + "▁opinions": 15028, + "uction": 15029, + "rupal": 15030, + "underline": 15031, + "▁horror": 15032, + "Must": 15033, + "otto": 15034, + "Should": 15035, + "▁statist": 15036, + "▁gem": 15037, + "▁secre": 15038, + "▁strip": 15039, + "▁dirt": 15040, + "amazon": 15041, + "▁Round": 15042, + "▁discovery": 15043, + "▁GO": 15044, + "▁substantial": 15045, + "ibt": 15046, + "▁demands": 15047, + "▁everyday": 15048, + "▁besch": 15049, + "▁Bridge": 15050, + "▁HD": 15051, + "▁Dol": 15052, + "▁très": 15053, + "anni": 15054, + "roit": 15055, + "());\r": 15056, + "far": 15057, + "timestamp": 15058, + "▁bulk": 15059, + "Black": 15060, + "▁gan": 15061, + "setting": 15062, + "retval": 15063, + "ване": 15064, + "nung": 15065, + "▁talks": 15066, + "▁scientists": 15067, + "▁vig": 15068, + "▁quantity": 15069, + "▁Gard": 15070, + "▁movements": 15071, + "ähr": 15072, + "lings": 15073, + "▁Те": 15074, + "team": 15075, + "rito": 15076, + "▁assembly": 15077, + "ilst": 15078, + "▁happiness": 15079, + "▁leaf": 15080, + "▁assessment": 15081, + "Coord": 15082, + "irs": 15083, + "sam": 15084, + "▁attorney": 15085, + "▁geme": 15086, + "IDE": 15087, + "▁Vere": 15088, + "▁Anthony": 15089, + "amiento": 15090, + "▁Ast": 15091, + "▁circul": 15092, + "▁Frances": 15093, + "▁pent": 15094, + "▁mate": 15095, + "▁Transport": 15096, + "owo": 15097, + "чу": 15098, + "istes": 15099, + "TRAN": 15100, + "IMPORT": 15101, + "▁Break": 15102, + "▁sons": 15103, + "▁investors": 15104, + "▁Philipp": 15105, + "THOD": 15106, + "▁panic": 15107, + "▁:)": 15108, + "▁detection": 15109, + "▁simultane": 15110, + "nte": 15111, + "▁listened": 15112, + "кре": 15113, + "▁Brig": 15114, + "Optional": 15115, + "▁abund": 15116, + "▁criteria": 15117, + "▁chip": 15118, + "▁окру": 15119, + "▁Constant": 15120, + "▁mining": 15121, + "тал": 15122, + "mates": 15123, + "▁worship": 15124, + "router": 15125, + "CN": 15126, + "▁Match": 15127, + "▁Cole": 15128, + "▁downt": 15129, + "▁holes": 15130, + "▁grateful": 15131, + "RESULT": 15132, + "▁Europa": 15133, + "▁consent": 15134, + "lä": 15135, + "opter": 15136, + "▁colleagues": 15137, + "orous": 15138, + "▁enemies": 15139, + "hang": 15140, + "actual": 15141, + "Objects": 15142, + "▁як": 15143, + "▁fluid": 15144, + "fixed": 15145, + "▁Graph": 15146, + "▁scratch": 15147, + "cers": 15148, + "ribu": 15149, + "▁validation": 15150, + "▁completion": 15151, + "▁Begin": 15152, + "endpoint": 15153, + "rient": 15154, + "CM": 15155, + "▁Site": 15156, + "▁explains": 15157, + "tres": 15158, + "▁anybody": 15159, + "foreach": 15160, + "lon": 15161, + "Chain": 15162, + "▁Buff": 15163, + "ocal": 15164, + "▁Morgan": 15165, + "▁sang": 15166, + "▁passes": 15167, + "@@": 15168, + "ijd": 15169, + "Word": 15170, + "▁Hung": 15171, + "▁Fer": 15172, + "▁vý": 15173, + "bast": 15174, + "▁entertainment": 15175, + "hin": 15176, + "▁grat": 15177, + "▁Member": 15178, + "▁Minn": 15179, + "▁printed": 15180, + "▁Franklin": 15181, + "▁Imp": 15182, + "Machine": 15183, + "columns": 15184, + "▁deleted": 15185, + "▁manufacturing": 15186, + "▁rely": 15187, + "▁conse": 15188, + "▁fishing": 15189, + "blo": 15190, + "-$": 15191, + "▁.\"": 15192, + "▁clinical": 15193, + "▁Studies": 15194, + "▁Бу": 15195, + "definition": 15196, + "▁evaluation": 15197, + "▁attacked": 15198, + "▁frozen": 15199, + "zent": 15200, + "▁últ": 15201, + "▁rational": 15202, + "othe": 15203, + "Cancel": 15204, + "history": 15205, + "setText": 15206, + "▁alc": 15207, + "▁hydro": 15208, + "▁Theatre": 15209, + "▁Material": 15210, + "IOException": 15211, + "******/": 15212, + "spl": 15213, + "NODE": 15214, + "attrs": 15215, + "▁mie": 15216, + "▁offices": 15217, + "ró": 15218, + "▁jam": 15219, + "▁Ident": 15220, + "vé": 15221, + "Setting": 15222, + "▁Several": 15223, + "▁decay": 15224, + "Android": 15225, + "▁Save": 15226, + "unted": 15227, + "▁Mountain": 15228, + "usc": 15229, + "▁marzo": 15230, + "▁asleep": 15231, + "▁soldier": 15232, + "▁Double": 15233, + "PK": 15234, + "▁contrad": 15235, + "▁wins": 15236, + "ceiver": 15237, + "▁seasons": 15238, + "▁Chall": 15239, + "▁healthcare": 15240, + "ład": 15241, + "от": 15242, + "▁Five": 15243, + "▁Hell": 15244, + "▁worldwide": 15245, + "▁',": 15246, + "ян": 15247, + "made": 15248, + "▁responded": 15249, + "▁ay": 15250, + "▁procedures": 15251, + "тера": 15252, + "▁cleared": 15253, + "\"].": 15254, + "▁Target": 15255, + "▁Side": 15256, + "omin": 15257, + "▁deploy": 15258, + "▁Tell": 15259, + "▁ongoing": 15260, + "floor": 15261, + "▁bones": 15262, + "▁Delete": 15263, + "▁shrugged": 15264, + "Our": 15265, + "Der": 15266, + "▁initialize": 15267, + "▁Ted": 15268, + "MAGE": 15269, + "▁hire": 15270, + "▁tracking": 15271, + "▁ash": 15272, + "▁ceiling": 15273, + "ках": 15274, + "etti": 15275, + "▁courage": 15276, + "enschapp": 15277, + "ются": 15278, + "More": 15279, + "▁folg": 15280, + "▁Grace": 15281, + "▁Kelly": 15282, + "▁reven": 15283, + "▁Ali": 15284, + "▁disp": 15285, + "▁defeat": 15286, + "▁creature": 15287, + "▁Kennedy": 15288, + "▁Diego": 15289, + "EMP": 15290, + "▁steam": 15291, + "endance": 15292, + "rig": 15293, + "▁ignor": 15294, + "emen": 15295, + "▁Gru": 15296, + "▁proposal": 15297, + "▁weiter": 15298, + "▁лі": 15299, + "ibles": 15300, + "▁consideration": 15301, + "▁believes": 15302, + "▁Soph": 15303, + "“,": 15304, + "▁Matthew": 15305, + "▁circuit": 15306, + "▁singer": 15307, + "▁Square": 15308, + "ço": 15309, + "Edge": 15310, + "▁astr": 15311, + "▁representative": 15312, + "▁comprehensive": 15313, + "liga": 15314, + "▁mere": 15315, + "tbl": 15316, + "▁continuing": 15317, + "ographer": 15318, + "LED": 15319, + "▁/***/": 15320, + "▁sear": 15321, + "▁enormous": 15322, + "izi": 15323, + "Dit": 15324, + "there": 15325, + "ін": 15326, + "сите": 15327, + "▁guerra": 15328, + "▁endpoint": 15329, + "▁lesson": 15330, + "zon": 15331, + "variable": 15332, + "ис": 15333, + "▁researchers": 15334, + "▁attempted": 15335, + "▁enf": 15336, + "тура": 15337, + "▁defin": 15338, + "вест": 15339, + "▁awful": 15340, + "▁lowest": 15341, + "rules": 15342, + "▁unlike": 15343, + "interval": 15344, + "▁producing": 15345, + "▁Kam": 15346, + "▁IMP": 15347, + "General": 15348, + "▁faire": 15349, + "▁maxim": 15350, + "assemb": 15351, + "acent": 15352, + "?>": 15353, + "plica": 15354, + "▁ram": 15355, + "mate": 15356, + "цу": 15357, + "mn": 15358, + "▁Hi": 15359, + "▁stages": 15360, + "▁Editor": 15361, + "▁tang": 15362, + "RD": 15363, + "▁ich": 15364, + "▁dependent": 15365, + "lifer": 15366, + "ascript": 15367, + "▁exposure": 15368, + "рез": 15369, + "▁mart": 15370, + "▁Barcel": 15371, + "xspace": 15372, + "SESSION": 15373, + "▁prest": 15374, + "URCE": 15375, + "-.": 15376, + "▁село": 15377, + "have": 15378, + "▁observation": 15379, + "▁commands": 15380, + "▁eager": 15381, + "▁outdoor": 15382, + "▁DEBUG": 15383, + "▁hr": 15384, + "AX": 15385, + "▁puzz": 15386, + "blank": 15387, + "бур": 15388, + "▁kennis": 15389, + "▁regarded": 15390, + "▁}),": 15391, + "volume": 15392, + "▁произ": 15393, + "▁Training": 15394, + "añ": 15395, + "▁fois": 15396, + "▁три": 15397, + "вня": 15398, + "▁optimal": 15399, + "▁subscription": 15400, + "bridge": 15401, + "imental": 15402, + "▁Think": 15403, + "▁\";": 15404, + "▁legisl": 15405, + "▁Hop": 15406, + "▁branches": 15407, + "▁Veg": 15408, + "▁sprint": 15409, + "▁flux": 15410, + "▁Freder": 15411, + "sis": 15412, + "notify": 15413, + "▁Фран": 15414, + "som": 15415, + "nym": 15416, + "▁Ré": 15417, + "lett": 15418, + "ingham": 15419, + "▁Farm": 15420, + "DOM": 15421, + "▁shield": 15422, + "Here": 15423, + "▁Treat": 15424, + "▁Luke": 15425, + "▁unsafe": 15426, + "anton": 15427, + "▁Imper": 15428, + "▁telephone": 15429, + "▁unlock": 15430, + "Owner": 15431, + "collection": 15432, + "▁snd": 15433, + "▁suiv": 15434, + "▁entering": 15435, + "шен": 15436, + "▁Label": 15437, + "selector": 15438, + "▁GET": 15439, + "▁quando": 15440, + "▁fed": 15441, + "jQuery": 15442, + "Origin": 15443, + "▁Alan": 15444, + "mathscr": 15445, + "▁pregnant": 15446, + "Expect": 15447, + "resources": 15448, + "▁ersten": 15449, + "alia": 15450, + "▁retired": 15451, + "ût": 15452, + "Cred": 15453, + "▁méd": 15454, + "▁erh": 15455, + "Framework": 15456, + "Slot": 15457, + "duration": 15458, + "sal": 15459, + "▁composition": 15460, + "article": 15461, + "gpu": 15462, + "▁permitted": 15463, + "▁Font": 15464, + "▁Much": 15465, + "▁pending": 15466, + "▁agencies": 15467, + "Columns": 15468, + "▁klik": 15469, + "▁rating": 15470, + "mind": 15471, + "▁Pennsylvania": 15472, + "Java": 15473, + "abstract": 15474, + "▁dumb": 15475, + "▁VI": 15476, + "usa": 15477, + "Remote": 15478, + "▁YOU": 15479, + "▁Creek": 15480, + "мати": 15481, + "Bottom": 15482, + "▁rolling": 15483, + "▁bundle": 15484, + "▁golf": 15485, + "gpio": 15486, + "▁Chair": 15487, + "▁cls": 15488, + "$}": 15489, + "▁Parliament": 15490, + "führ": 15491, + "Many": 15492, + "▁Sep": 15493, + "▁badly": 15494, + "igi": 15495, + "▁Gemeinde": 15496, + "Ill": 15497, + "▁Ан": 15498, + "uart": 15499, + "itempty": 15500, + "▁Niger": 15501, + "▁immigr": 15502, + "Super": 15503, + "vá": 15504, + "istribute": 15505, + "Helpers": 15506, + "▁waters": 15507, + "▁joining": 15508, + "omitempty": 15509, + "▁Otherwise": 15510, + "▁Host": 15511, + "▁redd": 15512, + "▁dy": 15513, + "▁converted": 15514, + "▁prayer": 15515, + "▁Украї": 15516, + "▁elections": 15517, + "reb": 15518, + "erie": 15519, + "▁свя": 15520, + "Abs": 15521, + "iembre": 15522, + "holders": 15523, + "▁Rol": 15524, + "utschen": 15525, + "▁Gh": 15526, + "tery": 15527, + "анг": 15528, + "▁narrative": 15529, + "minus": 15530, + "▁Iron": 15531, + "=\"#": 15532, + "▁wand": 15533, + "▁wished": 15534, + "icode": 15535, + "orr": 15536, + "[[": 15537, + "▁detected": 15538, + "▁municipal": 15539, + "▁Pour": 15540, + "▁Serv": 15541, + "citet": 15542, + "▁grey": 15543, + "▁Rap": 15544, + "▁voy": 15545, + "▁lleg": 15546, + "▁currency": 15547, + "▁Script": 15548, + "strument": 15549, + "▁expecting": 15550, + "▁tickets": 15551, + "▁bucket": 15552, + "egr": 15553, + "▁jacket": 15554, + "drv": 15555, + "▁loans": 15556, + "▁kann": 15557, + "▁integral": 15558, + "▁characteristics": 15559, + "(\".": 15560, + "▁manual": 15561, + "▁dynamics": 15562, + ":*": 15563, + "sha": 15564, + "reens": 15565, + "onical": 15566, + "▁toile": 15567, + "aña": 15568, + "▁distant": 15569, + "▁handled": 15570, + "Bool": 15571, + "▁penal": 15572, + "▁Things": 15573, + "▁prominent": 15574, + "▁exped": 15575, + "▁Help": 15576, + "▁asp": 15577, + "lap": 15578, + "▁Auth": 15579, + "Basic": 15580, + "achuset": 15581, + "▁Bild": 15582, + "▁entitled": 15583, + "▁jag": 15584, + "▁rejected": 15585, + "▁memor": 15586, + "orts": 15587, + "▁applies": 15588, + "▁Language": 15589, + "specific": 15590, + "achusetts": 15591, + "HAND": 15592, + "▁Route": 15593, + "market": 15594, + "▁Ky": 15595, + "▁pose": 15596, + "ACHE": 15597, + "poll": 15598, + "▁rocks": 15599, + "bone": 15600, + "▁DIS": 15601, + "Watch": 15602, + "▁smiling": 15603, + "рио": 15604, + "Month": 15605, + "▁efter": 15606, + "construct": 15607, + "▁bands": 15608, + "▁collaboration": 15609, + "ними": 15610, + "glas": 15611, + "▁vy": 15612, + "▁engagement": 15613, + "__)": 15614, + "▁wings": 15615, + "ким": 15616, + "netje": 15617, + "ativa": 15618, + "▁Duke": 15619, + "лее": 15620, + "▁Within": 15621, + "▁dove": 15622, + "▁cb": 15623, + "yers": 15624, + "pow": 15625, + "[(": 15626, + "▁evaluate": 15627, + "Points": 15628, + "▁рі": 15629, + "odigd": 15630, + "onomy": 15631, + "▁Illinois": 15632, + "▁Typ": 15633, + "▁coordinates": 15634, + "pisode": 15635, + "ucked": 15636, + "▁flav": 15637, + "▁brands": 15638, + "▁calendar": 15639, + "Lib": 15640, + "▁uitgen": 15641, + "▁tale": 15642, + "▁briefly": 15643, + "▁mic": 15644, + "RESS": 15645, + "▁später": 15646, + "▁integrated": 15647, + "▁cookies": 15648, + "▁uitgenodigd": 15649, + "▁Priv": 15650, + "▁phenomen": 15651, + "▁voegen": 15652, + "Supp": 15653, + "▁refers": 15654, + "пад": 15655, + "▁Clinton": 15656, + "▁assignment": 15657, + "inals": 15658, + "▁asym": 15659, + "cycle": 15660, + "▁Anderson": 15661, + "▁binding": 15662, + "rique": 15663, + "hind": 15664, + "▁behalf": 15665, + "▁Fle": 15666, + "▁breaks": 15667, + "▁soap": 15668, + "вар": 15669, + "▁vä": 15670, + "▁crying": 15671, + "▁→": 15672, + "▁msm": 15673, + "▁boots": 15674, + "owing": 15675, + "▁bell": 15676, + "suite": 15677, + "▁Bundes": 15678, + "Year": 15679, + "ndef": 15680, + "Other": 15681, + "▁google": 15682, + "ENCE": 15683, + "WER": 15684, + "Les": 15685, + "Shared": 15686, + "▁ED": 15687, + "IFT": 15688, + "▁floating": 15689, + "ým": 15690, + "{},": 15691, + "Binary": 15692, + "▁roce": 15693, + "raj": 15694, + "▁bewerken": 15695, + "BF": 15696, + "▁Hur": 15697, + "cen": 15698, + "▁ere": 15699, + "▁camb": 15700, + "▁Pakistan": 15701, + "▁greatly": 15702, + "▁logging": 15703, + "/.": 15704, + "Tensor": 15705, + "▁opens": 15706, + "▁Rio": 15707, + "▁klikken": 15708, + "▁sculpt": 15709, + "apore": 15710, + "wx": 15711, + "▁Nich": 15712, + "nan": 15713, + "▁injured": 15714, + "compare": 15715, + "tha": 15716, + "Sample": 15717, + "Shell": 15718, + "▁commander": 15719, + "▁receiver": 15720, + "▁hopes": 15721, + "▁byl": 15722, + "▁proxy": 15723, + "▁gall": 15724, + "getId": 15725, + "▁Bab": 15726, + "feld": 15727, + "▁\"_": 15728, + "▁Hab": 15729, + "simple": 15730, + "▁executed": 15731, + "▁ate": 15732, + "▁animation": 15733, + "▁inhab": 15734, + "▁боль": 15735, + "▁router": 15736, + "▁glob": 15737, + "Geplaatst": 15738, + "▁beginnetje": 15739, + "▁Kur": 15740, + "▁Ха": 15741, + "aligned": 15742, + "▁certificate": 15743, + "▁Å": 15744, + ".).": 15745, + "▁soll": 15746, + "▁Import": 15747, + "реди": 15748, + "▁pandemic": 15749, + "▁nic": 15750, + "vä": 15751, + "▁Gree": 15752, + "▁Say": 15753, + "▁ді": 15754, + "▁Num": 15755, + "▁roughly": 15756, + "▁después": 15757, + "▁​": 15758, + "▁specify": 15759, + "Mapper": 15760, + "licht": 15761, + "▁thumb": 15762, + "wie": 15763, + "▁unlikely": 15764, + "▁Edd": 15765, + "Hey": 15766, + "▁Opt": 15767, + "BLOCK": 15768, + "вор": 15769, + "▁×": 15770, + "▁ba": 15771, + "▁periods": 15772, + "▁titles": 15773, + "Med": 15774, + "▁fon": 15775, + "▁bast": 15776, + "▁Forest": 15777, + "▁№": 15778, + "onds": 15779, + "▁fal": 15780, + "▁gesch": 15781, + "direction": 15782, + "IFY": 15783, + "▁LA": 15784, + "▁(((": 15785, + "GTH": 15786, + "itudes": 15787, + "▁destruction": 15788, + "▁Ja": 15789, + "▁stake": 15790, + "ifferent": 15791, + "▁identical": 15792, + "▁fog": 15793, + "▁Reb": 15794, + "ские": 15795, + "ступ": 15796, + "jax": 15797, + "▁Mars": 15798, + "▁historic": 15799, + "▁Vo": 15800, + "▁entrepre": 15801, + "▁tension": 15802, + "▁WHERE": 15803, + "▁Philadelphia": 15804, + "Counter": 15805, + "▁frames": 15806, + "▁muy": 15807, + "ej": 15808, + "öt": 15809, + "eu": 15810, + "▁челове": 15811, + "PROC": 15812, + "▁resolved": 15813, + "▁tape": 15814, + "цион": 15815, + "▁singular": 15816, + "▁personnel": 15817, + "▁Mun": 15818, + "▁Occ": 15819, + "▁scalar": 15820, + "dess": 15821, + "▁cable": 15822, + "being": 15823, + "▁Jenn": 15824, + "▁erst": 15825, + "Actions": 15826, + "Environment": 15827, + "via": 15828, + "▁struggling": 15829, + "▁DVD": 15830, + "whe": 15831, + "▁throwing": 15832, + "Bounds": 15833, + "▁MD": 15834, + "▁\"../": 15835, + "▁satisfy": 15836, + "▁Colorado": 15837, + "▁Active": 15838, + "Tasks": 15839, + "<>();": 15840, + "▁slipped": 15841, + "▁poison": 15842, + "zb": 15843, + "Dispatch": 15844, + "warning": 15845, + "▁ultimate": 15846, + "picture": 15847, + "expression": 15848, + "▁Talk": 15849, + "▁flick": 15850, + "▁raising": 15851, + "▁transactions": 15852, + "▁glance": 15853, + "▁gri": 15854, + "▁през": 15855, + "selection": 15856, + "ња": 15857, + "endl": 15858, + "▁Abb": 15859, + "▁bold": 15860, + "▁maintained": 15861, + "Exists": 15862, + "▁encouraged": 15863, + "Qual": 15864, + "▁essere": 15865, + "▁hired": 15866, + "letter": 15867, + "itches": 15868, + "others": 15869, + "▁woj": 15870, + "▁injuries": 15871, + "▁dil": 15872, + "execut": 15873, + "▁Steel": 15874, + "▁Garden": 15875, + "зя": 15876, + "\\,\\": 15877, + "▁Angel": 15878, + "prim": 15879, + ">:]<": 15880, + "gb": 15881, + "peat": 15882, + "inte": 15883, + "▁apolog": 15884, + "▁regulations": 15885, + "Src": 15886, + "kh": 15887, + "Upload": 15888, + "mapping": 15889, + "▁presents": 15890, + "▁poetry": 15891, + "▁stops": 15892, + "▁Tol": 15893, + "▁tower": 15894, + "▁OUT": 15895, + "Thank": 15896, + "▁organic": 15897, + "▁drei": 15898, + "▁pound": 15899, + "century": 15900, + "▁modules": 15901, + "▁дере": 15902, + "▁worn": 15903, + "▁parad": 15904, + "▁Cos": 15905, + "fic": 15906, + "▁без": 15907, + "▁Jimmy": 15908, + "▁lands": 15909, + "▁minist": 15910, + "vspace": 15911, + "▁lighting": 15912, + "▁naked": 15913, + "▁designer": 15914, + "▁Stream": 15915, + "TMP": 15916, + "Center": 15917, + "resentation": 15918, + "ONT": 15919, + "▁ers": 15920, + "▁measurement": 15921, + "▁muscles": 15922, + "▁Ign": 15923, + "▁COM": 15924, + "▁fru": 15925, + "▁genre": 15926, + "▁alpha": 15927, + "▁retirement": 15928, + "▁Gon": 15929, + "ől": 15930, + "contents": 15931, + "▁healing": 15932, + "▁sido": 15933, + "incipal": 15934, + "Permission": 15935, + "рак": 15936, + "▁Gordon": 15937, + "▁Rank": 15938, + "▁Autom": 15939, + "Constructor": 15940, + "wiki": 15941, + "▁concerning": 15942, + "rizona": 15943, + "▁variant": 15944, + "▁arranged": 15945, + "▁Spr": 15946, + "BPACK": 15947, + "Timestamp": 15948, + "restore": 15949, + "aware": 15950, + "▁Observ": 15951, + "▁SV": 15952, + "ipp": 15953, + "▁Executive": 15954, + "▁colleg": 15955, + "▁explicitly": 15956, + "written": 15957, + "▁Kön": 15958, + "irus": 15959, + "▁Hold": 15960, + "▁Pract": 15961, + "Character": 15962, + "▁redistribute": 15963, + "uerto": 15964, + "▁Student": 15965, + "▁elder": 15966, + "▁Dop": 15967, + "vp": 15968, + "▁Hub": 15969, + "▁grounds": 15970, + "▁Ry": 15971, + "▁signals": 15972, + "▁gifts": 15973, + "▁strengthen": 15974, + "▁Lyn": 15975, + "commun": 15976, + "▁най": 15977, + "▁finance": 15978, + "noc": 15979, + "helm": 15980, + "▁cuts": 15981, + "▁adventure": 15982, + "▁Ric": 15983, + "▁intellectual": 15984, + "▁Output": 15985, + "▁awk": 15986, + "▁concentration": 15987, + "▁guidance": 15988, + "Buff": 15989, + "▁filling": 15990, + "▁regul": 15991, + "▁delicious": 15992, + "([]": 15993, + "ших": 15994, + "▁tons": 15995, + "activity": 15996, + "GP": 15997, + "LOB": 15998, + "stadt": 15999, + "tal": 16000, + "▁img": 16001, + "▁rush": 16002, + "attice": 16003, + "▁pok": 16004, + "steps": 16005, + "▁lid": 16006, + "▁DNA": 16007, + "Browser": 16008, + "▁ladies": 16009, + "▁années": 16010, + "▁rescue": 16011, + "avity": 16012, + "rock": 16013, + "▁glasses": 16014, + "▁Bey": 16015, + ")}$": 16016, + "detail": 16017, + "▁dés": 16018, + "tax": 16019, + "▁favourite": 16020, + "▁precision": 16021, + "▁conoc": 16022, + "Ms": 16023, + "▁Native": 16024, + "▁Pil": 16025, + "InputStream": 16026, + "orp": 16027, + "▁Pap": 16028, + "▁picking": 16029, + "iph": 16030, + "Loading": 16031, + "▁priest": 16032, + "Hook": 16033, + "▁pist": 16034, + "▁Une": 16035, + "%,": 16036, + "▁bil": 16037, + "▁conservative": 16038, + "eval": 16039, + "iking": 16040, + "'},": 16041, + "▁sauce": 16042, + "▁Due": 16043, + "assen": 16044, + "▁occasionally": 16045, + "▁Дж": 16046, + "unknown": 16047, + "DED": 16048, + "▁drum": 16049, + "▁dub": 16050, + "ATURE": 16051, + "usage": 16052, + "getType": 16053, + "reply": 16054, + "▁strategic": 16055, + "▁kap": 16056, + "design": 16057, + "datetime": 16058, + "▁Prim": 16059, + "Master": 16060, + "▁Corps": 16061, + "▁considerable": 16062, + "▁Tu": 16063, + "▁ла": 16064, + "▁tous": 16065, + "▁clar": 16066, + "▁poem": 16067, + "album": 16068, + "]*": 16069, + "loaded": 16070, + "▁traveling": 16071, + "вые": 16072, + "▁Ferr": 16073, + "▁pharm": 16074, + "abi": 16075, + "▁}\\": 16076, + "collect": 16077, + "▁Bour": 16078, + "OC": 16079, + "▁measurements": 16080, + "▁Professional": 16081, + "▁sensor": 16082, + "utsche": 16083, + "▁demanded": 16084, + "▁accompanied": 16085, + "▁prend": 16086, + "▁encoding": 16087, + "▁Geschichte": 16088, + "▁mig": 16089, + "▁Gib": 16090, + "▁Reich": 16091, + "▁myster": 16092, + "▁Mock": 16093, + "▁physically": 16094, + "▁Bau": 16095, + "▁Single": 16096, + "▁managing": 16097, + "▁Kil": 16098, + "▁Temple": 16099, + "▁lev": 16100, + "▁lí": 16101, + "CPU": 16102, + "▁Premier": 16103, + "▁Give": 16104, + "iri": 16105, + "NV": 16106, + "▁AI": 16107, + "▁fp": 16108, + "лександ": 16109, + "▁tant": 16110, + "▁fot": 16111, + "Nullable": 16112, + "▁guards": 16113, + "Once": 16114, + "▁chamber": 16115, + "film": 16116, + "▁bias": 16117, + "▁Tai": 16118, + "insic": 16119, + "▁ml": 16120, + "▁Ka": 16121, + "вал": 16122, + "▁SER": 16123, + "▁Someone": 16124, + "}}_{": 16125, + "Fixed": 16126, + "▁bent": 16127, + "▁prohib": 16128, + "▁bid": 16129, + "▁fewer": 16130, + "кры": 16131, + "▁lugar": 16132, + "▁deserve": 16133, + "ssl": 16134, + "▁cfg": 16135, + "reck": 16136, + "▁stability": 16137, + "resize": 16138, + "▁assertThat": 16139, + "Trigger": 16140, + "▁станов": 16141, + "plugins": 16142, + "▁lets": 16143, + "хід": 16144, + "▁Laura": 16145, + "нер": 16146, + "▁brut": 16147, + "▁FI": 16148, + "isons": 16149, + "▁dyn": 16150, + "icher": 16151, + "rayed": 16152, + "▁frequent": 16153, + "▁jedoch": 16154, + "▁Marine": 16155, + "strings": 16156, + "▁Util": 16157, + "▁bos": 16158, + "Mus": 16159, + "▁Portugal": 16160, + "Strategy": 16161, + "▁посе": 16162, + "▁slice": 16163, + "▁insight": 16164, + "▁widget": 16165, + "▁général": 16166, + "messages": 16167, + "▁Hu": 16168, + "▁requirement": 16169, + "Side": 16170, + "emplates": 16171, + "▁ceremony": 16172, + "▁physics": 16173, + "▁graduate": 16174, + "para": 16175, + "▁preserv": 16176, + "▁shops": 16177, + "zek": 16178, + "▁ub": 16179, + "prepare": 16180, + "▁Oil": 16181, + "▁fib": 16182, + "▁runtime": 16183, + "▁hogy": 16184, + "Warning": 16185, + "▁Convert": 16186, + "bourne": 16187, + "▁emerged": 16188, + "▁Ди": 16189, + "ighth": 16190, + "guard": 16191, + "kal": 16192, + "validation": 16193, + "ência": 16194, + "▁drinks": 16195, + "theorem": 16196, + "HR": 16197, + "iev": 16198, + "ployee": 16199, + "Usage": 16200, + "▁спе": 16201, + "dispatch": 16202, + "▁instantly": 16203, + "obi": 16204, + "▁justify": 16205, + "▁Nev": 16206, + "▁явля": 16207, + "agra": 16208, + "▁transmission": 16209, + "fly": 16210, + ";';": 17021, + "▁cousin": 17022, + "createElement": 17023, + "Could": 17024, + "▁capac": 17025, + "▁pause": 17026, + "ArrayList": 17027, + "kte": 17028, + "ordered": 17029, + "▁shaking": 17030, + "labels": 17031, + "▁reducing": 17032, + "вых": 17033, + "USED": 17034, + "▁voting": 17035, + "▁Ministry": 17036, + "▁Mig": 17037, + "▁Chen": 17038, + "▁accompany": 17039, + "ulle": 17040, + "▁ga": 17041, + "▁equipped": 17042, + "▁nun": 17043, + "Bet": 17044, + "▁licensed": 17045, + "ARCH": 17046, + "FN": 17047, + "▁engines": 17048, + "▁ster": 17049, + "▁locale": 17050, + "▁въ": 17051, + "links": 17052, + "▁Capital": 17053, + "▁alien": 17054, + "Wr": 17055, + "ръ": 17056, + "Cart": 17057, + "▁Marketing": 17058, + "▁RT": 17059, + "FileName": 17060, + "▁ti": 17061, + "iji": 17062, + "▁versus": 17063, + "live": 17064, + "Sym": 17065, + "kor": 17066, + "▁emission": 17067, + "umm": 17068, + "ycz": 17069, + "▁climbed": 17070, + "▁plusieurs": 17071, + "кри": 17072, + "yar": 17073, + "osten": 17074, + "▁usb": 17075, + "▁crossing": 17076, + "▁polynom": 17077, + "▁removal": 17078, + "▁Adams": 17079, + "▁ihre": 17080, + "anden": 17081, + "▁Benj": 17082, + "▁Phill": 17083, + "▁wounded": 17084, + "▁Castle": 17085, + "bild": 17086, + "Annotation": 17087, + "Processor": 17088, + "▁tin": 17089, + "folg": 17090, + "▁Students": 17091, + "▁Mexican": 17092, + "▁administrative": 17093, + "ILED": 17094, + "▁conqu": 17095, + "▁cheer": 17096, + "▁Ces": 17097, + "Because": 17098, + "▁Juni": 17099, + "▁encontr": 17100, + "avi": 17101, + "VI": 17102, + "aku": 17103, + "▁Ton": 17104, + "▁smoking": 17105, + "▁bay": 17106, + "works": 17107, + "ат": 17108, + "attered": 17109, + "▁Boolean": 17110, + "▁Balt": 17111, + "defer": 17112, + "pathy": 17113, + "Ah": 17114, + "▁akt": 17115, + "▁governor": 17116, + "Pad": 17117, + "▁sisters": 17118, + "Lat": 17119, + "▁revel": 17120, + "▁SY": 17121, + "itos": 17122, + "▁filters": 17123, + "Chunk": 17124, + "consum": 17125, + "▁removing": 17126, + "▁Herr": 17127, + "▁generator": 17128, + "▁Cra": 17129, + "▁farmers": 17130, + "▁Members": 17131, + "▁overcome": 17132, + "▁Cin": 17133, + "igkeit": 17134, + "criptions": 17135, + "Tests": 17136, + "▁клу": 17137, + "▁shake": 17138, + "▁yy": 17139, + "placement": 17140, + "▁awards": 17141, + "▁episodes": 17142, + "▁Blood": 17143, + "▁bullet": 17144, + "▁viene": 17145, + "▁Financial": 17146, + "Future": 17147, + "▁rou": 17148, + "▁biologie": 17149, + "▁useState": 17150, + "iani": 17151, + "piece": 17152, + "▁speaker": 17153, + "▁refr": 17154, + "ARK": 17155, + "▁MIT": 17156, + "▁Tan": 17157, + "▁Based": 17158, + "▁cultiv": 17159, + "▁hungry": 17160, + "▁Ay": 17161, + "▁Hey": 17162, + "▁excitement": 17163, + "ibraries": 17164, + "Hit": 17165, + "▁Ende": 17166, + "NG": 17167, + "FIL": 17168, + ".\")": 17169, + "Family": 17170, + "inery": 17171, + "necess": 17172, + "velope": 17173, + "▁Bot": 17174, + "porter": 17175, + "▁climb": 17176, + "▁Eli": 17177, + "urent": 17178, + "▁mistakes": 17179, + "ában": 17180, + "marks": 17181, + "pkt": 17182, + "Library": 17183, + "sted": 17184, + "ublice": 17185, + "▁Administration": 17186, + "▁shapes": 17187, + "публи": 17188, + "God": 17189, + "innen": 17190, + "коло": 17191, + "<<<<": 17192, + "ibe": 17193, + "ês": 17194, + "▁США": 17195, + "▁Foreign": 17196, + "▁Margaret": 17197, + "▁gene": 17198, + "▁disturb": 17199, + "▁тер": 17200, + "▁onClick": 17201, + "▁Engineering": 17202, + "▁stopping": 17203, + "▁restrictions": 17204, + ",*": 17205, + "BUF": 17206, + "▁shadows": 17207, + "hci": 17208, + "▁Christians": 17209, + "▁fence": 17210, + "▁luxury": 17211, + "akh": 17212, + "coord": 17213, + "▁investigate": 17214, + "▁conventional": 17215, + "\"—": 17216, + "▁visits": 17217, + "isé": 17218, + "▁Sac": 17219, + "className": 17220, + "▁Psych": 17221, + "▁reflected": 17222, + "▁пло": 17223, + "▁Vice": 17224, + "ław": 17225, + "________________": 17226, + "▁Wolf": 17227, + "rente": 17228, + "▁Champion": 17229, + "▁simulation": 17230, + "esota": 17231, + "▁Soon": 17232, + "▁Cel": 17233, + "▁theories": 17234, + "▁STR": 17235, + "▁collective": 17236, + "▁coordinate": 17237, + "querySelector": 17238, + "emed": 17239, + "Break": 17240, + "▁gef": 17241, + "▁electricity": 17242, + "▁gathering": 17243, + "aters": 17244, + "exper": 17245, + "▁Roma": 17246, + "▁Cooper": 17247, + "SYMBOL": 17248, + "vd": 17249, + "iversary": 17250, + "aines": 17251, + "▁Grad": 17252, + "▁independence": 17253, + "woh": 17254, + "▁consequence": 17255, + "▁conversations": 17256, + "▁Rou": 17257, + "▁andere": 17258, + "▁Systems": 17259, + "гар": 17260, + "▁moist": 17261, + "flu": 17262, + "ція": 17263, + "ниш": 17264, + "▁rode": 17265, + "▁perd": 17266, + "▁szer": 17267, + "▁flood": 17268, + "▁intim": 17269, + "stderr": 17270, + "▁reflection": 17271, + "Scan": 17272, + "▁disaster": 17273, + "akespe": 17274, + "▁Invalid": 17275, + "▁humor": 17276, + "▁Friedrich": 17277, + "▁suggestions": 17278, + "uvud": 17279, + "Delay": 17280, + "brief": 17281, + "▁ис": 17282, + "glied": 17283, + "fas": 17284, + "▁Smart": 17285, + "▁medi": 17286, + "sdk": 17287, + "▁seus": 17288, + "▁Arizona": 17289, + "▁innocent": 17290, + "Warn": 17291, + "acious": 17292, + "▁Moscow": 17293, + "▁caps": 17294, + "Delegate": 17295, + "▁dramatic": 17296, + "books": 17297, + "▁shore": 17298, + "uki": 17299, + "▁Russell": 17300, + "▁correlation": 17301, + "Help": 17302, + "▁pubblic": 17303, + "zym": 17304, + "comb": 17305, + "EY": 17306, + "LENGTH": 17307, + "▁Mün": 17308, + "▁_.": 17309, + "▁ferm": 17310, + "▁Ian": 17311, + "▁Studio": 17312, + "▁affairs": 17313, + "los": 17314, + "Rules": 17315, + "running": 17316, + "▁Posted": 17317, + "Pixel": 17318, + "▁dancing": 17319, + "▁agreements": 17320, + "▁Pic": 17321, + "ancia": 17322, + "▁má": 17323, + "ationToken": 17324, + "descriptor": 17325, + "▁Carter": 17326, + "Release": 17327, + "************": 17328, + "▁outstanding": 17329, + "changes": 17330, + "ARRAY": 17331, + "▁Barbara": 17332, + "▁nurse": 17333, + "(\r": 17334, + "▁Douglas": 17335, + "▁nucle": 17336, + "ouri": 17337, + "▁Style": 17338, + "avo": 17339, + "▁painful": 17340, + "▁slic": 17341, + "▁seinem": 17342, + "SUPPORT": 17343, + "ogene": 17344, + "▁satell": 17345, + "tagon": 17346, + "▁collapse": 17347, + "velle": 17348, + "MON": 17349, + "aughters": 17350, + "▁threatened": 17351, + "▁Illegal": 17352, + "▁desperate": 17353, + "strict": 17354, + "rus": 17355, + "ститу": 17356, + "\\\":": 17357, + "▁conflic": 17358, + "download": 17359, + "atos": 17360, + "▁Position": 17361, + ".*;": 17362, + "▁theater": 17363, + "▁pleasant": 17364, + "▁Cette": 17365, + "▁Singapore": 17366, + "heet": 17367, + "▁pir": 17368, + "▁acquis": 17369, + "▁назва": 17370, + "теля": 17371, + "▁recru": 17372, + "жения": 17373, + "ёл": 17374, + "версите": 17375, + "▁respective": 17376, + "▁tunnel": 17377, + "▁Dean": 17378, + "Du": 17379, + "▁uncle": 17380, + "▁offensive": 17381, + "colo": 17382, + "▁Unlike": 17383, + "series": 17384, + "▁Arn": 17385, + "minute": 17386, + "▁descriptor": 17387, + "▁stones": 17388, + "ICATION": 17389, + "▁Pad": 17390, + "▁iPhone": 17391, + "ei": 17392, + "▁fantasy": 17393, + "▁Korean": 17394, + "\"}": 17395, + "▁orth": 17396, + "halten": 17397, + "deep": 17398, + "▁Kay": 17399, + "requency": 17400, + "▁duties": 17401, + "awt": 17402, + "▁nearest": 17403, + "▁disorder": 17404, + "стру": 17405, + "▁Chile": 17406, + "▁seq": 17407, + "▁transportation": 17408, + "OO": 17409, + "▁Dez": 17410, + "iju": 17411, + "▁Results": 17412, + "jed": 17413, + "ivel": 17414, + "HOST": 17415, + "▁€": 17416, + "▁Î": 17417, + "▁chin": 17418, + "▁matt": 17419, + "▁voted": 17420, + "▁gehör": 17421, + "▁▁▁▁▁▁▁▁▁▁▁": 17422, + "▁sue": 17423, + "▁legacy": 17424, + "вся": 17425, + "SOURCE": 17426, + "WORK": 17427, + "itis": 17428, + "▁$|": 17429, + "▁обо": 17430, + "▁nr": 17431, + "▁Tamb": 17432, + "▁snap": 17433, + "▁impressed": 17434, + "▁deposit": 17435, + "▁divid": 17436, + "Segment": 17437, + "▁кар": 17438, + "▁Gas": 17439, + "▁crimes": 17440, + "▁insult": 17441, + "▁Hum": 17442, + "▁bounded": 17443, + "▁kicked": 17444, + "▁Му": 17445, + "▁|\\": 17446, + "added": 17447, + "Produ": 17448, + "▁./": 17449, + "▁awkward": 17450, + "▁Кра": 17451, + "▁ї": 17452, + "▁CONTR": 17453, + "▁beim": 17454, + "▁placeholder": 17455, + "spi": 17456, + "▁Bei": 17457, + "▁Pf": 17458, + "ientes": 17459, + "disk": 17460, + "blk": 17461, + "neo": 17462, + "itarian": 17463, + "▁cogn": 17464, + "▁sout": 17465, + "▁trash": 17466, + "▁Rab": 17467, + "▁decline": 17468, + "tat": 17469, + "▁combine": 17470, + "▁Tot": 17471, + "▁drops": 17472, + "Times": 17473, + "cheduler": 17474, + "▁governments": 17475, + "Tex": 17476, + "▁Used": 17477, + "зан": 17478, + "▁pd": 17479, + "мет": 17480, + "▁&=&": 17481, + "▁Nag": 17482, + "▁дол": 17483, + "▁Always": 17484, + "rtc": 17485, + "ске": 17486, + "▁performances": 17487, + "rupted": 17488, + "▁два": 17489, + "▁managers": 17490, + "▁Pitt": 17491, + "▁mystery": 17492, + "▁settle": 17493, + "ulse": 17494, + "cross": 17495, + "question": 17496, + "asha": 17497, + "seed": 17498, + "urable": 17499, + "Final": 17500, + "++++": 17501, + "inputs": 17502, + "▁backup": 17503, + "▁Learning": 17504, + "▁*,": 17505, + "logo": 17506, + "▁seinen": 17507, + "▁vulnerable": 17508, + "directory": 17509, + "ië": 17510, + "▁friendship": 17511, + "tu": 17512, + "▁Vec": 17513, + "rifice": 17514, + "▁бра": 17515, + "▁involve": 17516, + "TON": 17517, + "▁corrid": 17518, + "separ": 17519, + "Destroy": 17520, + "▁jul": 17521, + "▁inequality": 17522, + "▁ain": 17523, + "hex": 17524, + "▁wider": 17525, + "тели": 17526, + "▁jack": 17527, + "▁quot": 17528, + "▁Glen": 17529, + "initely": 17530, + "ihood": 17531, + "▁waist": 17532, + "▁Manchester": 17533, + "regular": 17534, + "▁(&": 17535, + "▁masses": 17536, + "▁DEFAULT": 17537, + "▁chairs": 17538, + "▁Fast": 17539, + "▁citt": 17540, + "_{{\\": 17541, + "oa": 17542, + "▁$\\{": 17543, + "▁seeds": 17544, + "▁Ald": 17545, + "▁Batt": 17546, + "fab": 17547, + "▁democracy": 17548, + "DTO": 17549, + "▁Hij": 17550, + "PTR": 17551, + "Na": 17552, + "▁Harvard": 17553, + "sid": 17554, + "Pred": 17555, + "fers": 17556, + "▁spare": 17557, + "AMP": 17558, + "▁groupe": 17559, + "▁sender": 17560, + "▁Christopher": 17561, + "▁prisoners": 17562, + "▁Ker": 17563, + "▁Crist": 17564, + "▁ALL": 17565, + "rice": 17566, + "▁antes": 17567, + "natural": 17568, + "▁Susan": 17569, + "▁Juli": 17570, + "▁diab": 17571, + "ixon": 17572, + "icator": 17573, + "▁flexible": 17574, + "▁reserve": 17575, + "Contains": 17576, + "▁Hil": 17577, + "▁Isa": 17578, + "▁towns": 17579, + "GS": 17580, + "▁Trad": 17581, + "▁Lock": 17582, + "▁Grund": 17583, + "▁criticism": 17584, + "ню": 17585, + "▁că": 17586, + "▁politician": 17587, + "stable": 17588, + "Accept": 17589, + "Summary": 17590, + "▁também": 17591, + "}^{-": 17592, + "▁IM": 17593, + "idal": 17594, + "мор": 17595, + "Blue": 17596, + "GROUP": 17597, + "▁terminal": 17598, + "▁complexity": 17599, + "▁locally": 17600, + "DOWN": 17601, + "▁Near": 17602, + "Depth": 17603, + "▁pole": 17604, + "▁equality": 17605, + "Site": 17606, + "▁isinstance": 17607, + "Speed": 17608, + "ippi": 17609, + ",&": 17610, + "▁Enc": 17611, + "щен": 17612, + "▁mater": 17613, + "▁slaves": 17614, + "ACTION": 17615, + "usalem": 17616, + "▁haz": 17617, + "▁Beat": 17618, + "▁wrest": 17619, + "▁llam": 17620, + "Ins": 17621, + "мина": 17622, + "▁був": 17623, + "▁Frame": 17624, + "ushes": 17625, + "▁virtually": 17626, + "▁Perm": 17627, + "▁weights": 17628, + "▁llvm": 17629, + "▁cave": 17630, + "states": 17631, + "DMA": 17632, + "ellt": 17633, + "ifact": 17634, + "vendor": 17635, + "▁Emma": 17636, + "Locale": 17637, + "▁SET": 17638, + "▁geometry": 17639, + "Styles": 17640, + "▁Referee": 17641, + "▁weit": 17642, + "fica": 17643, + "▁ads": 17644, + "gray": 17645, + "▁Burg": 17646, + "iona": 17647, + "dagger": 17648, + "▁Januar": 17649, + "дей": 17650, + "isterschaft": 17651, + "ppo": 17652, + "oids": 17653, + "▁départ": 17654, + "Shader": 17655, + "▁constraint": 17656, + "Secret": 17657, + "▁Peters": 17658, + "▁eyeb": 17659, + "▁mesh": 17660, + "▁cookie": 17661, + "▁Pick": 17662, + "▁nick": 17663, + "bye": 17664, + "▁savings": 17665, + "Try": 17666, + "python": 17667, + "▁patri": 17668, + "▁multip": 17669, + "▁kinda": 17670, + "▁'_": 17671, + "▁Franz": 17672, + "▁cloth": 17673, + "зульта": 17674, + "▁fleet": 17675, + "▁humanity": 17676, + "resa": 17677, + "blob": 17678, + "▁TX": 17679, + "▁Buch": 17680, + "▁Lond": 17681, + "▁valley": 17682, + "▁murm": 17683, + "▁Trade": 17684, + "linewidth": 17685, + "▁especial": 17686, + "upper": 17687, + "▁hosp": 17688, + "▁tanto": 17689, + "▁oldest": 17690, + "▁Roose": 17691, + "▁hitting": 17692, + "dog": 17693, + "ovi": 17694, + "},\r": 17695, + "▁compatible": 17696, + "▁Website": 17697, + "poch": 17698, + "▁Bag": 17699, + "▁accomplish": 17700, + "Christ": 17701, + "asset": 17702, + "▁Until": 17703, + "▁geld": 17704, + "Listen": 17705, + "SB": 17706, + "Setup": 17707, + "icia": 17708, + "▁lum": 17709, + "▁janvier": 17710, + "PAGE": 17711, + "▁Nu": 17712, + "/\"": 17713, + "▁divorce": 17714, + "Execute": 17715, + "Depend": 17716, + "▁Scottish": 17717, + "▁Ts": 17718, + "ruppe": 17719, + "▁refuse": 17720, + "▁Oktober": 17721, + "ijk": 17722, + "▁Amy": 17723, + "▁dimin": 17724, + "▁gross": 17725, + "▁trat": 17726, + "isible": 17727, + "mixer": 17728, + "▁autres": 17729, + "▁neat": 17730, + "▁otros": 17731, + "Void": 17732, + "▁schol": 17733, + "▁Walker": 17734, + "▁tube": 17735, + "ologists": 17736, + "▁груп": 17737, + "▁haben": 17738, + "uber": 17739, + "ACTIVE": 17740, + "▁Attendance": 17741, + "▁оп": 17742, + "▁blade": 17743, + "oplus": 17744, + "▁Original": 17745, + "▁manufacturer": 17746, + "asz": 17747, + "âte": 17748, + "rer": 17749, + "▁Json": 17750, + "▁succeeded": 17751, + "uffle": 17752, + "▁backed": 17753, + "esian": 17754, + "tick": 17755, + "External": 17756, + "▁XIX": 17757, + "▁hearts": 17758, + "▁После": 17759, + "olu": 17760, + "▁лет": 17761, + "VICE": 17762, + "ário": 17763, + "▁fraud": 17764, + "edu": 17765, + "Primary": 17766, + "▁gaming": 17767, + "▁plt": 17768, + "igator": 17769, + "IES": 17770, + "Compiler": 17771, + "▁monument": 17772, + "agem": 17773, + "▁Rain": 17774, + "▁moins": 17775, + "oku": 17776, + "osex": 17777, + "▁Kansas": 17778, + "▁gepublice": 17779, + "▁Joy": 17780, + "Scene": 17781, + "▁kingdom": 17782, + "rices": 17783, + "▁juin": 17784, + "▁uncomfortable": 17785, + "▁Money": 17786, + "obb": 17787, + "expl": 17788, + "strcmp": 17789, + "▁dread": 17790, + "rition": 17791, + "▁Chi": 17792, + "▁demonstrated": 17793, + "▁vertices": 17794, + "чо": 17795, + "▁Culture": 17796, + "FX": 17797, + "Dictionary": 17798, + "▁Dru": 17799, + "trm": 17800, + "▁examine": 17801, + "▁therap": 17802, + "ième": 17803, + "мини": 17804, + "▁produces": 17805, + "▁photographs": 17806, + "▁threads": 17807, + "▁MI": 17808, + "▁extraordinary": 17809, + "ским": 17810, + "▁gepubliceerd": 17811, + "▁Poland": 17812, + "▁guaranteed": 17813, + "RG": 17814, + "osc": 17815, + "али": 17816, + "▁тех": 17817, + "errno": 17818, + "science": 17819, + "iffs": 17820, + "▁Tam": 17821, + "▁Beth": 17822, + "▁Travel": 17823, + "▁translate": 17824, + "ché": 17825, + "▁ling": 17826, + "▁belongs": 17827, + "▁electrical": 17828, + "ensk": 17829, + "▁Compet": 17830, + "cg": 17831, + "VC": 17832, + "topic": 17833, + "▁presum": 17834, + "вета": 17835, + "▁approximation": 17836, + "▁grim": 17837, + "▁Из": 17838, + "_{(": 17839, + "вин": 17840, + "ution": 17841, + "owych": 17842, + "åg": 17843, + "sterreich": 17844, + "▁characteristic": 17845, + "oming": 17846, + "▁/*!": 17847, + "▁prize": 17848, + "▁Minnesota": 17849, + "ted": 17850, + "цы": 17851, + "▁Om": 17852, + "▁indices": 17853, + "▁stem": 17854, + "regon": 17855, + "ниче": 17856, + "▁Salv": 17857, + "ése": 17858, + "▁aged": 17859, + "▁Past": 17860, + "▁internation": 17861, + "▁Vic": 17862, + "▁resume": 17863, + "akespeare": 17864, + "▁estado": 17865, + "▁abilities": 17866, + "▁brow": 17867, + "▁NFL": 17868, + "▁trends": 17869, + "▁Austin": 17870, + "▁LIMIT": 17871, + "▁Kor": 17872, + "▁folk": 17873, + "▁ward": 17874, + "▁nest": 17875, + "▁Junior": 17876, + "▁maintaining": 17877, + "Pub": 17878, + "OBJECT": 17879, + "▁bloody": 17880, + "▁sj": 17881, + "▁dtype": 17882, + "Pane": 17883, + "▁bacter": 17884, + "▁gradually": 17885, + "mr": 17886, + "Team": 17887, + "▁indicating": 17888, + "▁decrease": 17889, + "tek": 17890, + "▁Represent": 17891, + "▁developers": 17892, + "Guid": 17893, + "▁Diet": 17894, + "▁retr": 17895, + "Navigation": 17896, + "esi": 17897, + "▁lazy": 17898, + "Standard": 17899, + "Er": 17900, + "AW": 17901, + "▁États": 17902, + "▁assured": 17903, + "San": 17904, + "▁Andre": 17905, + "’,": 17906, + "fang": 17907, + "ération": 17908, + "▁industries": 17909, + "▁incon": 17910, + "Emit": 17911, + "▁где": 17912, + "▁retriev": 17913, + "eni": 17914, + "▁Turkey": 17915, + "izers": 17916, + "Angle": 17917, + "▁oc": 17918, + "▁palm": 17919, + "▁stan": 17920, + "льно": 17921, + "▁CSS": 17922, + "▁frances": 17923, + "▁grin": 17924, + "▁tiempo": 17925, + "▁Prix": 17926, + "]).": 17927, + "▁deput": 17928, + "▁Pin": 17929, + "▁sixt": 17930, + "▁predicted": 17931, + "azure": 17932, + "▁Motor": 17933, + "▁ihm": 17934, + "▁manus": 17935, + "apos": 17936, + "▁instruments": 17937, + "▁counts": 17938, + "▁aimed": 17939, + "profit": 17940, + "▁dok": 17941, + "обра": 17942, + "▁estud": 17943, + "iesz": 17944, + "▁piss": 17945, + "▁inaug": 17946, + "▁voters": 17947, + "▁packages": 17948, + "▁cute": 17949, + "▁fitness": 17950, + "▁leurs": 17951, + "▁sorted": 17952, + "phant": 17953, + "OPT": 17954, + "▁zip": 17955, + "season": 17956, + "emi": 17957, + "encoding": 17958, + "won": 17959, + "elect": 17960, + "▁tooth": 17961, + "▁upcoming": 17962, + "▁Graham": 17963, + "nut": 17964, + "▁Ark": 17965, + "ält": 17966, + "▁precious": 17967, + "agle": 17968, + "née": 17969, + "ница": 17970, + "aris": 17971, + "▁pile": 17972, + "cole": 17973, + "▁WITH": 17974, + "routing": 17975, + "▁***": 17976, + "Appearance": 17977, + "llvm": 17978, + "▁Oliver": 17979, + "▁PL": 17980, + "ifndef": 17981, + "etzt": 17982, + "skiego": 17983, + "▁pon": 17984, + "ARGET": 17985, + "kö": 17986, + "alled": 17987, + "▁=\\": 17988, + "sure": 17989, + "matches": 17990, + "▁temperatures": 17991, + "SEL": 17992, + "▁clone": 17993, + "▁eller": 17994, + "erna": 17995, + "▁поло": 17996, + "Management": 17997, + "company": 17998, + "▁lun": 17999, + "▁streaming": 18000, + "▁Ni": 18001, + "▁sí": 18002, + "Contact": 18003, + "▁Credit": 18004, + "▁Oak": 18005, + "▁представ": 18006, + "radius": 18007, + "cli": 18008, + "IENT": 18009, + "▁Lucy": 18010, + "▁calculation": 18011, + "▁pixel": 18012, + "▁mul": 18013, + "▁outcomes": 18014, + "▁centers": 18015, + "▁residence": 18016, + "Constraint": 18017, + "▁preserve": 18018, + "peon": 18019, + "uffix": 18020, + "▁Roberts": 18021, + "▁promot": 18022, + "?!": 18023, + "balance": 18024, + "▁courts": 18025, + "▁disg": 18026, + "PRINT": 18027, + "▁их": 18028, + "elfare": 18029, + "▁retreat": 18030, + "▁Ав": 18031, + "Cost": 18032, + "also": 18033, + "▁Für": 18034, + "▁März": 18035, + "DIO": 18036, + "▁bez": 18037, + "AUTH": 18038, + "Den": 18039, + "▁atom": 18040, + "▁roman": 18041, + "▁Pel": 18042, + "▁Roosevelt": 18043, + "▁Plant": 18044, + "Contents": 18045, + "▁Between": 18046, + "▁coupling": 18047, + "structure": 18048, + "▁Marshall": 18049, + "▁Career": 18050, + "▁railway": 18051, + "▁Bureau": 18052, + "▁possibilities": 18053, + "▁kor": 18054, + "){\r": 18055, + "mero": 18056, + "mov": 18057, + "англ": 18058, + "AIN": 18059, + "mund": 18060, + "lette": 18061, + "▁summar": 18062, + "▁describing": 18063, + "▁NAS": 18064, + "▁Emb": 18065, + "Instruction": 18066, + "liest": 18067, + "▁Sig": 18068, + "Bill": 18069, + "▁verd": 18070, + "plant": 18071, + "▁galaxies": 18072, + "\"])": 18073, + "▁PyObject": 18074, + "▁Gy": 18075, + "▁mě": 18076, + "▁organisation": 18077, + "Her": 18078, + "Sep": 18079, + "ocom": 18080, + "▁Same": 18081, + "▁bite": 18082, + "▁Seattle": 18083, + "зыва": 18084, + "Observer": 18085, + "’.": 18086, + "▁morph": 18087, + "urches": 18088, + "alph": 18089, + "reement": 18090, + "consin": 18091, + "^-": 18092, + "▁dann": 18093, + "translate": 18094, + "вих": 18095, + "React": 18096, + "▁cats": 18097, + "▁brew": 18098, + "▁ds": 18099, + "▁circles": 18100, + "▁drift": 18101, + "agma": 18102, + "▁Valent": 18103, + "PIN": 18104, + "ARM": 18105, + "▁surviv": 18106, + "alin": 18107, + "Pref": 18108, + "friendly": 18109, + "▁uncertainty": 18110, + "▁fd": 18111, + "▁engineer": 18112, + "Ben": 18113, + "icular": 18114, + "orest": 18115, + "▁horizontal": 18116, + "UTC": 18117, + "textrm": 18118, + "Live": 18119, + "Score": 18120, + "▁Germans": 18121, + "distance": 18122, + "uti": 18123, + "▁équ": 18124, + "▁numerical": 18125, + "▁reass": 18126, + "Activ": 18127, + "▁cod": 18128, + "bullet": 18129, + "ensing": 18130, + "▁Gem": 18131, + "▁navigation": 18132, + "addClass": 18133, + "▁simultaneously": 18134, + "вий": 18135, + "▁його": 18136, + "▁Hö": 18137, + "▁harsh": 18138, + "precated": 18139, + "ССР": 18140, + "▁Equip": 18141, + "adget": 18142, + "▁TYPE": 18143, + "▁mg": 18144, + "IGH": 18145, + "▁vin": 18146, + "▁findings": 18147, + "ivan": 18148, + "▁possession": 18149, + "▁того": 18150, + "▁parsed": 18151, + "riors": 18152, + "zeichnet": 18153, + "ников": 18154, + "Worker": 18155, + "▁enables": 18156, + "▁($\\": 18157, + "▁Copy": 18158, + "▁orientation": 18159, + "стре": 18160, + "▁Indians": 18161, + "▁Gary": 18162, + "▁Insurance": 18163, + "isan": 18164, + "Chat": 18165, + "▁comun": 18166, + "▁coron": 18167, + "ография": 18168, + "updated": 18169, + "▁Ин": 18170, + "These": 18171, + "SEC": 18172, + "▁boyfriend": 18173, + "Diagnostics": 18174, + "Hint": 18175, + "mul": 18176, + "▁inode": 18177, + "xA": 18178, + "eft": 18179, + "OPTION": 18180, + "unct": 18181, + "annon": 18182, + "ENS": 18183, + "strip": 18184, + "▁enthusi": 18185, + "▁Whit": 18186, + "▁Фи": 18187, + "aude": 18188, + "▁disagree": 18189, + "▁snapped": 18190, + "Phys": 18191, + "▁Syn": 18192, + "▁sour": 18193, + "▁Lux": 18194, + "ugar": 18195, + "tile": 18196, + "▁infection": 18197, + "▁Feb": 18198, + "▁Chem": 18199, + "dataset": 18200, + "chts": 18201, + "Dynamic": 18202, + "▁сред": 18203, + "▁queen": 18204, + "worker": 18205, + "swap": 18206, + "▁timestamp": 18207, + "▁Integr": 18208, + "▁interviews": 18209, + "such": 18210, + "▁laughter": 18211, + "prof": 18212, + "▁Bird": 18213, + "(|": 18214, + "ân": 18215, + "▁gra": 18216, + "&=": 18217, + "zens": 18218, + "getMessage": 18219, + "▁Ost": 18220, + "▁gab": 18221, + "▁mortgage": 18222, + "multicol": 18223, + "LEVEL": 18224, + "partition": 18225, + "seen": 18226, + "▁declar": 18227, + "AU": 18228, + "▁ox": 18229, + "▁ligger": 18230, + "▁Carm": 18231, + "geme": 18232, + "▁Vegas": 18233, + "▁Eug": 18234, + "orus": 18235, + "▁brick": 18236, + "▁así": 18237, + "▁Magazine": 18238, + "HasColumnType": 18239, + "VR": 18240, + "licher": 18241, + "▁Future": 18242, + "▁Jug": 18243, + "attan": 18244, + "constructor": 18245, + "VP": 18246, + "▁тур": 18247, + "чина": 18248, + "Comparator": 18249, + "▁authentic": 18250, + "▁monster": 18251, + "▁transformed": 18252, + "▁firms": 18253, + "FW": 18254, + "▁catalog": 18255, + "boards": 18256, + "▁diseases": 18257, + "▁Benjamin": 18258, + "▁horizon": 18259, + "▁Available": 18260, + "Mvc": 18261, + "Stud": 18262, + "▁lord": 18263, + "general": 18264, + "пар": 18265, + "▁cabinet": 18266, + "▁Basic": 18267, + "TestCase": 18268, + "ansk": 18269, + "▁Snow": 18270, + "ierten": 18271, + "▁vocal": 18272, + "Padding": 18273, + "halt": 18274, + "▁Alexand": 18275, + "▁Colomb": 18276, + "ivamente": 18277, + "▁artificial": 18278, + "▁Atlanta": 18279, + "▁mentre": 18280, + "▁estaba": 18281, + "jekt": 18282, + "▁slept": 18283, + "▁endless": 18284, + "éro": 18285, + "attery": 18286, + "uur": 18287, + "▁weakness": 18288, + "▁attempting": 18289, + "BYTE": 18290, + "▁founder": 18291, + "▁salv": 18292, + "▁Medicine": 18293, + "tid": 18294, + "▁Schwe": 18295, + "raction": 18296, + "▁¿": 18297, + "crate": 18298, + "SERVER": 18299, + "▁compound": 18300, + "▁conve": 18301, + "▁caf": 18302, + "▁handful": 18303, + "onne": 18304, + "ública": 18305, + "▁defensive": 18306, + "Alignment": 18307, + "▁préc": 18308, + "▁significance": 18309, + "élé": 18310, + "arta": 18311, + "Dam": 18312, + "▁perpet": 18313, + "▁caller": 18314, + "icients": 18315, + "cep": 18316, + "▁Multi": 18317, + "▁stolen": 18318, + "▁focusing": 18319, + "embed": 18320, + "▁bree": 18321, + "▁AB": 18322, + "▁occasions": 18323, + "sea": 18324, + "Prov": 18325, + "чение": 18326, + "▁Category": 18327, + "▁sq": 18328, + "▁Фе": 18329, + "VA": 18330, + "Diff": 18331, + "Tri": 18332, + "issement": 18333, + "▁actress": 18334, + "▁Пе": 18335, + "▁jej": 18336, + "▁twisted": 18337, + "▁Nicol": 18338, + "▁junior": 18339, + "Sound": 18340, + "▁Brasil": 18341, + "▁juice": 18342, + "▁>>>": 18343, + "▁Alb": 18344, + "▁softly": 18345, + "▁McK": 18346, + "▁Gren": 18347, + "▁italiano": 18348, + "▁creatures": 18349, + "▁residential": 18350, + "▁Instagram": 18351, + "ucks": 18352, + "▁killer": 18353, + "▁Johnny": 18354, + "▁enterprise": 18355, + "Dto": 18356, + "chestra": 18357, + "▁Tel": 18358, + "▁Activ": 18359, + "factor": 18360, + "oust": 18361, + "▁vacuum": 18362, + "рал": 18363, + "')->": 18364, + "▁Left": 18365, + "▁defect": 18366, + "▁ninete": 18367, + "fare": 18368, + "▁regret": 18369, + "▁shar": 18370, + "ctrine": 18371, + "mesh": 18372, + "city": 18373, + "icit": 18374, + "▁Fem": 18375, + "limited": 18376, + "oka": 18377, + "!\\!\\": 18378, + "Donald": 18379, + "зно": 18380, + "▁provision": 18381, + "▁discussions": 18382, + "Drag": 18383, + "▁Incl": 18384, + "Exit": 18385, + "▁Abd": 18386, + "story": 18387, + "ieve": 18388, + "▁był": 18389, + "olving": 18390, + "wohner": 18391, + "▁guidelines": 18392, + "▁straw": 18393, + "üss": 18394, + "▁було": 18395, + "▁burden": 18396, + "▁spatial": 18397, + "▁stretched": 18398, + "▁Inf": 18399, + "▁typedef": 18400, + "▁robot": 18401, + "▁Doc": 18402, + "pliers": 18403, + "wal": 18404, + "camp": 18405, + "▁diffé": 18406, + "▁McG": 18407, + "▁tel": 18408, + "arette": 18409, + "▁subsequently": 18410, + "▁honey": 18411, + "FUNC": 18412, + "▁establishment": 18413, + "tesy": 18414, + "▁który": 18415, + "▁сель": 18416, + "▁FO": 18417, + "▁Islands": 18418, + "▁mp": 18419, + "Scalar": 18420, + "▁Yan": 18421, + "cken": 18422, + "▁variation": 18423, + "ią": 18424, + "optim": 18425, + "azor": 18426, + "tuple": 18427, + "▁gravity": 18428, + "▁conclude": 18429, + "▁collections": 18430, + "ész": 18431, + "▁Liver": 18432, + "▁ethnic": 18433, + "compile": 18434, + "▁parl": 18435, + "Surface": 18436, + "{'": 18437, + "▁paragraph": 18438, + "posite": 18439, + "ítulo": 18440, + "oba": 18441, + "binary": 18442, + "rob": 18443, + "▁Pedro": 18444, + "▁fis": 18445, + "▁Grande": 18446, + "odox": 18447, + "▁posting": 18448, + "": 26345, + "olent": 26346, + "▁этого": 26347, + "▁Generic": 26348, + "▁*/,": 26349, + "▁combinations": 26350, + "▁rejo": 26351, + "спубли": 26352, + "capacity": 26353, + "▁traces": 26354, + "▁opacity": 26355, + "▁Official": 26356, + "icion": 26357, + "▁emotionally": 26358, + "▁Joel": 26359, + "ському": 26360, + "▁legendary": 26361, + "▁pam": 26362, + "▁También": 26363, + ".<": 26364, + "iba": 26365, + "midt": 26366, + "бом": 26367, + "▁ensuite": 26368, + "Authorization": 26369, + "Pag": 26370, + "▁helmet": 26371, + "▁territo": 26372, + "secondary": 26373, + "▁segunda": 26374, + "▁Wire": 26375, + "recated": 26376, + "▁invoked": 26377, + "▁ValueError": 26378, + "▁фо": 26379, + "ALIGN": 26380, + "CURRENT": 26381, + "\\+\\_\\": 26382, + "▁compilation": 26383, + "ær": 26384, + "▁Palmar": 26385, + "▁influences": 26386, + "/:": 26387, + "Mix": 26388, + "NOP": 26389, + "econom": 26390, + "▁tucked": 26391, + "▁});\r": 26392, + "ANK": 26393, + "reject": 26394, + "▁pension": 26395, + "▁generates": 26396, + "чё": 26397, + "▁incap": 26398, + "▁clicked": 26399, + "▁fus": 26400, + "ourses": 26401, + "▁Easter": 26402, + "%;": 26403, + "zin": 26404, + "▁obligations": 26405, + "▁Tips": 26406, + "};\r": 26407, + ".\"_": 26408, + "▁BSD": 26409, + "ática": 26410, + "▁expose": 26411, + "Pars": 26412, + "▁Amanda": 26413, + "куп": 26414, + "▁guessed": 26415, + "dsi": 26416, + "▁Leip": 26417, + "Broad": 26418, + "▁Hughes": 26419, + "ié": 26420, + "▁Wahl": 26421, + "▁formerly": 26422, + "Relative": 26423, + "▁Yu": 26424, + "▁Mountains": 26425, + "▁Enum": 26426, + "▁strang": 26427, + "_-": 26428, + "recht": 26429, + "viv": 26430, + "pause": 26431, + "▁Londres": 26432, + "▁elbow": 26433, + "▁Hawaii": 26434, + "▁Casino": 26435, + "Threshold": 26436, + "Units": 26437, + "Include": 26438, + "ито": 26439, + "asury": 26440, + "▁steht": 26441, + "▁damned": 26442, + "▁packets": 26443, + "▁Werk": 26444, + "▁elevator": 26445, + "iedad": 26446, + "govern": 26447, + "▁CONTRACT": 26448, + "mals": 26449, + "▁remem": 26450, + "▁entonces": 26451, + "▁vas": 26452, + "▁sympathy": 26453, + "▁befindet": 26454, + "incing": 26455, + "DataSet": 26456, + "▁additionally": 26457, + "▁musician": 26458, + "шего": 26459, + "▁listop": 26460, + ">\")": 26461, + "Printf": 26462, + "▁Felix": 26463, + "▁carved": 26464, + "▁nicely": 26465, + "гом": 26466, + "chap": 26467, + "▁Nieder": 26468, + "▁Lav": 26469, + "▁modifications": 26470, + "moment": 26471, + "▁balcon": 26472, + "▁dependency": 26473, + "CKET": 26474, + "▁vanished": 26475, + "▁fighters": 26476, + "▁zunächst": 26477, + "ioctl": 26478, + "▁defens": 26479, + "▁Nem": 26480, + "Utility": 26481, + "▁curv": 26482, + "▁DAMAGES": 26483, + "▁Rogers": 26484, + "▁gratitude": 26485, + "▁Denmark": 26486, + "рая": 26487, + "grpc": 26488, + "▁juni": 26489, + "▁октября": 26490, + "▁immense": 26491, + "▁prevented": 26492, + "▁foam": 26493, + "▁Extra": 26494, + "aimed": 26495, + "▁Criteria": 26496, + "▁Simply": 26497, + "boxes": 26498, + "▁Legend": 26499, + "▁Players": 26500, + "▁Mercedes": 26501, + "▁Branch": 26502, + "TERN": 26503, + "omena": 26504, + "▁incorporate": 26505, + "conde": 26506, + "▁Estado": 26507, + "▁wasted": 26508, + "▁complaining": 26509, + "▁warriors": 26510, + "oter": 26511, + "▁этом": 26512, + "▁conten": 26513, + "▁machinery": 26514, + "▁technological": 26515, + "▁TD": 26516, + "▁gras": 26517, + "▁minimize": 26518, + "▁Door": 26519, + "▁bzw": 26520, + "▁prac": 26521, + "TREE": 26522, + "▁Wing": 26523, + "▁Transaction": 26524, + "▁MVT": 26525, + "▁Klein": 26526, + "commons": 26527, + "▁}{": 26528, + "▁Heritage": 26529, + "▁fade": 26530, + "рок": 26531, + "setValue": 26532, + "▁Wallace": 26533, + "MX": 26534, + "▁ACT": 26535, + "▁footage": 26536, + "▁entstand": 26537, + "arga": 26538, + "▁nails": 26539, + "▁capitalism": 26540, + "▁Garc": 26541, + "▁suspension": 26542, + "ilis": 26543, + "▁Mov": 26544, + "uffled": 26545, + "Arc": 26546, + "▁Beautiful": 26547, + "WAY": 26548, + "Parallel": 26549, + "XXXX": 26550, + "diag": 26551, + "▁DT": 26552, + "mq": 26553, + "TextView": 26554, + "MLE": 26555, + "ennen": 26556, + "▁infected": 26557, + "▁therapist": 26558, + "INGS": 26559, + "▁cidade": 26560, + "ън": 26561, + "▁pdf": 26562, + "▁bump": 26563, + "CTX": 26564, + "▁INCLUDING": 26565, + "▁Gef": 26566, + "ENTIAL": 26567, + "▁handy": 26568, + "▁temporal": 26569, + "AtA": 26570, + "ISH": 26571, + "▁Pattern": 26572, + "▁lan": 26573, + "ependant": 26574, + "▁shining": 26575, + "idy": 26576, + "▁NT": 26577, + "▁Fran": 26578, + "▁nurses": 26579, + "▁betray": 26580, + "▁sensible": 26581, + "▁апреля": 26582, + "▁'[": 26583, + "▁thirteen": 26584, + ")}_{": 26585, + "▁Noah": 26586, + "INSERT": 26587, + "istically": 26588, + "▁Appendix": 26589, + "▁recher": 26590, + "Receiver": 26591, + "▁dernier": 26592, + "лла": 26593, + "лиза": 26594, + "▁Partido": 26595, + "▁maximal": 26596, + "snap": 26597, + "▁часть": 26598, + "STOP": 26599, + "▁ultra": 26600, + "▁développ": 26601, + "▁tegen": 26602, + "▁Чи": 26603, + "LIB": 26604, + "▁baseline": 26605, + "reload": 26606, + "▁Arbitro": 26607, + "▁kall": 26608, + "capture": 26609, + "Arm": 26610, + "quin": 26611, + "impse": 26612, + "zas": 26613, + "▁Cand": 26614, + "▁brains": 26615, + "▁hostile": 26616, + "▁marble": 26617, + "oons": 26618, + "▁Loss": 26619, + "MetaData": 26620, + "▁República": 26621, + "▁andra": 26622, + "oden": 26623, + "▁documented": 26624, + "▁Moses": 26625, + "odd": 26626, + "▁wax": 26627, + "usch": 26628, + "▁diagnosed": 26629, + "inkle": 26630, + "▁Xbox": 26631, + "▁seventy": 26632, + "cias": 26633, + "▁noviembre": 26634, + "Compute": 26635, + "});\r": 26636, + "▁Philippe": 26637, + "▁För": 26638, + "Leave": 26639, + "▁sage": 26640, + "▁unpre": 26641, + "▁Fortunately": 26642, + "▁apost": 26643, + "entities": 26644, + "▁ellos": 26645, + "authorized": 26646, + "GBT": 26647, + "▁insist": 26648, + "▁inspire": 26649, + "Mass": 26650, + "▁rôle": 26651, + "fee": 26652, + "ipart": 26653, + "цер": 26654, + "unate": 26655, + "▁CNN": 26656, + ":}": 26657, + "▁unhappy": 26658, + "▁imported": 26659, + "HIGH": 26660, + "rings": 26661, + "▁Instance": 26662, + "Bay": 26663, + "agles": 26664, + "mee": 26665, + "bery": 26666, + "▁Stories": 26667, + "▁Chase": 26668, + "▁carriage": 26669, + "▁misunder": 26670, + "▁imagin": 26671, + "pw": 26672, + "▁Meter": 26673, + "▁crowds": 26674, + "▁Fame": 26675, + "skill": 26676, + "▁comed": 26677, + "▁ranch": 26678, + "▁lacking": 26679, + "▁submar": 26680, + "iante": 26681, + "▁lanz": 26682, + "▁служ": 26683, + "-----------": 26684, + "▁obten": 26685, + "▁downstairs": 26686, + "YN": 26687, + "rotation": 26688, + "▁Jesse": 26689, + "$(\"#": 26690, + "▁puls": 26691, + "irling": 26692, + "▁Schaus": 26693, + "▁deployed": 26694, + "▁{}\",": 26695, + "▁Marvel": 26696, + "ENUM": 26697, + "▁Mathemat": 26698, + "▁nn": 26699, + "compet": 26700, + "ków": 26701, + "bil": 26702, + "Which": 26703, + "isine": 26704, + "▁rude": 26705, + "▁niveau": 26706, + "▁área": 26707, + "▁près": 26708, + "atis": 26709, + "▁[...]": 26710, + "fur": 26711, + "omm": 26712, + "packed": 26713, + "мене": 26714, + "scriptstyle": 26715, + "▁Ath": 26716, + "▁desp": 26717, + "eltemperaturen": 26718, + "▁talents": 26719, + "ocy": 26720, + "▁raises": 26721, + "LIMIT": 26722, + "▁editorial": 26723, + "▁Animal": 26724, + "drive": 26725, + "▁работа": 26726, + "bss": 26727, + "▁Sev": 26728, + "epoch": 26729, + "▁RC": 26730, + "UNUSED": 26731, + "▁mandatory": 26732, + "(?:": 26733, + "▁Bin": 26734, + "▁synthetic": 26735, + "▁gown": 26736, + "▁Dob": 26737, + "kap": 26738, + "▁harmon": 26739, + "▁liberty": 26740, + "▁Rice": 26741, + "▁prayers": 26742, + "▁mise": 26743, + "▁confusing": 26744, + "▁leap": 26745, + "▁arrives": 26746, + "kamp": 26747, + "▁thats": 26748, + "ACC": 26749, + "▁Parameters": 26750, + "▁одно": 26751, + "▁Bio": 26752, + "density": 26753, + "▁glimpse": 26754, + "FORE": 26755, + "▁Listen": 26756, + "Prev": 26757, + "}\\,\\": 26758, + "куль": 26759, + "▁SEC": 26760, + "▁explored": 26761, + "▁meantime": 26762, + "AIL": 26763, + "▁WP": 26764, + "▁raison": 26765, + "▁existe": 26766, + "▁lesser": 26767, + "▁Validate": 26768, + "▁caution": 26769, + "usta": 26770, + "heading": 26771, + "EFF": 26772, + ".'\"": 26773, + "▁Gilbert": 26774, + "▁limitation": 26775, + "▁retour": 26776, + "▁Commonwealth": 26777, + "▁gewann": 26778, + "▁miserable": 26779, + "▁networking": 26780, + "▁ottobre": 26781, + "▁Dise": 26782, + "edges": 26783, + "▁sede": 26784, + "вича": 26785, + "uniform": 26786, + "▁деятель": 26787, + "iros": 26788, + "▁desen": 26789, + "▁parc": 26790, + "▁Rico": 26791, + "Ns": 26792, + "guid": 26793, + "orio": 26794, + "avelength": 26795, + "▁Gle": 26796, + "inceton": 26797, + "Amaz": 26798, + "Construct": 26799, + "▁mx": 26800, + "▁Vern": 26801, + "▁Generation": 26802, + "Jack": 26803, + "romag": 26804, + "▁viagra": 26805, + "▁Peg": 26806, + "▁Updated": 26807, + "▁overlap": 26808, + "EventArgs": 26809, + "кро": 26810, + "▁*«": 26811, + "▁questioned": 26812, + "South": 26813, + "notice": 26814, + "▁permanently": 26815, + "lst": 26816, + "ficie": 26817, + "▁quella": 26818, + "▁colleges": 26819, + "▁disappointment": 26820, + "▁Luft": 26821, + "imgur": 26822, + "▁transitions": 26823, + "▁seller": 26824, + "▁июня": 26825, + "▁Og": 26826, + "▁ADD": 26827, + "▁Pays": 26828, + "COMMAND": 26829, + "grades": 26830, + "▁febbra": 26831, + "▁Cyr": 26832, + "▁febbraio": 26833, + "eti": 26834, + "▁arom": 26835, + "▁Claude": 26836, + "▁UEFA": 26837, + "▁живе": 26838, + "▁Victorian": 26839, + "keeping": 26840, + "ên": 26841, + "▁FIXME": 26842, + "itime": 26843, + "chestr": 26844, + "▁Samsung": 26845, + "▁doctrine": 26846, + "▁pear": 26847, + "▁Mediterranean": 26848, + "▁Ya": 26849, + "▁vault": 26850, + "▁Historic": 26851, + "▁sedan": 26852, + "▁heated": 26853, + "▁política": 26854, + "Proof": 26855, + ":{": 26856, + "fem": 26857, + "▁Frankfurt": 26858, + "pectives": 26859, + "MG": 26860, + "▁Eye": 26861, + "dai": 26862, + "▁reserves": 26863, + "NER": 26864, + "▁tobacco": 26865, + "▁fragments": 26866, + "icc": 26867, + "▁booth": 26868, + "▁cruise": 26869, + "▁Testament": 26870, + "cola": 26871, + "▁Leop": 26872, + "▁noon": 26873, + "▁terrified": 26874, + "vb": 26875, + "intel": 26876, + "alie": 26877, + "▁verification": 26878, + "yster": 26879, + "ADER": 26880, + "chied": 26881, + "▁datasets": 26882, + "▁зі": 26883, + "▁miem": 26884, + "ulates": 26885, + "▁uuid": 26886, + "▁Pictures": 26887, + "▁Brend": 26888, + "Billboard": 26889, + "▁stern": 26890, + "▁denom": 26891, + "▁accidents": 26892, + "сня": 26893, + "▁packing": 26894, + "ција": 26895, + "iblical": 26896, + "▁Так": 26897, + "▁whisk": 26898, + "▁luego": 26899, + "▁rectangle": 26900, + "▁hooks": 26901, + "▁neglect": 26902, + "▁sober": 26903, + "proposition": 26904, + "Multiple": 26905, + ":\",": 26906, + "▁bapt": 26907, + "Parts": 26908, + "▁Selection": 26909, + "▁Alpha": 26910, + "weights": 26911, + "hall": 26912, + "соб": 26913, + "▁lur": 26914, + "▁época": 26915, + "▁rested": 26916, + "ambigu": 26917, + "▁tastes": 26918, + "amazonaws": 26919, + "▁confess": 26920, + "▁diciembre": 26921, + "implement": 26922, + "▁absorption": 26923, + "Hal": 26924, + "LEAN": 26925, + "▁Zach": 26926, + "▁freeze": 26927, + "LBL": 26928, + "STM": 26929, + "▁calc": 26930, + "={()": 26931, + "=*/": 26932, + "▁bt": 26933, + "Reb": 26934, + "▁Wien": 26935, + "anska": 26936, + "▁surn": 26937, + "iative": 26938, + "▁invån": 26939, + "CY": 26940, + "▁là": 26941, + "amba": 26942, + "leen": 26943, + "wahl": 26944, + "▁functioning": 26945, + "ția": 26946, + "getContext": 26947, + "gart": 26948, + "▁обе": 26949, + "Pen": 26950, + "vik": 26951, + "Slider": 26952, + "▁Accept": 26953, + "Gap": 26954, + "▁Jorge": 26955, + "SIG": 26956, + "▁вос": 26957, + "▁голо": 26958, + "▁periodo": 26959, + "шта": 26960, + "▁patches": 26961, + "кої": 26962, + "äre": 26963, + "engono": 26964, + "lista": 26965, + "horn": 26966, + "▁Complex": 26967, + "Sent": 26968, + "trfs": 26969, + "▁convex": 26970, + "Generation": 26971, + "▁місце": 26972, + "compress": 26973, + "▁Sax": 26974, + "▁uid": 26975, + "▁Lebens": 26976, + "Completion": 26977, + "\\|_{": 26978, + "insky": 26979, + "▁schon": 26980, + "▁masters": 26981, + "independ": 26982, + "neys": 26983, + "▁lied": 26984, + "▁aspir": 26985, + "чні": 26986, + "▁breakdown": 26987, + "▁Harm": 26988, + "▁designing": 26989, + "hf": 26990, + "▁Angela": 26991, + "▁confer": 26992, + "▁partido": 26993, + "▁interference": 26994, + "mao": 26995, + "▁absorbed": 26996, + "▁Vall": 26997, + "ErrorCode": 26998, + "▁Publishing": 26999, + "vano": 27000, + "BITS": 27001, + "▁deer": 27002, + "▁Campaign": 27003, + "▁graz": 27004, + "CHANGE": 27005, + "▁feder": 27006, + "iffe": 27007, + "handed": 27008, + "cq": 27009, + "umbing": 27010, + "▁unre": 27011, + "▁siendo": 27012, + "▁simpler": 27013, + "why": 27014, + "arettes": 27015, + "anst": 27016, + "▁hass": 27017, + "▁Enterprise": 27018, + "▁mois": 27019, + "▁Fo": 27020, + "▁участ": 27021, + "ffen": 27022, + "▁MODULE": 27023, + "▁activated": 27024, + "▁internacional": 27025, + "▁Mittel": 27026, + "degree": 27027, + "▁откры": 27028, + "▁&(": 27029, + "getProperty": 27030, + "isz": 27031, + "cedure": 27032, + "▁enters": 27033, + "▁Sally": 27034, + "▁Train": 27035, + "▁logged": 27036, + "▁Rav": 27037, + "▁Avoid": 27038, + "▁Kaiser": 27039, + "▁expend": 27040, + "aphor": 27041, + "▁brass": 27042, + "▁melod": 27043, + "▁attitudes": 27044, + "*\"": 27045, + "Wall": 27046, + "▁owe": 27047, + "▁bamb": 27048, + "shader": 27049, + "cester": 27050, + "▁PP": 27051, + "▁migrations": 27052, + "entric": 27053, + "▁Setup": 27054, + "▁Artist": 27055, + "hre": 27056, + "▁polite": 27057, + "ahan": 27058, + "▁luglio": 27059, + "▁predecess": 27060, + "▁SIG": 27061, + "тів": 27062, + "▁RF": 27063, + "▁Dry": 27064, + "▁maker": 27065, + "шим": 27066, + "▁Sounds": 27067, + "▁implementing": 27068, + "▁ah": 27069, + "▁gev": 27070, + "▁duplicate": 27071, + "▁Logan": 27072, + "▁Grade": 27073, + "DUCT": 27074, + "íses": 27075, + "ért": 27076, + "▁nonsense": 27077, + "backup": 27078, + "Attachment": 27079, + "▁ecc": 27080, + "▁Squadron": 27081, + "learn": 27082, + "deprecated": 27083, + "▁Aub": 27084, + "▁Gol": 27085, + "▁overl": 27086, + "SERVICE": 27087, + "▁beautifully": 27088, + "REL": 27089, + "▁Gian": 27090, + "▁Papa": 27091, + "respond": 27092, + "▁Caribbean": 27093, + "rn": 27094, + "▁худож": 27095, + "Cfg": 27096, + "rai": 27097, + "▁sniff": 27098, + "tto": 27099, + "ологи": 27100, + "▁rb": 27101, + "▁incidents": 27102, + "▁duck": 27103, + "▁PROVIDED": 27104, + "Sources": 27105, + "▁Chelsea": 27106, + "▁tek": 27107, + "▁налази": 27108, + "▁pilots": 27109, + "тки": 27110, + "▁traded": 27111, + "▁Beijing": 27112, + "▁Gregory": 27113, + "scalar": 27114, + "▁inclined": 27115, + "▁Kamp": 27116, + "▁Marian": 27117, + "▁fierce": 27118, + "▁theft": 27119, + "ющих": 27120, + "▁Into": 27121, + "constraint": 27122, + "parentNode": 27123, + "idental": 27124, + "▁gouvernement": 27125, + "▁SND": 27126, + "▁Ruby": 27127, + "▁monaster": 27128, + "Records": 27129, + "▁Kab": 27130, + "▁Universe": 27131, + "▁approximate": 27132, + "Water": 27133, + "▁Physical": 27134, + "appers": 27135, + "oubtedly": 27136, + "ложен": 27137, + "▁towel": 27138, + "▁siblings": 27139, + "eph": 27140, + "icios": 27141, + "рами": 27142, + "▁outrage": 27143, + "▁també": 27144, + "SRC": 27145, + "телем": 27146, + "Vi": 27147, + ".');": 27148, + "LM": 27149, + "▁mitt": 27150, + "▁weed": 27151, + "▁crops": 27152, + "iman": 27153, + "Claim": 27154, + "insula": 27155, + "▁(“": 27156, + "▁Changes": 27157, + "▁invånare": 27158, + "again": 27159, + "▁cnt": 27160, + "▁Gaz": 27161, + "▁austral": 27162, + "overlay": 27163, + "▁Mechan": 27164, + "▁slammed": 27165, + "▁trailing": 27166, + "▁Biography": 27167, + "▁appealing": 27168, + "IVER": 27169, + "▁Ave": 27170, + "▁Plot": 27171, + "voj": 27172, + "▁sung": 27173, + "▁unos": 27174, + "Effects": 27175, + "vv": 27176, + "cook": 27177, + "Buttons": 27178, + "▁transm": 27179, + "ierto": 27180, + "CONTEXT": 27181, + "▁dignity": 27182, + "aired": 27183, + "javax": 27184, + "▁Alberto": 27185, + "▁Recently": 27186, + "▁facial": 27187, + "mathop": 27188, + "ało": 27189, + "вид": 27190, + "cott": 27191, + "Variables": 27192, + "▁Ran": 27193, + "▁bunk": 27194, + "amiliar": 27195, + "CAST": 27196, + "▁frü": 27197, + "VED": 27198, + "▁NOTICE": 27199, + "▁turno": 27200, + "validator": 27201, + "▁Portuguese": 27202, + "▁questioning": 27203, + "}})": 27204, + "▁lear": 27205, + "Xamarin": 27206, + "▁disadv": 27207, + "encoded": 27208, + "▁Kot": 27209, + "rated": 27210, + "▁Theory": 27211, + "cius": 27212, + "▁Darwin": 27213, + "ђе": 27214, + "▁décl": 27215, + "▁область": 27216, + "рович": 27217, + "▁mobility": 27218, + "VF": 27219, + "▁хи": 27220, + "until": 27221, + "▁barriers": 27222, + "gif": 27223, + "▁Roh": 27224, + "▁aging": 27225, + "▁Widget": 27226, + "olk": 27227, + "▁farms": 27228, + "Checker": 27229, + "Introduction": 27230, + "смо": 27231, + "▁Russians": 27232, + "naments": 27233, + "▁Insert": 27234, + "▁Whenever": 27235, + "erset": 27236, + "itori": 27237, + "▁Dort": 27238, + "▁costume": 27239, + "▁mathematical": 27240, + "▁Bast": 27241, + "▁nominated": 27242, + "▁restoration": 27243, + "posal": 27244, + "▁unfortunate": 27245, + "Ps": 27246, + "LIN": 27247, + "▁intact": 27248, + "▁provoc": 27249, + "▁située": 27250, + "▁ноября": 27251, + "ermo": 27252, + "▁fisher": 27253, + "гля": 27254, + "▁conting": 27255, + "▁Doug": 27256, + "\"?": 27257, + "▁Eva": 27258, + "▁tops": 27259, + "▁Remote": 27260, + "▁artwork": 27261, + "▁artillery": 27262, + "quick": 27263, + "▁Arabia": 27264, + "▁SDValue": 27265, + "▁Dakota": 27266, + "iated": 27267, + "▁Optim": 27268, + "buttons": 27269, + "▁cottage": 27270, + "▁wherein": 27271, + "▁tutorial": 27272, + "▁Scre": 27273, + "▁sweep": 27274, + "▁Coffee": 27275, + "})}": 27276, + "▁музы": 27277, + "hostname": 27278, + "▁Temp": 27279, + "▁Fut": 27280, + "respect": 27281, + "ocz": 27282, + "▁predomin": 27283, + "Indicator": 27284, + "encial": 27285, + "UMENT": 27286, + "▁SHALL": 27287, + "▁commanded": 27288, + "▁withdrawal": 27289, + "iour": 27290, + "REGION": 27291, + "sprintf": 27292, + "▁вме": 27293, + "▁Payment": 27294, + "▁Anim": 27295, + "publish": 27296, + "▁seeks": 27297, + "ouw": 27298, + "▁GM": 27299, + "rugu": 27300, + "ustain": 27301, + "▁))": 27302, + "▁consulting": 27303, + "▁Dialog": 27304, + "▁Lars": 27305, + "▁critique": 27306, + "▁circulation": 27307, + "▁landsc": 27308, + "managed": 27309, + "▁Craft": 27310, + "▁herman": 27311, + "afi": 27312, + "amy": 27313, + "▁discour": 27314, + "<>(": 27315, + "▁Steph": 27316, + "▁tolerance": 27317, + "typename": 27318, + "ventions": 27319, + "ział": 27320, + "стов": 27321, + "▁sticking": 27322, + "ASC": 27323, + "ISO": 27324, + "▁Spencer": 27325, + "▁Didn": 27326, + "gomery": 27327, + "imiter": 27328, + "dru": 27329, + "Clause": 27330, + "▁slides": 27331, + "###": 27332, + "▁Sugar": 27333, + "HY": 27334, + "▁эти": 27335, + "▁Edwards": 27336, + "▁cents": 27337, + "oya": 27338, + "serts": 27339, + "▁Hass": 27340, + "▁ingen": 27341, + "стри": 27342, + "▁saddle": 27343, + "solid": 27344, + "▁champions": 27345, + "-)": 27346, + "▁Slov": 27347, + "▁shiny": 27348, + "▁*)&": 27349, + "▁Define": 27350, + "če": 27351, + "▁scrut": 27352, + "onden": 27353, + "'\",": 27354, + "uffs": 27355, + "▁olymp": 27356, + "idential": 27357, + "wand": 27358, + "▁annually": 27359, + "▁Arkansas": 27360, + "▁saint": 27361, + "▁gleich": 27362, + "▁perfection": 27363, + ")>": 27364, + "▁shorts": 27365, + "▁justified": 27366, + "peated": 27367, + "packages": 27368, + "driven": 27369, + "▁Liberty": 27370, + "▁stripped": 27371, + "шение": 27372, + "▁fünf": 27373, + "▁ecosystem": 27374, + "ixa": 27375, + "▁Fresh": 27376, + "vart": 27377, + "▁treats": 27378, + "▁stance": 27379, + "чёт": 27380, + "▁pity": 27381, + "adém": 27382, + "▁окон": 27383, + "▁Chand": 27384, + "rab": 27385, + "вший": 27386, + "inski": 27387, + "▁continually": 27388, + "▁Daddy": 27389, + "▁nightmare": 27390, + "icional": 27391, + "▁efect": 27392, + "ueblo": 27393, + "▁lanç": 27394, + "▁Collections": 27395, + "due": 27396, + "ampton": 27397, + "▁memcpy": 27398, + "▁**(": 27399, + "issent": 27400, + "▁Insp": 27401, + "▁Glasgow": 27402, + "▁furono": 27403, + "▁kindness": 27404, + "Bi": 27405, + "▁competed": 27406, + "▁oak": 27407, + "Large": 27408, + "▁disgu": 27409, + "▁kings": 27410, + "тами": 27411, + "▁stuffed": 27412, + "▁hilar": 27413, + "published": 27414, + "▁stressed": 27415, + "▁Peak": 27416, + "▁loader": 27417, + "Keyboard": 27418, + "▁reconstruction": 27419, + "▁vod": 27420, + "▁dun": 27421, + "▁understands": 27422, + "tenant": 27423, + "▁chaque": 27424, + "▁prejud": 27425, + "utat": 27426, + "▁uso": 27427, + "▁Heavy": 27428, + "▁cuatro": 27429, + "▁sidewalk": 27430, + "▁Bug": 27431, + "▁månaden": 27432, + "geo": 27433, + "▁united": 27434, + "▁Files": 27435, + "▁Аль": 27436, + "▁rugby": 27437, + "▁financing": 27438, + "▁comply": 27439, + "&#": 27440, + "▁rushing": 27441, + "▁fen": 27442, + "mong": 27443, + "▁spé": 27444, + "▁presenting": 27445, + "INCLUDING": 27446, + "ěl": 27447, + "zeichnung": 27448, + "Backup": 27449, + "▁petit": 27450, + "▁allerg": 27451, + "нут": 27452, + "▁worrying": 27453, + "▁mamm": 27454, + "▁operand": 27455, + ":%.*]]": 27456, + "▁realise": 27457, + "Commands": 27458, + "▁Bew": 27459, + "▁assumes": 27460, + "▁Covid": 27461, + "▁quand": 27462, + "tyard": 27463, + "▁Mono": 27464, + "linked": 27465, + "MARK": 27466, + "Esp": 27467, + "▁blessing": 27468, + "▁eyebrows": 27469, + "▁NV": 27470, + "▁стру": 27471, + "▁modeling": 27472, + "▁greeted": 27473, + "Workspace": 27474, + "▁pedest": 27475, + "▁неза": 27476, + "lemagne": 27477, + "Statistics": 27478, + "▁aument": 27479, + "▁speeds": 27480, + "▁syndrome": 27481, + "CONNECT": 27482, + "zahl": 27483, + "verso": 27484, + "ército": 27485, + "▁astronom": 27486, + "▁aprile": 27487, + "žen": 27488, + "веро": 27489, + "draft": 27490, + "▁gioc": 27491, + "▁comport": 27492, + "▁variance": 27493, + "▁realizing": 27494, + "EDIT": 27495, + "олові": 27496, + "▁estar": 27497, + "▁sost": 27498, + "NORMAL": 27499, + "▁ó": 27500, + "▁Andr": 27501, + "ATTRIB": 27502, + "▁rede": 27503, + "▁toes": 27504, + "▁advances": 27505, + "▁Against": 27506, + "TOM": 27507, + "rss": 27508, + "MMMM": 27509, + "▁newest": 27510, + "▁VER": 27511, + "▁phrases": 27512, + "anter": 27513, + "Launch": 27514, + "▁chr": 27515, + "▁manufactured": 27516, + "$),": 27517, + "rollment": 27518, + "eston": 27519, + "▁peint": 27520, + "”)": 27521, + "endet": 27522, + "▁Hair": 27523, + "ivalent": 27524, + "▁upright": 27525, + "gren": 27526, + "anked": 27527, + "wright": 27528, + "▁mast": 27529, + "▁onChange": 27530, + "▁debris": 27531, + "▁grap": 27532, + "etry": 27533, + "▁(__": 27534, + "▁Commerce": 27535, + "BOX": 27536, + "Tax": 27537, + "▁отри": 27538, + "▁prevention": 27539, + "▁Feel": 27540, + "▁exotic": 27541, + "▁Bark": 27542, + "▁Steam": 27543, + "fon": 27544, + "olin": 27545, + "▁eliminated": 27546, + "▁bc": 27547, + "▁Cycl": 27548, + "▁$(\"#": 27549, + "▁Parl": 27550, + "manuel": 27551, + "ospher": 27552, + "WF": 27553, + "Analy": 27554, + "▁navig": 27555, + "▁renown": 27556, + "Rx": 27557, + "▁Walt": 27558, + "uffed": 27559, + "▁foster": 27560, + "$:": 27561, + "shore": 27562, + "Connector": 27563, + "фика": 27564, + "▁realization": 27565, + "Li": 27566, + "ctxt": 27567, + "ahoo": 27568, + "▁miracle": 27569, + "▁ET": 27570, + "▁GPS": 27571, + "▁Observable": 27572, + "▁hf": 27573, + "▁magnificent": 27574, + "него": 27575, + "BIN": 27576, + "▁Dorf": 27577, + "ieck": 27578, + "vee": 27579, + "▁Craw": 27580, + "/#": 27581, + "▁pci": 27582, + "ippet": 27583, + "▁Hillary": 27584, + "▁gir": 27585, + "▁rand": 27586, + "▁laying": 27587, + "▁Different": 27588, + "boys": 27589, + "virt": 27590, + "▁encryption": 27591, + "ász": 27592, + "пор": 27593, + "▁smelled": 27594, + "▁suscept": 27595, + "cluded": 27596, + "▁Carn": 27597, + "igten": 27598, + "▁Chuck": 27599, + "▁Provinc": 27600, + "▁perí": 27601, + "▁Marshal": 27602, + "мож": 27603, + "gfx": 27604, + "oshi": 27605, + "▁WHE": 27606, + "▁relaxation": 27607, + ",.": 27608, + "were": 27609, + "▁varieties": 27610, + "▁Won": 27611, + "▁gaps": 27612, + "▁stole": 27613, + "igua": 27614, + "ющие": 27615, + "▁Hampshire": 27616, + "phrase": 27617, + "▁película": 27618, + "Processing": 27619, + "▁initialization": 27620, + "oustic": 27621, + "▁Josef": 27622, + "icating": 27623, + "▁goodness": 27624, + "TES": 27625, + "▁cope": 27626, + "▁ignorance": 27627, + "▁Brist": 27628, + "▁paras": 27629, + "▁accidentally": 27630, + "▁tand": 27631, + "ittest": 27632, + "▁ули": 27633, + "▁shipped": 27634, + "▁ост": 27635, + "elseif": 27636, + "▁usize": 27637, + "horizontal": 27638, + "▁Carr": 27639, + "▁precip": 27640, + "roz": 27641, + "pathetic": 27642, + "rived": 27643, + "rok": 27644, + "▁digging": 27645, + "мом": 27646, + "▁Mull": 27647, + "▁XIII": 27648, + "▁peas": 27649, + "▁foul": 27650, + "▁travels": 27651, + "▁Ng": 27652, + "▁составе": 27653, + "Mont": 27654, + "arde": 27655, + "▁Stefan": 27656, + "^^^^": 27657, + "▁Kiss": 27658, + "▁Ek": 27659, + "▁oktober": 27660, + "▁memorable": 27661, + "')).": 27662, + "▁Vision": 27663, + "▁Nina": 27664, + "▁Solar": 27665, + "▁highlighted": 27666, + "▁memo": 27667, + "meisterschaft": 27668, + "sidebar": 27669, + "SEE": 27670, + "▁Nevada": 27671, + "Da": 27672, + "▁drawer": 27673, + "astically": 27674, + "elde": 27675, + "scribed": 27676, + "▁priests": 27677, + "▁hommes": 27678, + "▁instructor": 27679, + "клад": 27680, + "▁spett": 27681, + "\\-": 27682, + "▁мира": 27683, + "▁Looks": 27684, + "▁sleeve": 27685, + "▁strongest": 27686, + "▁tête": 27687, + "▁Nicole": 27688, + "imper": 27689, + "нача": 27690, + "ipper": 27691, + "▁inwon": 27692, + "ilers": 27693, + "▁Deputy": 27694, + "oge": 27695, + "▁depressed": 27696, + "▁arte": 27697, + "▁combining": 27698, + "LAST": 27699, + "inted": 27700, + "▁Average": 27701, + "▁pollution": 27702, + "▁Phillips": 27703, + "▁WM": 27704, + "}}}\\": 27705, + "Added": 27706, + "▁peripher": 27707, + "Creation": 27708, + "▁italien": 27709, + "▁Choice": 27710, + "▁EXPRESS": 27711, + "▁Struct": 27712, + "ysz": 27713, + "Resize": 27714, + "ARGS": 27715, + "▁repo": 27716, + "▁чтобы": 27717, + "▁pref": 27718, + "▁earthqu": 27719, + "▁Мекси": 27720, + "▁Finale": 27721, + "▁hecho": 27722, + "requests": 27723, + "Cut": 27724, + "▁deserved": 27725, + "гово": 27726, + "▁Recent": 27727, + "▁дивизи": 27728, + "▁supportive": 27729, + "прави": 27730, + "▁irrelevant": 27731, + "'\r": 27732, + "▁ctrl": 27733, + "▁Deal": 27734, + "izada": 27735, + "uo": 27736, + "▁nort": 27737, + "geometry": 27738, + "▁Individual": 27739, + "ereg": 27740, + "▁приня": 27741, + "cref": 27742, + "══": 27743, + "▁comerc": 27744, + "=_": 27745, + "bund": 27746, + "тах": 27747, + "ilen": 27748, + "чита": 27749, + "▁corporation": 27750, + "esz": 27751, + "▁==>": 27752, + "ablish": 27753, + "Apr": 27754, + "▁ripped": 27755, + "Vars": 27756, + "stret": 27757, + "▁Francesco": 27758, + "NaN": 27759, + "▁anytime": 27760, + "▁automated": 27761, + "ostream": 27762, + "▁drawings": 27763, + "▁enhancement": 27764, + "okrat": 27765, + "▁Issue": 27766, + "вра": 27767, + "Currency": 27768, + "▁wyn": 27769, + "izarre": 27770, + "ético": 27771, + "multiple": 27772, + "▁Rate": 27773, + "▁Ich": 27774, + "▁Auss": 27775, + "▁Former": 27776, + "Curve": 27777, + "▁marvel": 27778, + "attro": 27779, + "▁сп": 27780, + "BOOL": 27781, + "сия": 27782, + "gold": 27783, + "▁Nintendo": 27784, + "▁Salvador": 27785, + "▁Solution": 27786, + "ADC": 27787, + "бора": 27788, + "▁Bennett": 27789, + "▁FR": 27790, + "▁pueden": 27791, + "patient": 27792, + "▁PG": 27793, + "▁Jin": 27794, + "▁crashed": 27795, + "▁denen": 27796, + "▁Sample": 27797, + "▁Quebec": 27798, + "itories": 27799, + "▁blinked": 27800, + "▁lion": 27801, + "▁voce": 27802, + "▁Impact": 27803, + "▁Mau": 27804, + "▁Nie": 27805, + "▁lob": 27806, + "▁две": 27807, + "orneys": 27808, + "▁coastal": 27809, + "▁sensors": 27810, + "▁XII": 27811, + "▁illusion": 27812, + "oji": 27813, + "▁INC": 27814, + "▁Duncan": 27815, + "yk": 27816, + "▁affecting": 27817, + "pul": 27818, + "▁Napoleon": 27819, + "▁акаде": 27820, + "▁compt": 27821, + "▁profitable": 27822, + "loe": 27823, + "▁deuxième": 27824, + "▁WC": 27825, + "▁viable": 27826, + "▁Drug": 27827, + "TextBox": 27828, + "▁luminos": 27829, + "auté": 27830, + "yc": 27831, + "ště": 27832, + "▁affiliates": 27833, + "ilda": 27834, + "conduct": 27835, + "▁ebenfalls": 27836, + "▁AMD": 27837, + "▁Monitor": 27838, + "▁Companies": 27839, + "▁corrected": 27840, + "äck": 27841, + "SYSTEM": 27842, + "otherapy": 27843, + "▁перед": 27844, + "▁blues": 27845, + "atisf": 27846, + "although": 27847, + "rost": 27848, + "SCAN": 27849, + "▁RAM": 27850, + "ціональ": 27851, + "▁vendors": 27852, + "▁customs": 27853, + "▁activate": 27854, + "▁blogs": 27855, + "▁brace": 27856, + "▁strat": 27857, + "anje": 27858, + "щё": 27859, + "▁tide": 27860, + "▁Brigade": 27861, + "getOperand": 27862, + "▁aliment": 27863, + "▁achievements": 27864, + "▁suspicion": 27865, + "▁touchdown": 27866, + "broad": 27867, + "iore": 27868, + "Comparison": 27869, + "▁mum": 27870, + "English": 27871, + "▁Picture": 27872, + "▁Mouse": 27873, + "amd": 27874, + "▁[`": 27875, + "▁denomin": 27876, + "▁Aleks": 27877, + "▁prevents": 27878, + "ób": 27879, + "fed": 27880, + "▁Pray": 27881, + "▁shine": 27882, + "▁clutch": 27883, + "mux": 27884, + "Appro": 27885, + "▁notably": 27886, + "chio": 27887, + "nage": 27888, + "HAS": 27889, + "▁')": 27890, + "▁Miche": 27891, + "tg": 27892, + "::~": 27893, + "▁amely": 27894, + "▁rodz": 27895, + "zs": 27896, + "trait": 27897, + "▁klass": 27898, + "fö": 27899, + "▁destac": 27900, + "▁Clara": 27901, + "frequency": 27902, + "▁Git": 27903, + "▁поль": 27904, + "▁frequencies": 27905, + "▁febrero": 27906, + "▁stumbled": 27907, + "кою": 27908, + "▁Names": 27909, + "▁Flight": 27910, + "▁prey": 27911, + "▁medio": 27912, + "▁VAR": 27913, + "▁Float": 27914, + "▁Ernest": 27915, + "▁Marcatori": 27916, + "oport": 27917, + "▁cancellation": 27918, + "▁Bryan": 27919, + "————": 27920, + "Luc": 27921, + "▁libre": 27922, + "▁título": 27923, + "*>": 27924, + "▁Sandy": 27925, + "▁Marina": 27926, + "Been": 27927, + "▁wal": 27928, + "▁Kultur": 27929, + "▁explode": 27930, + "▁limiting": 27931, + "▁presumably": 27932, + "▁pb": 27933, + "▁Merc": 27934, + "▁реки": 27935, + "learning": 27936, + "Catalog": 27937, + "▁Census": 27938, + "lte": 27939, + "▁NET": 27940, + "raising": 27941, + "ське": 27942, + "staff": 27943, + "▁Quinn": 27944, + "▁memorial": 27945, + "пня": 27946, + "▁cuenta": 27947, + "▁XI": 27948, + "lbl": 27949, + "▁varies": 27950, + "▁fluctuations": 27951, + "▁долж": 27952, + "▁особи": 27953, + "▁warehouse": 27954, + "However": 27955, + "▁corrections": 27956, + "dhd": 27957, + "▁fals": 27958, + "▁controversy": 27959, + "▁curse": 27960, + "▁télé": 27961, + "řed": 27962, + "▁AU": 27963, + "▁тор": 27964, + "▁crít": 27965, + "idan": 27966, + "iliary": 27967, + "▁Panel": 27968, + "cule": 27969, + "▁Poor": 27970, + "▁BA": 27971, + "▁ignorant": 27972, + "èmes": 27973, + "▁aesthetic": 27974, + "Linked": 27975, + "getInt": 27976, + "Unicode": 27977, + "[@": 27978, + "▁Zent": 27979, + "Manifest": 27980, + "▁vars": 27981, + "PB": 27982, + "▁ву": 27983, + "▁Describe": 27984, + "▁Anything": 27985, + "oirs": 27986, + "▁socks": 27987, + "▁imped": 27988, + "▁neue": 27989, + "▁dispers": 27990, + "Collect": 27991, + "filer": 27992, + "▁Frau": 27993, + "▁Hockey": 27994, + "▁teens": 27995, + "▁Roberto": 27996, + "lauf": 27997, + "вать": 27998, + "▁ско": 27999, + "isArray": 28000, + "▁teenager": 28001, + "Built": 28002, + "▁loudly": 28003, + "Capacity": 28004, + "▁adventures": 28005, + "▁Molly": 28006, + "recogn": 28007, + "bars": 28008, + "▁Lor": 28009, + "▁può": 28010, + "▁mong": 28011, + "inement": 28012, + "Assignment": 28013, + "▁diz": 28014, + "lessness": 28015, + "▁Halloween": 28016, + "▁bitmap": 28017, + "Rom": 28018, + "нар": 28019, + "▁rebel": 28020, + "▁radial": 28021, + "measure": 28022, + "nit": 28023, + "▁Assume": 28024, + "▁assignments": 28025, + "▁Isn": 28026, + "▁altre": 28027, + "ßer": 28028, + "наль": 28029, + "▁flies": 28030, + "▁droit": 28031, + "▁thickness": 28032, + "▁enjo": 28033, + "▁dwell": 28034, + "▁homosexual": 28035, + "▁eval": 28036, + "$_{": 28037, + "asia": 28038, + "▁philos": 28039, + "getCurrent": 28040, + "▁veterans": 28041, + "▁Berkeley": 28042, + "▁wildlife": 28043, + "Cop": 28044, + "vern": 28045, + "▁Ú": 28046, + "tos": 28047, + "▁Led": 28048, + "▁keywords": 28049, + "▁medications": 28050, + "neum": 28051, + "▁jamais": 28052, + "▁Buc": 28053, + "▁PD": 28054, + "▁Statement": 28055, + "▁PI": 28056, + "▁Jackie": 28057, + "▁ordin": 28058, + "▁kör": 28059, + "enze": 28060, + "▁utilized": 28061, + "áct": 28062, + "azed": 28063, + "▁severely": 28064, + "▁även": 28065, + "▁libro": 28066, + "▁Eu": 28067, + "äst": 28068, + "PART": 28069, + "▁Butler": 28070, + "▁puzzle": 28071, + "Fall": 28072, + "Country": 28073, + "pfn": 28074, + "▁україн": 28075, + "▁Orchestra": 28076, + "▁alto": 28077, + "▁ancora": 28078, + "▁decomposition": 28079, + "▁م": 28080, + "▁appetite": 28081, + "adu": 28082, + "▁THAT": 28083, + "▁comenz": 28084, + "mina": 28085, + "▁initiated": 28086, + "▁Tat": 28087, + "▁sometime": 28088, + "rek": 28089, + "bread": 28090, + "▁Statistics": 28091, + "▁Cob": 28092, + "Follow": 28093, + "▁geometric": 28094, + "шла": 28095, + "▁proceedings": 28096, + "Dlg": 28097, + "seven": 28098, + "▁[-": 28099, + "▁Buffalo": 28100, + "▁blacks": 28101, + "▁sov": 28102, + "▁custody": 28103, + "▁ras": 28104, + "▁tattoo": 28105, + "öffentlicht": 28106, + "Blo": 28107, + "Austral": 28108, + "▁recuper": 28109, + "лев": 28110, + "▁bem": 28111, + "▁thou": 28112, + "oriented": 28113, + "vir": 28114, + "▁colony": 28115, + "▁Stanford": 28116, + "Absolute": 28117, + "adrat": 28118, + "▁Situ": 28119, + "▁souvent": 28120, + "EXEC": 28121, + "▁mű": 28122, + "▁apartments": 28123, + "▁случа": 28124, + "▁ano": 28125, + "WINDO": 28126, + "acci": 28127, + "▁Lau": 28128, + "court": 28129, + "▁manifold": 28130, + "▁coalition": 28131, + "▁XIV": 28132, + "Attrib": 28133, + "ascade": 28134, + "▁wheat": 28135, + "▁strengths": 28136, + "FREE": 28137, + "EMPTY": 28138, + "▁hey": 28139, + "ascular": 28140, + "▁plasma": 28141, + "▁bob": 28142, + "Separator": 28143, + "=\"${": 28144, + "▁Zag": 28145, + "▁projet": 28146, + "▁smoothly": 28147, + "SEQU": 28148, + "analy": 28149, + "attachment": 28150, + "▁ES": 28151, + "▁popped": 28152, + "ős": 28153, + "tom": 28154, + "▁són": 28155, + "▁rott": 28156, + "Utilities": 28157, + "hadoop": 28158, + "▁sotto": 28159, + "autor": 28160, + "▁Georges": 28161, + "▁který": 28162, + "▁gruppo": 28163, + "▁когда": 28164, + "▁меда": 28165, + "▁instrumental": 28166, + "▁Writer": 28167, + "▁setTimeout": 28168, + "ikk": 28169, + "▁Dopo": 28170, + "]);\r": 28171, + "▁practicing": 28172, + "▁Ronald": 28173, + "▁уби": 28174, + "▁agrees": 28175, + "▁denoted": 28176, + "ismiss": 28177, + "▁interviewed": 28178, + "templates": 28179, + "ři": 28180, + "administr": 28181, + "▁Butter": 28182, + "▁XVII": 28183, + "▁positioned": 28184, + "▁Fourth": 28185, + "▁overwhelmed": 28186, + "▁Regular": 28187, + "▁reprezent": 28188, + "кономи": 28189, + "▁expects": 28190, + "Indices": 28191, + "▁marijuana": 28192, + "▁zaj": 28193, + "▁Bren": 28194, + "▁begg": 28195, + "▁nahm": 28196, + "▁interrog": 28197, + "тие": 28198, + "▁Bun": 28199, + "▁серед": 28200, + "▁shelves": 28201, + "▁которых": 28202, + "▁Frauen": 28203, + "▁Sergeant": 28204, + "▁успе": 28205, + "matched": 28206, + "▁donne": 28207, + "▁touches": 28208, + "abort": 28209, + "▁vale": 28210, + "▁institutional": 28211, + "▁Mons": 28212, + "▁ambitious": 28213, + "▁nonetheless": 28214, + "jd": 28215, + "пей": 28216, + "▁backpack": 28217, + "dao": 28218, + "вия": 28219, + "▁surroundings": 28220, + "|_{": 28221, + "▁gegründ": 28222, + "disp": 28223, + "▁moisture": 28224, + "▁wyd": 28225, + "▁traders": 28226, + "▁Erst": 28227, + "▁Galaxy": 28228, + "▁воло": 28229, + "▁Peru": 28230, + "▁priorities": 28231, + "▁pronounced": 28232, + "▁CBS": 28233, + "▁Palm": 28234, + "▁expans": 28235, + "▁energet": 28236, + "▁Condition": 28237, + "▁Sver": 28238, + "nested": 28239, + "▁февраля": 28240, + "hero": 28241, + "▁коло": 28242, + "▁Films": 28243, + "Bon": 28244, + "éal": 28245, + "ployed": 28246, + "trained": 28247, + "▁első": 28248, + "▁lust": 28249, + "atinum": 28250, + "oyle": 28251, + "▁Jet": 28252, + "ждения": 28253, + "▁surveys": 28254, + "bee": 28255, + "workers": 28256, + "records": 28257, + "calendar": 28258, + "bbing": 28259, + "regation": 28260, + "dashboard": 28261, + "King": 28262, + "▁vista": 28263, + "▁depicted": 28264, + "▁occurring": 28265, + "▁офи": 28266, + "▁sandwich": 28267, + "rcu": 28268, + "kern": 28269, + "▁minut": 28270, + "▁смер": 28271, + "▁td": 28272, + "solete": 28273, + "Complex": 28274, + "▁tunn": 28275, + "▁scarc": 28276, + "stead": 28277, + "▁Fail": 28278, + "▁Rs": 28279, + "▁trails": 28280, + "kem": 28281, + "▁Romans": 28282, + "ativity": 28283, + "Previous": 28284, + "▁depress": 28285, + "▁resigned": 28286, + "getDefault": 28287, + "▁Tibet": 28288, + "▁Franco": 28289, + "\")));": 28290, + "▁injection": 28291, + "removed": 28292, + "▁praised": 28293, + "▁Asc": 28294, + "erase": 28295, + "▁commissioned": 28296, + "MAIL": 28297, + "▁Boh": 28298, + "Poly": 28299, + "▁cinq": 28300, + "▁Above": 28301, + "▁Joshua": 28302, + "ZERO": 28303, + "▁summit": 28304, + "▁Urs": 28305, + "▁curl": 28306, + "▁visa": 28307, + "▁resur": 28308, + "={'": 28309, + "feat": 28310, + "▁absorb": 28311, + "▁planets": 28312, + "▁princess": 28313, + "▁Jahrhunderts": 28314, + "xp": 28315, + "▁NBC": 28316, + "▁коми": 28317, + "▁FUN": 28318, + "▁neuen": 28319, + "▁déjà": 28320, + "▁Oz": 28321, + "bben": 28322, + "VIDEO": 28323, + "▁ejempl": 28324, + "▁considers": 28325, + "atri": 28326, + "▁arrog": 28327, + "ioso": 28328, + "▁hace": 28329, + "▁contacted": 28330, + "▁unple": 28331, + "▁sponsored": 28332, + "▁trainer": 28333, + "sbi": 28334, + "▁занима": 28335, + "Criterion": 28336, + "ното": 28337, + "scheme": 28338, + "ennial": 28339, + "perform": 28340, + "▁fixing": 28341, + "▁постро": 28342, + "arb": 28343, + "EXIT": 28344, + "▁café": 28345, + "ituted": 28346, + "riages": 28347, + "Tur": 28348, + "▁haber": 28349, + "elasticsearch": 28350, + "▁ал": 28351, + "rh": 28352, + "▁voll": 28353, + "CLU": 28354, + "Mil": 28355, + "▁membres": 28356, + "▁remarked": 28357, + "вана": 28358, + "=\"_": 28359, + "Less": 28360, + "(\"\");": 28361, + "▁Yale": 28362, + "berries": 28363, + "▁releasing": 28364, + "▁imports": 28365, + "idea": 28366, + "▁(+": 28367, + "▁arqu": 28368, + "ificación": 28369, + "▁пара": 28370, + "▁Rangers": 28371, + "Mic": 28372, + "▁nederbörd": 28373, + "▁imaginary": 28374, + "▁specialists": 28375, + "▁hoof": 28376, + "Modules": 28377, + "▁sadly": 28378, + "ceil": 28379, + "TabIndex": 28380, + "ationale": 28381, + "▁Partner": 28382, + "tbody": 28383, + "▁leverage": 28384, + "DN": 28385, + "▁Prec": 28386, + "▁Sé": 28387, + "▁Mam": 28388, + "▁afin": 28389, + "isValid": 28390, + "Pse": 28391, + "▁сторо": 28392, + "▁chopped": 28393, + "▁Minor": 28394, + "▁dabei": 28395, + "David": 28396, + "ussia": 28397, + "▁деревня": 28398, + "▁Identity": 28399, + "▁LGBT": 28400, + "ције": 28401, + "▁Orts": 28402, + "▁parti": 28403, + "▁Bachelor": 28404, + "uga": 28405, + "▁OPT": 28406, + "▁Seth": 28407, + "▁LIABLE": 28408, + "▁inaugur": 28409, + "▁Shanghai": 28410, + "▁relaxing": 28411, + "циона": 28412, + "\"%": 28413, + "▁obey": 28414, + "▁Airlines": 28415, + "Links": 28416, + "▁Celt": 28417, + "▁Admin": 28418, + "agation": 28419, + "▁worries": 28420, + "INTE": 28421, + "arith": 28422, + "Fatalf": 28423, + "]])": 28424, + "colm": 28425, + "▁archae": 28426, + "▁brushed": 28427, + "▁tät": 28428, + "▁structured": 28429, + "тии": 28430, + "▁homem": 28431, + "[:,": 28432, + "▁navy": 28433, + "getKey": 28434, + "powered": 28435, + "▁sucked": 28436, + "▁zomb": 28437, + "issant": 28438, + "▁Might": 28439, + "▁Pull": 28440, + "rir": 28441, + "▁пі": 28442, + "▁seas": 28443, + "▁Wrest": 28444, + "▁tense": 28445, + "▁atm": 28446, + "▁havet": 28447, + "▁pierws": 28448, + "▁tragic": 28449, + "▁Diff": 28450, + "▁confidential": 28451, + "successful": 28452, + "ęż": 28453, + "▁Chain": 28454, + "▁Kenya": 28455, + "Choice": 28456, + "ocur": 28457, + "aniu": 28458, + "▁consultant": 28459, + "▁Advis": 28460, + "Lif": 28461, + "▁Lors": 28462, + "avorite": 28463, + "▁utilizing": 28464, + "▁vintage": 28465, + "Matcher": 28466, + "▁membre": 28467, + "▁Expect": 28468, + "▁tracing": 28469, + "nog": 28470, + "▁dej": 28471, + "▁уче": 28472, + "▁loops": 28473, + "▁onclick": 28474, + "▁GPU": 28475, + "▁Albums": 28476, + "▁Archives": 28477, + "вата": 28478, + "▁stove": 28479, + "шли": 28480, + "ancies": 28481, + "▁gemeente": 28482, + "mob": 28483, + "PDF": 28484, + "eso": 28485, + "▁vég": 28486, + "Resolve": 28487, + "▁teaches": 28488, + "ложе": 28489, + "▁ство": 28490, + "▁Одна": 28491, + "▁fid": 28492, + "Something": 28493, + "▁nebo": 28494, + "▁Valentine": 28495, + "rowning": 28496, + "▁але": 28497, + "awi": 28498, + "ishi": 28499, + "▁SPI": 28500, + "▁spel": 28501, + "▁біль": 28502, + "▁participant": 28503, + "▁Ned": 28504, + "▁Gast": 28505, + "▁blond": 28506, + "▁saves": 28507, + "colored": 28508, + "▁ACTION": 28509, + "▁Politiker": 28510, + "}$)": 28511, + "▁Dum": 28512, + "dentry": 28513, + "Student": 28514, + "▁~=": 28515, + "loads": 28516, + "▁Foster": 28517, + "一个": 28518, + "▁PK": 28519, + "▁SB": 28520, + "▁Hern": 28521, + "▁Exhib": 28522, + "Listeners": 28523, + "Sun": 28524, + "plac": 28525, + "▁Bever": 28526, + "▁incluy": 28527, + "▁dc": 28528, + "argc": 28529, + "▁ged": 28530, + "спа": 28531, + "▁Formula": 28532, + "▁сем": 28533, + "▁empt": 28534, + "unregister": 28535, + "▁Queensland": 28536, + "ández": 28537, + "otive": 28538, + "▁alley": 28539, + "▁Democrat": 28540, + "▁travail": 28541, + "▁$,": 28542, + "RP": 28543, + "рое": 28544, + "personal": 28545, + "▁période": 28546, + "HOME": 28547, + "omes": 28548, + "▁recognised": 28549, + "heng": 28550, + "▁Jung": 28551, + "▁Roland": 28552, + "▁convicted": 28553, + "Locked": 28554, + "▁mari": 28555, + "▁Luxem": 28556, + "referto": 28557, + "Deleted": 28558, + "intent": 28559, + "▁Staats": 28560, + "▁області": 28561, + "ит": 28562, + "▁саве": 28563, + "▁Protocol": 28564, + "ając": 28565, + "chk": 28566, + "TypeInfo": 28567, + "▁pkt": 28568, + "▁scandal": 28569, + "▁individually": 28570, + "FMT": 28571, + "▁nj": 28572, + "abile": 28573, + "▁Rivers": 28574, + "PROPERTY": 28575, + "VB": 28576, + "wort": 28577, + "▁splitting": 28578, + "achten": 28579, + "▁ARISING": 28580, + "▁sip": 28581, + "▁fres": 28582, + "▁groom": 28583, + "Hol": 28584, + "▁canon": 28585, + "▁abruptly": 28586, + "▁afterward": 28587, + "▁Running": 28588, + "▁ji": 28589, + "▁%,": 28590, + "▁Palestinian": 28591, + "RW": 28592, + "pgfscope": 28593, + "▁countryside": 28594, + "▁fortunate": 28595, + "▁cél": 28596, + "▁Pointer": 28597, + "ensors": 28598, + "rating": 28599, + "▁buffers": 28600, + "▁remot": 28601, + "▁PropTypes": 28602, + "▁Nah": 28603, + "altern": 28604, + "▁easiest": 28605, + "▁invas": 28606, + "▁clk": 28607, + "copyright": 28608, + "▁blanc": 28609, + "SAMP": 28610, + "▁Cohen": 28611, + "▁Shell": 28612, + "▁destroying": 28613, + "▁Zel": 28614, + "dater": 28615, + "čen": 28616, + "▁filing": 28617, + "▁integrate": 28618, + "xit": 28619, + "▁RET": 28620, + "lene": 28621, + "calls": 28622, + "▁slaughter": 28623, + "initialized": 28624, + "unches": 28625, + "▁Trace": 28626, + "efficient": 28627, + "▁Woods": 28628, + "▁longitud": 28629, + "GN": 28630, + "▁Kont": 28631, + "▁chunks": 28632, + "ách": 28633, + "▁unemployment": 28634, + "acom": 28635, + "▁slowed": 28636, + "▁outlined": 28637, + "xffff": 28638, + "▁ikke": 28639, + "▁workspace": 28640, + "Mc": 28641, + "▁kicking": 28642, + "▁embedding": 28643, + "chnitt": 28644, + "erten": 28645, + "▁Interior": 28646, + "▁Songs": 28647, + "mmc": 28648, + "▁analyzed": 28649, + "▁Coupe": 28650, + "▁favorites": 28651, + "▁tt": 28652, + "▁той": 28653, + "Routing": 28654, + "▁Silva": 28655, + "▁anderem": 28656, + "▁honom": 28657, + "▁использова": 28658, + ".\"]": 28659, + "▁Wu": 28660, + "legt": 28661, + "▁spoon": 28662, + "▁jap": 28663, + "▁Extension": 28664, + "erne": 28665, + "▁vagy": 28666, + "▁села": 28667, + "▁функ": 28668, + "▁analytics": 28669, + "▁sug": 28670, + "▁Async": 28671, + "▁peaks": 28672, + "▁Gym": 28673, + "▁lawsuit": 28674, + "<>": 28675, + "ialis": 28676, + "etric": 28677, + "faced": 28678, + "▁disrupt": 28679, + "▁få": 28680, + "Inputs": 28681, + "`);": 28682, + "▁Mend": 28683, + "gon": 28684, + "▁\",\"": 28685, + "▁nerves": 28686, + "▁doubts": 28687, + "sap": 28688, + "▁sow": 28689, + ",\\,\\": 28690, + "▁BS": 28691, + "▁Glad": 28692, + "▁aster": 28693, + "œuvre": 28694, + "▁Bangl": 28695, + "▁iPad": 28696, + "useppe": 28697, + "▁conducting": 28698, + "▁({\\": 28699, + "▁Harbor": 28700, + "psz": 28701, + "▁FIFA": 28702, + "_**": 28703, + "emor": 28704, + "▁": 28705, + "e": 28706, + "t": 28707, + "a": 28708, + "o": 28709, + "i": 28710, + "n": 28711, + "r": 28712, + "s": 28713, + "l": 28714, + "d": 28715, + "h": 28716, + "c": 28717, + "u": 28718, + "m": 28719, + "p": 28720, + "g": 28721, + "f": 28722, + ".": 28723, + "y": 28724, + ",": 28725, + "b": 28726, + "w": 28727, + "v": 28728, + "k": 28729, + "_": 28730, + ")": 28731, + "(": 28732, + "-": 28733, + "0": 28734, + "S": 28735, + "*": 28736, + "I": 28737, + "T": 28738, + "\"": 28739, + "1": 28740, + "A": 28741, + "'": 28742, + "C": 28743, + "x": 28744, + ";": 28745, + "=": 28746, + ":": 28747, + "/": 28748, + "E": 28749, + "2": 28750, + "{": 28751, + "}": 28752, + "P": 28753, + "R": 28754, + "M": 28755, + "\\": 28756, + "D": 28757, + "L": 28758, + "N": 28759, + "B": 28760, + "о": 28761, + "O": 28762, + "а": 28763, + "z": 28764, + "F": 28765, + "|": 28766, + ">": 28767, + "j": 28768, + "H": 28769, + "3": 28770, + "#": 28771, + "и": 28772, + "е": 28773, + "9": 28774, + "q": 28775, + "$": 28776, + "G": 28777, + "н": 28778, + "U": 28779, + "W": 28780, + "4": 28781, + "5": 28782, + "8": 28783, + "6": 28784, + "р": 28785, + "т": 28786, + "7": 28787, + "с": 28788, + "<": 28789, + "V": 28790, + "в": 28791, + "[": 28792, + "]": 28793, + "л": 28794, + "к": 28795, + "K": 28796, + "é": 28797, + "J": 28798, + "д": 28799, + "&": 28800, + "\r": 28801, + "Y": 28802, + "м": 28803, + "?": 28804, + "у": 28805, + "+": 28806, + "п": 28807, + "!": 28808, + "’": 28809, + "г": 28810, + "я": 28811, + "з": 28812, + "і": 28813, + "X": 28814, + "^": 28815, + "–": 28816, + "б": 28817, + "@": 28818, + "й": 28819, + "á": 28820, + "—": 28821, + "ь": 28822, + "%": 28823, + "Q": 28824, + "ó": 28825, + "ч": 28826, + "í": 28827, + "Z": 28828, + "ы": 28829, + "ä": 28830, + "х": 28831, + "`": 28832, + "ц": 28833, + "ö": 28834, + "“": 28835, + "ж": 28836, + "ü": 28837, + "”": 28838, + "à": 28839, + "è": 28840, + "ш": 28841, + "ю": 28842, + "ł": 28843, + "С": 28844, + "~": 28845, + "ф": 28846, + "П": 28847, + "»": 28848, + "В": 28849, + "«": 28850, + "å": 28851, + "К": 28852, + "щ": 28853, + "·": 28854, + "ј": 28855, + "М": 28856, + "ç": 28857, + "А": 28858, + "Н": 28859, + "Р": 28860, + "Б": 28861, + "č": 28862, + "ú": 28863, + "ę": 28864, + "ã": 28865, + "ą": 28866, + "ă": 28867, + "Д": 28868, + "ї": 28869, + "ъ": 28870, + "ě": 28871, + "Г": 28872, + "š": 28873, + "О": 28874, + "Т": 28875, + "ê": 28876, + "ñ": 28877, + "…": 28878, + "ž": 28879, + "ß": 28880, + "ё": 28881, + "ż": 28882, + "ř": 28883, + "ś": 28884, + "Л": 28885, + "ő": 28886, + "„": 28887, + "э": 28888, + "ý": 28889, + "У": 28890, + "â": 28891, + "И": 28892, + "є": 28893, + "‘": 28894, + "î": 28895, + "З": 28896, + "Ф": 28897, + "ò": 28898, + "•": 28899, + "ć": 28900, + "É": 28901, + "°": 28902, + "ș": 28903, + "Х": 28904, + "ț": 28905, + "ô": 28906, + "Е": 28907, + "ń": 28908, + "Ч": 28909, + "Ш": 28910, + "ø": 28911, + "ù": 28912, + "ů": 28913, + "的": 28914, + "ا": 28915, + "æ": 28916, + "њ": 28917, + "љ": 28918, + "ë": 28919, + "ï": 28920, + "Э": 28921, + "£": 28922, + "−": 28923, + ",": 28924, + "õ": 28925, + "ћ": 28926, + "­": 28927, + "Ц": 28928, + "І": 28929, + "ā": 28930, + "ű": 28931, + "†": 28932, + "ل": 28933, + "ō": 28934, + "​": 28935, + "º": 28936, + "Я": 28937, + "′": 28938, + "Á": 28939, + "Ö": 28940, + "²": 28941, + "Ж": 28942, + "ì": 28943, + "。": 28944, + "数": 28945, + "×": 28946, + "ر": 28947, + "α": 28948, + "́": 28949, + "Ю": 28950, + "û": 28951, + "œ": 28952, + "ı": 28953, + "م": 28954, + "ن": 28955, + "ª": 28956, + "ź": 28957, + "ο": 28958, + "″": 28959, + "€": 28960, + "Ü": 28961, + "و": 28962, + "用": 28963, + "À": 28964, + "Č": 28965, + "Š": 28966, + "ت": 28967, + "د": 28968, + "一": 28969, + "¿": 28970, + "是": 28971, + "ي": 28972, + "ђ": 28973, + "®": 28974, + "ی": 28975, + "ν": 28976, + "đ": 28977, + "τ": 28978, + "─": 28979, + "ι": 28980, + "ε": 28981, + "→": 28982, + "ب": 28983, + "Å": 28984, + "ū": 28985, + "№": 28986, + "ş": 28987, + "不": 28988, + "џ": 28989, + "ー": 28990, + "中": 28991, + "Î": 28992, + "の": 28993, + ":": 28994, + "个": 28995, + "Й": 28996, + "ρ": 28997, + "有": 28998, + "Ä": 28999, + " ": 29000, + "ī": 29001, + "©": 29002, + "为": 29003, + "ه": 29004, + "י": 29005, + "ו": 29006, + "时": 29007, + "س": 29008, + "Ś": 29009, + "在": 29010, + "件": 29011, + "取": 29012, + "ς": 29013, + "™": 29014, + "이": 29015, + "σ": 29016, + "μ": 29017, + "定": 29018, + "文": 29019, + "据": 29020, + "置": 29021, + "Ž": 29022, + "±": 29023, + "表": 29024, + "成": 29025, + "ň": 29026, + "λ": 29027, + "¡": 29028, + "È": 29029, + "π": 29030, + "字": 29031, + "│": 29032, + "Ј": 29033, + "回": 29034, + "Є": 29035, + "到": 29036, + "行": 29037, + "§": 29038, + "½": 29039, + "ع": 29040, + "、": 29041, + "Ł": 29042, + "다": 29043, + "ン": 29044, + "κ": 29045, + "名": 29046, + "ה": 29047, + "入": 29048, + "η": 29049, + "大": 29050, + "对": 29051, + "可": 29052, + "Â": 29053, + "上": 29054, + "█": 29055, + "新": 29056, + "ف": 29057, + "加": 29058, + "要": 29059, + "Ż": 29060, + "下": 29061, + "分": 29062, + "值": 29063, + "ת": 29064, + "出": 29065, + "类": 29066, + "请": 29067, + "’": 29068, + "息": 29069, + "Ú": 29070, + "υ": 29071, + "获": 29072, + "示": 29073, + "以": 29074, + "ר": 29075, + "接": 29076, + "ל": 29077, + "を": 29078, + "存": 29079, + "信": 29080, + "设": 29081, + "方": 29082, + "ش": 29083, + "能": 29084, + "点": 29085, + "人": 29086, + "前": 29087, + "ğ": 29088, + "作": 29089, + "═": 29090, + "↘": 29091, + "ð": 29092, + "理": 29093, + "■": 29094, + "法": 29095, + "️": 29096, + "ˈ": 29097, + "果": 29098, + "发": 29099, + "ح": 29100, + "γ": 29101, + "ɵ": 29102, + "า": 29103, + "َ": 29104, + "了": 29105, + "户": 29106, + "Í": 29107, + "ə": 29108, + "ス": 29109, + "查": 29110, + "し": 29111, + "מ": 29112, + "单": 29113, + "ť": 29114, + "ق": 29115, + "る": 29116, + "间": 29117, + "如": 29118, + "本": 29119, + "后": 29120, + "ί": 29121, + "式": 29122, + "ト": 29123, + "Щ": 29124, + "Ó": 29125, + "す": 29126, + "א": 29127, + "生": 29128, + "动": 29129, + "ک": 29130, + "和": 29131, + "い": 29132, + "€": 29133, + "ა": 29134, + "가": 29135, + "하": 29136, + "�": 29137, + "小": 29138, + "返": 29139, + "否": 29140, + "ة": 29141, + "日": 29142, + "로": 29143, + "标": 29144, + "码": 29145, + "地": 29146, + "位": 29147, + "에": 29148, + " ": 29149, + "列": 29150, + "수": 29151, + "β": 29152, + "除": 29153, + "使": 29154, + "ש": 29155, + "ج": 29156, + "イ": 29157, + "δ": 29158, + "自": 29159, + "于": 29160, + "지": 29161, + "当": 29162, + "所": 29163, + "기": 29164, + "ი": 29165, + "ב": 29166, + "ร": 29167, + "★": 29168, + "子": 29169, + "号": 29170, + "ك": 29171, + "参": 29172, + "型": 29173, + "に": 29174, + "는": 29175, + "这": 29176, + "开": 29177, + "น": 29178, + "会": 29179, + "器": 29180, + "面": 29181, + "ル": 29182, + "图": 29183, + "度": 29184, + ")": 29185, + "(": 29186, + "의": 29187, + "内": 29188, + "을": 29189, + "最": 29190, + "”": 29191, + "化": 29192, + "建": 29193, + "니": 29194, + "量": 29195, + "😂": 29196, + "始": 29197, + "ē": 29198, + "خ": 29199, + "를": 29200, + "ά": 29201, + "过": 29202, + "³": 29203, + "´": 29204, + "组": 29205, + "功": 29206, + "‎": 29207, + "Ÿ": 29208, + "区": 29209, + "ز": 29210, + "ґ": 29211, + "ό": 29212, + "ッ": 29213, + "ω": 29214, + "Ç": 29215, + "选": 29216, + "通": 29217, + "结": 29218, + "录": 29219, + "改": 29220, + "ク": 29221, + "目": 29222, + "指": 29223, + "务": 29224, + "๐": 29225, + "输": 29226, + "た": 29227, + "อ": 29228, + "关": 29229, + "で": 29230, + "调": 29231, + "ा": 29232, + "정": 29233, + "合": 29234, + "已": 29235, + "시": 29236, + "部": 29237, + "页": 29238, + "━": 29239, + "ː": 29240, + "ま": 29241, + "我": 29242, + "求": 29243, + "市": 29244, + "次": 29245, + "נ": 29246, + "实": 29247, + "将": 29248, + "重": 29249, + "更": 29250, + "制": 29251, + "符": 29252, + "配": 29253, + "象": 29254, + "θ": 29255, + "ก": 29256, + "て": 29257, + "进": 29258, + "需": 29259, + "Đ": 29260, + "性": 29261, + "认": 29262, + "来": 29263, + "题": 29264, + "程": 29265, + "模": 29266, + "!": 29267, + "失": 29268, + "口": 29269, + "な": 29270, + "έ": 29271, + "": 29272, + "空": 29273, + "‍": 29274, + "期": 29275, + "者": 29276, + "は": 29277, + "Ђ": 29278, + "提": 29279, + "ή": 29280, + "ラ": 29281, + "한": 29282, + "态": 29283, + "复": 29284, + "ง": 29285, + "ე": 29286, + "Ø": 29287, + "리": 29288, + "修": 29289, + "‚": 29290, + "得": 29291, + "多": 29292, + "格": 29293, + "자": 29294, + "ע": 29295, + "่": 29296, + "函": 29297, + "应": 29298, + "↗": 29299, + "्": 29300, + "เ": 29301, + "正": 29302, + "注": 29303, + "스": 29304, + "서": 29305, + "リ": 29306, + "φ": 29307, + "ص": 29308, + "が": 29309, + "则": 29310, + "消": 29311, + "节": 29312, + "序": 29313, + "代": 29314, + "사": 29315, + "と": 29316, + "ד": 29317, + "้": 29318, + "र": 29319, + "此": 29320, + "保": 29321, + "ア": 29322, + "ư": 29323, + "인": 29324, + "ė": 29325, + "处": 29326, + "删": 29327, + "ɛ": 29328, + "容": 29329, + "ط": 29330, + "“": 29331, + "之": 29332, + "包": 29333, + "状": 29334, + "ド": 29335, + "İ": 29336, + "体": 29337, + "同": 29338, + "事": 29339, + "🙂": 29340, + "タ": 29341, + "χ": 29342, + "ʿ": 29343, + "Ș": 29344, + "主": 29345, + "品": 29346, + "ק": 29347, + "询": 29348, + "创": 29349, + "该": 29350, + " ": 29351, + "元": 29352, + "第": 29353, + "天": 29354, + "或": 29355, + "年": 29356, + "转": 29357, + "ח": 29358, + "传": 29359, + "ţ": 29360, + "路": 29361, + "例": 29362, + "机": 29363, + "Ã": 29364, + "ď": 29365, + "高": 29366, + "相": 29367, + "โ": 29368, + "片": 29369, + "―": 29370, + "操": 29371, + "ա": 29372, + "ม": 29373, + "全": 29374, + "无": 29375, + "月": 29376, + "称": 29377, + "ั": 29378, + "就": 29379, + "™": 29380, + "明": 29381, + "计": 29382, + "你": 29383, + "败": 29384, + "密": 29385, + "解": 29386, + "れ": 29387, + "أ": 29388, + "变": 29389, + "段": 29390, + "条": 29391, + "默": 29392, + "●": 29393, + "ล": 29394, + "色": 29395, + "断": 29396, + "商": 29397, + "ם": 29398, + "か": 29399, + "里": 29400, + "系": 29401, + "编": 29402, + "错": 29403, + "트": 29404, + "只": 29405, + "县": 29406, + "ს": 29407, + "常": 29408, + "初": 29409, + "ɔ": 29410, + "Α": 29411, + "フ": 29412, + "►": 29413, + "等": 29414, + "일": 29415, + "・": 29416, + "Ō": 29417, + "情": 29418, + "现": 29419, + "Ř": 29420, + "ِ": 29421, + "さ": 29422, + "ạ": 29423, + "용": 29424, + "证": 29425, + "해": 29426, + "手": 29427, + "支": 29428, + "입": 29429, + "服": 29430, + "்": 29431, + "道": 29432, + "어": 29433, + "送": 29434, + "载": 29435, + "限": 29436, + "线": 29437, + "属": 29438, + "—": 29439, + "他": 29440, + "放": 29441, + "记": 29442, + "公": 29443, + "没": 29444, + "添": 29445, + "显": 29446, + "บ": 29447, + "ย": 29448, + "რ": 29449, + "其": 29450, + "集": 29451, + "金": 29452, + "国": 29453, + "任": 29454, + "ە": 29455, + "话": 29456, + "并": 29457, + "被": 29458, + "ύ": 29459, + "都": 29460, + "گ": 29461, + "意": 29462, + "כ": 29463, + "经": 29464, + "성": 29465, + "看": 29466, + "פ": 29467, + "址": 29468, + "ס": 29469, + "드": 29470, + "交": 29471, + "¼": 29472, + "Џ": 29473, + "完": 29474, + "Δ": 29475, + "义": 29476, + "보": 29477, + "向": 29478, + "换": 29479, + "山": 29480, + "算": 29481, + "二": 29482, + "پ": 29483, + "⁄": 29484, + "判": 29485, + "级": 29486, + "工": 29487, + "ด": 29488, + "⠀": 29489, + "家": 29490, + "レ": 29491, + "三": 29492, + "原": 29493, + "】": 29494, + "长": 29495, + "া": 29496, + "管": 29497, + "ѝ": 29498, + "क": 29499, + "学": 29500, + "ロ": 29501, + "验": 29502, + "写": 29503, + "Œ": 29504, + "从": 29505, + "【": 29506, + "收": 29507, + "ả": 29508, + "未": 29509, + "登": 29510, + "고": 29511, + "源": 29512, + "每": 29513, + "µ": 29514, + "误": 29515, + "り": 29516, + "요": 29517, + "按": 29518, + "ว": 29519, + "权": 29520, + "根": 29521, + "プ": 29522, + "串": 29523, + "ส": 29524, + "›": 29525, + "제": 29526, + "シ": 29527, + "Ş": 29528, + "确": 29529, + "好": 29530, + "统": 29531, + "效": 29532, + "网": 29533, + "\u0001": 29534, + "物": 29535, + "아": 29536, + "也": 29537, + "은": 29538, + "ệ": 29539, + "न": 29540, + "项": 29541, + "资": 29542, + "こ": 29543, + "引": 29544, + "ジ": 29545, + "ค": 29546, + "版": 29547, + "ท": 29548, + "平": 29549, + "们": 29550, + "与": 29551, + "き": 29552, + "移": 29553, + "ि": 29554, + "素": 29555, + "执": 29556, + "주": 29557, + "‐": 29558, + "Ґ": 29559, + "ี": 29560, + "板": 29561, + "问": 29562, + "Ε": 29563, + "安": 29564, + "면": 29565, + "소": 29566, + "ต": 29567, + "ิ": 29568, + "持": 29569, + "습": 29570, + "Σ": 29571, + "ら": 29572, + "コ": 29573, + "心": 29574, + "Π": 29575, + "打": 29576, + "」": 29577, + "상": 29578, + "「": 29579, + "检": 29580, + "库": 29581, + "÷": 29582, + "으": 29583, + "测": 29584, + "ん": 29585, + "े": 29586, + "ُ": 29587, + "力": 29588, + "直": 29589, + "由": 29590, + "ى": 29591, + "试": 29592, + "必": 29593, + "端": 29594, + "ʻ": 29595, + "先": 29596, + "↑": 29597, + "命": 29598, + "도": 29599, + "전": 29600, + "ห": 29601, + "员": 29602, + "ɪ": 29603, + "있": 29604, + "比": 29605, + "ṣ": 29606, + "時": 29607, + "择": 29608, + "ذ": 29609, + "テ": 29610, + "‌": 29611, + "构": 29612, + "备": 29613, + "그": 29614, + "链": 29615, + "说": 29616, + "ლ": 29617, + "ן": 29618, + "签": 29619, + "う": 29620, + "غ": 29621, + "ế": 29622, + "ض": 29623, + "ḥ": 29624, + "启": 29625, + "력": 29626, + "ო": 29627, + "付": 29628, + "მ": 29629, + "索": 29630, + "特": 29631, + "ג": 29632, + "西": 29633, + "대": 29634, + "├": 29635, + "–": 29636, + "Ž": 29637, + "外": 29638, + "צ": 29639, + "头": 29640, + "连": 29641, + "流": 29642, + "◄": 29643, + "デ": 29644, + "カ": 29645, + "র": 29646, + "오": 29647, + "找": 29648, + "清": 29649, + "🤣": 29650, + "去": 29651, + "₹": 29652, + "경": 29653, + "グ": 29654, + "ْ": 29655, + "¢": 29656, + "因": 29657, + "": 29658, + "Κ": 29659, + "增": 29660, + "知": 29661, + "¶": 29662, + "像": 29663, + "♥": 29664, + "터": 29665, + "く": 29666, + "ậ": 29667, + "メ": 29668, + "Æ": 29669, + "省": 29670, + "स": 29671, + "म": 29672, + "❤": 29673, + "あ": 29674, + "样": 29675, + "起": 29676, + "台": 29677, + "读": 29678, + "角": 29679, + "南": 29680, + "整": 29681, + "订": 29682, + "\f": 29683, + "ט": 29684, + "マ": 29685, + "্": 29686, + "우": 29687, + "ն": 29688, + "您": 29689, + "ئ": 29690, + "基": 29691, + "水": 29692, + "생": 29693, + "‑": 29694, + "나": 29695, + "画": 29696, + "描": 29697, + "击": 29698, + "っ": 29699, + "라": 29700, + "ნ": 29701, + "ր": 29702, + "业": 29703, + "ბ": 29704, + "别": 29705, + "♦": 29706, + "ィ": 29707, + "त": 29708, + "给": 29709, + "문": 29710, + "形": 29711, + "控": 29712, + "然": 29713, + "동": 29714, + "Њ": 29715, + "⁠": 29716, + "东": 29717, + "ป": 29718, + "州": 29719, + "排": 29720, + "세": 29721, + "装": 29722, + "할": 29723, + "Ć": 29724, + "∞": 29725, + "海": 29726, + "城": 29727, + "键": 29728, + "径": 29729, + "호": 29730, + "화": 29731, + "្": 29732, + "料": 29733, + "ơ": 29734, + "ी": 29735, + "ウ": 29736, + "具": 29737, + "ブ": 29738, + "块": 29739, + "再": 29740, + "ố": 29741, + "电": 29742, + ";": 29743, + "위": 29744, + "两": 29745, + "而": 29746, + "장": 29747, + "آ": 29748, + "Ț": 29749, + "バ": 29750, + "还": 29751, + "令": 29752, + "キ": 29753, + "ّ": 29754, + "값": 29755, + "번": 29756, + "만": 29757, + "总": 29758, + "ल": 29759, + "▲": 29760, + "异": 29761, + "光": 29762, + "客": 29763, + "非": 29764, + "ị": 29765, + "": 29766, + "þ": 29767, + "設": 29768, + "述": 29769, + "합": 29770, + "?": 29771, + "✔": 29772, + "导": 29773, + "ṇ": 29774, + "부": 29775, + "˙": 29776, + "Τ": 29777, + "も": 29778, + "구": 29779, + "镇": 29780, + "작": 29781, + "░": 29782, + "步": 29783, + "ộ": 29784, + "活": 29785, + "พ": 29786, + "←": 29787, + "ǎ": 29788, + "จ": 29789, + "束": 29790, + "ـ": 29791, + "‘": 29792, + "那": 29793, + "प": 29794, + "エ": 29795, + "志": 29796, + "么": 29797, + "运": 29798, + "北": 29799, + "超": 29800, + "་": 29801, + "布": 29802, + "ώ": 29803, + "͡": 29804, + "少": 29805, + "파": 29806, + "ʃ": 29807, + "ム": 29808, + "•": 29809, + "卡": 29810, + "ন": 29811, + "Μ": 29812, + "ɑ": 29813, + "😉": 29814, + "辑": 29815, + "원": 29816, + "美": 29817, + "产": 29818, + "利": 29819, + "모": 29820, + "联": 29821, + "界": 29822, + "체": 29823, + "种": 29824, + "王": 29825, + "ľ": 29826, + "여": 29827, + "메": 29828, + "域": 29829, + "ვ": 29830, + "立": 29831, + "록": 29832, + "게": 29833, + "إ": 29834, + "ṭ": 29835, + "神": 29836, + "ո": 29837, + "音": 29838, + "☆": 29839, + "Ñ": 29840, + "조": 29841, + "動": 29842, + "缓": 29843, + "과": 29844, + "报": 29845, + "ʼ": 29846, + "ា": 29847, + "되": 29848, + "ե": 29849, + "视": 29850, + "ช": 29851, + "详": 29852, + "แ": 29853, + "¦": 29854, + "把": 29855, + "க": 29856, + "ি": 29857, + "출": 29858, + "비": 29859, + "边": 29860, + "框": 29861, + "व": 29862, + "サ": 29863, + "Ι": 29864, + "Ο": 29865, + "オ": 29866, + "¾": 29867, + "历": 29868, + "ŏ": 29869, + "门": 29870, + "ข": 29871, + "含": 29872, + "¬": 29873, + "周": 29874, + "填": 29875, + "待": 29876, + "ะ": 29877, + "დ": 29878, + "Ї": 29879, + "额": 29880, + "음": 29881, + "四": 29882, + "だ": 29883, + "회": 29884, + "止": 29885, + "率": 29886, + "环": 29887, + "パ": 29888, + "래": 29889, + "闭": 29890, + "̀": 29891, + "语": 29892, + "개": 29893, + "身": 29894, + "藏": 29895, + "य": 29896, + "된": 29897, + "即": 29898, + "拉": 29899, + "선": 29900, + "변": 29901, + "≥": 29902, + "ุ": 29903, + "些": 29904, + "🤷": 29905, + "せ": 29906, + "左": 29907, + "ợ": 29908, + "右": 29909, + "ể": 29910, + "내": 29911, + "ּ": 29912, + "ז": 29913, + "ে": 29914, + "告": 29915, + "ấ": 29916, + "白": 29917, + "账": 29918, + "费": 29919, + "江": 29920, + "み": 29921, + "‹": 29922, + "์": 29923, + "‡": 29924, + "造": 29925, + "但": 29926, + "十": 29927, + "它": 29928, + "ं": 29929, + "ŋ": 29930, + "ў": 29931, + "セ": 29932, + "女": 29933, + "⣿": 29934, + "ի": 29935, + "京": 29936, + "触": 29937, + "함": 29938, + "들": 29939, + "Ā": 29940, + "˜": 29941, + "石": 29942, + "よ": 29943, + "田": 29944, + "易": 29945, + "规": 29946, + "展": 29947, + "¯": 29948, + "做": 29949, + "星": 29950, + "უ": 29951, + "✓": 29952, + "თ": 29953, + "供": 29954, + "명": 29955, + "ξ": 29956, + "己": 29957, + "且": 29958, + "插": 29959, + "景": 29960, + "切": 29961, + "ไ": 29962, + "없": 29963, + "ョ": 29964, + "及": 29965, + "Ν": 29966, + "미": 29967, + "ث": 29968, + "데": 29969, + "价": 29970, + "乡": 29971, + "ह": 29972, + "チ": 29973, + "真": 29974, + "太": 29975, + "ู": 29976, + "ダ": 29977, + "局": 29978, + "♂": 29979, + "退": 29980, + "ு": 29981, + "ক": 29982, + "ி": 29983, + "何": 29984, + "😭": 29985, + "¥": 29986, + "": 29987, + "≈": 29988, + "司": 29989, + "层": 29990, + "실": 29991, + "站": 29992, + "首": 29993, + "款": 29994, + "រ": 29995, + "間": 29996, + "ָ": 29997, + "저": 29998, + "监": 29999, + "ァ": 30000, + "册": 30001, + "案": 30002, + "ो": 30003, + "反": 30004, + "听": 30005, + "族": 30006, + "析": 30007, + "ื": 30008, + "秒": 30009, + "공": 30010, + "œ": 30011, + "🚀": 30012, + "거": 30013, + "재": 30014, + "‚": 30015, + "場": 30016, + "广": 30017, + "播": 30018, + "║": 30019, + "⋅": 30020, + "技": 30021, + "贴": 30022, + "想": 30023, + "ʁ": 30024, + "ớ": 30025, + "ャ": 30026, + "중": 30027, + "》": 30028, + "速": 30029, + "频": 30030, + "队": 30031, + "ำ": 30032, + "け": 30033, + "ु": 30034, + "≤": 30035, + "↓": 30036, + "须": 30037, + "菜": 30038, + "̃": 30039, + "剪": 30040, + "버": 30041, + "ェ": 30042, + "Λ": 30043, + "细": 30044, + "選": 30045, + "द": 30046, + "¹": 30047, + "许": 30048, + "ầ": 30049, + "世": 30050, + "ュ": 30051, + "ء": 30052, + "‡": 30053, + "候": 30054, + "共": 30055, + "크": 30056, + "ธ": 30057, + "설": 30058, + "快": 30059, + "友": 30060, + "ְ": 30061, + "车": 30062, + "推": 30063, + "花": 30064, + "言": 30065, + "چ": 30066, + "至": 30067, + "開": 30068, + "校": 30069, + "個": 30070, + "村": 30071, + "つ": 30072, + "▌": 30073, + "ப": 30074, + "결": 30075, + "ņ": 30076, + "优": 30077, + "ន": 30078, + "达": 30079, + "核": 30080, + "ナ": 30081, + "场": 30082, + "影": 30083, + "🏻": 30084, + "钮": 30085, + "ظ": 30086, + "Þ": 30087, + "▼": 30088, + "お": 30089, + "份": 30090, + "微": 30091, + "ờ": 30092, + "识": 30093, + "행": 30094, + "《": 30095, + "ใ": 30096, + "ọ": 30097, + "预": 30098, + "ব": 30099, + "த": 30100, + "": 30101, + "ų": 30102, + "마": 30103, + "않": 30104, + "ɡ": 30105, + "계": 30106, + "연": 30107, + "五": 30108, + "Ź": 30109, + "め": 30110, + "很": 30111, + "간": 30112, + "無": 30113, + "ប": 30114, + "社": 30115, + "Ê": 30116, + "书": 30117, + "顶": 30118, + "ტ": 30119, + "才": 30120, + "云": 30121, + "└": 30122, + "ζ": 30123, + "،": 30124, + "搜": 30125, + "신": 30126, + "유": 30127, + "‏": 30128, + "✅": 30129, + "⭐": 30130, + "照": 30131, + "短": 30132, + "川": 30133, + "後": 30134, + "范": 30135, + "民": 30136, + "治": 30137, + "章": 30138, + "ề": 30139, + "바": 30140, + "ә": 30141, + "⚭": 30142, + "河": 30143, + "论": 30144, + "え": 30145, + "Ω": 30146, + "√": 30147, + "Ă": 30148, + "Γ": 30149, + "坐": 30150, + "적": 30151, + "停": 30152, + "추": 30153, + "受": 30154, + "♀": 30155, + "ʾ": 30156, + "树": 30157, + "林": 30158, + "치": 30159, + "fi": 30160, + "▒": 30161, + "张": 30162, + "着": 30163, + "访": 30164, + "考": 30165, + "教": 30166, + "ग": 30167, + "准": 30168, + "印": 30169, + "精": 30170, + "窗": 30171, + "宝": 30172, + "ち": 30173, + "围": 30174, + "ַ": 30175, + "致": 30176, + "モ": 30177, + "때": 30178, + "随": 30179, + "储": 30180, + "况": 30181, + "邮": 30182, + "武": 30183, + "⛔": 30184, + "维": 30185, + "ү": 30186, + "跳": 30187, + "ब": 30188, + "投": 30189, + "ủ": 30190, + "표": 30191, + "반": 30192, + "英": 30193, + "ʰ": 30194, + "👍": 30195, + "ज": 30196, + "带": 30197, + "為": 30198, + "续": 30199, + "ɨ": 30200, + "처": 30201, + "₂": 30202, + "클": 30203, + "群": 30204, + "현": 30205, + "风": 30206, + "购": 30207, + "ក": 30208, + "老": 30209, + "留": 30210, + "球": 30211, + "프": 30212, + "▄": 30213, + "史": 30214, + "Љ": 30215, + "⟩": 30216, + "분": 30217, + "გ": 30218, + "店": 30219, + "审": 30220, + "료": 30221, + "목": 30222, + "略": 30223, + "관": 30224, + "ִ": 30225, + "科": 30226, + "货": 30227, + "ம": 30228, + "络": 30229, + "阳": 30230, + "Ḥ": 30231, + "資": 30232, + "若": 30233, + "স": 30234, + "ہ": 30235, + "宽": 30236, + "见": 30237, + "ズ": 30238, + "游": 30239, + "방": 30240, + "ồ": 30241, + "ɾ": 30242, + "열": 30243, + "러": 30244, + "ך": 30245, + "\u001b": 30246, + "်": 30247, + "余": 30248, + "响": 30249, + "缩": 30250, + "ட": 30251, + "评": 30252, + "允": 30253, + "离": 30254, + "🤔": 30255, + "Ё": 30256, + "ʊ": 30257, + "黑": 30258, + "马": 30259, + "⟨": 30260, + "値": 30261, + "箱": 30262, + "야": 30263, + "ម": 30264, + "Ő": 30265, + "感": 30266, + "ツ": 30267, + "ụ": 30268, + "ポ": 30269, + "확": 30270, + "声": 30271, + "战": 30272, + "ѕ": 30273, + "変": 30274, + "와": 30275, + "父": 30276, + "ベ": 30277, + "助": 30278, + "업": 30279, + "ʲ": 30280, + "ÿ": 30281, + "充": 30282, + "强": 30283, + "博": 30284, + "ミ": 30285, + "销": 30286, + "당": 30287, + "記": 30288, + "什": 30289, + "匹": 30290, + "ւ": 30291, + "そ": 30292, + "코": 30293, + "ল": 30294, + "ŭ": 30295, + "午": 30296, + "ニ": 30297, + "\u0012": 30298, + "ʒ": 30299, + "შ": 30300, + "某": 30301, + "ォ": 30302, + "足": 30303, + "타": 30304, + "Ð": 30305, + "ხ": 30306, + "름": 30307, + "木": 30308, + "楼": 30309, + "최": 30310, + "红": 30311, + "¨": 30312, + "古": 30313, + "\u0006": 30314, + "단": 30315, + "今": 30316, + "ʔ": 30317, + "ट": 30318, + "ম": 30319, + "斯": 30320, + "語": 30321, + "Ÿ": 30322, + "🙄": 30323, + "牌": 30324, + "안": 30325, + "ស": 30326, + "颜": 30327, + "~": 30328, + "克": 30329, + "深": 30330, + "금": 30331, + "會": 30332, + "尔": 30333, + "释": 30334, + "批": 30335, + "산": 30336, + "野": 30337, + "防": 30338, + "Η": 30339, + "ө": 30340, + "ψ": 30341, + "ボ": 30342, + "š": 30343, + "各": 30344, + "진": 30345, + "追": 30346, + "句": 30347, + "警": 30348, + "Φ": 30349, + "ѣ": 30350, + "ḍ": 30351, + "词": 30352, + "男": 30353, + "글": 30354, + "식": 30355, + "隐": 30356, + "복": 30357, + "盘": 30358, + "Ì": 30359, + "申": 30360, + "议": 30361, + "ザ": 30362, + "近": 30363, + "능": 30364, + "য": 30365, + "東": 30366, + "這": 30367, + "ர": 30368, + "距": 30369, + "院": 30370, + "德": 30371, + "ǐ": 30372, + "针": 30373, + "▀": 30374, + "↔": 30375, + "房": 30376, + "青": 30377, + "政": 30378, + "😅": 30379, + "递": 30380, + "প": 30381, + "波": 30382, + "ソ": 30383, + "绑": 30384, + "ビ": 30385, + "ễ": 30386, + "포": 30387, + "\u0010": 30388, + "ử": 30389, + "등": 30390, + "환": 30391, + "士": 30392, + "ত": 30393, + "Θ": 30394, + "초": 30395, + "境": 30396, + "差": 30397, + "采": 30398, + "디": 30399, + "ĩ": 30400, + "升": 30401, + "背": 30402, + "배": 30403, + "龙": 30404, + "街": 30405, + "್": 30406, + "ṛ": 30407, + "ু": 30408, + "弹": 30409, + "魔": 30410, + "객": 30411, + "‰": 30412, + "⌁": 30413, + "ἐ": 30414, + "禁": 30415, + "ผ": 30416, + "қ": 30417, + "島": 30418, + "ா": 30419, + "♭": 30420, + "百": 30421, + "ứ": 30422, + "ネ": 30423, + "专": 30424, + "來": 30425, + "刷": 30426, + "필": 30427, + "յ": 30428, + "ắ": 30429, + "华": 30430, + "Β": 30431, + "श": 30432, + "¸": 30433, + "屏": 30434, + "死": 30435, + "遍": 30436, + "검": 30437, + "Χ": 30438, + "것": 30439, + "八": 30440, + "览": 30441, + "택": 30442, + "唯": 30443, + "∙": 30444, + "¤": 30445, + "페": 30446, + "让": 30447, + "锁": 30448, + "무": 30449, + "思": 30450, + "隔": 30451, + "Ô": 30452, + "\u0013": 30453, + "ṃ": 30454, + "ワ": 30455, + "低": 30456, + "션": 30457, + "半": 30458, + "较": 30459, + "ត": 30460, + "享": 30461, + "积": 30462, + "ˆ": 30463, + "😊": 30464, + "典": 30465, + "ǔ": 30466, + "六": 30467, + "便": 30468, + "ɐ": 30469, + "简": 30470, + "继": 30471, + "仅": 30472, + "尾": 30473, + "‹": 30474, + "வ": 30475, + "կ": 30476, + "ƒ": 30477, + "영": 30478, + "火": 30479, + "湖": 30480, + "書": 30481, + "발": 30482, + "ハ": 30483, + "循": 30484, + "术": 30485, + "結": 30486, + "ļ": 30487, + "乐": 30488, + "滤": 30489, + "종": 30490, + "ถ": 30491, + "ὶ": 30492, + "满": 30493, + "╝": 30494, + "わ": 30495, + "ど": 30496, + "็": 30497, + "형": 30498, + "國": 30499, + "ự": 30500, + "線": 30501, + "블": 30502, + "封": 30503, + "確": 30504, + "依": 30505, + "ս": 30506, + "永": 30507, + "색": 30508, + "歌": 30509, + "數": 30510, + "福": 30511, + "삭": 30512, + "実": 30513, + "레": 30514, + "ſ": 30515, + "千": 30516, + "\u000e": 30517, + "母": 30518, + "더": 30519, + "임": 30520, + "տ": 30521, + "ے": 30522, + "几": 30523, + "双": 30524, + "노": 30525, + "ณ": 30526, + "掉": 30527, + "Ρ": 30528, + "ἀ": 30529, + "標": 30530, + "長": 30531, + "档": 30532, + "태": 30533, + "ペ": 30534, + "본": 30535, + "Œ": 30536, + "底": 30537, + "终": 30538, + "請": 30539, + "კ": 30540, + "̯": 30541, + "예": 30542, + "▬": 30543, + "報": 30544, + "ピ": 30545, + "๏": 30546, + "暂": 30547, + "李": 30548, + "Υ": 30549, + "\u0005": 30550, + "\u0002": 30551, + "替": 30552, + "운": 30553, + "射": 30554, + "\u0018": 30555, + "매": 30556, + "\u0011": 30557, + "🏼": 30558, + "票": 30559, + "附": 30560, + "ノ": 30561, + "ũ": 30562, + "压": 30563, + "阿": 30564, + "Ò": 30565, + "테": 30566, + "∼": 30567, + "万": 30568, + "մ": 30569, + "후": 30570, + "普": 30571, + "截": 30572, + "속": 30573, + "括": 30574, + "😀": 30575, + "ை": 30576, + "▶": 30577, + "까": 30578, + "ট": 30579, + "曲": 30580, + "师": 30581, + "钱": 30582, + "栏": 30583, + "Ы": 30584, + "走": 30585, + "ữ": 30586, + "‬": 30587, + "归": 30588, + "점": 30589, + "🔥": 30590, + "었": 30591, + "連": 30592, + "私": 30593, + "청": 30594, + "刘": 30595, + "免": 30596, + "": 30597, + "奖": 30598, + "見": 30599, + "ֹ": 30600, + "☺": 30601, + "ケ": 30602, + "역": 30603, + "际": 30604, + "받": 30605, + "望": 30606, + "帝": 30607, + "减": 30608, + "두": 30609, + "领": 30610, + "„": 30611, + "钟": 30612, + "ガ": 30613, + "架": 30614, + "든": 30615, + "ல": 30616, + "松": 30617, + "□": 30618, + "越": 30619, + "答": 30620, + "ɕ": 30621, + "ῦ": 30622, + "染": 30623, + "": 30624, + "质": 30625, + "顺": 30626, + "气": 30627, + "╗": 30628, + "計": 30629, + "ქ": 30630, + "亮": 30631, + "🤦": 30632, + "̂": 30633, + "ٹ": 30634, + "座": 30635, + "ˌ": 30636, + "均": 30637, + "\u000b": 30638, + "官": 30639, + "适": 30640, + "护": 30641, + "久": 30642, + "春": 30643, + "曹": 30644, + "皇": 30645, + "脚": 30646, + "池": 30647, + "延": 30648, + "키": 30649, + "품": 30650, + "現": 30651, + "檔": 30652, + "ば": 30653, + "ⴰ": 30654, + "希": 30655, + "玩": 30656, + "固": 30657, + "黄": 30658, + "": 30659, + "☽": 30660, + "银": 30661, + "\u0003": 30662, + "┃": 30663, + "👏": 30664, + "불": 30665, + "攻": 30666, + "へ": 30667, + "决": 30668, + "⊙": 30669, + "宁": 30670, + "च": 30671, + "機": 30672, + "義": 30673, + "ɲ": 30674, + "\u0015": 30675, + "했": 30676, + "ẩ": 30677, + "愛": 30678, + "矩": 30679, + "패": 30680, + "ặ": 30681, + "郎": 30682, + "Ь": 30683, + "绘": 30684, + "负": 30685, + "ổ": 30686, + "ய": 30687, + "汉": 30688, + "編": 30689, + "ێ": 30690, + "്": 30691, + "じ": 30692, + "카": 30693, + "似": 30694, + "ں": 30695, + "や": 30696, + "認": 30697, + "\u000f": 30698, + "過": 30699, + "통": 30700, + "▪": 30701, + "约": 30702, + "香": 30703, + "买": 30704, + "住": 30705, + "╚": 30706, + "😁": 30707, + "扩": 30708, + "静": 30709, + "려": 30710, + "학": 30711, + "钥": 30712, + "증": 30713, + "ỉ": 30714, + "她": 30715, + "食": 30716, + "往": 30717, + "點": 30718, + "偏": 30719, + "康": 30720, + "\u0014": 30721, + "į": 30722, + "준": 30723, + "\u0004": 30724, + "ฟ": 30725, + "♣": 30726, + "戏": 30727, + "ʂ": 30728, + "井": 30729, + "军": 30730, + "爱": 30731, + "ٱ": 30732, + "七": 30733, + "차": 30734, + "币": 30735, + "♠": 30736, + "哈": 30737, + "阅": 30738, + "介": 30739, + "观": 30740, + "區": 30741, + "˜": 30742, + "ً": 30743, + "又": 30744, + "冲": 30745, + "朝": 30746, + "姓": 30747, + "课": 30748, + "龍": 30749, + "각": 30750, + "∈": 30751, + "米": 30752, + "ƒ": 30753, + "喜": 30754, + "夜": 30755, + "团": 30756, + "⇒": 30757, + "远": 30758, + "\u001a": 30759, + "ὐ": 30760, + "承": 30761, + "ಿ": 30762, + "室": 30763, + "ʀ": 30764, + "ង": 30765, + "अ": 30766, + "罗": 30767, + "🙏": 30768, + "软": 30769, + "🟡": 30770, + "건": 30771, + "؟": 30772, + "း": 30773, + "ᴇ": 30774, + "ユ": 30775, + "토": 30776, + "策": 30777, + "̄": 30778, + "국": 30779, + "ֶ": 30780, + "协": 30781, + "营": 30782, + "関": 30783, + "吉": 30784, + "💀": 30785, + "奇": 30786, + "滚": 30787, + "轴": 30788, + "処": 30789, + "土": 30790, + "划": 30791, + "ड": 30792, + "临": 30793, + "ֵ": 30794, + "航": 30795, + "浏": 30796, + "ゴ": 30797, + "別": 30798, + "寺": 30799, + "於": 30800, + "進": 30801, + "ὸ": 30802, + "風": 30803, + "ன": 30804, + "班": 30805, + "◼": 30806, + "九": 30807, + "̥": 30808, + "號": 30809, + "류": 30810, + "础": 30811, + "般": 30812, + "︙": 30813, + "̈": 30814, + "番": 30815, + "✨": 30816, + "😎": 30817, + "ো": 30818, + "😍": 30819, + "單": 30820, + "帧": 30821, + "授": 30822, + "赋": 30823, + "巴": 30824, + "占": 30825, + "假": 30826, + "ṅ": 30827, + "透": 30828, + "項": 30829, + "ħ": 30830, + "馬": 30831, + "🟢": 30832, + "Ľ": 30833, + "լ": 30834, + "券": 30835, + "같": 30836, + "類": 30837, + "對": 30838, + "월": 30839, + "激": 30840, + "\u0017": 30841, + "戦": 30842, + "独": 30843, + "訊": 30844, + "ិ": 30845, + "套": 30846, + "ʷ": 30847, + "跟": 30848, + "ở": 30849, + "渲": 30850, + "顯": 30851, + "降": 30852, + "ာ": 30853, + "尼": 30854, + "血": 30855, + "언": 30856, + "牛": 30857, + "將": 30858, + "ศ": 30859, + "拍": 30860, + "刻": 30861, + "ზ": 30862, + "╔": 30863, + "藤": 30864, + "్": 30865, + "ῶ": 30866, + "🟠": 30867, + "良": 30868, + "김": 30869, + "দ": 30870, + "Ṣ": 30871, + "録": 30872, + "伊": 30873, + "落": 30874, + "雄": 30875, + "雪": 30876, + "映": 30877, + "著": 30878, + "른": 30879, + "ფ": 30880, + "対": 30881, + "智": 30882, + "译": 30883, + "┬": 30884, + "抽": 30885, + "ῖ": 30886, + "酒": 30887, + "Ћ": 30888, + "股": 30889, + "់": 30890, + "순": 30891, + "직": 30892, + "भ": 30893, + "谷": 30894, + "물": 30895, + "ǒ": 30896, + "⠄": 30897, + "热": 30898, + "終": 30899, + "夹": 30900, + "干": 30901, + "彩": 30902, + "敗": 30903, + "ќ": 30904, + "♯": 30905, + "̣": 30906, + "վ": 30907, + "轮": 30908, + "阵": 30909, + "夏": 30910, + "幕": 30911, + "吧": 30912, + "港": 30913, + "益": 30914, + "儿": 30915, + "액": 30916, + "售": 30917, + "兵": 30918, + "惠": 30919, + "欢": 30920, + "›": 30921, + "零": 30922, + "學": 30923, + "ž": 30924, + "員": 30925, + "ỗ": 30926, + "玉": 30927, + "逻": 30928, + "᥀": 30929, + "吗": 30930, + "沒": 30931, + "≠": 30932, + "너": 30933, + "ச": 30934, + "\u0016": 30935, + "夫": 30936, + "წ": 30937, + "堂": 30938, + "電": 30939, + "≡": 30940, + "陆": 30941, + "져": 30942, + "研": 30943, + "荐": 30944, + "健": 30945, + "碼": 30946, + "练": 30947, + "検": 30948, + "송": 30949, + "ै": 30950, + "哪": 30951, + "圆": 30952, + "Ա": 30953, + "↩": 30954, + "托": 30955, + "̪": 30956, + "ू": 30957, + "缀": 30958, + "네": 30959, + "沙": 30960, + "兴": 30961, + "病": 30962, + "\u0007": 30963, + "ល": 30964, + "ừ": 30965, + "Ἀ": 30966, + "강": 30967, + "항": 30968, + "\u0019": 30969, + "換": 30970, + "温": 30971, + "帖": 30972, + "ទ": 30973, + "込": 30974, + "削": 30975, + "알": 30976, + "征": 30977, + "习": 30978, + "법": 30979, + "栈": 30980, + "绝": 30981, + "": 30982, + "ڕ": 30983, + "圖": 30984, + "苏": 30985, + "発": 30986, + "ု": 30987, + "町": 30988, + "互": 30989, + "়": 30990, + "ც": 30991, + "守": 30992, + "새": 30993, + "侧": 30994, + "草": 30995, + "ས": 30996, + "扫": 30997, + "‒": 30998, + "恢": 30999, + "ң": 31000, + "ण": 31001, + "ற": 31002, + "째": 31003, + "්": 31004, + "拟": 31005, + "派": 31006, + "🏽": 31007, + "呼": 31008, + "Š": 31009, + "演": 31010, + "究": 31011, + "교": 31012, + "ɣ": 31013, + "ए": 31014, + "ី": 31015, + "ף": 31016, + "富": 31017, + "駅": 31018, + "ず": 31019, + "♪": 31020, + "😆": 31021, + "접": 31022, + "ғ": 31023, + "▓": 31024, + "존": 31025, + "ಾ": 31026, + "旋": 31027, + "ゃ": 31028, + "补": 31029, + "ץ": 31030, + "門": 31031, + "ច": 31032, + "날": 31033, + "ภ": 31034, + "ག": 31035, + "傳": 31036, + "∆": 31037, + "†": 31038, + "ׁ": 31039, + "缺": 31040, + "頭": 31041, + "怪": 31042, + "組": 31043, + "별": 31044, + "Ъ": 31045, + "發": 31046, + "雷": 31047, + "ರ": 31048, + "ซ": 31049, + "び": 31050, + "翻": 31051, + "ھ": 31052, + "პ": 31053, + "題": 31054, + "居": 31055, + "집": 31056, + "🌍": 31057, + "˚": 31058, + "避": 31059, + "줄": 31060, + "ុ": 31061, + "滑": 31062, + "故": 31063, + "ญ": 31064, + "〜": 31065, + "ನ": 31066, + "양": 31067, + "완": 31068, + "ள": 31069, + "倍": 31070, + "宗": 31071, + "択": 31072, + "브": 31073, + "ɴ": 31074, + "効": 31075, + "尺": 31076, + "視": 31077, + "ẽ": 31078, + "覆": 31079, + "ध": 31080, + "骨": 31081, + "달": 31082, + "ᴛ": 31083, + "蓝": 31084, + "關": 31085, + "額": 31086, + "Õ": 31087, + "∗": 31088, + "卷": 31089, + "갑": 31090, + "르": 31091, + "众": 31092, + "ᴀ": 31093, + "態": 31094, + "ٰ": 31095, + "暗": 31096, + "君": 31097, + "錯": 31098, + "ɒ": 31099, + "យ": 31100, + "ḫ": 31101, + "ῆ": 31102, + "亚": 31103, + "♡": 31104, + "割": 31105, + "鼠": 31106, + "̶": 31107, + "Ë": 31108, + "読": 31109, + "격": 31110, + "ゲ": 31111, + "眼": 31112, + "Ý": 31113, + "ژ": 31114, + "雨": 31115, + "宮": 31116, + "쪽": 31117, + "ष": 31118, + "複": 31119, + "剩": 31120, + "早": 31121, + "杂": 31122, + "焦": 31123, + "贝": 31124, + "突": 31125, + "워": 31126, + "另": 31127, + "摄": 31128, + "\b": 31129, + "‭": 31130, + "府": 31131, + "외": 31132, + "盖": 31133, + "\u001c": 31134, + "ษ": 31135, + "佛": 31136, + "概": 31137, + "與": 31138, + "經": 31139, + "-": 31140, + "һ": 31141, + "問": 31142, + "ು": 31143, + "ἰ": 31144, + "話": 31145, + "倒": 31146, + "葛": 31147, + "べ": 31148, + "ろ": 31149, + "\u001e": 31150, + "।": 31151, + "ေ": 31152, + "ᴏ": 31153, + "训": 31154, + "體": 31155, + "👌": 31156, + "內": 31157, + "က": 31158, + "企": 31159, + "약": 31160, + "찾": 31161, + "ོ": 31162, + "破": 31163, + "輸": 31164, + "림": 31165, + "塔": 31166, + "턴": 31167, + "杀": 31168, + "』": 31169, + "味": 31170, + "浮": 31171, + "┆": 31172, + "ġ": 31173, + "郡": 31174, + "┐": 31175, + "『": 31176, + "阶": 31177, + "雅": 31178, + "┈": 31179, + "园": 31180, + ".": 31181, + "吃": 31182, + "남": 31183, + " ": 31184, + "ར": 31185, + "帮": 31186, + "毛": 31187, + "耗": 31188, + "举": 31189, + "ర": 31190, + "拿": 31191, + "밀": 31192, + "ご": 31193, + "够": 31194, + "礼": 31195, + "ព": 31196, + "ね": 31197, + "‰": 31198, + "兰": 31199, + "❌": 31200, + "折": 31201, + "십": 31202, + "💎": 31203, + "業": 31204, + "诸": 31205, + "孙": 31206, + "བ": 31207, + "😳": 31208, + "種": 31209, + "Ï": 31210, + "ึ": 31211, + "⁣": 31212, + "医": 31213, + "拼": 31214, + "↵": 31215, + "⅓": 31216, + "\u001f": 31217, + "မ": 31218, + "叫": 31219, + "জ": 31220, + "予": 31221, + "寸": 31222, + "梅": 31223, + "醒": 31224, + "津": 31225, + "န": 31226, + "ి": 31227, + "厂": 31228, + "屋": 31229, + "ख": 31230, + "師": 31231, + "👀": 31232, + "ỏ": 31233, + "ヤ": 31234, + "ὰ": 31235, + "\u001d": 31236, + "◆": 31237, + "ដ": 31238, + "材": 31239, + "ホ": 31240, + "張": 31241, + "洞": 31242, + "餐": 31243, + "천": 31244, + "হ": 31245, + "達": 31246, + "們": 31247, + "斗": 31248, + "横": 31249, + "백": 31250, + "ំ": 31251, + "ۆ": 31252, + "말": 31253, + "গ": 31254, + "佳": 31255, + "랜": 31256, + "仁": 31257, + "陈": 31258, + "飞": 31259, + "极": 31260, + "": 31261, + "및": 31262, + "仓": 31263, + "⬛": 31264, + "昌": 31265, + "錢": 31266, + "殊": 31267, + "┴": 31268, + "○": 31269, + "길": 31270, + "泉": 31271, + "甲": 31272, + "활": 31273, + "ひ": 31274, + "শ": 31275, + "ን": 31276, + "Ť": 31277, + "ღ": 31278, + "皮": 31279, + "強": 31280, + "赛": 31281, + "ా": 31282, + "預": 31283, + "င": 31284, + "튼": 31285, + "플": 31286, + "ყ": 31287, + "⋆": 31288, + "ք": 31289, + "ા": 31290, + "尚": 31291, + "또": 31292, + "բ": 31293, + "┌": 31294, + "節": 31295, + "森": 31296, + "आ": 31297, + "办": 31298, + "園": 31299, + "牙": 31300, + "庆": 31301, + "隆": 31302, + "😔": 31303, + "叉": 31304, + "գ": 31305, + "피": 31306, + "ギ": 31307, + "啊": 31308, + "続": 31309, + "灵": 31310, + "ヒ": 31311, + "忽": 31312, + "ʌ": 31313, + "량": 31314, + "油": 31315, + "讯": 31316, + "ⵉ": 31317, + "릭": 31318, + "刚": 31319, + "氏": 31320, + "ိ": 31321, + "Ī": 31322, + "誤": 31323, + "齐": 31324, + "末": 31325, + "🙌": 31326, + "̞": 31327, + "圈": 31328, + "念": 31329, + "숫": 31330, + "毫": 31331, + "當": 31332, + "規": 31333, + "판": 31334, + "ు": 31335, + "旧": 31336, + "卖": 31337, + "ฉ": 31338, + "幸": 31339, + "署": 31340, + "근": 31341, + "ই": 31342, + "岛": 31343, + "դ": 31344, + "觉": 31345, + "害": 31346, + "毕": 31347, + "ฐ": 31348, + "威": 31349, + "育": 31350, + "呢": 31351, + "峰": 31352, + "职": 31353, + "陽": 31354, + "ි": 31355, + "亞": 31356, + "ұ": 31357, + "₃": 31358, + "따": 31359, + "施": 31360, + "泰": 31361, + "載": 31362, + "…": 31363, + "笑": 31364, + "華": 31365, + "迎": 31366, + "됩": 31367, + "豆": 31368, + "嘉": 31369, + "🤡": 31370, + "ĕ": 31371, + "庄": 31372, + "級": 31373, + "Ψ": 31374, + "ི": 31375, + "気": 31376, + "责": 31377, + "հ": 31378, + "អ": 31379, + "乱": 31380, + "休": 31381, + "約": 31382, + "ฆ": 31383, + "∑": 31384, + "察": 31385, + "온": 31386, + "😬": 31387, + "ড": 31388, + "乘": 31389, + "람": 31390, + "इ": 31391, + "Ά": 31392, + "ந": 31393, + "ើ": 31394, + "亲": 31395, + "េ": 31396, + "委": 31397, + "赤": 31398, + "됨": 31399, + "勝": 31400, + "怎": 31401, + "감": 31402, + "宋": 31403, + "調": 31404, + "짜": 31405, + "ী": 31406, + "难": 31407, + "못": 31408, + "티": 31409, + "備": 31410, + "塞": 31411, + "វ": 31412, + "险": 31413, + "旅": 31414, + "虚": 31415, + "↳": 31416, + "笔": 31417, + "馆": 31418, + "Қ": 31419, + "⚡": 31420, + "ೆ": 31421, + "※": 31422, + "唐": 31423, + "律": 31424, + "稍": 31425, + "散": 31426, + "ર": 31427, + "ヴ": 31428, + "副": 31429, + "尽": 31430, + "挂": 31431, + "県": 31432, + "⚠": 31433, + "洋": 31434, + "鬼": 31435, + "암": 31436, + "孩": 31437, + "℃": 31438, + "並": 31439, + "ց": 31440, + "ូ": 31441, + "ℓ": 31442, + "ⵏ": 31443, + "扣": 31444, + "铁": 31445, + "闻": 31446, + "ˆ": 31447, + "戳": 31448, + "む": 31449, + "秀": 31450, + "細": 31451, + "ပ": 31452, + "御": 31453, + "拖": 31454, + "좌": 31455, + "ؤ": 31456, + "绍": 31457, + "ỹ": 31458, + "참": 31459, + "향": 31460, + "Ď": 31461, + "끝": 31462, + "민": 31463, + "ძ": 31464, + "贵": 31465, + "纪": 31466, + "秋": 31467, + "ಕ": 31468, + "ӏ": 31469, + "網": 31470, + "铺": 31471, + "恋": 31472, + "fl": 31473, + "兼": 31474, + "羽": 31475, + "창": 31476, + "啟": 31477, + "弟": 31478, + "년": 31479, + "慢": 31480, + "효": 31481, + "許": 31482, + "硬": 31483, + "잘": 31484, + "템": 31485, + "્": 31486, + "න": 31487, + "術": 31488, + "ڈ": 31489, + "溪": 31490, + "": 31491, + "暴": 31492, + "混": 31493, + "夢": 31494, + "랑": 31495, + "আ": 31496, + "還": 31497, + "探": 31498, + "祖": 31499, + "织": 31500, + "軍": 31501, + "թ": 31502, + "務": 31503, + "艺": 31504, + "ད": 31505, + "ት": 31506, + "ṁ": 31507, + "應": 31508, + "擇": 31509, + "🥰": 31510, + "ķ": 31511, + "渡": 31512, + "葉": 31513, + "령": 31514, + "決": 31515, + "刀": 31516, + "從": 31517, + "變": 31518, + "올": 31519, + "💪": 31520, + "灣": 31521, + "ር": 31522, + "평": 31523, + "衣": 31524, + "😄": 31525, + "ി": 31526, + "ჩ": 31527, + "ὁ": 31528, + "ほ": 31529, + "Û": 31530, + "চ": 31531, + "ර": 31532, + "製": 31533, + "隊": 31534, + "₱": 31535, + "纳": 31536, + "赖": 31537, + "农": 31538, + "桥": 31539, + "ỳ": 31540, + "🏾": 31541, + "阻": 31542, + "ជ": 31543, + "秘": 31544, + "박": 31545, + "伤": 31546, + "稿": 31547, + "ం": 31548, + "拦": 31549, + "넣": 31550, + "💕": 31551, + "₁": 31552, + "宿": 31553, + "錄": 31554, + "镜": 31555, + "채": 31556, + "Ə": 31557, + "ང": 31558, + "⇔": 31559, + "☼": 31560, + "ུ": 31561, + "党": 31562, + "급": 31563, + "洲": 31564, + "ղ": 31565, + "說": 31566, + "ĭ": 31567, + "尝": 31568, + "담": 31569, + "फ": 31570, + "哥": 31571, + "圣": 31572, + "萨": 31573, + "😏": 31574, + "ʏ": 31575, + "ெ": 31576, + "丁": 31577, + "虎": 31578, + "권": 31579, + "善": 31580, + "岩": 31581, + "커": 31582, + "◦": 31583, + "抛": 31584, + "석": 31585, + "Έ": 31586, + "宣": 31587, + "拳": 31588, + "팅": 31589, + "枚": 31590, + "洛": 31591, + "証": 31592, + "陵": 31593, + "佐": 31594, + "館": 31595, + "누": 31596, + "돌": 31597, + "₄": 31598, + "稱": 31599, + "聊": 31600, + "車": 31601, + "루": 31602, + "״": 31603, + "ಠ": 31604, + "庫": 31605, + "མ": 31606, + "統": 31607, + "련": 31608, + "़": 31609, + "ṯ": 31610, + "ക": 31611, + "旗": 31612, + "励": 31613, + "紀": 31614, + "忠": 31615, + "າ": 31616, + "杨": 31617, + "丹": 31618, + "Ù": 31619, + "ฝ": 31620, + "却": 31621, + "舞": 31622, + "轉": 31623, + "တ": 31624, + "丽": 31625, + "借": 31626, + "ා": 31627, + "ょ": 31628, + "옵": 31629, + "편": 31630, + "蒙": 31631, + "衡": 31632, + "ʋ": 31633, + "叶": 31634, + "̇": 31635, + "⬜": 31636, + "🇺": 31637, + "Հ": 31638, + "谢": 31639, + "Ą": 31640, + "ே": 31641, + "ằ": 31642, + "既": 31643, + "济": 31644, + "≯": 31645, + "準": 31646, + "답": 31647, + "ಲ": 31648, + "残": 31649, + "虑": 31650, + "̆": 31651, + "┘": 31652, + "急": 31653, + "招": 31654, + "막": 31655, + "≮": 31656, + "產": 31657, + "Ṭ": 31658, + "😢": 31659, + "垂": 31660, + "親": 31661, + "ģ": 31662, + "־": 31663, + "猫": 31664, + "ʟ": 31665, + "☃": 31666, + "✪": 31667, + "刪": 31668, + "胡": 31669, + "☉": 31670, + "晚": 31671, + "군": 31672, + "승": 31673, + "న": 31674, + "ὴ": 31675, + "曾": 31676, + "論": 31677, + "ɯ": 31678, + "త": 31679, + "戰": 31680, + "鱼": 31681, + "ǧ": 31682, + "寶": 31683, + "특": 31684, + "💯": 31685, + "崎": 31686, + "甘": 31687, + "該": 31688, + "링": 31689, + "😡": 31690, + "उ": 31691, + "ែ": 31692, + "頁": 31693, + "큰": 31694, + "➤": 31695, + "총": 31696, + "💰": 31697, + "∂": 31698, + "毁": 31699, + "聖": 31700, + "麻": 31701, + "ʐ": 31702, + "敏": 31703, + "運": 31704, + "될": 31705, + "쓰": 31706, + "ಸ": 31707, + "စ": 31708, + "✦": 31709, + "젝": 31710, + "復": 31711, + "寻": 31712, + "茶": 31713, + "ਾ": 31714, + "竹": 31715, + "遇": 31716, + "順": 31717, + "며": 31718, + "累": 31719, + "ĝ": 31720, + "ˇ": 31721, + "覧": 31722, + "এ": 31723, + "株": 31724, + "취": 31725, + "ስ": 31726, + "争": 31727, + "势": 31728, + "宇": 31729, + "橋": 31730, + "Ӏ": 31731, + "堆": 31732, + "ⵙ": 31733, + "丶": 31734, + "棋": 31735, + "肉": 31736, + "የ": 31737, + "": 31738, + "❶": 31739, + "季": 31740, + "ል": 31741, + "殿": 31742, + "優": 31743, + "試": 31744, + "첫": 31745, + "Ό": 31746, + "戶": 31747, + "ண": 31748, + "羅": 31749, + "桃": 31750, + "립": 31751, + "浪": 31752, + "脑": 31753, + "😛": 31754, + "弃": 31755, + "炮": 31756, + "轻": 31757, + "울": 31758, + "": 31759, + "ヘ": 31760, + "奥": 31761, + "💜": 31762, + "忘": 31763, + "遠": 31764, + "飛": 31765, + "魏": 31766, + "Ē": 31767, + "汇": 31768, + "央": 31769, + "逆": 31770, + "露": 31771, + "須": 31772, + "ѐ": 31773, + "ḷ": 31774, + "ದ": 31775, + "✭": 31776, + "寄": 31777, + "盟": 31778, + "财": 31779, + "際": 31780, + "ἔ": 31781, + "ǫ": 31782, + "थ": 31783, + "ാ": 31784, + "宫": 31785, + "巨": 31786, + "途": 31787, + "ʹ": 31788, + "ಗ": 31789, + "帐": 31790, + "‪": 31791, + "拒": 31792, + "药": 31793, + "🙃": 31794, + "ŕ": 31795, + "亡": 31796, + "壁": 31797, + "ም": 31798, + "參": 31799, + "😩": 31800, + "շ": 31801, + "ವ": 31802, + "ណ": 31803, + "丰": 31804, + "獲": 31805, + "莉": 31806, + "좋": 31807, + "ရ": 31808, + "₦": 31809, + "겠": 31810, + "👉": 31811, + "吴": 31812, + "岡": 31813, + "诉": 31814, + "읽": 31815, + "🥺": 31816, + "爆": 31817, + "🇸": 31818, + "ভ": 31819, + "迭": 31820, + "엔": 31821, + "ἄ": 31822, + "捷": 31823, + "納": 31824, + "邀": 31825, + "ಯ": 31826, + "爾": 31827, + "船": 31828, + "赞": 31829, + "胜": 31830, + "므": 31831, + "သ": 31832, + "構": 31833, + "磁": 31834, + "冰": 31835, + "딩": 31836, + "ે": 31837, + "媒": 31838, + "繁": 31839, + "☠": 31840, + "❒": 31841, + "仪": 31842, + "렬": 31843, + "昭": 31844, + "珠": 31845, + "離": 31846, + "ན": 31847, + "ల": 31848, + "ತ": 31849, + "拷": 31850, + "粉": 31851, + "벤": 31852, + "⇽": 31853, + "乌": 31854, + "拥": 31855, + "ҳ": 31856, + "ය": 31857, + "ེ": 31858, + "仙": 31859, + "塊": 31860, + "幅": 31861, + "🎉": 31862, + "Մ": 31863, + "跨": 31864, + "ٔ": 31865, + "恩": 31866, + "损": 31867, + "养": 31868, + "奈": 31869, + "ǀ": 31870, + "严": 31871, + "卫": 31872, + "迟": 31873, + "様": 31874, + "裡": 31875, + "난": 31876, + "았": 31877, + "͜": 31878, + "Ζ": 31879, + "ਰ": 31880, + "պ": 31881, + "ং": 31882, + "丢": 31883, + "伝": 31884, + "컨": 31885, + "ව": 31886, + "ြ": 31887, + "冷": 31888, + "遗": 31889, + "銀": 31890, + "̌": 31891, + "ᴜ": 31892, + "瑞": 31893, + "ฌ": 31894, + "❍": 31895, + "ふ": 31896, + "聚": 31897, + "碎": 31898, + "衛": 31899, + "অ": 31900, + "ញ": 31901, + "퍼": 31902, + "Ս": 31903, + "ນ": 31904, + "ẓ": 31905, + "✌": 31906, + "孝": 31907, + "陳": 31908, + "히": 31909, + "ක": 31910, + "黒": 31911, + "💖": 31912, + "ḩ": 31913, + "応": 31914, + "饰": 31915, + "∪": 31916, + "宜": 31917, + "樂": 31918, + "則": 31919, + "勇": 31920, + "徐": 31921, + "ⵓ": 31922, + "權": 31923, + "鲁": 31924, + "‟": 31925, + "庭": 31926, + "苗": 31927, + "🔴": 31928, + "闲": 31929, + "독": 31930, + "ɹ": 31931, + "ҽ": 31932, + "ថ": 31933, + "宏": 31934, + "尊": 31935, + "總": 31936, + "裝": 31937, + "ම": 31938, + "▸": 31939, + "測": 31940, + "ಮ": 31941, + "አ": 31942, + "轩": 31943, + "兄": 31944, + "剑": 31945, + "ન": 31946, + "朱": 31947, + "ǝ": 31948, + "Ḩ": 31949, + "担": 31950, + "灰": 31951, + "讲": 31952, + "롤": 31953, + "︎": 31954, + "😤": 31955, + "ោ": 31956, + "애": 31957, + "였": 31958, + "질": 31959, + "振": 31960, + "灯": 31961, + "ĉ": 31962, + "ස": 31963, + "閉": 31964, + "램": 31965, + "ಂ": 31966, + "げ": 31967, + "̧": 31968, + "狂": 31969, + "融": 31970, + "仍": 31971, + "實": 31972, + "楽": 31973, + "範": 31974, + "ٌ": 31975, + "వ": 31976, + "嵌": 31977, + "摩": 31978, + "袁": 31979, + "ষ": 31980, + "乎": 31981, + "규": 31982, + "岗": 31983, + "糊": 31984, + "క": 31985, + "雲": 31986, + "심": 31987, + "ई": 31988, + "འ": 31989, + "ἡ": 31990, + "丝": 31991, + "Ħ": 31992, + "ٍ": 31993, + "ٓ": 31994, + "အ": 31995, + "執": 31996, + "벨": 31997, + "ゼ": 31998, + "梦": 31999 + }, + "merges": [ + "▁ t", + "i n", + "e r", + "▁ a", + "h e", + "o n", + "r e", + "▁ s", + "e n", + "a t", + "o r", + "▁t he", + "▁th e", + "▁ the", + "e s", + "▁ w", + "a n", + "▁ c", + "i s", + "i t", + "o u", + "▁ d", + "a l", + "a r", + "▁ p", + "▁ f", + "e d", + "▁ b", + "in g", + "i ng", + "▁ o", + "▁ m", + "l e", + "n d", + "a s", + "i c", + "▁ h", + "io n", + "i on", + "▁i n", + "▁ in", + "▁t o", + "▁ to", + "e t", + "o m", + "e l", + "▁o f", + "▁ of", + "s t", + "▁a nd", + "▁an d", + "▁ and", + "▁ l", + "▁t h", + "▁ th", + "▁ n", + "en t", + "e nt", + "i l", + "c t", + "r o", + "▁r e", + "▁ re", + "i d", + "a m", + "▁ I", + "a d", + "▁ e", + "▁ S", + "▁ g", + "▁ T", + "i m", + "o t", + "a c", + "u r", + "▁ (", + "i g", + "▁ =", + "o l", + "u t", + "▁ A", + "s e", + "▁ u", + "v e", + "▁ C", + "i f", + "o w", + "▁ y", + "c h", + "a y", + "▁d e", + "▁ de", + "▁s t", + "▁ st", + "▁ |", + "ve r", + "v er", + ") ;", + "▁ \"", + "l y", + "▁b e", + "▁ be", + "* *", + "▁i s", + "▁ is", + "o d", + "▁ M", + "at ion", + "ati on", + "atio n", + "u l", + "▁f or", + "▁fo r", + "▁ for", + "▁o n", + "▁ on", + "a g", + "c e", + "te r", + "t er", + "i r", + "t h", + "▁ v", + "q u", + "▁ B", + "e m", + "▁ P", + "▁y ou", + "▁yo u", + "▁ you", + "▁t hat", + "▁th at", + "▁ that", + "u n", + "▁ {", + "it h", + "i th", + "r i", + "es t", + "e st", + "a b", + "- -", + "a p", + "▁i t", + "▁ it", + "▁c on", + "▁co n", + "▁ con", + "at e", + "a te", + "u s", + "▁ H", + "u m", + "▁ D", + "o s", + "p e", + "▁ -", + "▁w h", + "▁ wh", + "▁a l", + "▁ al", + "▁a s", + "▁ as", + "an d", + "a nd", + "is t", + "i st", + "▁ L", + "▁ W", + "▁w ith", + "▁ with", + "▁a n", + "▁ an", + "er e", + "e re", + "▁ *", + "▁ R", + "▁h e", + "▁ he", + "▁ F", + "o c", + "▁w as", + "▁wa s", + "▁ was", + "er s", + "e rs", + "k e", + "ou t", + "o ut", + "h t", + "▁ r", + "es s", + "e ss", + "o p", + "re s", + "r es", + "i e", + "▁ E", + "▁ \\", + "▁T he", + "▁Th e", + "▁ The", + "en d", + "e nd", + "l d", + "▁ N", + "or t", + "o rt", + "▁ G", + "/ /", + "▁ #", + "ou r", + "o ur", + "t e", + "il l", + "i ll", + "ai n", + "a in", + "▁s e", + "▁ se", + "▁ $", + "▁p ro", + "▁pr o", + "▁ pro", + "or e", + "o re", + "▁c om", + "▁co m", + "▁ com", + "am e", + "a me", + "t r", + "▁n e", + "▁ ne", + "ro m", + "r om", + "u b", + "▁a t", + "▁ at", + "▁e x", + "▁ ex", + "an t", + "a nt", + "u e", + "▁o r", + "▁ or", + "▁ }", + "ar t", + "a rt", + "ct ion", + "▁ k", + "p t", + "n t", + "i v", + "d e", + "▁ O", + "p l", + "ur n", + "u rn", + "ig ht", + "igh t", + "i ght", + "al l", + "a ll", + "▁t his", + "▁th is", + "▁ this", + "se r", + "s er", + "av e", + "a ve", + "▁n ot", + "▁no t", + "▁ not", + "▁a re", + "▁ar e", + "▁ are", + "▁ j", + "▁l e", + "▁ le", + "i z", + "▁ '", + "ag e", + "a ge", + "me nt", + "men t", + "m ent", + "▁t r", + "▁ tr", + "ac k", + "a ck", + "us t", + "u st", + "( )", + "- >", + "it y", + "i ty", + "in e", + "i ne", + "ou ld", + "oul d", + "o uld", + "▁ J", + "o g", + "▁f rom", + "▁fr om", + "▁fro m", + "▁ from", + "▁w e", + "▁ we", + "el l", + "e ll", + "▁s h", + "▁ sh", + "▁e n", + "▁ en", + "ur e", + "u re", + "por t", + "po rt", + "p ort", + "▁c h", + "▁ ch", + "n e", + "▁b y", + "▁ by", + "pe r", + "p er", + "ar d", + "a rd", + "as s", + "a ss", + "g e", + "a k", + "ar e", + "a re", + "o k", + "a v", + "iv e", + "i ve", + "f f", + "ie s", + "i es", + "at h", + "a th", + "tu rn", + "t urn", + "▁ U", + "in t", + "i nt", + "-- --", + "--- -", + "- ---", + "▁i m", + "▁ im", + "os t", + "o st", + "ia l", + "i al", + "▁h ave", + "▁ha ve", + "▁hav e", + "▁ have", + "in d", + "i nd", + "i p", + "an s", + "a ns", + "x t", + "▁d o", + "▁ do", + "c l", + "▁i f", + "▁ if", + "co n", + "c on", + "i a", + "▁h is", + "▁hi s", + "▁ his", + "ul t", + "u lt", + "ro u", + "r ou", + "▁s u", + "▁ su", + "r a", + "▁u n", + "▁ un", + "ab le", + "abl e", + "a ble", + "▁ <", + "▁ K", + "om e", + "o me", + "▁q u", + "▁ qu", + "ge t", + "g et", + "▁m e", + "▁ me", + "as t", + "a st", + "ec t", + "e ct", + "▁# #", + "▁ ##", + "t o", + "▁c l", + "▁ cl", + "▁a b", + "▁ ab", + "ic e", + "i ce", + "ir e", + "i re", + "be r", + "b er", + "on e", + "o ne", + "ic h", + "i ch", + "he n", + "h en", + "▁c an", + "▁ca n", + "▁ can", + "▁T h", + "▁ Th", + "▁l a", + "▁ la", + "▁a ll", + "▁al l", + "▁ all", + "im e", + "i me", + "il e", + "i le", + "id e", + "i de", + "\" ,", + "▁p l", + "▁ pl", + "▁ V", + "r u", + "or m", + "o rm", + "▁h ad", + "▁ha d", + "▁ had", + "u d", + "as e", + "a se", + "or d", + "o rd", + ") ,", + "▁h er", + "▁he r", + "▁ her", + "▁I n", + "▁ In", + "ac e", + "a ce", + "▁b ut", + "▁bu t", + "▁ but", + "at a", + "a ta", + ": :", + "** **", + "*** *", + "* ***", + "on g", + "o ng", + "▁ &", + ". .", + "it e", + "i te", + "yp e", + "y pe", + "ac t", + "a ct", + "od e", + "o de", + "▁y our", + "▁you r", + "▁yo ur", + "▁ your", + "▁o ut", + "▁ou t", + "▁ out", + "▁g o", + "▁ go", + "li c", + "l ic", + "al ly", + "all y", + "▁s o", + "▁ so", + "or k", + "a u", + "▁u p", + "▁ up", + "▁ _", + "l l", + "= =", + "▁m y", + "▁ my", + "p p", + "c c", + "▁/ /", + "▁ //", + "▁the y", + "▁th ey", + "▁ they", + "g h", + "▁u s", + "▁ us", + "i b", + "ion s", + "io ns", + "i ons", + "ac h", + "a ch", + "en s", + "e ns", + "▁a r", + "▁ ar", + "o b", + "el f", + "oo k", + "o ok", + "at ed", + "ate d", + "a ted", + "an g", + "a ng", + "ig n", + "i gn", + "▁re turn", + "▁r eturn", + "▁ret urn", + "▁ return", + "▁re s", + "▁r es", + "▁ res", + "c k", + "ou s", + "o us", + "с т", + ") .", + "▁ п", + ". \"", + "н а", + "▁ i", + "ai l", + "a il", + "e p", + "▁a d", + "▁ ad", + "an ce", + "anc e", + "( \"", + "▁* *", + "▁ **", + "th er", + "the r", + "t her", + "ak e", + "a ke", + "▁w ill", + "▁ will", + "▁c omp", + "▁com p", + "▁co mp", + "▁ comp", + "▁o ne", + "▁on e", + "▁ one", + "▁g et", + "▁ge t", + "▁ get", + "o v", + "▁ Y", + "ar y", + "a ry", + "oc k", + "o ck", + "▁s he", + "▁sh e", + "▁ she", + "ch e", + "c he", + "f t", + "▁n ew", + "▁ne w", + "▁ new", + "▁d es", + "▁de s", + "▁ des", + "▁l i", + "▁ li", + "en ce", + "enc e", + "▁s a", + "▁ sa", + "re ss", + "res s", + "r ess", + "▁e l", + "▁ el", + "▁u nd", + "▁un d", + "▁ und", + "e g", + "fe r", + "f er", + "r y", + "ea r", + "e ar", + "os e", + "o se", + "ve ry", + "ver y", + "v ery", + "' ,", + "▁ +", + "▁ в", + "▁H e", + "▁ He", + "ub lic", + "ubl ic", + "u blic", + "▁the ir", + "iz e", + "i ze", + "▁w ere", + "▁we re", + "▁wer e", + "▁ were", + "in k", + "ow n", + "o wn", + "I n", + "{ \\", + "▁h as", + "▁ha s", + "▁ has", + "▁p er", + "▁pe r", + "▁ per", + "▁I t", + "▁ It", + "▁S t", + "▁ St", + "he r", + "h er", + "je ct", + "j ect", + "р а", + "il d", + "i ld", + "s o", + "▁s p", + "▁ sp", + "н и", + "d u", + "ro w", + "r ow", + "al ue", + "alu e", + "se t", + "s et", + "fo rm", + "for m", + "f orm", + "co m", + "c om", + "▁m an", + "▁ma n", + "▁ man", + "on t", + "o nt", + "ul l", + "u ll", + "▁c ont", + "▁con t", + "▁co nt", + "▁ cont", + "▁m ore", + "▁mor e", + "▁mo re", + "▁ more", + "ic k", + "i ck", + "▁w ould", + "▁wo uld", + "▁e v", + "▁ ev", + "▁ab out", + "▁ about", + "it ion", + "iti on", + "▁ z", + "ou nd", + "oun d", + "o und", + "re e", + "r ee", + "▁C h", + "▁ Ch", + "▁wh ich", + "▁ which", + "i o", + "() ;", + "( );", + "▁w ho", + "▁wh o", + "▁ who", + "er r", + "e rr", + "or y", + "o ry", + "ou nt", + "oun t", + "o unt", + "at ions", + "ation s", + "ati ons", + "atio ns", + "▁ с", + "ri ng", + "rin g", + "r ing", + "< /", + "▁f e", + "▁ fe", + "к о", + "н о", + "▁d is", + "▁di s", + "▁ dis", + "m a", + "▁t hem", + "▁the m", + "▁th em", + "▁a ny", + "▁an y", + "▁ any", + "▁n o", + "▁ no", + "-- ------", + "---- ----", + "--- -----", + "----- ---", + "------ --", + "------- -", + "- -------", + "▁p re", + "▁pr e", + "▁ pre", + "▁t e", + "▁ te", + "▁r o", + "▁ ro", + "▁h im", + "▁hi m", + "▁ him", + "▁ :", + "u p", + "▁in t", + "▁i nt", + "▁ int", + "▁a g", + "▁ ag", + "S t", + "ar k", + "e x", + "p h", + "ie nt", + "ien t", + "i ent", + "el y", + "e ly", + "▁p r", + "▁ pr", + "E R", + "▁im port", + "▁imp ort", + "▁ import", + "▁t ime", + "▁tim e", + "▁ti me", + "▁ time", + "р о", + "pr o", + "p ro", + "Us er", + "Use r", + "U ser", + "l o", + "▁ /", + "▁ [", + "or s", + "o rs", + "= \"", + "▁t here", + "▁the re", + "▁th ere", + "▁ther e", + "▁ there", + "▁l ike", + "▁li ke", + "▁lik e", + "▁ like", + "ol d", + "o ld", + "▁w hen", + "▁wh en", + "▁whe n", + "▁ when", + "ve rs", + "ver s", + "v ers", + "▁s ome", + "▁so me", + "▁som e", + "▁ some", + "in gs", + "ing s", + ") )", + "▁p art", + "▁par t", + "▁pa rt", + "▁ part", + "ic al", + "ica l", + "i cal", + "▁f un", + "▁fu n", + "▁ fun", + "▁k n", + "▁ kn", + "ay s", + "a ys", + "ie r", + "i er", + "▁b een", + "▁be en", + "ov e", + "o ve", + "▁s c", + "▁ sc", + "ia n", + "i an", + "▁o ver", + "▁ov er", + "▁ over", + "ie l", + "i el", + "▁p e", + "▁ pe", + "ri b", + "r ib", + "pu t", + "p ut", + "e c", + "et h", + "e th", + "ar am", + "ara m", + "a ram", + "ap p", + "a pp", + "▁ –", + "▁s tat", + "▁st at", + "▁sta t", + "▁ stat", + "po n", + "p on", + "▁w hat", + "▁wh at", + "▁ what", + "pt ion", + "w e", + "ad e", + "a de", + "▁w ork", + "▁wor k", + "▁ work", + "te xt", + "tex t", + "t ext", + "▁s aid", + "▁sa id", + "▁# ##", + "▁## #", + "▁ ###", + "I N", + "▁j ust", + "▁ju st", + "▁ just", + "ir st", + "irs t", + "▁in to", + "▁int o", + "▁ into", + "▁con st", + "▁cons t", + "▁ const", + "our ce", + "t t", + "p s", + "p r", + "er v", + "e rv", + "it t", + "i tt", + "u g", + "_ {", + "en ts", + "ent s", + "is h", + "i sh", + "en er", + "ene r", + "e ner", + "▁in ter", + "▁int er", + "▁inte r", + "▁ inter", + "pl e", + "p le", + "ol l", + "o ll", + "me r", + "m er", + "at er", + "ate r", + "a ter", + "oo l", + "o ol", + "e f", + "▁p ublic", + "▁pub lic", + "▁pu blic", + "▁publi c", + "▁ public", + "▁o ther", + "▁ot her", + "▁ other", + "р е", + "▁d ef", + "▁de f", + "▁ def", + "▁ @", + "г о", + "oin t", + "oi nt", + "o int", + "▁o ff", + "▁of f", + "▁ off", + "oi d", + "o id", + "re turn", + "ret urn", + "r eturn", + "▁s et", + "▁se t", + "▁ set", + "w o", + "ft er", + "fte r", + "f ter", + "s h", + "** ******", + "**** ****", + "****** **", + "▁o ur", + "▁ou r", + "▁ our", + "ri v", + "r iv", + "is s", + "i ss", + "▁W e", + "▁ We", + "n g", + "▁o b", + "▁ ob", + "s s", + "g r", + "▁t han", + "▁th an", + "▁ than", + "pe ct", + "pec t", + "p ect", + "ie d", + "i ed", + "s c", + "ie w", + "i ew", + "de r", + "d er", + "ys t", + "y st", + "e v", + "▁c ould", + "▁co uld", + "▁cou ld", + "▁ could", + "an n", + "a nn", + "en c", + "e nc", + "O N", + "i x", + "an c", + "a nc", + "▁al so", + "▁als o", + "▁ also", + "re at", + "rea t", + "▁a m", + "▁ am", + "▁b ec", + "▁be c", + "▁ bec", + "▁ и", + "ua l", + "u al", + "pe c", + "p ec", + "▁ .", + "▁b l", + "▁ bl", + "le ct", + "l ect", + "op le", + "opl e", + "o ple", + "y s", + "▁g r", + "▁ gr", + "ic t", + "i ct", + "i k", + "tr ing", + "tri ng", + "t ring", + "▁T his", + "▁Th is", + "▁ This", + "▁b ack", + "▁ba ck", + "▁ back", + "▁ о", + "▁f in", + "▁fi n", + "▁ fin", + "at ch", + "Co n", + "C on", + "( '", + "er m", + "e rm", + "▁= =", + "▁ ==", + "_ _", + "na me", + "nam e", + "n ame", + ", \"", + "▁d id", + "▁di d", + "▁ did", + "is e", + "i se", + "▁on ly", + "▁ only", + "ru ct", + "r uct", + "le s", + "l es", + "▁t hen", + "▁the n", + "▁th en", + "▁ then", + "au se", + "aus e", + "a use", + "в а", + "▁it s", + "▁i ts", + "▁ its", + "ri t", + "r it", + "▁k now", + "▁kn ow", + "▁ know", + "ie ld", + "iel d", + "i eld", + "▁c lass", + "▁cl ass", + "▁clas s", + "▁ class", + "▁ >", + "▁e m", + "▁ em", + "▁$ \\", + "▁ $\\", + "▁y ear", + "▁ye ar", + "▁ year", + "w n", + "} ,", + "▁d el", + "▁de l", + "▁ del", + "al e", + "a le", + "t y", + "fi g", + "f ig", + "s p", + "he d", + "h ed", + "ro und", + "rou nd", + "r ound", + "e w", + "▁d i", + "▁ di", + "▁d er", + "▁de r", + "▁ der", + "р и", + "re d", + "r ed", + "th is", + "t his", + "le t", + "l et", + "R E", + "a x", + "f r", + "ess age", + "essa ge", + "ou gh", + "o ugh", + "▁c omm", + "▁com m", + "▁co mm", + "▁ comm", + "f o", + "uc h", + "u ch", + "o y", + "▁pe ople", + "▁ people", + "yst em", + "ys tem", + "▁f irst", + "▁fir st", + "▁ first", + "▁f unction", + "▁fun ction", + "▁ function", + "an ge", + "ang e", + "▁h ow", + "▁ho w", + "▁ how", + "▁e t", + "▁ et", + "a h", + "▁l ook", + "▁lo ok", + "▁ look", + "т о", + "un d", + "u nd", + "▁u nder", + "▁un der", + "▁und er", + "▁ under", + "к а", + "▁ !", + "ra y", + "r ay", + "S T", + "if ic", + "ifi c", + "i fic", + "л и", + "re ad", + "rea d", + "r ead", + "▁b et", + "▁be t", + "▁ bet", + "io us", + "i ous", + "ar g", + "a rg", + "▁n eed", + "▁ne ed", + "▁ need", + "ma th", + "mat h", + "m ath", + "▁н а", + "▁ на", + "er t", + "e rt", + "▁o p", + "▁ op", + "▁a cc", + "▁ac c", + "▁ acc", + "Pr o", + "P ro", + "▁e st", + "▁es t", + "▁ est", + "▁U n", + "▁ Un", + "▁e nt", + "▁en t", + "▁ ent", + "▁re c", + "▁r ec", + "▁ rec", + "▁u se", + "▁us e", + "▁ use", + "е н", + "▁p ar", + "▁pa r", + "▁ par", + "a z", + "▁ д", + "▁W h", + "▁ Wh", + "sel f", + "s elf", + "▁k e", + "▁ ke", + "т а", + "▁w ant", + "▁wa nt", + "▁ want", + "▁e nd", + "▁en d", + "▁ end", + "▁d on", + "▁do n", + "▁ don", + "e k", + "re n", + "r en", + "Na me", + "N ame", + "▁= >", + "▁ =>", + "▁a pp", + "▁ap p", + "▁ app", + "▁qu e", + "▁q ue", + "▁ que", + "ig h", + "i gh", + "▁b u", + "▁ bu", + "eq u", + "e qu", + "ve l", + "v el", + "▁a ct", + "▁ac t", + "▁ act", + "cr e", + "c re", + "A T", + "▁v ar", + "▁va r", + "▁ var", + "ce ss", + "ces s", + "c ess", + "== ==", + "=== =", + "= ===", + "E x", + "▁a dd", + "▁ad d", + "▁ add", + "▁m od", + "▁mo d", + "▁ mod", + "un g", + "u ng", + "▁w here", + "▁wh ere", + "▁whe re", + "▁ where", + "ni ng", + "n ing", + "▁f l", + "▁ fl", + "al s", + "a ls", + "ter n", + "te rn", + "t ern", + "} }", + "▁A l", + "▁ Al", + "▁p os", + "▁po s", + "▁ pos", + "an k", + "▁a p", + "▁ ap", + "en g", + "e ng", + "▁ “", + "bl e", + "b le", + "▁re g", + "▁r eg", + "▁ reg", + "^ {", + "▁S he", + "▁Sh e", + "▁ She", + "▁* /", + "▁ */", + "ud e", + "u de", + "ad d", + "a dd", + "▁t wo", + "▁tw o", + "▁ two", + "▁c ol", + "▁co l", + "▁ col", + "▁s m", + "▁ sm", + "ai r", + "a ir", + "▁m ay", + "▁ma y", + "▁ may", + "fo re", + "for e", + "f ore", + "▁Y ou", + "▁ You", + "ro ugh", + "rou gh", + "r ough", + "▁c he", + "▁ch e", + "▁ che", + "▁a tt", + "▁at t", + "▁ att", + "ot h", + "o th", + "л а", + "▁c o", + "▁ co", + "at es", + "ate s", + "a tes", + "▁re m", + "▁r em", + "▁ rem", + "oo d", + "o od", + "Ty pe", + "Typ e", + "T ype", + "le d", + "l ed", + "fu l", + "f ul", + "▁s elf", + "▁sel f", + "▁ self", + "o f", + "▁A r", + "▁ Ar", + "qu e", + "q ue", + "▁e very", + "▁ev ery", + "▁ever y", + "▁ every", + "re f", + "r ef", + "Th e", + "T he", + "▁A nd", + "▁An d", + "▁ And", + "▁re l", + "▁r el", + "▁ rel", + "O R", + "I d", + "▁e ven", + "▁ev en", + "▁ even", + "E N", + "▁h and", + "▁ha nd", + "▁han d", + "▁ hand", + "ai t", + "a it", + "▁sh ould", + "▁ should", + "▁a fter", + "▁af ter", + "▁ after", + "▁d if", + "▁di f", + "gh t", + "g ht", + "if e", + "i fe", + "at or", + "ato r", + "a tor", + "as h", + "a sh", + "ri but", + "rib ut", + "ribu t", + "um ber", + "umb er", + "u mber", + "▁s ee", + "▁se e", + "▁ see", + "m s", + "▁c all", + "▁cal l", + "▁ca ll", + "▁ call", + "y n", + "d d", + "▁e s", + "▁ es", + "▁m ake", + "▁ma ke", + "▁ make", + "ot her", + "oth er", + "othe r", + "o ther", + "▁ —", + "\") ;", + "\" );", + "st r", + "s tr", + "▁l ong", + "▁lo ng", + "▁lon g", + "▁ long", + "le ment", + "lem ent", + "l ement", + "▁w or", + "▁wo r", + "▁ wor", + "it s", + "i ts", + "▁I f", + "▁ If", + "al se", + "als e", + "л ь", + "wa rd", + "war d", + "w ard", + "▁п о", + "▁ по", + "va l", + "v al", + "on s", + "o ns", + "▁ Z", + "▁n ow", + "▁no w", + "▁ now", + "da ta", + "dat a", + "d ata", + "am p", + "a mp", + "en se", + "ens e", + "▁th rough", + "▁thr ough", + "▁thro ugh", + "▁ through", + "▁d own", + "▁do wn", + "▁dow n", + "▁ down", + "at t", + "a tt", + "▁st atic", + "▁stat ic", + "▁ static", + "ic s", + "i cs", + "# #", + "po s", + "p os", + "▁v oid", + "▁vo id", + "▁ void", + "a w", + "ou n", + "o un", + "▁w ay", + "▁wa y", + "▁ way", + "ib le", + "i ble", + "ve nt", + "ven t", + "v ent", + "ow er", + "owe r", + "o wer", + "▁th ink", + "▁thin k", + "▁ think", + "t s", + "* /", + "▁a gain", + "▁ag ain", + "▁ again", + "at ing", + "ati ng", + "atin g", + "a ting", + "т е", + "ne r", + "n er", + "▁m ost", + "▁mo st", + "▁mos t", + "▁ most", + "li ne", + "lin e", + "l ine", + "y m", + "▁s ub", + "▁su b", + "▁ sub", + "er son", + "ers on", + "▁re qu", + "▁r equ", + "▁req u", + "▁ requ", + "A L", + "A R", + "ab el", + "abe l", + "a bel", + "on d", + "o nd", + ")) ;", + ") );", + "▁S e", + "▁ Se", + "▁B ut", + "▁Bu t", + "▁ But", + "al k", + "▁A n", + "▁ An", + "ne w", + "n ew", + "▁b ecause", + "▁bec ause", + "▁ because", + "ge r", + "g er", + "ul ar", + "ula r", + "u lar", + "ro up", + "rou p", + "r oup", + "t a", + ".. .", + ". ..", + "▁c ons", + "▁con s", + "▁co ns", + "▁ cons", + "▁r ight", + "▁ri ght", + "▁rig ht", + "▁ right", + "▁f r", + "▁ fr", + "b e", + "il y", + "i ly", + "к и", + "▁p h", + "▁ ph", + "ea d", + "e ad", + "? \"", + "▁g u", + "▁ gu", + "▁el se", + "▁els e", + "▁ else", + "▁s om", + "▁so m", + "▁ som", + "re nt", + "ren t", + "r ent", + "c o", + "em ent", + "eme nt", + "emen t", + "e ment", + "▁s tr", + "▁st r", + "▁ str", + "au lt", + "aul t", + "a ult", + "▁ з", + "л о", + "se rt", + "ser t", + "s ert", + "va r", + "v ar", + "ty pe", + "typ e", + "t ype", + "▁C om", + "▁Co m", + "▁ Com", + "л е", + "in s", + "i ns", + "m e", + "wa y", + "w ay", + "id ent", + "ide nt", + "iden t", + "▁p rov", + "▁pro v", + "▁pr ov", + "▁ prov", + "▁ м", + "▁tr ue", + "▁ true", + "▁P ro", + "▁Pr o", + "▁ Pro", + "f l", + "▁s l", + "▁ sl", + "▁A s", + "▁ As", + "} \\", + "I D", + "ue s", + "u es", + "▁in st", + "▁ins t", + "▁ inst", + "▁n ame", + "▁na me", + "▁nam e", + "▁ name", + "o x", + "▁ )", + "l i", + "am es", + "ame s", + "a mes", + "Re s", + "R es", + "▁s ur", + "▁su r", + "▁ sur", + "par am", + "pa ram", + "para m", + "p aram", + "▁st art", + "▁star t", + "▁sta rt", + "▁ start", + "a j", + "S E", + "as k", + "a sk", + "I T", + "St ring", + "Str ing", + "S tring", + "▁a ss", + "▁as s", + "▁ ass", + "▁p lay", + "▁pl ay", + "▁ play", + "ti ng", + "t ing", + "to n", + "t on", + "▁b efore", + "▁be fore", + "▁bef ore", + "▁ before", + "▁p ol", + "▁po l", + "▁ pol", + "ar ch", + "arc h", + "▁w ell", + "▁we ll", + "▁wel l", + "▁ well", + "Co m", + "C om", + "an y", + "a ny", + "ol og", + "olo g", + "o log", + "▁e rr", + "▁er r", + "▁ err", + "▁the se", + "▁th ese", + "ar s", + "a rs", + "e b", + "▁b r", + "▁ br", + "▁in cl", + "▁inc l", + "▁ incl", + "▁h el", + "▁he l", + "▁ hel", + "er n", + "e rn", + "od y", + "o dy", + "в о", + "▁in d", + "▁i nd", + "▁ ind", + "-- --------------", + "---- ------------", + "-------- --------", + "--- -------------", + "------------ ----", + "----- -----------", + "---------- ------", + "------ ----------", + "------------- ---", + "-------------- --", + "--------- -------", + "------- ---------", + "----------- -----", + "▁d ata", + "▁da ta", + "▁dat a", + "▁ data", + "▁g ood", + "▁go od", + "▁ good", + "L E", + "] ,", + "▁a v", + "▁ av", + "▁a c", + "▁ ac", + "id er", + "ide r", + "i der", + "н е", + "▁ Q", + "▁m in", + "▁mi n", + "▁ min", + "▁m uch", + "▁mu ch", + "c i", + "el s", + "e ls", + "▁c ur", + "▁cu r", + "▁ cur", + "▁v alue", + "▁val ue", + "▁ value", + "er y", + "e ry", + "u f", + "▁l oc", + "▁lo c", + "▁ loc", + "re ak", + "rea k", + "at ive", + "ati ve", + "ativ e", + "im es", + "ime s", + "i mes", + "C l", + "▁ ,", + "▁s er", + "▁se r", + "▁ ser", + "▁d ie", + "▁di e", + "▁ die", + "▁tr ans", + "▁tra ns", + "▁ trans", + "▁res ult", + "▁ result", + "ex t", + "e xt", + "▁a ut", + "▁au t", + "▁ aut", + "la nd", + "lan d", + "l and", + "▁& &", + "▁ &&", + "C h", + "te n", + "t en", + "} $", + "▁t ype", + "▁typ e", + "▁ty pe", + "▁ type", + "con d", + "co nd", + "c ond", + "ic es", + "ice s", + "i ces", + "▁v ery", + "▁ver y", + "▁ve ry", + "▁ very", + "▁o wn", + "▁ own", + "▁f il", + "▁fi l", + "▁ fil", + "it ies", + "iti es", + "i ties", + "▁p rodu", + "▁pro du", + "▁prod u", + "▁ produ", + "▁re ad", + "▁r ead", + "▁ read", + "▁f orm", + "▁for m", + "▁fo rm", + "▁ form", + "▁c ase", + "▁cas e", + "▁ca se", + "▁ case", + "at her", + "ath er", + "a ther", + "т и", + "д а", + "е р", + "T h", + "au t", + "a ut", + "▁s pec", + "▁sp ec", + "▁spe c", + "▁ spec", + "i j", + "b l", + "il ity", + "ili ty", + "▁ é", + "▁e r", + "▁ er", + "▁d oes", + "▁do es", + "▁ does", + "▁h ere", + "▁he re", + "▁her e", + "▁ here", + "th e", + "t he", + "ur es", + "ure s", + "u res", + "▁ %", + "mi n", + "m in", + "▁n ull", + "▁nu ll", + "▁ null", + "ra p", + "r ap", + "\" )", + "r r", + "Li st", + "L ist", + "ri ght", + "rig ht", + "r ight", + "▁U ser", + "▁Us er", + "▁Use r", + "▁ User", + "U L", + "at ional", + "ation al", + "ati onal", + "atio nal", + "▁b eing", + "▁be ing", + "▁bei ng", + "▁ being", + "A N", + "s k", + "▁c ar", + "▁ca r", + "▁ car", + "ol e", + "o le", + "▁d ist", + "▁dis t", + "▁di st", + "▁ dist", + "pl ic", + "p lic", + "ol low", + "oll ow", + "▁p res", + "▁pre s", + "▁pr es", + "▁ pres", + "▁s uch", + "▁su ch", + "▁suc h", + "▁ such", + "re am", + "rea m", + "in ce", + "inc e", + "ga n", + "g an", + "▁F or", + "▁Fo r", + "▁ For", + "\" :", + "so n", + "s on", + "riv ate", + "▁y ears", + "▁year s", + "▁ye ars", + "▁s erv", + "▁se rv", + "▁ser v", + "▁ serv", + "▁m ade", + "▁ma de", + "▁mad e", + "▁ made", + "de f", + "d ef", + "; \r", + "▁g l", + "▁ gl", + "▁b el", + "▁be l", + "▁ bel", + "▁l ist", + "▁li st", + "▁ list", + "▁c or", + "▁co r", + "▁ cor", + "▁d et", + "▁de t", + "▁ det", + "ce ption", + "cept ion", + "eg in", + "e gin", + "▁ б", + "▁c har", + "▁ch ar", + "▁cha r", + "▁ char", + "tr ans", + "tra ns", + "▁f am", + "▁fa m", + "▁! =", + "▁ !=", + "ou se", + "ous e", + "o use", + "▁d ec", + "▁de c", + "▁ dec", + "ic a", + "i ca", + "▁m any", + "▁man y", + "▁ma ny", + "▁ many", + "ak ing", + "aki ng", + "a king", + "▁ à", + "▁s im", + "▁si m", + "▁ sim", + "ag es", + "age s", + "a ges", + "uf f", + "u ff", + "as ed", + "ase d", + "a sed", + "ma n", + "m an", + "▁S h", + "▁ Sh", + "ie t", + "i et", + "ir ect", + "ire ct", + "i rect", + "▁R e", + "▁ Re", + "▁d iffer", + "▁dif fer", + "▁diff er", + "▁f ind", + "▁fin d", + "▁fi nd", + "▁ find", + "eth od", + "▁ \r", + "in es", + "ine s", + "i nes", + "▁in v", + "▁i nv", + "▁ inv", + "▁p oint", + "▁po int", + "▁poi nt", + "▁ point", + "▁The y", + "▁Th ey", + "▁ They", + "▁u sed", + "▁us ed", + "▁use d", + "▁ used", + "ct ions", + "ction s", + "▁st ill", + "i ó", + "in ed", + "ine d", + "i ned", + "▁wh ile", + "▁ while", + "I t", + "em ber", + "emb er", + "e mber", + "▁s ay", + "▁sa y", + "▁ say", + "▁he lp", + "▁hel p", + "▁ help", + "▁c re", + "▁cr e", + "▁ cre", + "▁ x", + "▁T r", + "▁ Tr", + "um ent", + "ume nt", + "umen t", + "u ment", + "▁s k", + "▁ sk", + "ou ght", + "ough t", + "ual ly", + "u ally", + "m essage", + "▁C on", + "▁Co n", + "▁ Con", + "▁m on", + "▁mo n", + "▁ mon", + "ar ed", + "are d", + "a red", + "wor k", + "w ork", + ") :", + "is ter", + "ist er", + "iste r", + "i ster", + "ar n", + "a rn", + "iz ed", + "ize d", + "i zed", + "Dat a", + "Da ta", + "D ata", + "or n", + "o rn", + "▁h ead", + "▁he ad", + "▁ head", + "D E", + "▁L e", + "▁ Le", + "▁p erson", + "▁per son", + "▁pers on", + "▁ person", + "ment s", + "men ts", + "m ents", + "eng th", + "e ngth", + "▁f alse", + "▁fal se", + "▁fals e", + "▁ false", + "▁m ed", + "▁me d", + "▁ med", + "▁D e", + "▁ De", + "ac he", + "ach e", + "a che", + "it ed", + "ite d", + "i ted", + "▁l et", + "▁le t", + "▁ let", + "▁s how", + "▁sh ow", + "▁ show", + "▁s ame", + "▁sa me", + "▁sam e", + "▁ same", + "us s", + "u ss", + "▁g ener", + "▁gen er", + "▁ge ner", + "▁gene r", + "▁ gener", + "▁ у", + "cu r", + "c ur", + "▁re al", + "▁ real", + "ce d", + "c ed", + "\" >", + "st ruct", + "str uct", + "stru ct", + "be gin", + "b egin", + "ce pt", + "cep t", + "▁b o", + "▁ bo", + "ir ed", + "ire d", + "i red", + "▁F r", + "▁ Fr", + "▁st ud", + "▁ stud", + "de v", + "d ev", + "A r", + "( \\", + "▁C l", + "▁ Cl", + "we en", + "w een", + "▁t oo", + "▁to o", + "▁ too", + "▁t est", + "▁te st", + "▁ test", + "▁d ay", + "▁da y", + "▁ day", + "o h", + "▁f ollow", + "▁fol low", + "▁ follow", + "at ure", + "atur e", + "atu re", + "z e", + "ie n", + "i en", + "re g", + "r eg", + "ce s", + "c es", + "ur ing", + "uri ng", + "u ring", + "am b", + "a mb", + "in a", + "i na", + "cr i", + "c ri", + "▁e d", + "▁ ed", + "S S", + "uc k", + "u ck", + "▁/ *", + "▁ /*", + "C T", + "▁T here", + "▁The re", + "▁Th ere", + "▁Ther e", + "▁ There", + "▁t ake", + "▁tak e", + "▁ta ke", + "▁ take", + "pa r", + "p ar", + "ul e", + "u le", + "ca l", + "c al", + "fo r", + "f or", + "** **************", + "**** ************", + "******** ********", + "************ ****", + "************** **", + "s ource", + "▁th ose", + "co l", + "c ol", + "▁e ff", + "▁ eff", + "mo d", + "m od", + "con t", + "co nt", + "c ont", + "} {", + "▁a round", + "▁ar ound", + "▁ around", + "pr ess", + "pre ss", + "pres s", + "p ress", + "b y", + "▁go ing", + "▁ going", + "pon se", + "pons e", + "▁ С", + "▁l ine", + "▁li ne", + "▁lin e", + "▁ line", + "da te", + "dat e", + "d ate", + "co de", + "cod e", + "c ode", + "[ '", + "▁l ife", + "▁li fe", + "▁lif e", + "▁ life", + "as on", + "a son", + "▁u sing", + "▁us ing", + "▁ using", + "▁v al", + "▁va l", + "▁ val", + "▁d u", + "▁ du", + "y p", + "▁O n", + "▁ On", + "▁f ound", + "▁fo und", + "▁fou nd", + "▁ found", + "ol ut", + "olu t", + "' ]", + "ar ent", + "are nt", + "aren t", + "a rent", + "▁s tring", + "▁st ring", + "▁str ing", + "▁stri ng", + "▁ string", + "▁m et", + "▁me t", + "▁ met", + "▁w r", + "▁ wr", + "us h", + "u sh", + "st ring", + "str ing", + "stri ng", + "s tring", + "si ze", + "s ize", + "▁v er", + "▁ve r", + "▁ ver", + "▁e ach", + "▁ each", + "val ue", + "v alue", + "▁l ast", + "▁la st", + "▁las t", + "▁ last", + "▁g ot", + "▁go t", + "▁ got", + "ve n", + "v en", + "ba ck", + "b ack", + "Se t", + "S et", + "e y", + "ro l", + "r ol", + "▁c r", + "▁ cr", + "th ing", + "t hing", + "re t", + "r et", + "é s", + "is m", + "i sm", + "▁bet ween", + "▁ between", + "O b", + "et hing", + "eth ing", + "e thing", + "m p", + "▁l o", + "▁ lo", + "at s", + "a ts", + "▁N ew", + "▁Ne w", + "▁ New", + "в и", + "ad o", + "a do", + "de x", + "d ex", + "д и", + "▁p ass", + "▁pas s", + "▁pa ss", + "▁ pass", + "w h", + "▁d en", + "▁de n", + "▁ den", + "Ge t", + "G et", + "ap t", + "a pt", + "▁a sk", + "▁as k", + "▁ ask", + "▁s up", + "▁su p", + "▁ sup", + "Val ue", + "V alue", + "н ы", + "▁t ry", + "▁tr y", + "▁ try", + "lat ion", + "l ation", + "da y", + "d ay", + "ne ss", + "nes s", + "n ess", + "et s", + "e ts", + "▁ex per", + "▁exp er", + "▁ exper", + "T r", + "▁M ar", + "▁Ma r", + "▁ Mar", + "se rv", + "ser v", + "s erv", + "b r", + "▁n umber", + "▁num ber", + "▁nu mber", + "▁ number", + "in al", + "ina l", + "i nal", + "ce nt", + "cen t", + "c ent", + "/ *", + "no t", + "n ot", + "ion al", + "io nal", + "iona l", + "i onal", + "▁f inal", + "▁fin al", + "▁fi nal", + "▁ final", + "' )", + "▁r un", + "▁ru n", + "▁ run", + "ov er", + "ove r", + "o ver", + "▁n ever", + "▁ne ver", + "▁ never", + "u c", + "▁h igh", + "▁hig h", + "▁hi gh", + "▁ high", + "yl e", + "y le", + "▁in s", + "▁i ns", + "▁ ins", + "▁b est", + "▁be st", + "▁bes t", + "▁ best", + "it tle", + "itt le", + "ri c", + "r ic", + "▁s ign", + "▁si gn", + "▁sig n", + "▁ sign", + "▁d em", + "▁de m", + "▁ dem", + "in ess", + "ine ss", + "ines s", + "i ness", + "g y", + "▁w ar", + "▁wa r", + "▁ war", + "is hed", + "ish ed", + "▁g iv", + "▁gi v", + "ke y", + "k ey", + "▁ X", + "( $", + "▁ch ild", + "▁chi ld", + "▁ child", + "le ss", + "les s", + "l ess", + "way s", + "wa ys", + "w ays", + "in cl", + "inc l", + "ro p", + "r op", + "ra w", + "r aw", + ": //", + "▁ «", + "n o", + "ind ow", + "indo w", + "f e", + "ri end", + "rie nd", + "rien d", + "▁l es", + "▁le s", + "▁ les", + "▁l os", + "▁lo s", + "▁ los", + "fil e", + "fi le", + "f ile", + "form ation", + "format ion", + "cc ess", + "c cess", + "▁ В", + "n a", + "▁i l", + "▁ il", + "is ion", + "isi on", + "le r", + "l er", + "▁a rt", + "▁ar t", + "▁ art", + "Con t", + "Co nt", + "C ont", + "▁w orld", + "▁wor ld", + "▁ world", + "▁t urn", + "▁tu rn", + "▁tur n", + "▁ turn", + "▁re ally", + "▁real ly", + "▁E x", + "▁ Ex", + "м а", + "▁ П", + "ter s", + "te rs", + "t ers", + "ar get", + "arg et", + "arge t", + "Er r", + "E rr", + "▁h app", + "▁ha pp", + "ti me", + "tim e", + "t ime", + "▁S o", + "▁ So", + "di v", + "d iv", + "▁did n", + "▁di dn", + "ad a", + "a da", + "oo t", + "o ot", + "} )", + "▁s ch", + "▁sc h", + "▁ sch", + "▁c le", + "▁cl e", + "▁ cle", + "▁some thing", + "▁som ething", + "▁somet hing", + "▁ something", + "() .", + "( ).", + "▁c our", + "▁co ur", + "▁cou r", + "ev er", + "eve r", + "e ver", + "an ts", + "ant s", + "▁ ?", + "T o", + "▁ `", + "tr y", + "t ry", + "u x", + "ai s", + "a is", + "ro ss", + "ros s", + "r oss", + "hi p", + "h ip", + "▁re p", + "▁r ep", + "▁ rep", + "la bel", + "lab el", + "l abel", + "▁b oth", + "▁bo th", + "▁bot h", + "▁ both", + "* ,", + "ot t", + "o tt", + "м и", + "an e", + "a ne", + "▁o pen", + "▁op en", + "▁ open", + "w w", + "▁c ome", + "▁com e", + "▁co me", + "▁ come", + "▁e xt", + "▁ex t", + "▁ ext", + "re m", + "r em", + "_{ \\", + "_ {\\", + "▁o ld", + "▁ol d", + "▁ old", + "ch ed", + "che d", + "c hed", + ". _", + "M E", + "if y", + "i fy", + "g g", + "Co l", + "C ol", + "vi ew", + "v iew", + "▁b us", + "▁bu s", + "▁ bus", + "▁m ust", + "▁mus t", + "▁mu st", + "▁ must", + "▁d ifferent", + "▁differ ent", + "lo g", + "l og", + "is ts", + "ist s", + "i sts", + "ro ll", + "rol l", + "r oll", + "a i", + "▁з а", + "▁ за", + "▁s ystem", + "▁sys tem", + "▁syst em", + "▁ system", + "iv ers", + "ive rs", + "iver s", + "i vers", + "at us", + "atu s", + "ot e", + "o te", + "me d", + "m ed", + "] .", + "ak es", + "ake s", + "a kes", + "R O", + "▁c ent", + "▁ce nt", + "▁ cent", + "gr am", + "gra m", + "g ram", + "▁p rivate", + "▁priv ate", + "▁ private", + "▁g reat", + "▁gre at", + "\" ;", + "op y", + "o py", + "▁fe el", + "▁fee l", + "▁H ow", + "▁Ho w", + "▁ How", + "// //", + "/// /", + "/ ///", + "I C", + "▁d r", + "▁ dr", + "ain s", + "ai ns", + "a ins", + "lo ck", + "loc k", + "l ock", + "E n", + "▁S ch", + "▁Sc h", + "▁ Sch", + "▁m at", + "▁ma t", + "▁ mat", + "▁h ome", + "▁hom e", + "▁ho me", + "▁ home", + "per ty", + "pert y", + "te st", + "tes t", + "t est", + "lo c", + "l oc", + "▁w om", + "▁wo m", + "s w", + "ar ly", + "arl y", + "▁E n", + "▁ En", + "▁к о", + "▁ ко", + "de n", + "d en", + "ст а", + "с та", + "▁ а", + "et er", + "ete r", + "e ter", + "▁incl ud", + "▁inclu d", + "UL L", + "U LL", + "▁m em", + "▁me m", + "▁ mem", + "▁p o", + "▁ po", + "▁l ittle", + "▁lit tle", + "▁litt le", + "▁a rg", + "▁ar g", + "▁ arg", + "▁} ,", + "▁ },", + "in clude", + "incl ude", + "et a", + "e ta", + "▁p lace", + "▁pl ace", + "▁plac e", + "▁ place", + "id th", + "us tom", + "ust om", + "▁| |", + "▁ ||", + "▁t em", + "▁te m", + "▁ tem", + "ri ed", + "rie d", + "r ied", + "▁f act", + "▁fac t", + "▁fa ct", + "▁ fact", + "ien ce", + "i ence", + "▁P l", + "▁ Pl", + "op t", + "o pt", + "el e", + "e le", + "g o", + "A C", + "in ter", + "int er", + "inte r", + "==== ====", + "() ,", + "( ),", + "ot s", + "o ts", + "ra l", + "r al", + "iqu e", + "iq ue", + "i que", + "av ing", + "avi ng", + "a ving", + "m l", + "▁th ought", + "▁though t", + "▁thou ght", + "fr ac", + "f rac", + "▁c are", + "▁car e", + "▁ca re", + "▁ care", + "() );", + "()) ;", + "( ));", + "▁p ut", + "▁pu t", + "▁ put", + "▁m ight", + "▁mi ght", + "▁mig ht", + "▁A mer", + "▁Am er", + "▁ Amer", + "▁( !", + "▁ (!", + "am ple", + "amp le", + "al th", + "alt h", + "▁f ew", + "▁fe w", + "▁st ate", + "▁stat e", + "▁sta te", + "▁ state", + "su b", + "s ub", + "▁O r", + "▁ Or", + "] ;", + "▁s ize", + "▁si ze", + "▁ size", + "▁S p", + "▁ Sp", + "▁with out", + "▁ without", + "▁p oss", + "▁pos s", + "▁po ss", + "▁ poss", + "e q", + "pl ay", + "p lay", + "▁ex pect", + "▁exp ect", + "▁ expect", + "▁se cond", + "▁sec ond", + "▁ second", + "▁S tring", + "▁St ring", + "▁Str ing", + "▁ String", + "ui ld", + "u ild", + "▁n ext", + "▁ne xt", + "▁ next", + "+ +", + "re qu", + "req u", + "r equ", + "▁A ll", + "▁Al l", + "▁ All", + "▁m en", + "▁me n", + "▁ men", + "▁W hen", + "▁Wh en", + "▁Whe n", + "▁ When", + "it er", + "ite r", + "i ter", + "am ent", + "ame nt", + "amen t", + "a ment", + "ne t", + "n et", + "▁ К", + "ro n", + "r on", + "ain t", + "ai nt", + "a int", + "▁I s", + "▁ Is", + "в е", + "pe nd", + "pen d", + "p end", + "trans lation", + "transl ation", + "▁г о", + "▁ го", + "ч е", + "▁v an", + "▁va n", + "▁ van", + "▁an other", + "▁ano ther", + "▁re t", + "▁r et", + "▁ ret", + "▁L a", + "▁ La", + "Mo d", + "M od", + "IO N", + "I ON", + "li st", + "l ist", + "▁p ost", + "▁pos t", + "▁po st", + "▁ post", + "d a", + "wa re", + "war e", + "w are", + "▁w ord", + "▁wor d", + "▁wo rd", + "▁ word", + "Err or", + "Er ror", + "▁se em", + "▁see m", + "▁cont in", + "▁ contin", + "at ic", + "ati c", + "▁th ree", + "▁thr ee", + "▁ three", + "Ob ject", + "Obj ect", + "▁part ic", + "▁parti c", + "$ .", + "▁m ark", + "▁mar k", + "▁ mark", + "▁v is", + "▁vi s", + "▁ vis", + "r c", + "▁s w", + "▁ sw", + "pt ions", + "ption s", + "▁b reak", + "▁bre ak", + "▁ break", + "▁th ings", + "▁thing s", + "▁thin gs", + "ut e", + "u te", + "u i", + "▁T hat", + "▁Th at", + "▁ That", + "ur s", + "u rs", + "g l", + "р у", + "▁f ile", + "▁fil e", + "▁fi le", + "▁ file", + "us e", + "u se", + "ig ned", + "ign ed", + "igne d", + "par t", + "pa rt", + "p art", + "U n", + "▁e qu", + "▁eq u", + "▁ equ", + "( &", + "▁l ead", + "▁le ad", + "r m", + "ain ed", + "ai ned", + "aine d", + "a ined", + "▁B e", + "▁ Be", + "pat h", + "pa th", + "p ath", + "▁sm all", + "▁ small", + "ag er", + "age r", + "a ger", + "▁al ways", + "▁ always", + "▁E l", + "▁ El", + "▁or der", + "▁ord er", + "▁ order", + "▁e y", + "▁ ey", + "▁w on", + "▁wo n", + "▁ won", + "ap e", + "a pe", + "▁l eft", + "▁le ft", + "▁ left", + "av a", + "a va", + "it em", + "ite m", + "i tem", + "ho r", + "h or", + "▁a way", + "▁aw ay", + "▁ away", + "b b", + "fu n", + "f un", + "▁I nd", + "▁In d", + "▁ Ind", + "m b", + "▁st ruct", + "▁str uct", + "▁stru ct", + "▁ struct", + "▁pro cess", + "▁proc ess", + "▁proces s", + "▁ process", + "▁s upport", + "▁sup port", + "▁supp ort", + "▁ support", + "); \r", + ") ;\r", + "ió n", + "i ón", + "L O", + "▁o per", + "▁op er", + "▁ oper", + "U T", + "▁ ·", + "P E", + "lo ad", + "l oad", + "of f", + "o ff", + "▁N o", + "▁ No", + "iv es", + "ive s", + "i ves", + "ic an", + "ica n", + "i can", + "▁v e", + "▁ ve", + "act ion", + "a ction", + "' ;", + "▁v o", + "▁ vo", + "$ ,", + "▁G r", + "▁ Gr", + "pr e", + "p re", + "n y", + "ain ing", + "ai ning", + "a ining", + "io r", + "i or", + "in it", + "ini t", + "i nit", + "le ction", + "lect ion", + "l ection", + "ar m", + "a rm", + "um n", + "u mn", + "ag s", + "a gs", + "ц и", + "ск о", + "с ко", + "vers ion", + "v ersion", + "▁T o", + "▁ To", + "▁re f", + "▁r ef", + "▁ ref", + "st and", + "sta nd", + "stan d", + "▁A t", + "▁ At", + "if t", + "i ft", + "▁e in", + "fa ce", + "fac e", + "f ace", + "b o", + "if ied", + "ifi ed", + "ve d", + "v ed", + "su m", + "s um", + "un e", + "u ne", + "it al", + "ita l", + "i tal", + "um p", + "u mp", + "com m", + "co mm", + "c omm", + "▁m ov", + "▁mo v", + "▁ mov", + "el t", + "e lt", + "▁v on", + "▁vo n", + "vel op", + "ct or", + "c tor", + "he ad", + "h ead", + "cl e", + "c le", + "▁b uild", + "▁bu ild", + "▁ build", + "in c", + "i nc", + ". '", + "b s", + "in fo", + "inf o", + "ch n", + "c hn", + "▁we ek", + "▁ week", + "▁b ook", + "▁bo ok", + "▁ book", + "H E", + "ba r", + "b ar", + "ic ense", + "▁W hat", + "▁Wh at", + "▁ What", + "▁qu est", + "▁que st", + "▁q uest", + "▁ quest", + "ur ch", + "at o", + "a to", + "le ft", + "l eft", + "▁m ar", + "▁ma r", + "▁ mar", + "▁t op", + "▁to p", + "▁ top", + "F F", + "▁f riend", + "▁ friend", + "▁b eh", + "▁be h", + "▁f ield", + "▁fi eld", + "▁ field", + "▁again st", + "ra ct", + "rac t", + "r act", + "iz ation", + "us er", + "use r", + "u ser", + "ch en", + "che n", + "c hen", + "▁ke ep", + "▁ keep", + "A D", + "it or", + "ito r", + "i tor", + "▁n on", + "▁no n", + "▁ non", + "ir d", + "i rd", + "op e", + "o pe", + "▁re st", + "▁r est", + "▁res t", + "▁ rest", + "▁d ev", + "▁de v", + "▁ dev", + "▁_ _", + "▁ __", + "▁u na", + "▁un a", + "▁ una", + "▁t erm", + "▁te rm", + "▁ter m", + "▁ term", + "I S", + "▁p op", + "▁po p", + "▁ pop", + "ri st", + "ris t", + "r ist", + "▁s ince", + "▁sin ce", + "▁sinc e", + "▁ since", + "ve s", + "v es", + "▁h ard", + "▁ha rd", + "▁har d", + "▁ hard", + "p i", + "ut il", + "uti l", + "u til", + "▁s oc", + "▁so c", + "▁ soc", + "en e", + "e ne", + "Ex ception", + "▁l ocal", + "▁loc al", + "▁lo cal", + "▁ local", + "▁d irect", + "▁di rect", + "▁dire ct", + "▁dir ect", + "▁ direct", + "▁s ure", + "▁su re", + "▁sur e", + "▁ sure", + "▁b ro", + "▁br o", + "▁ bro", + "▁d a", + "▁ da", + "▁< /", + "▁ ", + "ai m", + "a im", + "▁s ervice", + "▁serv ice", + "▁ service", + "▁with in", + "an gu", + "ang u", + "▁ Д", + "uf fer", + "uff er", + "A G", + "▁D o", + "▁ Do", + "▁in cre", + "▁inc re", + "▁under stand", + "} ^", + "▁look ed", + "▁lo oked", + "ge n", + "g en", + "ail ed", + "ai led", + "a iled", + "▁ е", + "ay er", + "aye r", + "a yer", + "▁O ne", + "▁On e", + "▁ One", + "▁b as", + "▁ba s", + "▁ bas", + "▁j ob", + "▁jo b", + "▁ job", + "m u", + "bu t", + "b ut", + "el ta", + "elt a", + "▁Ch rist", + "▁Chris t", + "▁ Christ", + "ur ation", + "▁re cord", + "▁rec ord", + "▁ record", + "▁Un ivers", + "▁ Univers", + "iv id", + "ivi d", + "i vid", + "val id", + "▁ Р", + "▁h old", + "▁hol d", + "▁ho ld", + "▁ hold", + "▁t able", + "▁tab le", + "▁ta ble", + "▁ table", + "on es", + "one s", + "o nes", + "lin k", + "l ink", + "▁G e", + "▁ Ge", + "▁of fer", + "▁off er", + "st er", + "ste r", + "s ter", + "For m", + "F orm", + "= {", + "▁н е", + "▁ не", + "st ance", + "stan ce", + "▁g overn", + "▁go vern", + "▁gover n", + "▁ govern", + "▁te chn", + "▁tech n", + "▁ techn", + "▁p rim", + "▁pr im", + "▁pri m", + "▁ prim", + "* .", + "ch o", + "c ho", + "ma x", + "m ax", + "▁f ore", + "▁for e", + "▁fo re", + "▁ fore", + "▁C an", + "▁Ca n", + "▁ Can", + "▁pol it", + "▁po lit", + "▁ polit", + "or ies", + "ori es", + "orie s", + "o ries", + "▁t imes", + "▁time s", + "▁tim es", + "▁ti mes", + "▁ times", + "▁d ans", + "▁da ns", + "▁dan s", + "▁a ir", + "▁ai r", + "▁ air", + "▁any thing", + "▁s ever", + "▁se ver", + "ac y", + "a cy", + "} _", + "H e", + "▁l east", + "▁le ast", + "ip s", + "i ps", + "EN T", + "E NT", + "d o", + "▁о т", + "▁ от", + "▁c ost", + "▁co st", + "▁cos t", + "▁ cost", + ". ”", + "▁child ren", + "▁ children", + "ab ility", + "abil ity", + "Bu t", + "B ut", + "▁p ath", + "▁pat h", + "▁pa th", + "▁ path", + "res ult", + "ac ter", + "act er", + "▁e lement", + "▁el ement", + "▁ele ment", + "▁elem ent", + "▁ element", + "e e", + "▁w ait", + "▁wa it", + "▁ wait", + "▁m oney", + "▁mon ey", + "▁mo ney", + "Ma p", + "M ap", + "t d", + "oi n", + "o in", + "iv ing", + "ivi ng", + "i ving", + "ic ht", + "ich t", + "i cht", + "ic y", + "i cy", + "sc h", + "s ch", + "st e", + "s te", + "д у", + "or ed", + "ore d", + "o red", + "ou d", + "o ud", + "il le", + "ill e", + "i lle", + "is ed", + "ise d", + "i sed", + "pl ication", + "plic ation", + "▁c ustom", + "▁cust om", + "▁ custom", + "▁h aving", + "▁ha ving", + "▁hav ing", + "pon ent", + "po nent", + "▁B y", + "▁ By", + "ul es", + "ule s", + "u les", + "ue d", + "u ed", + "at ter", + "att er", + "atte r", + "An d", + "A nd", + "it ive", + "iti ve", + "De f", + "D ef", + "▁m oment", + "▁mom ent", + "▁mo ment", + "▁ moment", + "at erial", + "ate rial", + "ater ial", + "Cl ass", + "C lass", + "og raph", + "ograp h", + "o graph", + "ik e", + "i ke", + "▁l arge", + "▁larg e", + "▁ large", + "▁# ###", + "▁## ##", + "▁### #", + "▁ ####", + "▁e ither", + "du ct", + "duc t", + "d uct", + "▁T hen", + "▁The n", + "▁Th en", + "▁ Then", + "▁G u", + "▁ Gu", + "ole an", + "o lean", + "pe rt", + "per t", + "p ert", + "▁G et", + "▁Ge t", + "▁ Get", + "▁A b", + "▁ Ab", + "▁sh ort", + "▁ short", + "O n", + "im ent", + "ime nt", + "imen t", + "i ment", + "▁pro ject", + "▁ project", + "cri pt", + "cr ipt", + "c ript", + "▁incl uding", + "▁includ ing", + "▁inclu ding", + "▁ including", + "ни я", + "▁m aking", + "▁ma king", + "▁ making", + "▁some one", + "▁F l", + "▁ Fl", + "▁s at", + "▁sa t", + "▁ sat", + "▁comp any", + "▁compan y", + "▁ company", + "oc us", + "p u", + "▁G od", + "▁Go d", + "▁ God", + "if ication", + "ific ation", + "N o", + "▁s n", + "▁ sn", + "an o", + "a no", + "g a", + "▁a u", + "▁ au", + "▁c ou", + "▁co u", + "▁ cou", + "á s", + "en ded", + "end ed", + "ende d", + "т у", + "ob er", + "obe r", + "o ber", + "▁n othing", + "▁not hing", + "▁no thing", + "▁n et", + "▁ne t", + "▁ net", + "▁p ot", + "▁po t", + "▁ pot", + "▁t yp", + "▁ty p", + "▁ typ", + "▁it em", + "▁i tem", + "▁ item", + "re w", + "r ew", + "At t", + "A tt", + "▁you ng", + "▁yo ung", + "} \r", + "nd er", + "nde r", + "n der", + "st art", + "sta rt", + "star t", + "▁S c", + "▁ Sc", + "* )", + "▁e nc", + "▁en c", + "▁ enc", + "▁w omen", + "▁wom en", + "▁wo men", + "▁look ing", + "▁lo oking", + "▁ looking", + "▁р о", + "▁ ро", + "▁he alth", + "▁heal th", + "▁ health", + "Pat h", + "P ath", + "▁A fter", + "▁Af ter", + "▁ After", + "▁m ult", + "▁mu lt", + "▁mul t", + "▁ mult", + "▁{ \\", + "▁ {\\", + "▁l and", + "▁la nd", + "▁lan d", + "▁ land", + "or ld", + "▁D es", + "▁De s", + "▁ Des", + "▁e ng", + "▁en g", + "▁ eng", + "in put", + "▁P ol", + "▁Po l", + "▁ Pol", + "\" \"", + "Co de", + "C ode", + "▁s upp", + "▁su pp", + "▁sup p", + "▁ supp", + "ain er", + "ai ner", + "aine r", + "a iner", + "he ck", + "▁m or", + "▁mo r", + "▁ mor", + "▁m ill", + "▁mil l", + "▁mi ll", + "▁ mill", + "▁a w", + "▁ aw", + "f s", + "▁do ing", + "ting s", + "t ings", + "ad es", + "ade s", + "a des", + "▁to get", + "▁c ertain", + "▁cert ain", + "▁cer tain", + "▁t ogether", + "▁toget her", + "C E", + "ide o", + "▁Amer ican", + "▁America n", + "▁ American", + "on y", + "o ny", + "id d", + "i dd", + "I I", + "ge d", + "g ed", + "ab les", + "able s", + "abl es", + "a bles", + "▁ide nt", + "▁id ent", + "▁ ident", + "io d", + "i od", + "▁p arent", + "▁par ent", + "▁pa rent", + "▁pare nt", + "▁ parent", + "F or", + "amb da", + "an do", + "and o", + "= \\", + "ag ed", + "age d", + "a ged", + "en ding", + "end ing", + "In t", + "I nt", + "▁poss ible", + "▁ possible", + "▁с о", + "▁ со", + "iv ity", + "ivi ty", + "nu m", + "n um", + "r t", + "aj or", + "ajo r", + "a jor", + "cre ate", + "creat e", + "c reate", + "ri de", + "rid e", + "r ide", + "▁k new", + "▁kn ew", + "▁kne w", + "bi t", + "b it", + "it ional", + "ition al", + "iti onal", + "▁l ik", + "▁li k", + "▁ lik", + "▁H er", + "▁He r", + "▁ Her", + "ens ion", + "\" .", + "ot o", + "o to", + "▁ex ist", + "▁ exist", + "ak en", + "ake n", + "a ken", + "▁act ually", + "▁actual ly", + "c a", + "▁ Г", + "х о", + "in n", + "i nn", + "Al l", + "A ll", + "bu f", + "b uf", + "▁M e", + "▁ Me", + "▁s een", + "▁se en", + "▁see n", + "▁ seen", + "op s", + "o ps", + "No t", + "N ot", + "▁cont rol", + "▁contr ol", + "▁contro l", + "▁ control", + "▁res pon", + "▁resp on", + "▁ respon", + "} ;", + "il t", + "i lt", + "is k", + "i sk", + "▁b ad", + "▁ba d", + "▁ bad", + "▁o ften", + "▁of ten", + "▁p ast", + "▁pas t", + "▁pa st", + "ap er", + "ape r", + "a per", + "▁re ason", + "▁ reason", + "et ers", + "eter s", + "ete rs", + "e ters", + "▁w anted", + "▁want ed", + "ur a", + "u ra", + "ta ble", + "tab le", + "t able", + "or mal", + "orm al", + "wid th", + "w idth", + "г а", + "pt r", + "p tr", + "▁d est", + "▁de st", + "▁des t", + "▁ dest", + "▁de sign", + "▁des ign", + "▁ design", + "▁s ound", + "▁so und", + "▁sou nd", + "▁ sound", + "▁p lan", + "▁pl an", + "▁ plan", + "▁b ase", + "▁bas e", + "▁ba se", + "▁ base", + "ha nd", + "han d", + "h and", + "g s", + "▁s ays", + "▁sa ys", + "▁say s", + "fun ction", + "f unction", + "▁t ri", + "▁tr i", + "▁ tri", + "m t", + "▁in vest", + "▁inv est", + "▁av ailable", + "▁ available", + "ay out", + "a yout", + "▁o ch", + "▁oc h", + "▁ och", + "▁l as", + "▁la s", + "▁ las", + "il led", + "ill ed", + "ille d", + "V al", + "▁ ф", + "ie ty", + "iet y", + "i ety", + "mo n", + "m on", + "Ha nd", + "H and", + "F r", + "ia m", + "i am", + "pa ce", + "p ace", + "▁O b", + "▁ Ob", + "▁p ara", + "▁par a", + "▁pa ra", + "▁ para", + "▁me et", + "▁s um", + "▁su m", + "▁ sum", + "M essage", + "ic i", + "i ci", + "▁k nown", + "▁kn own", + "▁know n", + "▁ known", + "▁g en", + "▁ge n", + "▁ gen", + "am ma", + "amm a", + "a mma", + "ar r", + "a rr", + "▁t re", + "▁tr e", + "▁ tre", + "ok e", + "o ke", + "ut h", + "u th", + "~ \\", + "▁exper ience", + "▁experi ence", + "ic le", + "icl e", + "i cle", + "▁I l", + "▁ Il", + "▁s ent", + "▁se nt", + "▁sen t", + "▁ sent", + "▁o thers", + "▁other s", + "▁ others", + "▁s oft", + "▁so ft", + "▁ soft", + "I P", + "▁m ax", + "▁ma x", + "▁ max", + "ba ll", + "bal l", + "b all", + "▁mark et", + "▁mar ket", + "▁ market", + "▁p our", + "▁po ur", + "▁pou r", + "pr ession", + "press ion", + "p ression", + "ep s", + "e ps", + "▁s aw", + "▁sa w", + "▁a cross", + "▁ac ross", + "▁S u", + "▁ Su", + "O ver", + "ни е", + "ul ation", + "u lation", + "▁R eg", + "▁Re g", + "▁ Reg", + "▁+ =", + "▁ +=", + "bo dy", + "b ody", + ") \\", + "▁pr int", + "▁pri nt", + "▁prin t", + "▁ print", + "▁п ри", + "▁пр и", + "▁ при", + "d b", + "our ces", + "ource s", + "ward s", + "war ds", + "w ards", + "▁bl ack", + "▁ black", + "с о", + "il i", + "i li", + "▁E d", + "▁ Ed", + "▁com plet", + "▁comp let", + "▁compl et", + "▁s ingle", + "▁sing le", + "▁sin gle", + "▁ single", + "▁I N", + "▁ IN", + "ac hed", + "ach ed", + "ache d", + "a ched", + "b t", + "▁c ode", + "▁co de", + "▁cod e", + "▁ code", + "▁b ool", + "▁bo ol", + "▁ bool", + "▁a rea", + "▁are a", + "▁ar ea", + "▁ area", + "▁re quire", + "▁requ ire", + "▁ require", + "▁pro blem", + "▁proble m", + "▁prob lem", + "ac ed", + "ace d", + "a ced", + "Eq u", + "E qu", + "▁con fig", + "▁conf ig", + "▁ config", + "ve c", + "v ec", + "ne y", + "n ey", + "c y", + "A l", + "▁acc ount", + "▁ac count", + "▁ account", + "ym bol", + "▁s te", + "▁st e", + "▁ ste", + "ge s", + "g es", + "Ar ray", + "Arr ay", + "em pl", + "emp l", + "con text", + "cont ext", + "De s", + "D es", + "Res ult", + "ec ut", + "e cut", + "▁t arget", + "▁tar get", + "▁ target", + "▁get ting", + "\" />", + "og le", + "o gle", + "▁him self", + "▁was n", + "▁wa sn", + "▁b lock", + "▁bl ock", + "▁blo ck", + "▁ block", + "▁a nt", + "▁an t", + "▁ ant", + "▁Y ork", + "▁be come", + "▁bec ome", + "if f", + "i ff", + "port s", + "por ts", + "p orts", + "re ate", + "reat e", + "rea te", + "= '", + "c d", + "loc ation", + "l ocation", + "е т", + "▁a ccess", + "▁acc ess", + "▁ac cess", + "▁ access", + "gr ess", + "gre ss", + "gres s", + "g ress", + "ro s", + "r os", + "U p", + "▁work ing", + "▁wor king", + "▁ working", + "▁A m", + "▁ Am", + "iq u", + "i qu", + "ce r", + "c er", + "▁( (", + "▁ ((", + "▁P er", + "▁Pe r", + "▁ Per", + "▁f unc", + "▁fun c", + "▁fu nc", + "▁ func", + "▁g irl", + "▁gi rl", + "▁gir l", + "▁ girl", + "▁ab ove", + "pe n", + "p en", + "п и", + "id o", + "i do", + "▁v ersion", + "▁vers ion", + "▁ version", + "T Y", + "▁ ;", + "ma ry", + "mar y", + "m ary", + "ab led", + "able d", + "abl ed", + "a bled", + "an nel", + "ann el", + "anne l", + "▁ex ample", + "▁exam ple", + "▁ example", + "▁con text", + "▁cont ext", + "▁ context", + "O P", + "▁re d", + "▁r ed", + "▁ red", + "▁c ir", + "▁ci r", + "▁ cir", + "s m", + "Lo g", + "L og", + "▁s pace", + "▁sp ace", + "▁ space", + "▁f ut", + "▁fu t", + "▁G ener", + "▁Ge ner", + "▁Gen er", + "▁Gene r", + "▁ Gener", + "il ls", + "ill s", + "▁d ri", + "▁dr i", + "_ .", + "▁f elt", + "▁fe lt", + "▁fel t", + "▁o ffic", + "▁of fic", + "▁off ic", + "▁= ==", + "▁== =", + "▁ ===", + "i i", + "▁start ed", + "▁star ted", + "▁ Т", + "▁} );", + "▁}) ;", + "▁ });", + "j s", + "▁fr ont", + "▁fro nt", + "▁ front", + "▁al most", + "ir m", + "i rm", + "! \"", + "sign ed", + "sig ned", + "s igned", + "▁y et", + "▁ye t", + "▁t rad", + "▁tr ad", + "▁tra d", + "ient s", + "ien ts", + "i ents", + "am a", + "a ma", + "▁in put", + "▁ input", + "li m", + "l im", + "п а", + "▁к а", + "▁ ка", + "▁c amp", + "▁cam p", + "▁ca mp", + "▁ camp", + "ib r", + "i br", + "fe ct", + "f ect", + "un t", + "u nt", + "▁h alf", + "▁hal f", + "▁ half", + "▁c over", + "▁co ver", + "▁cov er", + "▁ cover", + "angu age", + "▁b en", + "▁be n", + "▁ ben", + "h a", + "▁d iff", + "▁di ff", + "▁dif f", + "▁ diff", + "_ \\", + "▁о б", + "▁ об", + "] )", + "od es", + "ode s", + "o des", + "he l", + "h el", + "io s", + "i os", + "▁ О", + "▁m ot", + "▁mo t", + "▁ mot", + "▁s ocial", + "▁so cial", + "▁soc ial", + "▁soci al", + "▁ social", + "//// ////", + "▁s tre", + "▁st re", + "▁str e", + "▁ stre", + "gr ound", + "gro und", + "g round", + "і в", + "ob ject", + "obj ect", + "pl es", + "ple s", + "p les", + "re ed", + "ree d", + "r eed", + "▁e en", + "▁ een", + "▁b ased", + "▁bas ed", + "▁base d", + "▁ba sed", + "▁ based", + "▁r ange", + "▁ran ge", + "▁rang e", + "▁ range", + "A n", + "ur g", + "u rg", + "▁le arn", + "▁lear n", + "▁ learn", + "▁e xc", + "▁ex c", + "▁ exc", + "▁im p", + "▁i mp", + "▁ imp", + "▁me ans", + "▁mean s", + "▁w ur", + "en ds", + "end s", + "vo id", + "v oid", + "▁s td", + "▁st d", + "▁ std", + "▁part icular", + "▁partic ular", + "▁particul ar", + "▁parti cular", + "j a", + "▁s ource", + "▁sour ce", + "▁ source", + "def ault", + "p y", + "▁a ls", + "▁al s", + "▁ als", + "sc ri", + "scr i", + "s cri", + "st atus", + "stat us", + "▁st ory", + "▁stor y", + "▁sto ry", + "▁ story", + "▁b egin", + "▁be gin", + "▁beg in", + "▁ begin", + "▁pos ition", + "▁posit ion", + "▁ position", + "▁spec ial", + "▁spe cial", + "▁ special", + "ph p", + "p hp", + "▁b ar", + "▁ba r", + "▁ bar", + "▁p ract", + "▁pr act", + "▁pra ct", + "▁prac t", + "cal l", + "ca ll", + "c all", + "▁d as", + "▁da s", + "▁ das", + "▁r ad", + "▁ra d", + "▁ rad", + "▁cl ose", + "▁clos e", + "▁clo se", + "▁ close", + "ww w", + "w ww", + "ер е", + "е ре", + "g u", + "▁E r", + "▁ Er", + "▁d om", + "▁do m", + "▁ dom", + "A M", + "▁b ed", + "▁be d", + "▁ bed", + "▁sever al", + "au l", + "a ul", + "bo x", + "b ox", + "▁l ow", + "▁lo w", + "▁ low", + "pa ck", + "p ack", + "Re g", + "R eg", + "O f", + "at ures", + "ature s", + "atur es", + "atu res", + "é n", + "ed er", + "ede r", + "e der", + "uild er", + "ca st", + "cas t", + "c ast", + "con om", + "co nom", + "c onom", + "ra ft", + "raf t", + "r aft", + "▁m akes", + "▁make s", + "▁ma kes", + "Lo c", + "L oc", + "ht tp", + "htt p", + "h ttp", + "▁a bs", + "▁ab s", + "▁ abs", + "re sh", + "res h", + "r esh", + "▁W ill", + "▁Wil l", + "▁Wi ll", + "▁ Will", + "bre ak", + "b reak", + "▁o ptions", + "▁opt ions", + "▁option s", + "▁ options", + "fo rt", + "for t", + "f ort", + "▁и з", + "▁ из", + "▁a nal", + "▁an al", + "▁ anal", + "▁e nv", + "▁en v", + "▁ env", + "( {", + "ev ent", + "even t", + "eve nt", + "e vent", + "▁p age", + "▁pa ge", + "▁pag e", + "▁ page", + "ter nal", + "tern al", + "▁d istribut", + "▁dist ribut", + "▁f ood", + "▁fo od", + "▁foo d", + "▁ food", + "che ck", + "c heck", + "C K", + "▁в о", + "▁ во", + "as sert", + "ass ert", + "asse rt", + "á n", + "ba se", + "bas e", + "b ase", + "▁w hole", + "▁wh ole", + "▁who le", + "ac ión", + "ació n", + "aci ón", + "a ción", + "O D", + "▁turn ed", + "▁tur ned", + "ig ma", + "▁res ponse", + "▁respon se", + "▁respons e", + "▁ response", + "▁Univers ity", + "▁d iv", + "▁di v", + "▁ div", + "ap ter", + "apt er", + "▁result s", + "▁ results", + "▁re present", + "▁rep resent", + "▁every thing", + "▁C ent", + "▁Ce nt", + "▁ Cent", + "ut es", + "ute s", + "u tes", + "ri x", + "r ix", + "▁S ome", + "▁So me", + "▁Som e", + "▁ Some", + "▁be hind", + "▁beh ind", + "▁c reat", + "▁cre at", + "▁ creat", + "pl ace", + "plac e", + "p lace", + "s u", + "▁P art", + "▁Par t", + "▁Pa rt", + "▁ Part", + "um b", + "u mb", + "math bb", + "pi ng", + "pin g", + "p ing", + "▁m atch", + "▁mat ch", + "▁ match", + "O ut", + "do m", + "d om", + "▁s itu", + "▁sit u", + "▁si tu", + "d r", + "ar a", + "a ra", + "▁w indow", + "▁wind ow", + "▁ window", + "n s", + "lish ed", + "l ished", + "▁V er", + "▁Ve r", + "▁ Ver", + "▁m essage", + "▁mess age", + "▁ message", + "▁E m", + "▁ Em", + "▁h uman", + "▁hum an", + "▁ human", + "per ties", + "pert ies", + "л у", + "le m", + "l em", + "OR T", + "O RT", + "▁e arly", + "▁ear ly", + "▁qu ick", + "▁qui ck", + "▁ quick", + "▁т а", + "▁ та", + "ro id", + "r oid", + "▁c ountry", + "▁coun try", + "▁count ry", + "▁countr y", + "▁ country", + "▁d ue", + "▁du e", + "▁ due", + "▁D ie", + "▁Di e", + "▁ Die", + "▁t rying", + "▁tr ying", + "▁try ing", + "▁l ive", + "▁li ve", + "▁liv e", + "▁ live", + "▁p ress", + "▁pre ss", + "▁pr ess", + "▁pres s", + "▁ press", + "IN T", + "I NT", + "W ith", + "ov ed", + "ove d", + "o ved", + "▁spec ific", + "▁ specific", + "▁f all", + "▁fa ll", + "▁fal l", + "▁ fall", + "u k", + "y l", + "▁gener al", + "▁gen eral", + "▁gene ral", + "▁ general", + "м у", + "н у", + "▁n ames", + "▁name s", + "▁na mes", + "▁nam es", + "▁ names", + "wh ere", + "whe re", + "w here", + "▁The se", + "▁Th ese", + "▁ These", + "▁s il", + "▁si l", + "▁ sil", + "é t", + "▁e ner", + "▁en er", + "▁ ener", + "▁N ow", + "▁No w", + "▁ Now", + "▁add ress", + "▁addr ess", + "▁ address", + "Res ponse", + "▁M r", + "▁ Mr", + "▁an sw", + "▁ans w", + "▁fil m", + "▁fi lm", + "▁ film", + "▁str ong", + "▁stro ng", + "▁ strong", + "▁b ring", + "▁br ing", + "▁Un ited", + "▁Unit ed", + "▁g e", + "▁ ge", + "▁w oman", + "▁wom an", + "▁wo man", + "▁ woman", + "Ne w", + "N ew", + "et t", + "e tt", + ". )", + "en ame", + "ena me", + "e name", + "▁A N", + "▁ AN", + "▁de scrib", + "▁desc rib", + "з а", + "is ing", + "isi ng", + "i sing", + "E L", + "q l", + "▁f ur", + "▁fu r", + "▁ fur", + "y ing", + "▁C al", + "▁Ca l", + "▁ Cal", + "▁D r", + "▁ Dr", + "ER R", + "E RR", + "▁\\ \\", + "▁ \\\\", + "an gle", + "ang le", + "ur ope", + "uro pe", + "urop e", + "▁c ity", + "▁cit y", + "▁ci ty", + "▁ city", + "▁in dex", + "▁ind ex", + "▁inde x", + "▁ index", + "▁a ction", + "▁act ion", + "▁ action", + "▁How ever", + "▁ However", + "▁f ig", + "▁fi g", + "▁ fig", + "ia s", + "i as", + "▁quest ion", + "▁ question", + "▁J an", + "▁Ja n", + "▁ Jan", + "▁M ed", + "▁Me d", + "▁ Med", + "▁C ont", + "▁Con t", + "▁Co nt", + "▁ Cont", + "am ed", + "ame d", + "a med", + "Cal l", + "C all", + "pl ied", + "tt y", + "t ty", + "▁ind ivid", + "pa ge", + "pag e", + "p age", + "▁c omb", + "▁com b", + "▁co mb", + "▁ comb", + "se ction", + "sect ion", + "s ection", + "▁C omm", + "▁Com m", + "▁Co mm", + "▁ Comm", + "ue l", + "u el", + "▁h et", + "▁he t", + "▁ het", + "▁B ar", + "▁Ba r", + "▁ Bar", + "ag ement", + "age ment", + "agem ent", + "fi n", + "f in", + "▁m ajor", + "▁ma jor", + "▁maj or", + "▁ major", + "op er", + "ope r", + "o per", + "ap i", + "a pi", + "ro om", + "r oom", + "▁ „", + "▁h ab", + "▁ha b", + "▁ hab", + "з и", + "▁a uf", + "▁au f", + "▁ auf", + "cur rent", + "curr ent", + "n i", + "▁in clude", + "▁incl ude", + "▁includ e", + "▁inclu de", + "▁ include", + "▁qu i", + "▁q ui", + "v a", + "U E", + "▁ide a", + "▁id ea", + "▁ idea", + ", '", + "▁requ ired", + "▁require d", + "▁ required", + "▁he art", + "▁hear t", + "▁ heart", + "ib ility", + "ibil ity", + "ict ion", + "i ction", + "Mod el", + "Mode l", + "Mo del", + "wr ite", + "writ e", + "w rite", + "▁cont ent", + "▁conten t", + "▁ content", + "▁w er", + "▁we r", + "▁ wer", + "▁h ands", + "▁hand s", + "▁han ds", + "ze n", + "z en", + "ch ar", + "cha r", + "c har", + "}^ {", + "} ^{", + "▁m ass", + "▁ma ss", + "▁mas s", + "▁ mass", + "pl y", + "p ly", + "▁n at", + "▁na t", + "▁ nat", + "re l", + "r el", + "▁d at", + "▁da t", + "▁ dat", + "==== ============", + "======== ========", + "============ ====", + "im al", + "ima l", + "i mal", + "▁pro bably", + "▁prob ably", + "un ch", + "unc h", + "▁m er", + "▁me r", + "▁ mer", + "il ar", + "ila r", + "i lar", + "ir es", + "ire s", + "i res", + "▁w atch", + "▁wat ch", + "▁ watch", + "S I", + "▁c ult", + "▁cu lt", + "▁cul t", + "▁m other", + "▁mot her", + "▁mo ther", + "▁ mother", + "▁govern ment", + "or ding", + "ord ing", + "▁( )", + "▁ ()", + "▁p ri", + "▁pr i", + "▁l ink", + "▁lin k", + "▁ link", + "gr oup", + "gro up", + "g roup", + "O L", + "▁n ear", + "▁ne ar", + "▁S er", + "▁Se r", + "▁ Ser", + "Se r", + "S er", + "it o", + "i to", + "▁value s", + "▁val ues", + "▁ values", + "▁j ava", + "▁ja va", + "▁ java", + "ful ly", + "full y", + "f ully", + "Co unt", + "C ount", + "++ )", + "▁v i", + "▁ vi", + "▁wh ite", + "▁ white", + "ma t", + "m at", + "ct x", + "c tx", + "▁con c", + "▁co nc", + "▁ conc", + "▁st ay", + "▁sta y", + "gi ng", + "gin g", + "g ing", + "▁c lear", + "▁cl ear", + "▁cle ar", + "▁ clear", + "▁c opy", + "▁co py", + "▁cop y", + "▁ copy", + "sel ves", + "▁prov ide", + "▁w ords", + "▁wor ds", + "▁word s", + "▁ words", + "com p", + "co mp", + "c omp", + "ar gs", + "arg s", + "▁p ick", + "▁pi ck", + "▁pic k", + "▁ pick", + "ul y", + "u ly", + "▁v ari", + "▁var i", + "▁va ri", + "▁ vari", + "▁bel ieve", + "▁belie ve", + "▁C o", + "▁ Co", + "Pro perty", + "Gr oup", + "G roup", + "▁t en", + "▁te n", + "▁ ten", + "is chen", + "isch en", + "ische n", + "isc hen", + "i schen", + "et urn", + "e turn", + "iv al", + "iva l", + "i val", + "Sys tem", + "S ystem", + "C L", + "be d", + "b ed", + "▁t otal", + "▁to tal", + "▁tot al", + "▁ total", + "▁is t", + "▁i st", + "▁ ist", + "In put", + "um ents", + "ument s", + "umen ts", + "u ments", + "Man ager", + "ш и", + "▁w in", + "▁ win", + "le ep", + "lee p", + "P I", + "но го", + "н ого", + "ru ction", + "ruct ion", + "r uction", + "▁in te", + "▁i nte", + "▁int e", + "▁ inte", + "Ap p", + "A pp", + "av or", + "avo r", + "a vor", + "▁re spect", + "▁res pect", + "▁resp ect", + "▁ respect", + "at ors", + "ator s", + "ato rs", + "▁c omo", + "▁com o", + "▁co mo", + "▁c ut", + "▁cu t", + "▁ cut", + "F A", + "▁s us", + "▁su s", + "▁A pp", + "▁Ap p", + "▁ App", + "re ct", + "rec t", + "r ect", + "F I", + "▁be gan", + "▁beg an", + "op h", + "o ph", + "▁s ort", + "▁so rt", + "▁sor t", + "▁ sort", + "th ough", + "ј е", + "ic ro", + "i cro", + "Tr ans", + "Tra ns", + "л і", + "▁In st", + "▁Ins t", + "▁ Inst", + "re quest", + "requ est", + "req uest", + "о р", + "▁rel ations", + "▁relation s", + "- \\", + "St atus", + "Stat us", + "ж и", + "▁f ather", + "▁fa ther", + "▁fat her", + "▁ father", + "c s", + "▁s ex", + "▁se x", + "▁ sex", + "is ch", + "isc h", + "i sch", + "v o", + "}_ {", + "} _{", + "ave n", + "av en", + "a ven", + "▁N e", + "▁ Ne", + "AT E", + "A TE", + "it ten", + "itt en", + "itte n", + "▁e ss", + "▁es s", + "▁ ess", + "T H", + "ight s", + "igh ts", + "▁h om", + "▁ho m", + "▁ hom", + "▁t oday", + "▁to day", + "▁tod ay", + "▁toda y", + "▁z u", + "▁ zu", + "it a", + "i ta", + "▁is n", + "▁i sn", + "▁o pt", + "▁op t", + "▁ opt", + "og n", + "o gn", + "é r", + "▁wh ether", + "▁whe ther", + "ix ed", + "ph i", + "p hi", + "id ence", + "iden ce", + "al d", + "a ld", + "Cl ient", + "A t", + "▁de ath", + "▁L et", + "▁Le t", + "▁ Let", + "iu s", + "i us", + "г и", + "▁р е", + "▁ ре", + "be n", + "b en", + ") \r", + "b a", + ">< /", + "> ", + "▁ ->", + "▁J ust", + "▁Ju st", + "▁ Just", + "Wh at", + "W hat", + "at al", + "ata l", + "a tal", + "▁M in", + "▁Mi n", + "▁ Min", + "▁C or", + "▁Co r", + "▁ Cor", + "▁d ark", + "▁dar k", + "▁ dark", + "r l", + "▁l arg", + "▁la rg", + "▁ larg", + "di ng", + "d ing", + "ó n", + "ou ch", + "o uch", + "▁u m", + "▁ um", + "▁e lect", + "▁el ect", + "▁ele ct", + "▁ elect", + "▁d am", + "▁da m", + "▁ dam", + "▁ne eds", + "▁need s", + "▁m atter", + "▁mat ter", + "▁matt er", + "▁r ather", + "▁rat her", + "▁ra ther", + "fr om", + "f rom", + "ra m", + "r am", + "▁ і", + "▁t aken", + "▁take n", + "▁tak en", + "▁ta ken", + "▁de al", + "▁per iod", + "▁ period", + "▁M on", + "▁Mo n", + "▁ Mon", + "▁ Л", + "▁A ug", + "▁Au g", + "▁ Aug", + "ru n", + "r un", + "m m", + "el le", + "ell e", + "e lle", + "▁ex port", + "▁exp ort", + "▁ export", + "S c", + "vi s", + "v is", + "ab or", + "a bor", + "▁aut hor", + "▁auth or", + "▁ author", + "è re", + "▁re member", + "▁rem ember", + "▁remem ber", + "▁re du", + "▁r edu", + "▁red u", + "▁ redu", + "▁L ist", + "▁Li st", + "▁Lis t", + "▁ List", + "▁f ocus", + "▁ focus", + "▁char acter", + "▁ character", + "Tab le", + "T able", + "▁individ ual", + "▁need ed", + "bu m", + "b um", + "▁st yle", + "▁sty le", + "▁ style", + "in ary", + "ina ry", + "inar y", + "ers ion", + "ou te", + "out e", + "o ute", + "▁P e", + "▁ Pe", + "▁h on", + "▁ho n", + "▁ hon", + "mu t", + "m ut", + "se e", + "s ee", + "▁bec ame", + "▁d ire", + "▁di re", + "▁dir e", + "▁ dire", + "▁d ocument", + "▁doc ument", + "▁ document", + "se c", + "s ec", + "en ing", + "eni ng", + "e ning", + "▁vis it", + "▁ visit", + "▁f ac", + "▁fa c", + "▁ fac", + "t x", + "do wn", + "d own", + "pl it", + "p lit", + "▁ph ys", + "▁ phys", + "it ting", + "itt ing", + "jo y", + "j oy", + "▁h ig", + "▁hi g", + "Th is", + "T his", + "A d", + "▁B rit", + "▁Br it", + "▁em ploy", + "▁r é", + "▁ ré", + "▁ т", + "l ambda", + "▁im pro", + "▁imp ro", + "▁B o", + "▁ Bo", + "id ing", + "idi ng", + "i ding", + "▁on line", + "▁ online", + "me m", + "m em", + "at form", + "▁W ar", + "▁Wa r", + "▁ War", + "▁c as", + "▁ca s", + "▁ cas", + "as ure", + "a sure", + "▁p ur", + "▁pu r", + "▁ pur", + "me di", + "med i", + "m edi", + "Di s", + "D is", + "▁G erm", + "▁Ge rm", + "▁Ger m", + "p c", + "с а", + "▁friend s", + "▁M c", + "▁ Mc", + "D I", + "▁pl us", + "▁ plus", + "▁S et", + "▁Se t", + "▁ Set", + "idd le", + "it ut", + "itu t", + "▁de pend", + "▁dep end", + "▁ depend", + "re st", + "res t", + "r est", + "▁J e", + "▁ Je", + "▁h or", + "▁ho r", + "▁ hor", + "▁ent ire", + "Qu ery", + "Que ry", + "▁re fer", + "▁ref er", + "▁ refer", + "▁h ot", + "▁ho t", + "▁ hot", + "▁A ust", + "▁Aus t", + "▁Au st", + "▁com mon", + "▁comm on", + "▁ common", + "ц і", + "▁p ull", + "▁pu ll", + "▁pul l", + "▁ pull", + "▁A dd", + "▁Ad d", + "▁ Add", + "▁se ason", + "▁sea son", + "▁seas on", + "▁ season", + "▁in vol", + "▁inv ol", + "▁W orld", + "▁Wor ld", + "▁ World", + "cl ient", + "cli ent", + "no w", + "n ow", + "tr ue", + "ap pend", + "app end", + "appe nd", + "appen d", + "it ted", + "itt ed", + "itte d", + "em pt", + "emp t", + ") {", + "// /", + "/ //", + "▁p rop", + "▁pro p", + "▁pr op", + "▁ prop", + "im ate", + "ima te", + "imat e", + "i mate", + "S C", + "▁h ours", + "▁hour s", + "▁ho urs", + "▁h ope", + "▁hop e", + "▁ho pe", + "an dom", + "and om", + "ando m", + "і д", + "ist ic", + "isti c", + "▁pro perty", + "▁proper ty", + "▁ property", + "s g", + "> (", + "▁w rite", + "▁wr ite", + "▁writ e", + "▁ write", + "mar k", + "m ark", + "fin d", + "fi nd", + "f ind", + "▁person al", + "▁pers onal", + "▁persona l", + "▁ personal", + "] [", + "ro wn", + "row n", + "r own", + "P h", + "▁f oot", + "▁fo ot", + "▁foo t", + "▁ foot", + "▁re search", + "▁res earch", + "iron ment", + "▁n om", + "▁no m", + "▁ nom", + "▁in stance", + "▁inst ance", + "▁ instance", + "▁h eld", + "▁he ld", + "▁hel d", + "▁ held", + "D e", + "▁mem bers", + "▁member s", + "▁ members", + "▁f ire", + "▁fi re", + "▁fir e", + "▁ fire", + "▁hist ory", + "▁histor y", + "▁hi story", + "▁ history", + "▁m ap", + "▁ma p", + "▁ map", + "▁dis cuss", + "▁disc uss", + "▁e spec", + "▁es pec", + "▁esp ec", + "▁ espec", + "▁t aking", + "▁tak ing", + "▁ta king", + "▁s ervices", + "▁serv ices", + "▁service s", + "▁ services", + "▁ind ust", + "▁indu st", + "▁ indust", + "ig en", + "ige n", + "i gen", + "▁A ss", + "▁As s", + "▁ Ass", + "▁e xpected", + "▁ex pected", + "▁expect ed", + "▁ expected", + "▁wur de", + "di r", + "d ir", + "▁a mong", + "▁am ong", + "▁s ugg", + "▁su gg", + "▁sug g", + "re c", + "r ec", + "In ter", + "Int er", + "bl ock", + "blo ck", + "b lock", + "▁R ep", + "▁Re p", + "▁ Rep", + "▁p ain", + "▁pa in", + "▁f ive", + "▁fi ve", + "▁ five", + "▁f und", + "▁fun d", + "▁fu nd", + "▁ fund", + "ri d", + "r id", + "ar row", + "arr ow", + "▁t reat", + "▁tre at", + "▁he ard", + "▁hear d", + "▁de term", + "▁det erm", + "▁deter m", + "ic ult", + "▁s ense", + "▁sens e", + "▁sen se", + "es e", + "e se", + "F un", + "▁month s", + "▁mont hs", + "js on", + "j son", + ", ”", + "T I", + "or age", + "ora ge", + "o rage", + "▁ У", + "▁every one", + "▁c los", + "▁cl os", + "▁clo s", + "▁ clos", + "ie rs", + "ier s", + "i ers", + "air s", + "ai rs", + "a irs", + "def ine", + "I f", + "os p", + "o sp", + "▁w onder", + "▁won der", + "▁wo nder", + "N A", + "qu ery", + "que ry", + "quer y", + "p g", + "it es", + "ite s", + "i tes", + "▁m aterial", + "▁mat erial", + "▁mate rial", + "▁mater ial", + "▁ material", + "y d", + "Re ad", + "R ead", + "ht ml", + "h tml", + "T E", + "P r", + "^{ \\", + "^ {\\", + "▁g ave", + "▁ga ve", + "▁I S", + "▁ IS", + "▁s uggest", + "▁sugg est", + "▁sug gest", + "Over ride", + "ro du", + "rod u", + "Fr om", + "F rom", + "▁E urope", + "▁Europ e", + "▁Euro pe", + "▁ Europe", + "P O", + "▁s oon", + "▁so on", + "ho st", + "hos t", + "h ost", + "▁B er", + "▁Be r", + "▁ Ber", + ".. ..", + "... .", + ". ...", + "▁H ar", + "▁Ha r", + "▁ Har", + "▁e nergy", + "▁ener gy", + "▁energ y", + "▁ energy", + "> <", + "ave s", + "av es", + "a ves", + "▁e asy", + "▁eas y", + "▁b re", + "▁br e", + "▁ bre", + "fr ame", + "▁g round", + "▁gr ound", + "▁gro und", + "▁ ground", + "wi th", + "w ith", + "▁in side", + "▁ins ide", + "ie f", + "i ef", + "▁m o", + "▁ mo", + "p m", + "pa n", + "p an", + "ig r", + "i gr", + "▁o m", + "▁ om", + "ne xt", + "nex t", + "n ext", + "om et", + "ome t", + "o met", + "▁st atus", + "▁stat us", + "▁ status", + "▁} \r", + "▁ }\r", + "▁mus ic", + "or a", + "o ra", + "il es", + "ile s", + "i les", + "k i", + "▁e sc", + "▁es c", + "▁ esc", + "▁b es", + "▁be s", + "▁ bes", + "▁D is", + "▁Di s", + "▁ Dis", + "▁h ost", + "▁ho st", + "▁ host", + "▁c omes", + "▁com es", + "▁co mes", + "▁come s", + "▁ comes", + "us ed", + "use d", + "u sed", + "▁f uture", + "▁fut ure", + "▁ future", + "lic k", + "li ck", + "l ick", + "ai d", + "a id", + "▁com pet", + "▁comp et", + "▁ compet", + "▁v oice", + "▁vo ice", + "▁ voice", + "▁l oad", + "▁lo ad", + "▁ load", + "ev el", + "eve l", + "e vel", + "▁n eg", + "▁ne g", + "▁ neg", + "▁com mand", + "▁comm and", + "▁ command", + "▁f ür", + "▁p ie", + "▁pi e", + "▁ pie", + "▁qu ite", + "▁qui te", + "▁quit e", + "▁b lo", + "▁bl o", + "▁ blo", + "ag n", + "a gn", + "il on", + "ilo n", + "i lon", + "▁cl aim", + "▁ claim", + "▁t each", + "▁te ach", + "▁tea ch", + "▁pre vious", + "▁prev ious", + "▁ previous", + "▁s ite", + "▁sit e", + "▁si te", + "▁ site", + "co lor", + "col or", + "colo r", + "at tr", + "att r", + "▁ac cept", + "▁ accept", + "▁ex act", + ") }", + "af t", + "a ft", + "rol ler", + "roll er", + "о н", + "o o", + "Dat e", + "Da te", + "D ate", + "▁o u", + "▁ ou", + "s y", + "▁pre tty", + "▁pret ty", + "▁im age", + "▁imag e", + "▁ image", + "B U", + "▁term s", + "▁ter ms", + "▁s earch", + "▁se arch", + "▁sear ch", + "▁ search", + "▁ è", + "▁V al", + "▁Va l", + "▁ Val", + "▁ ‘", + "▁D av", + "▁Da v", + "M S", + "sr c", + "s rc", + "ma r", + "m ar", + "in cip", + "inc ip", + "▁could n", + "ad os", + "ado s", + "▁d ro", + "▁dr o", + "▁ dro", + "be ta", + "bet a", + "b eta", + "im um", + "▁min utes", + "▁minute s", + "▁minut es", + "▁g rand", + "▁gr and", + "▁gran d", + "▁gra nd", + "▁ grand", + "▁ »", + "▁O ur", + "▁ Our", + "St r", + "S tr", + "VE R", + "V ER", + "ma z", + "m az", + "▁or iginal", + "▁orig inal", + "▁origin al", + "▁ original", + "in i", + "i ni", + "▁c oll", + "▁col l", + "▁co ll", + "▁ coll", + "lo at", + "▁o s", + "▁ os", + "}) ;", + "} );", + "sum mary", + "▁w all", + "▁wa ll", + "▁wal l", + "▁ wall", + "Col or", + "Co lor", + "▁v ers", + "▁ver s", + "▁ve rs", + "▁ vers", + "▁d ella", + "▁de lla", + "▁del la", + "▁dell a", + "▁\" \"\"", + "▁\"\" \"", + "▁ \"\"\"", + "math bf", + "ze r", + "z er", + "au r", + "a ur", + "▁tr ack", + "▁tra ck", + "▁ track", + "▁ass oci", + "▁ associ", + "▁s uff", + "▁su ff", + "▁in de", + "▁i nde", + "▁ind e", + "▁ inde", + "ag ue", + "agu e", + "a gue", + "▁A pr", + "▁Ap r", + "▁ Apr", + "L e", + "ro ups", + "rou ps", + "roup s", + "bo ard", + "b oard", + "▁att ack", + "▁s eries", + "▁se ries", + "▁ser ies", + "▁serie s", + "▁ series", + "▁in stead", + "▁inst ead", + "ha m", + "h am", + "bo ok", + "b ook", + "▁s ix", + "▁si x", + "▁ six", + "▁R ec", + "▁Re c", + "▁ Rec", + "▁c oming", + "▁com ing", + "▁co ming", + "▁ coming", + "ur t", + "u rt", + "▁gl obal", + "▁glob al", + "▁glo bal", + "▁ global", + "▁ne cess", + "▁neces s", + "▁ necess", + "le ge", + "leg e", + "Po s", + "P os", + "▁le ave", + "▁ leave", + "▁p od", + "▁po d", + "▁ pod", + "ateg ory", + "ategor y", + "u z", + "▁de ep", + "▁ deep", + "▁k m", + "▁ km", + "▁out side", + "▁outs ide", + "ha s", + "h as", + "opt ions", + "option s", + "o ptions", + "▁S m", + "▁ Sm", + "Su b", + "S ub", + "ro ws", + "row s", + "r ows", + "▁в и", + "▁ ви", + "▁St ates", + "▁State s", + "▁Stat es", + "▁Sta tes", + "▁ States", + "▁wr ong", + "▁how ever", + "▁s em", + "▁se m", + "▁ sem", + "▁c atch", + "▁cat ch", + "▁ catch", + "\") ,", + "\" ),", + "mod el", + "mode l", + "mo del", + "▁h ttp", + "▁htt p", + "▁ http", + "▁o ption", + "▁opt ion", + "▁ option", + "ri e", + "r ie", + "▁с та", + "▁ст а", + "▁ ста", + "▁ä r", + "▁ är", + "▁en joy", + "▁enjo y", + "n u", + "▁p as", + "▁pa s", + "▁ pas", + "▁a mount", + "▁am ount", + "▁ amount", + "▁res pons", + "▁respon s", + "▁resp ons", + "▁ respons", + "▁In tern", + "▁Inter n", + "▁Int ern", + "▁ Intern", + "▁my self", + "▁o pp", + "▁op p", + "▁ opp", + "▁S im", + "▁Si m", + "▁ Sim", + "▁s ens", + "▁se ns", + "▁sen s", + "E d", + "▁( \\", + "▁ (\\", + "▁stud ents", + "▁student s", + "но в", + "н ов", + "▁point s", + "▁ points", + "ar ning", + "arn ing", + "U P", + "el ling", + "ell ing", + "elli ng", + "▁c annot", + "▁can not", + "B e", + "▁l ength", + "▁le ngth", + "▁ length", + "nu ll", + "n ull", + "ui nt", + "u int", + "wi se", + "w ise", + "▁d ouble", + "▁dou ble", + "▁doub le", + "▁ double", + "ig e", + "i ge", + "is ta", + "ist a", + "i sta", + "▁est ab", + "▁es tab", + "▁esta b", + "an ch", + "anc h", + "▁a go", + "▁ag o", + "▁ ago", + "▁b ound", + "▁bo und", + "▁bou nd", + "▁ bound", + "▁f a", + "▁ fa", + "▁c lean", + "▁cle an", + "▁ clean", + "▁sim ple", + "▁simpl e", + "▁ simple", + "m i", + "#### ####", + "if ier", + "ifi er", + "▁Gener al", + "▁Gen eral", + "▁Gene ral", + "▁ General", + "▁se emed", + "▁see med", + "▁seem ed", + "en a", + "e na", + "▁a ge", + "▁ag e", + "▁ age", + "но й", + "end if", + "A A", + "▁c aus", + "▁ca us", + "▁e duc", + "▁ed uc", + "▁ educ", + "▁c ell", + "▁ce ll", + "▁cel l", + "▁ cell", + "Ge ner", + "Gen er", + "G ener", + "sp ace", + "s pace", + "▁Y our", + "▁You r", + "▁ Your", + "▁be aut", + "g t", + "▁l imit", + "▁li mit", + "▁lim it", + "▁ limit", + "▁d ate", + "▁da te", + "▁dat e", + "▁ date", + "Ut il", + "U til", + "▁N ational", + "▁Nat ional", + "▁Nation al", + "▁ National", + "ow s", + "o ws", + "pa t", + "p at", + "qu ad", + "▁o k", + "▁ ok", + "▁ И", + "ar th", + "art h", + "ha t", + "h at", + "▁comm unity", + "▁commun ity", + "ou l", + "o ul", + "▁e conom", + "▁ec onom", + "▁ econom", + "Com ponent", + "bo r", + "b or", + "us ion", + "▁be low", + "▁bel ow", + "ear ch", + "e arch", + "or es", + "ore s", + "o res", + "ba n", + "b an", + "▁Aug ust", + "▁fur ther", + "sig ma", + "s igma", + "▁h a", + "▁ ha", + "j i", + "▁com put", + "▁comp ut", + "▁ comput", + "г ра", + "▁N one", + "▁No ne", + "▁Non e", + "▁ None", + "▁t er", + "▁te r", + "▁ ter", + "▁any one", + "▁t ask", + "▁ta sk", + "▁ task", + "en te", + "ent e", + "e nte", + "pos ition", + "pp ed", + "ppe d", + "p ped", + "▁a us", + "▁au s", + "▁ aus", + "Att ribute", + "Attrib ute", + "re q", + "r eq", + "ad dr", + "add r", + "li ght", + "lig ht", + "l ight", + "ш е", + "▁a rm", + "▁ar m", + "▁ arm", + "co ver", + "cov er", + "c over", + "up port", + "upp ort", + "▁G l", + "▁ Gl", + "▁S an", + "▁Sa n", + "▁ San", + "▁wr iting", + "▁writ ing", + "▁ writing", + "▁l ost", + "▁lo st", + "▁los t", + "▁M ark", + "▁Mar k", + "▁ Mark", + "▁g re", + "▁gr e", + "▁ gre", + "TY PE", + "T YPE", + "▁S outh", + "▁So uth", + "▁Sou th", + "▁Sout h", + "▁ South", + "▁per fect", + "▁perf ect", + "▁pack age", + "▁ package", + "▁in fl", + "▁inf l", + "▁ infl", + "ha ps", + "h aps", + "▁A ng", + "▁An g", + "▁ Ang", + "res pon", + "resp on", + "ri s", + "r is", + "pt ember", + "pte mber", + "▁build ing", + "▁ building", + "VA L", + "V AL", + "fr ee", + "fre e", + "f ree", + "▁c e", + "▁ ce", + "H T", + "▁F rom", + "▁Fr om", + "▁Fro m", + "▁ From", + "d s", + "ro y", + "r oy", + "ach ine", + "achi ne", + "no wn", + "now n", + "n own", + "▁sa ying", + "▁say ing", + "▁б ы", + "▁ бы", + "o e", + "Re f", + "R ef", + "▁net work", + "▁ network", + "par ent", + "pa rent", + "pare nt", + "paren t", + "p arent", + "ug e", + "u ge", + "▁sim ilar", + "> \r", + "Build er", + "B uilder", + "▁l iving", + "▁li ving", + "▁liv ing", + "▁contin ue", + "▁continu e", + "▁ continue", + "an ger", + "ang er", + "ange r", + "▁R ed", + "▁Re d", + "▁ Red", + "▁h air", + "▁ha ir", + "an ced", + "ance d", + "anc ed", + "ia ns", + "ian s", + "i ans", + "▁d ead", + "▁de ad", + "▁ dead", + "▁bo olean", + "▁ boolean", + "ic ation", + "▁д е", + "▁ де", + "▁cl ient", + "▁ client", + "uc t", + "u ct", + "▁ •", + "S P", + "ol der", + "old er", + "п е", + "ud io", + "udi o", + "▁d eg", + "▁de g", + "▁ deg", + "as ing", + "asi ng", + "a sing", + "▁st ep", + "▁ste p", + "▁ step", + "▁p ers", + "▁per s", + "▁pe rs", + "▁ pers", + "ç ão", + "ob j", + "o z", + "ul a", + "u la", + "▁r ound", + "▁ro und", + "▁rou nd", + "▁ round", + "▁u pon", + "▁up on", + "▁re source", + "▁res ource", + "▁ resource", + "▁val id", + "▁ valid", + "▁I I", + "▁ II", + "bu g", + "b ug", + "st d", + "s td", + "▁a ng", + "▁an g", + "▁ ang", + "sp an", + "s pan", + "po l", + "p ol", + "ial og", + "ia log", + "▁p hot", + "▁ph ot", + "? '", + "D B", + "▁F in", + "▁Fi n", + "▁ Fin", + "V E", + "E m", + "▁c am", + "▁ca m", + "▁ cam", + "tar get", + "t arget", + "pe cted", + "pect ed", + "pec ted", + "He l", + "H el", + "▁u t", + "▁ ut", + "▁T est", + "▁Te st", + "▁Tes t", + "▁ Test", + "▁t own", + "▁to wn", + "▁tow n", + "▁ town", + "al ign", + "ali gn", + "▁we bs", + "▁web s", + "in ner", + "inn er", + "au gh", + "aug h", + "a ugh", + "▁ex cept", + "▁ except", + "▁init ial", + "▁initi al", + "▁ initial", + "en ty", + "ent y", + "lic h", + "li ch", + "l ich", + "▁A ut", + "▁Au t", + "▁ Aut", + "to p", + "t op", + "▁f ail", + "▁fa il", + "▁ fail", + "on a", + "o na", + "▁ben ef", + "an ks", + "ank s", + "is che", + "isch e", + "isc he", + "i sche", + ". *", + "▁sign ific", + "▁cont act", + "▁ contact", + "Re c", + "R ec", + "ar io", + "ari o", + "a rio", + "ot tom", + "ott om", + "otto m", + "▁rel ationship", + "▁relations hip", + "▁relation ship", + "]) ;", + "] );", + "▁Н а", + "▁ На", + "He ad", + "H ead", + "form at", + "for mat", + "▁é t", + "▁ ét", + "▁M ore", + "▁Mor e", + "▁Mo re", + "▁ More", + "act ory", + "actor y", + "port un", + "+ \\", + "▁sim ply", + "▁simpl y", + "▁e p", + "▁ ep", + "▁R uss", + "▁Ru ss", + "▁Rus s", + "n í", + "u a", + "er c", + "e rc", + "▁long er", + "▁lon ger", + "in ition", + "init ion", + "ect or", + "ec tor", + "e ctor", + "apt ion", + "a ption", + "▁prof ess", + "▁profes s", + "▁M us", + "▁Mu s", + "▁ Mus", + "il ities", + "ili ties", + "è s", + "▁A ct", + "▁Ac t", + "▁ Act", + "off set", + "offs et", + "▁i ll", + "▁il l", + "▁ ill", + "ba nd", + "ban d", + "b and", + "▁A g", + "▁ Ag", + "▁П о", + "▁ По", + "б и", + "cont ent", + "ic on", + "ico n", + "i con", + "▁work s", + "▁wor ks", + "▁ works", + "yn am", + "yna m", + "y nam", + "pl ement", + "ple ment", + "p lement", + "Res ource", + "Re source", + "Act ion", + "A ction", + "▁diff icult", + "▁W est", + "▁We st", + "▁Wes t", + "▁ West", + "▁v ideo", + "▁vide o", + "▁ video", + "▁T HE", + "▁TH E", + "▁ THE", + "▁de cl", + "▁dec l", + "▁ decl", + "on don", + "ond on", + "ondo n", + "de d", + "d ed", + "}{ \\", + "} {\\", + "oc r", + "o cr", + "▁C ity", + "▁Cit y", + "▁Ci ty", + "▁ City", + "▁ я", + "ue r", + "u er", + "c z", + "▁im ag", + "▁i mag", + "▁ imag", + "c r", + "et e", + "e te", + "id get", + "idge t", + "▁M od", + "▁Mo d", + "▁ Mod", + "▁for ward", + "▁ forward", + "▁p ict", + "▁pi ct", + "▁pic t", + "or ge", + "org e", + "▁sub ject", + "▁ subject", + "up date", + "at tle", + "att le", + "s a", + "▁A nt", + "▁An t", + "▁ Ant", + "▁r unning", + "▁run ning", + "▁ running", + "▁s al", + "▁sa l", + "▁ sal", + "con ne", + "conn e", + "c onne", + "▁out put", + "▁ output", + "ad ata", + "ada ta", + "a data", + "M L", + "Che ck", + "C heck", + "led ge", + "l edge", + "▁p aper", + "▁pa per", + "▁pap er", + "▁ paper", + "param s", + "par ams", + "para ms", + "av y", + "a vy", + "▁a f", + "▁ af", + "▁e ine", + "▁ein e", + "▁j our", + "▁jo ur", + "▁jou r", + "▁ jour", + "A Y", + "▁it self", + "▁its elf", + "▁S tr", + "▁St r", + "▁ Str", + "st yle", + "sty le", + "Th at", + "T hat", + "▁m illion", + "▁mill ion", + "▁l anguage", + "▁ language", + "O S", + "vi ng", + "vin g", + "v ing", + "▁м а", + "▁ ма", + "▁т о", + "▁ то", + ") (", + "▁b uy", + "▁bu y", + ". /", + "▁. ..", + "▁.. .", + "▁ ...", + "▁t ried", + "▁tr ied", + "▁tri ed", + "▁com pl", + "▁comp l", + "▁act iv", + "▁ activ", + "ap ped", + "app ed", + "appe d", + "a pped", + "But ton", + "B utton", + "To ken", + "Tok en", + "T oken", + "▁prov ided", + "▁provide d", + "ib er", + "ibe r", + "i ber", + "▁c reated", + "▁cre ated", + "▁create d", + "▁creat ed", + "▁ created", + "cur ity", + "c urity", + "En d", + "E nd", + "a ł", + "us ter", + "ust er", + "u ster", + "iz ing", + "izi ng", + "i zing", + "om b", + "o mb", + "▁s ich", + "▁si ch", + "▁com pon", + "▁comp on", + "▁S ee", + "▁Se e", + "▁ See", + "▁u int", + "▁ui nt", + "▁ uint", + "▁l abel", + "▁la bel", + "▁lab el", + "▁ label", + "vo l", + "v ol", + "ó w", + "oc ol", + "oco l", + "o col", + "▁re ceived", + "▁rece ived", + "▁receive d", + "▁in tern", + "▁int ern", + "▁inter n", + "▁inte rn", + "▁ intern", + "ц е", + "R un", + "▁r oad", + "▁ro ad", + "▁ road", + "▁O ct", + "▁ Oct", + "▁C omp", + "▁Com p", + "▁Co mp", + "▁ Comp", + "▁stud y", + "▁т е", + "▁ те", + "Ac t", + "A ct", + "▁t our", + "▁to ur", + "▁tou r", + "▁St ate", + "▁Stat e", + "▁Sta te", + "▁ State", + "▁ad ded", + "▁add ed", + "▁ added", + "htt ps", + "http s", + "st ream", + "stre am", + "▁l ower", + "▁lo wer", + "▁low er", + "▁ lower", + "▁b ox", + "▁bo x", + "▁ box", + "▁S k", + "▁ Sk", + "▁them selves", + "▁c ross", + "▁cr oss", + "▁cro ss", + "▁ cross", + "▁e cho", + "▁ec ho", + "▁ echo", + "▁dev ice", + "▁ device", + "pos e", + "po se", + "p ose", + "▁g ames", + "▁game s", + "▁gam es", + "▁ga mes", + "P L", + "W indow", + "is es", + "ise s", + "i ses", + "ti tle", + "tit le", + "t itle", + "St ream", + "z t", + "▁S w", + "▁ Sw", + "▁r ole", + "▁ro le", + "▁ role", + "ia nt", + "ian t", + "i ant", + "k u", + "se qu", + "seq u", + "s equ", + "▁l ate", + "▁la te", + "▁lat e", + "▁ late", + "▁s old", + "▁so ld", + "▁sol d", + "р я", + "Com m", + "Co mm", + "C omm", + "▁en tre", + "▁ent re", + "▁entr e", + "▁ entre", + "▁d og", + "▁do g", + "▁ dog", + "dev ice", + "P ar", + "▁like ly", + "▁lik ely", + "▁ likely", + "^{ -", + "^ {-", + "▁l en", + "▁le n", + "▁ len", + "▁P aul", + "▁Pa ul", + "▁ Paul", + "▁t ool", + "▁to ol", + "▁too l", + "▁ tool", + "Of f", + "O ff", + "▁f amil", + "▁fam il", + "▁fa mil", + "▁d raw", + "▁dr aw", + "▁ draw", + "ap ping", + "app ing", + "a pping", + "▁ev ents", + "▁even ts", + "▁event s", + "▁ events", + "cre t", + "cr et", + "c ret", + "rou ght", + "rough t", + "r ought", + "Cont ent", + "▁soft ware", + "ri a", + "r ia", + "ms g", + "m sg", + "ga mma", + "g amma", + "▁h ear", + "▁he ar", + "Op er", + "O per", + "▁your self", + "▁yours elf", + "▁l iter", + "▁li ter", + "▁lit er", + "▁ liter", + "em p", + "e mp", + "▁se par", + "▁sep ar", + "▁ separ", + "▁ З", + "▁t itle", + "▁tit le", + "▁ti tle", + "▁ title", + "M ethod", + "math rm", + "▁s low", + "▁sl ow", + "▁R om", + "▁Ro m", + "▁ Rom", + "! !", + "▁t ax", + "▁ta x", + "▁ tax", + "ск а", + "с ка", + "empl ate", + "emp late", + "o i", + "▁A rt", + "▁Ar t", + "▁ Art", + "f alse", + "ast ic", + "ст ь", + "с ть", + "oc ket", + "ock et", + "▁e ns", + "▁en s", + "▁ ens", + "T O", + "am ente", + "ame nte", + "ament e", + "amen te", + "a mente", + "lo cal", + "loc al", + "l ocal", + "ch ie", + "chi e", + "▁p an", + "▁pa n", + "▁ pan", + "ни й", + "ch ema", + "che ma", + "chem a", + "▁N orth", + "▁Nor th", + "▁Nort h", + "з о", + "▁> =", + "▁ >=", + "A ut", + "▁d ig", + "▁di g", + "▁ dig", + "▁se ems", + "▁see ms", + "▁seem s", + "▁mor ning", + "so le", + "sol e", + "s ole", + "um er", + "ume r", + "u mer", + "del ta", + "d elta", + "it é", + "i té", + "ab ase", + "aba se", + "a base", + "ra f", + "r af", + "▁ob serv", + "▁obs erv", + "▁ observ", + "▁E st", + "▁Es t", + "▁ Est", + "▁s eg", + "▁se g", + "▁ seg", + "▁[ ]", + "▁ []", + "▁P res", + "▁Pr es", + "▁Pre s", + "▁ Pres", + "if ul", + "i ful", + "pu sh", + "pus h", + "p ush", + "▁O ff", + "▁Of f", + "▁ Off", + "ip e", + "i pe", + "at i", + "a ti", + "▁d im", + "▁di m", + "▁ dim", + "ce ed", + "c eed", + "En t", + "E nt", + "__ __", + "___ _", + "_ ___", + "en try", + "ent ry", + "entr y", + "▁f ight", + "▁fig ht", + "▁fi ght", + "▁c red", + "▁cre d", + "▁cr ed", + "▁ cred", + "▁O R", + "▁ OR", + "▁D ep", + "▁De p", + "▁ Dep", + "$ {", + "ле н", + "л ен", + "Creat e", + "C reate", + "▁Apr il", + "▁Ap ril", + "min istr", + "F L", + "▁A p", + "▁ Ap", + "▁H ere", + "▁He re", + "▁Her e", + "▁ Here", + "priv ate", + "p rivate", + "In stance", + "Inst ance", + "ie m", + "i em", + "▁off ice", + "▁offic e", + "▁th ird", + "▁ third", + "▁up date", + "▁ update", + "Lin e", + "Li ne", + "L ine", + "ta g", + "t ag", + "▁e specially", + "▁espec ially", + "▁especial ly", + "▁ especially", + "▁го да", + "▁год а", + "▁c u", + "▁ cu", + "▁k ill", + "▁kil l", + "▁ki ll", + "▁ kill", + "au ght", + "augh t", + "aug ht", + "▁s we", + "▁sw e", + "Option s", + "Opt ions", + "O ptions", + "I M", + "C C", + "▁com pan", + "▁comp an", + "ju st", + "j ust", + "▁Wh ile", + "▁ While", + "iz er", + "ize r", + "i zer", + "▁м о", + "▁ мо", + "к е", + "▁a uto", + "▁aut o", + "▁au to", + "▁ auto", + "▁b and", + "▁ban d", + "▁ba nd", + "▁ band", + "ме н", + "м ен", + "ique s", + "iqu es", + "iq ues", + "i ques", + "▁p le", + "▁pl e", + "▁ ple", + "N O", + "▁O F", + "▁ OF", + "▁s ong", + "▁so ng", + "▁son g", + "▁A cc", + "▁Ac c", + "▁ Acc", + "EX T", + "E XT", + "en sor", + "ens or", + "enso r", + "in ing", + "ini ng", + "i ning", + "▁l at", + "▁la t", + "▁ lat", + "bi g", + "b ig", + "▁K ing", + "▁Ki ng", + "▁Kin g", + "▁ King", + "oc h", + "o ch", + "s i", + "▁H ist", + "▁His t", + "▁Hi st", + "▁ Hist", + "▁qu ality", + "▁qual ity", + "▁ quality", + "mod e", + "mo de", + "m ode", + "▁op portun", + "▁would n", + ":* *", + ": **", + "out put", + "▁fe et", + "▁fee t", + "▁m is", + "▁mi s", + "d f", + "ag ing", + "agi ng", + "a ging", + "▁м е", + "▁ ме", + "▁t ro", + "▁tr o", + "▁d efined", + "▁def ined", + "▁define d", + "▁defin ed", + "▁ defined", + "▁re view", + "▁rev iew", + "▁ review", + "▁F il", + "▁Fi l", + "▁ Fil", + "> >", + "▁pr incip", + "▁prin cip", + "Bas e", + "B ase", + "di ct", + "d ict", + "ve rage", + "ver age", + "ic ient", + "ici ent", + "I F", + "▁h it", + "▁hi t", + "▁ hit", + "Pag e", + "P age", + "▁p erm", + "▁per m", + "▁pe rm", + "▁ perm", + "ce l", + "c el", + "í t", + "▁ex press", + "▁exp ress", + "▁expr ess", + "▁ express", + "▁ind ic", + "▁Se ptember", + "▁Sept ember", + "im age", + "ima ge", + "imag e", + "▁product s", + "▁ products", + "▁m edia", + "▁med ia", + "▁medi a", + "▁ media", + "ch ange", + "chan ge", + "ig ger", + "igg er", + "▁s end", + "▁se nd", + "▁sen d", + "▁ send", + "la st", + "las t", + "l ast", + "min g", + "mi ng", + "m ing", + "p a", + "ua ry", + "uar y", + "u ary", + "▁spe ak", + "ны й", + "щ е", + "ys is", + "y sis", + "ly ing", + "l ying", + "▁ ч", + "li ke", + "lik e", + "l ike", + "р ы", + "в і", + "▁M ich", + "▁Mic h", + "▁Mi ch", + "M O", + "▁J ah", + "▁Ja h", + "ens ive", + "▁sh are", + "▁shar e", + "▁sha re", + "▁ share", + "▁develop ment", + "C P", + "sp ec", + "spe c", + "s pec", + "▁f ast", + "▁fa st", + "▁ fast", + "he t", + "h et", + "H O", + "▁part icip", + "▁partic ip", + "▁parti cip", + "Bl ock", + "Blo ck", + "B lock", + "▁vi ol", + "▁fr ame", + "▁fra me", + "▁fram e", + "▁ frame", + "▁qu al", + "▁q ual", + "▁ qual", + "tr e", + "t re", + "▁ Ф", + "▁to ward", + "▁tow ard", + "f g", + "Bo x", + "B ox", + "Col umn", + "▁mil it", + "▁mi lit", + "▁M arch", + "▁Mar ch", + "▁Marc h", + "▁var ious", + "▁vari ous", + "pa ss", + "pas s", + "p ass", + "▁P ark", + "▁Par k", + "▁B en", + "▁Be n", + "▁ Ben", + "Fr ame", + "▁n ormal", + "▁nor mal", + "▁norm al", + "▁ normal", + "op en", + "ope n", + "o pen", + "p x", + "▁ph one", + "▁ phone", + "▁E ven", + "▁Ev en", + "▁Eve n", + "▁ Even", + "▁m a", + "▁ ma", + "ibr ary", + "St art", + "Star t", + "id den", + "idd en", + "rh o", + "r ho", + "gr aph", + "gra ph", + "g raph", + "ac ing", + "aci ng", + "a cing", + "' .", + "ar ter", + "art er", + "arte r", + "me s", + "m es", + "in st", + "ins t", + "▁i r", + "▁ ir", + "act ive", + "activ e", + "▁f em", + "▁fe m", + "▁ fem", + "▁m oved", + "▁mov ed", + "▁move d", + "▁mo ved", + "▁st ore", + "▁stor e", + "▁sto re", + "▁ store", + "▁p rice", + "▁pr ice", + "▁pri ce", + "▁ price", + "\") .", + "\" ).", + "ber g", + "be rg", + "b erg", + "▁n ov", + "▁no v", + "▁ nov", + "▁c ard", + "▁car d", + "▁ca rd", + "▁ card", + "el low", + "ell ow", + "ello w", + "▁part y", + "▁par ty", + "▁ party", + "▁M or", + "▁Mo r", + "ae l", + "a el", + "▁per cent", + "▁ percent", + "▁tr aining", + "▁tra ining", + "▁train ing", + "▁ training", + "▁in g", + "▁i ng", + "▁ ing", + "im er", + "ime r", + "i mer", + "▁S am", + "▁Sa m", + "▁ Sam", + "Def ault", + "▁f uck", + "▁fu ck", + "▁com plete", + "▁comp lete", + "▁complet e", + "▁compl ete", + "▁ complete", + "ui d", + "u id", + "▁det ails", + "▁detail s", + "▁ details", + "▁l ed", + "▁le d", + "▁ led", + "Po int", + "P oint", + "▁C ount", + "▁Co unt", + "▁Coun t", + "▁Cou nt", + "▁ Count", + "▁reg ard", + "z o", + "▁B ro", + "▁Br o", + "▁ Bro", + "▁rec ogn", + "▁ recogn", + "▁H ol", + "▁Ho l", + "▁ Hol", + "U M", + "el ement", + "ele ment", + "elem ent", + "e lement", + "Mod e", + "Mo de", + "M ode", + "▁ex am", + "▁E X", + "▁ EX", + "Im age", + "ver se", + "vers e", + "ri ter", + "rit er", + "rite r", + "r iter", + "so ft", + "s oft", + "▁int rodu", + "▁intro du", + "▁sur pr", + "Buf fer", + "Buff er", + "B uffer", + "le ctor", + "lect or", + "l ector", + "ar en", + "are n", + "a ren", + "an ged", + "ang ed", + "ange d", + "▁P at", + "▁Pa t", + "▁ Pat", + "▁P al", + "▁Pa l", + "▁ Pal", + "▁con tr", + "▁cont r", + "▁ contr", + "Hand ler", + "Handle r", + "▁fe atures", + "▁feature s", + "▁feat ures", + "▁ features", + "ip le", + "i ple", + "▁C ON", + "▁CO N", + "▁ CON", + "Fi l", + "F il", + "▁P ort", + "▁Po rt", + "▁Por t", + "▁ Port", + "▁th inking", + "▁think ing", + "▁thin king", + "do c", + "d oc", + "we r", + "w er", + "▁work ed", + "▁wor ked", + "P C", + "c m", + "da t", + "d at", + "PR O", + "P RO", + "▁E very", + "▁Ev ery", + "▁Ever y", + "▁Eve ry", + "▁ Every", + "▁e ra", + "▁er a", + "▁ era", + "▁F irst", + "▁ First", + "g n", + "▁im medi", + "▁imm edi", + "ov ember", + "ove mber", + "ap an", + "apa n", + "a pan", + "▁ex tra", + "▁ext ra", + "▁extr a", + "▁ extra", + "▁s ection", + "▁se ction", + "▁sect ion", + "▁ section", + "▁J une", + "▁Jun e", + "▁Ju ne", + "▁v ia", + "▁vi a", + "▁ via", + "▁g one", + "▁go ne", + "com e", + "co me", + "c ome", + "▁s tri", + "▁st ri", + "▁str i", + "▁ stri", + "^ \\", + "ant ly", + "▁ar ch", + "▁arc h", + "▁ arch", + "S ource", + "▁con v", + "▁co nv", + "▁ conv", + "▁L ondon", + "▁Lond on", + "▁ London", + "Num ber", + "N umber", + "▁quest ions", + "▁question s", + "an did", + "and id", + "▁play ed", + "en v", + "e nv", + "▁Sch ool", + "▁nat ural", + "▁natur al", + "▁ natural", + "ca n", + "c an", + "▁ne ws", + "▁new s", + "▁ news", + "D R", + "▁c hall", + "▁ch all", + "▁cha ll", + "▁S oc", + "▁So c", + "▁ э", + "▁att empt", + "* }", + "N ull", + "ro te", + "rot e", + "r ote", + "▁b i", + "▁ bi", + "▁wr itten", + "▁writ ten", + "▁ written", + "▁bl ood", + "▁blo od", + "▁happ ened", + "▁happen ed", + "▁c ause", + "▁caus e", + "▁ca use", + "as hing", + "ash ing", + "ashi ng", + "▁Will iam", + "ad em", + "ade m", + "a dem", + "▁b rought", + "▁br ought", + "▁dis play", + "▁displ ay", + "▁disp lay", + "▁ display", + "im a", + "i ma", + "▁fin ally", + "▁final ly", + "ta b", + "t ab", + "▁return ed", + "ны х", + "ni e", + "n ie", + "▁ q", + "▁h ers", + "▁he rs", + "▁her s", + "▁P re", + "▁Pr e", + "▁ Pre", + "▁d ou", + "▁do u", + "buf fer", + "buff er", + "b uffer", + "▁eff ort", + "ain e", + "ai ne", + "a ine", + "x y", + "▁his tor", + "▁hist or", + "en u", + "e nu", + "▁ar riv", + "▁arr iv", + "▁D em", + "▁De m", + "▁ Dem", + "▁f avor", + "▁fa vor", + "▁fav or", + "▁hand le", + "▁ handle", + "SE T", + "S ET", + "▁P ublic", + "▁Pub lic", + "▁Pu blic", + "▁ Public", + "ru pt", + "rup t", + "r upt", + "▁u r", + "▁ ur", + "▁for ce", + "▁ force", + "▁é s", + "▁ és", + "ub e", + "u be", + "Pr e", + "P re", + "р і", + "in y", + "i ny", + "th eta", + "the ta", + "is f", + "i sf", + "▁n ational", + "▁nat ional", + "▁nation al", + "Equ al", + "Eq ual", + "E qual", + "ren ch", + "▁w ife", + "▁c apt", + "▁cap t", + "▁ca pt", + "▁In ter", + "▁Int er", + "▁ Inter", + "ta u", + "t au", + "▁s leep", + "▁sle ep", + "▁ sleep", + "../ ../", + "▁iss ue", + "▁ issue", + "▁m ember", + "▁me mber", + "▁mem ber", + "▁ member", + "▁a wait", + "▁aw ait", + "▁ await", + "▁D an", + "▁Da n", + "▁ Dan", + "z i", + "in ate", + "ina te", + "i nate", + "▁s ym", + "▁sy m", + "▁ sym", + "ch an", + "cha n", + "c han", + "▁J ack", + "▁Jac k", + "▁Ja ck", + "▁ Jack", + "▁Eng lish", + "▁ English", + "▁s z", + "▁ sz", + "rib utes", + "ribut es", + "ribute s", + "ribu tes", + "▁i gn", + "▁ig n", + "▁ ign", + "á l", + "▁app ear", + "▁appe ar", + "ra d", + "r ad", + "id ge", + "▁co uple", + "▁cou ple", + "▁coup le", + "▁s hip", + "▁sh ip", + "▁ ship", + "li g", + "l ig", + "we b", + "w eb", + "▁us ually", + "▁usual ly", + "▁re ady", + "▁read y", + "▁ ready", + "▁v ill", + "▁vi ll", + "▁vil l", + "▁W hy", + "▁Wh y", + "▁ Why", + "eb ru", + "e bru", + "▁g rad", + "▁gr ad", + "▁gra d", + "▁ grad", + "or ds", + "ord s", + "▁in f", + "▁i nf", + "▁ inf", + "▁l oss", + "▁lo ss", + "▁los s", + "▁ loss", + "▁o d", + "▁ od", + "▁Ph il", + "▁ Phil", + "ser ver", + "serv er", + "serve r", + "▁U p", + "▁ Up", + "▁b uff", + "▁bu ff", + "▁buf f", + "▁ buff", + "▁fil ename", + "▁file name", + "▁ filename", + "AB LE", + "it ing", + "iti ng", + "i ting", + "ef ore", + "e fore", + "() ->", + "( )->", + "▁cond itions", + "▁condition s", + "▁ conditions", + "v m", + "el d", + "e ld", + "it z", + "i tz", + "▁Tr ans", + "▁Tra ns", + "▁ Trans", + "▁w eight", + "▁we ight", + "▁weigh t", + "▁ weight", + "▁high er", + "▁hig her", + "▁r ate", + "▁rat e", + "▁ra te", + "▁ rate", + "▁acc om", + "▁ac com", + "vi der", + "vid er", + "v ider", + "O M", + "▁w ays", + "▁way s", + "▁wa ys", + "▁ ways", + "com ing", + "co ming", + "c oming", + "▁l ock", + "▁loc k", + "▁lo ck", + "▁ lock", + "▁e tc", + "▁et c", + "▁ etc", + "▁a vec", + "▁av ec", + "▁ave c", + "▁t akes", + "▁take s", + "▁tak es", + "▁ta kes", + "▁C har", + "▁Ch ar", + "▁Cha r", + "▁ Char", + "▁N ovember", + "▁Nov ember", + "m ethod", + "▁A ustral", + "▁Aust ral", + "▁ Austral", + "▁Amer ica", + "▁ America", + "lo ng", + "lon g", + "l ong", + "ce mber", + "c ember", + "▁polit ical", + "fl ow", + "f low", + "▁may be", + "▁ maybe", + "▁a mb", + "▁am b", + "▁ amb", + "La yout", + "L ayout", + "il ed", + "ile d", + "i led", + "om en", + "ome n", + "o men", + "ol a", + "o la", + "ic ip", + "ici p", + "i cip", + "part ial", + "Tr ue", + "▁f loor", + "▁fl oor", + "▁flo or", + "▁ floor", + "▁D ef", + "▁De f", + "▁ Def", + "▁conc ern", + "▁conce rn", + "▁concer n", + "y r", + "▁sh ows", + "▁show s", + "i h", + "▁an swer", + "▁answ er", + "▁ans wer", + "▁ answer", + "ac c", + "a cc", + "▁b all", + "▁bal l", + "▁ba ll", + "▁ ball", + "▁R ev", + "▁Re v", + "▁ Rev", + "▁s un", + "▁su n", + "▁ sun", + "▁quick ly", + "▁s omet", + "▁so met", + "▁some t", + "▁som et", + "ment e", + "me nte", + "men te", + "m ente", + "▁M al", + "▁Ma l", + "▁ Mal", + "und red", + "▁iss ues", + "▁issue s", + "▁ issues", + "ec ause", + "eca use", + "pe s", + "p es", + "▁p layer", + "▁pl ayer", + "▁play er", + "▁ player", + "▁par ents", + "▁parent s", + "▁ parents", + "▁pop ular", + "▁popula r", + "▁popul ar", + "▁m ode", + "▁mod e", + "▁mo de", + "▁ mode", + "▁m ention", + "▁ment ion", + "N E", + "Lo ad", + "L oad", + "▁reg ular", + "▁regul ar", + "▁ regular", + "ave d", + "av ed", + "a ved", + "? :", + "ye ar", + "y ear", + "fun c", + "fu nc", + "f unc", + "▁per formance", + "▁perform ance", + "▁J uly", + "▁Jul y", + "▁Ju ly", + "th ern", + "ther n", + "the rn", + "▁we bsite", + "▁webs ite", + "▁web site", + "fo rd", + "for d", + "f ord", + "P R", + "el a", + "e la", + "le vel", + "lev el", + "l evel", + "ui t", + "u it", + "fl ags", + "flag s", + "▁w orth", + "▁wor th", + "▁ worth", + "▁cor respon", + "▁Brit ish", + "si m", + "s im", + "▁al one", + "▁ alone", + "▁h ar", + "▁ha r", + "▁ har", + "▁o nes", + "▁on es", + "▁one s", + "▁ ones", + "ob ile", + "obi le", + "obil e", + "▁d ru", + "▁dr u", + "▁ dru", + "ch i", + "c hi", + "▁D avid", + "▁Dav id", + "▁Da vid", + "▁ David", + "▁proble ms", + "▁problem s", + "▁col umn", + "▁ column", + "() ;\r", + "(); \r", + "( );\r", + "Z E", + "▁re lig", + "▁rel ig", + "▁reli g", + "olog ical", + "▁reg ion", + "▁ region", + "ad y", + "a dy", + "I O", + "an der", + "and er", + "ande r", + "a nder", + "Ne t", + "N et", + "▁bu ilt", + "▁ built", + "▁inst all", + "▁ install", + "▁appro ach", + "C ur", + "▁f ine", + "▁fin e", + "▁fi ne", + "▁talk ing", + "▁tal king", + "▁ch anges", + "▁chang es", + "▁change s", + "▁ changes", + "St yle", + "▁M art", + "▁Mar t", + "▁Ma rt", + "▁ Mart", + "л ю", + "res ponse", + "respon se", + "respons e", + "te ger", + "{ \r", + "ir it", + "iri t", + "i rit", + "▁prote cted", + "▁protect ed", + "▁ protected", + "▁re le", + "▁r ele", + "▁rel e", + "er ship", + "ers hip", + "те ль", + "тел ь", + "un signed", + "uns igned", + "ial ize", + "▁htt ps", + "▁http s", + "▁ https", + "T ag", + "▁$ (", + "▁ $(", + "mo re", + "mor e", + "m ore", + "ype s", + "yp es", + "y pes", + "▁st ream", + "▁stre am", + "▁ stream", + "et ch", + "etc h", + "▁eng ine", + "▁ engine", + "K E", + "cm d", + "c md", + "sc ript", + "scri pt", + "scr ipt", + "s cript", + "tt p", + "t tp", + "▁a void", + "▁av oid", + "▁t err", + "▁te rr", + "▁ter r", + "▁r ock", + "▁ro ck", + "▁ rock", + "▁f ul", + "▁fu l", + "▁ ful", + "Up date", + "▁env ironment", + "▁environ ment", + "▁ environment", + "▁p rec", + "▁pre c", + "▁pr ec", + "▁ prec", + "▁с а", + "▁ са", + "▁c ases", + "▁case s", + "▁cas es", + "▁ca ses", + "▁ cases", + "▁off set", + "▁ offset", + "▁r ais", + "▁ra is", + "▁ rais", + "li b", + "l ib", + "ée s", + "é es", + "a a", + "y t", + "▁a rr", + "▁ar r", + "▁ arr", + "opy right", + "f irst", + "▁u til", + "▁ut il", + "▁ util", + "▁fe ature", + "▁feat ure", + "▁ feature", + "pos ed", + "po sed", + "pose d", + "p osed", + "ff ect", + "f fect", + "ж а", + "it ude", + "itu de", + "itud e", + "em ents", + "ement s", + "emen ts", + "e ments", + "as c", + "a sc", + "ad or", + "ado r", + "le ctions", + "lect ions", + "lection s", + "▁cl ub", + "▁ club", + "] {", + "▁* )", + "▁ *)", + "ст во", + "ств о", + "с тво", + "▁im m", + "▁i mm", + "▁ imm", + "▁for mer", + "▁form er", + "▁forme r", + "▁ former", + "▁r ights", + "▁right s", + "▁dec ided", + "▁decide d", + "▁decid ed", + "▁re v", + "▁r ev", + "▁ rev", + "▁m ent", + "▁me nt", + "▁men t", + "▁ ment", + "an i", + "a ni", + "▁st ru", + "▁str u", + "▁ stru", + "▁att ention", + "art ment", + "▁I tal", + "▁It al", + "al le", + "all e", + "a lle", + "▁b is", + "▁bi s", + "▁ bis", + "ge ner", + "gen er", + "g ener", + "▁in tegr", + "▁int egr", + "▁inte gr", + "▁ integr", + "el lo", + "ell o", + "ry pt", + "▁a chie", + "ne s", + "n es", + "▁s tra", + "▁st ra", + "▁str a", + "▁ stra", + "s b", + "▁t ypes", + "▁type s", + "▁typ es", + "▁ty pes", + "▁ types", + "▁R E", + "▁ RE", + "In it", + "I nit", + "▁com ment", + "▁comm ent", + "▁comme nt", + "▁ comment", + "▁add ition", + "▁I D", + "▁ ID", + "AR T", + "A RT", + "F O", + "щ и", + "Con ne", + "Conn e", + "C onne", + "▁s qu", + "▁sq u", + "▁consider ed", + "▁consid ered", + "id ad", + "ida d", + "▁Oct ober", + "ci al", + "cia l", + "c ial", + "▁O f", + "▁ Of", + "▁tr avel", + "▁tra vel", + "▁trav el", + "▁b oy", + "▁bo y", + "▁ boy", + "') .", + "' ).", + "u y", + "il la", + "ill a", + "i lla", + "is try", + "ist ry", + "istr y", + "▁v a", + "▁ va", + "▁C he", + "▁Ch e", + "▁ Che", + "ER T", + "E RT", + "en de", + "end e", + "e nde", + "un gen", + "ung en", + "unge n", + "ab y", + "a by", + "▁R ober", + "▁Ro ber", + "▁Rob er", + "▁play ing", + "il s", + "i ls", + "▁s am", + "▁sa m", + "▁ sam", + "▁ex ecut", + "▁exec ut", + "▁ execut", + "▁U s", + "▁ Us", + "▁m ut", + "▁mu t", + "▁ mut", + "▁b al", + "▁ba l", + "▁ bal", + "as se", + "ass e", + "▁k ids", + "▁kid s", + "▁ki ds", + "▁fin anc", + "go r", + "g or", + "▁S ec", + "▁Se c", + "▁ Sec", + "ber t", + "be rt", + "b ert", + "▁H igh", + "▁Hig h", + "▁Hi gh", + "▁ High", + "▁ је", + "▁ke pt", + "but ton", + "b utton", + "it ory", + "itor y", + "ito ry", + "▁R em", + "▁Re m", + "▁ Rem", + "▁D E", + "▁ DE", + "▁re ach", + "▁r each", + "▁ reach", + "▁b ur", + "▁bu r", + "▁ bur", + "La bel", + "L abel", + "á t", + "ag o", + "a go", + "▁pass ed", + "▁pas sed", + "▁be hav", + "▁beh av", + "xF F", + "x FF", + "▁R eturn", + "▁Re turn", + "▁Ret urn", + "▁ Return", + "ST R", + "S TR", + "▁L es", + "▁Le s", + "▁ Les", + "▁o rd", + "▁or d", + "▁ ord", + "al a", + "a la", + "in ger", + "ing er", + "inge r", + "▁S ince", + "▁Sin ce", + "▁ Since", + "▁exper i", + "▁exp eri", + "▁s hall", + "▁sh all", + "▁sha ll", + "▁ shall", + "▁s tar", + "▁st ar", + "▁sta r", + "▁ star", + "no n", + "n on", + "▁g un", + "▁gu n", + "▁ gun", + "▁B el", + "▁Be l", + "▁ Bel", + "▁ob j", + "▁ obj", + "ar es", + "are s", + "a res", + "r s", + "▁we eks", + "▁week s", + "ne n", + "n en", + "▁S tre", + "▁St re", + "▁Str e", + "or ing", + "ori ng", + "o ring", + "▁ î", + "▁ser ious", + "time s", + "ti mes", + "tim es", + "t imes", + "▁H ouse", + "▁Ho use", + "▁Hou se", + "▁r oll", + "▁ro ll", + "▁ roll", + "▁reg ister", + "▁ register", + "▁mod ule", + "▁mo dule", + "▁ module", + "▁app lic", + "▁ap plic", + "▁appl ic", + "I R", + "▁c ook", + "▁co ok", + "▁ cook", + "au x", + "a ux", + "▁s ave", + "▁sa ve", + "▁sav e", + "▁ save", + "▁C r", + "▁ Cr", + ", \r", + "▁st ates", + "▁stat es", + "▁state s", + "▁sta tes", + "▁ states", + "▁em pty", + "▁emp ty", + "▁empt y", + "▁ empty", + "▁aut om", + "▁au tom", + "▁auto m", + "▁ autom", + "fig ure", + "ian ce", + "i ance", + "▁h appy", + "▁happ y", + "▁f n", + "▁ fn", + "▁j ud", + "▁ju d", + "▁ jud", + "▁h at", + "▁ha t", + "▁ hat", + "AC K", + "A CK", + "▁F e", + "▁ Fe", + "$ -", + "iv il", + "ivi l", + "i vil", + "ot ed", + "ote d", + "o ted", + "▁size of", + "▁ sizeof", + "▁sit uation", + "▁situ ation", + "▁l ives", + "▁li ves", + "▁live s", + "▁liv es", + "▁fe eling", + "▁feel ing", + "▁fee ling", + "▁r isk", + "▁ri sk", + "▁ris k", + "▁Jan uary", + "▁Januar y", + "▁Ob ject", + "▁ Object", + "▁re comm", + "▁rec omm", + "▁в ы", + "▁ вы", + "▁pot ential", + "ea h", + "e ah", + "▁com plex", + "▁comp lex", + "▁compl ex", + "▁ complex", + "print f", + "ist ance", + "istan ce", + "i stance", + "ir th", + "irt h", + "li k", + "l ik", + "as te", + "ast e", + "a ste", + "▁wh ose", + "▁who se", + "Ar g", + "A rg", + "▁mod ern", + "▁mo dern", + "▁mode rn", + "▁moder n", + "ion es", + "io nes", + "ione s", + "i ones", + "▁ч е", + "▁ че", + "▁s ett", + "▁se tt", + "▁set t", + "▁M ag", + "▁Ma g", + "▁ Mag", + "a e", + "▁cond ition", + "▁ condition", + "Le ngth", + "L ength", + "▁f it", + "▁fi t", + "▁ fit", + "ound s", + "oun ds", + "▁ch anged", + "▁chang ed", + "▁change d", + "▁ changed", + "▁g uy", + "▁gu y", + "fil ter", + "at ever", + "ate ver", + "é d", + "re move", + "rem ove", + "▁h op", + "▁ho p", + "▁ hop", + "▁O ut", + "▁ Out", + "▁R ich", + "▁Ric h", + "▁ Rich", + "ch ild", + "chi ld", + "▁in cluded", + "▁incl uded", + "▁includ ed", + "▁include d", + "▁inclu ded", + "$ \\", + "▁T om", + "▁To m", + "▁ Tom", + "el ine", + "eli ne", + "elin e", + "e line", + "▁s ometimes", + "▁some times", + "▁somet imes", + "▁sometime s", + "▁dr ink", + "▁qu ant", + "▁ quant", + "▁p lease", + "▁ple ase", + "▁I nt", + "▁In t", + "▁ Int", + "ri ef", + "rie f", + "r ief", + "▁ex actly", + "▁exact ly", + "ci ng", + "cin g", + "c ing", + "▁all owed", + "▁allow ed", + "▁ allowed", + "bu ild", + "b uild", + "▁beaut iful", + "▁W ell", + "▁We ll", + "▁Wel l", + "▁ Well", + "▁look s", + "▁lo oks", + "▁ ü", + "▁ch ance", + "▁w rote", + "▁wr ote", + "▁n or", + "▁no r", + "▁ nor", + "▁f ailed", + "▁fa iled", + "▁fail ed", + "▁ failed", + "Me t", + "M et", + "▁p rior", + "▁pr ior", + "▁pri or", + "▁h undred", + "ско й", + "с кой", + "or ia", + "ori a", + "o ria", + "▁c y", + "▁ cy", + "▁w eb", + "▁we b", + "▁ web", + "▁m ess", + "▁me ss", + "▁mes s", + "le q", + "l eq", + "d y", + "te x", + "t ex", + "▁a nim", + "▁an im", + "▁ anim", + "at ur", + "atu r", + "▁str ucture", + "▁struct ure", + "▁ structure", + "opt ion", + "o ption", + "▁act ual", + "▁ actual", + "▁Fr anc", + "▁Fra nc", + "▁Fran c", + "en ced", + "ence d", + "enc ed", + ".< /", + ". ", + "▁ />", + "▁p roduction", + "▁produ ction", + "▁product ion", + "▁prod uction", + "▁ production", + "ig er", + "ige r", + "i ger", + "▁с т", + "▁ ст", + "sh ow", + "s how", + "▁pop ulation", + "▁popul ation", + "▁p ark", + "▁par k", + "▁ park", + "▁Z e", + "▁necess ary", + "▁ necessary", + "▁t rust", + "▁tr ust", + "▁sh own", + "▁show n", + "mod ule", + "mo dule", + "G E", + "▁l ay", + "▁la y", + "▁ lay", + "▁ann oun", + "▁class Name", + "▁ className", + "▁cal cul", + "▁calc ul", + "Fun ction", + "F unction", + "▁S al", + "▁Sa l", + "▁ Sal", + "O K", + "T P", + "▁en try", + "▁ent ry", + "▁entr y", + "▁ entry", + "▁St ud", + "▁ Stud", + "▁it ems", + "▁item s", + "▁ items", + "▁se curity", + "▁sec urity", + "▁secur ity", + "▁ security", + "En try", + "Ent ry", + "f loat", + "l s", + "ib ly", + "▁cont ribut", + "▁C heck", + "▁Che ck", + "▁ Check", + "M D", + "▁impro ve", + "Par t", + "P art", + "▁system s", + "▁syst ems", + "B l", + "▁pol icy", + "▁polic y", + "▁ policy", + "▁s creen", + "▁sc reen", + "▁scr een", + "▁ screen", + "▁A ny", + "▁An y", + "▁ Any", + "▁op ened", + "▁open ed", + "al loc", + "all oc", + "allo c", + "▁De cember", + "▁Dec ember", + "▁ É", + "▁e mail", + "▁em ail", + "▁ email", + "ad er", + "ade r", + "a der", + "= >", + "▁H en", + "▁He n", + "▁ Hen", + "▁in fo", + "▁inf o", + "▁ info", + "▁f loat", + "▁flo at", + "▁ float", + "▁sw itch", + "▁ switch", + "ра н", + "р ан", + "ur ance", + "▁as sum", + "▁ass um", + "us tr", + "ust r", + "u str", + "▁g roups", + "▁group s", + "▁gro ups", + "▁ groups", + "▁R ead", + "▁Re ad", + "▁ Read", + "▁w at", + "▁wa t", + "S p", + "ве р", + "в ер", + "RA N", + "R AN", + "hi b", + "h ib", + "AL L", + "A LL", + "▁h us", + "▁ hus", + "Sp ec", + "Spe c", + "S pec", + "\") )", + "\" ))", + "▁F rench", + "▁C lass", + "▁Cl ass", + "▁ Class", + "▁pres ident", + "▁presid ent", + "▁def init", + "▁defin it", + "▁N or", + "▁No r", + "▁T hom", + "▁Th om", + "ai gn", + "a ign", + "W idth", + "D o", + "▁{ @", + "ag on", + "ago n", + "a gon", + "▁L u", + "▁ Lu", + "▁follow ed", + "M M", + "as ons", + "ason s", + "tm p", + "t mp", + "▁th rows", + "▁throw s", + "▁thr ows", + "▁thro ws", + "▁ throws", + "IT Y", + "I TY", + "но м", + "▁f air", + "▁fa ir", + "▁p en", + "▁pe n", + "▁ pen", + "é g", + "▁inter face", + "▁ interface", + "▁s af", + "▁sa f", + "oo n", + "o on", + "B ack", + "▁s peed", + "▁sp eed", + "▁spe ed", + "▁ speed", + "▁ext ends", + "▁extend s", + "em pty", + "empt y", + "emp ty", + "▁п ере", + "▁пер е", + "▁пе ре", + "▁pro per", + "▁pr oper", + "▁prop er", + "▁d riv", + "▁dr iv", + "▁dri v", + "ф и", + "▁c enter", + "▁cent er", + "▁ center", + "he ader", + "head er", + "▁} )", + "▁ })", + "w a", + "▁m iddle", + "▁ middle", + "▁ch oose", + "▁cho ose", + "▁St ad", + "▁Sta d", + "S O", + "Fact ory", + "Factor y", + "F actory", + "De v", + "D ev", + "ic les", + "icle s", + "icl es", + "i cles", + "▁ap plication", + "▁applic ation", + "▁appl ication", + "▁ application", + "▁mod els", + "▁model s", + "▁mode ls", + "▁ models", + "pi te", + "pit e", + "p ite", + "ca p", + "c ap", + "x i", + "osp ital", + "▁d ream", + "▁dre am", + "EN D", + "E ND", + "▁con tract", + "▁cont ract", + "▁contr act", + "▁contra ct", + "▁ contract", + "icro soft", + "▁th ous", + "▁thou s", + "iz es", + "ize s", + "i zes", + "▁д а", + "▁ да", + "▁C O", + "▁ CO", + "▁d irection", + "▁di rection", + "▁direct ion", + "▁dire ction", + "▁dir ection", + "▁ direction", + "▁` `", + "▁ ``", + "▁d rive", + "▁dr ive", + "▁dri ve", + "▁driv e", + "▁ drive", + "Ma x", + "M ax", + "ci a", + "c ia", + "▁contin u", + "▁A lex", + "▁Al ex", + "▁Ale x", + "▁ Alex", + "▁g old", + "▁go ld", + "▁gol d", + "▁ gold", + "▁p rep", + "▁pre p", + "▁pr ep", + "▁or igin", + "▁orig in", + "▁ origin", + "▁r ap", + "▁ra p", + "▁ rap", + "O p", + "ous ly", + "▁are as", + "▁area s", + "PO RT", + "P ORT", + "он а", + "о на", + "▁sa fe", + "▁saf e", + "▁ safe", + "▁profess ional", + "▁profession al", + "ap ache", + "apa che", + "▁t emper", + "▁tem per", + "▁temp er", + "s z", + "▁u nit", + "▁un it", + "▁ unit", + "▁c op", + "▁co p", + "▁ cop", + "eq n", + "List ener", + "Listen er", + "▁for mat", + "▁form at", + "▁forma t", + "▁ format", + "se lect", + "sel ect", + "s elect", + "▁com fort", + "▁ comfort", + "▁me ant", + "▁mean t", + "id ay", + "ida y", + "i day", + "em e", + "e me", + "▁act ive", + "▁activ e", + "▁ active", + "▁n ote", + "▁not e", + "▁no te", + "▁ note", + "▁M il", + "▁Mi l", + "▁ Mil", + "on ly", + "▁< =", + "▁ <=", + "▁ne igh", + "▁nei gh", + "a o", + "▁bl ue", + "▁ blue", + "▁T V", + "▁ TV", + "Ch ild", + "▁re ached", + "▁reach ed", + "Add ress", + "Addr ess", + "ст в", + "▁cl osed", + "▁close d", + "▁clos ed", + "▁clo sed", + "▁ closed", + "in der", + "ind er", + "inde r", + "i nder", + "ol o", + "o lo", + "▁a lt", + "▁al t", + "▁ alt", + "▁a dm", + "▁ad m", + "Form at", + "For mat", + "U I", + "▁H am", + "▁Ha m", + "▁f requ", + "▁fr equ", + "▁fre qu", + "▁in depend", + "▁inde pend", + "▁ independ", + "▁eas ily", + "▁L and", + "▁La nd", + "▁Lan d", + "▁ Land", + "▁t or", + "▁to r", + "▁ tor", + "ograph y", + "ograp hy", + "in fty", + "inf ty", + "▁W ork", + "▁Wor k", + "▁ Work", + "iv en", + "ive n", + "i ven", + "▁Count y", + "▁Coun ty", + "▁s rc", + "▁ src", + "}$ ,", + "} $,", + "par se", + "pars e", + "p arse", + "C D", + "▁C our", + "▁Co ur", + "▁Cou r", + "▁f ol", + "▁fo l", + "▁ fol", + "Ent ity", + "pg f", + "▁Ch ina", + "▁Chi na", + "▁S ub", + "▁Su b", + "▁ Sub", + "ho od", + "h ood", + "▁field s", + "▁ fields", + "▁y es", + "▁ye s", + "▁ yes", + "re nd", + "ren d", + "r end", + "▁to wards", + "▁toward s", + "▁tow ards", + "▁st aff", + "▁sta ff", + "▁ staff", + "▁A ir", + "▁ Air", + "▁st ation", + "▁stat ion", + "▁ station", + "at ives", + "ative s", + "ati ves", + "ativ es", + "▁imp act", + "в ы", + "▁direct ly", + "iss ions", + "ission s", + "iv a", + "i va", + "| \\", + "Pt r", + "P tr", + "▁S ant", + "▁San t", + "▁Sa nt", + "Po l", + "P ol", + "▁pro gress", + "▁ progress", + "it ar", + "ita r", + "i tar", + "▁p arts", + "▁part s", + "▁par ts", + "▁ parts", + "▁pl ant", + "▁plan t", + "▁ plant", + "▁abs olut", + "▁gu ess", + "eq ref", + "▁t im", + "▁ti m", + "▁ tim", + "▁L ou", + "▁Lo u", + "▁ Lou", + "▁c ool", + "▁co ol", + "al u", + "a lu", + "▁m outh", + "▁mo uth", + "▁mou th", + "▁ mouth", + "ни х", + "▁h eight", + "▁he ight", + "▁ height", + "ge st", + "ges t", + "g est", + "▁P ost", + "▁Po st", + "▁Pos t", + "▁ Post", + "▁b oard", + "▁bo ard", + "▁ board", + "▁t it", + "▁ti t", + "▁ tit", + "▁h our", + "▁ho ur", + "▁ hour", + "▁ser ver", + "▁serv er", + "▁serve r", + "▁ server", + "▁p layers", + "▁play ers", + "▁player s", + "ri er", + "rie r", + "r ier", + "Lin k", + "L ink", + "▁Pres ident", + "] (", + "▁con struct", + "▁const ruct", + "▁constr uct", + "▁constru ct", + "▁ construct", + "hand le", + "}$ .", + "} $.", + "ry ing", + "r ying", + "▁s hop", + "▁sh op", + "▁ shop", + "ia na", + "ian a", + "i ana", + "ex p", + "e xp", + "Hel per", + "Help er", + "Off set", + "ac hes", + "ach es", + "ache s", + "a ches", + "▁conne ction", + "▁connect ion", + "▁conn ection", + "▁ connection", + "▁d ifference", + "▁dif ference", + "▁differ ence", + "serv ice", + "s ervice", + "▁g as", + "▁ga s", + "▁ gas", + "▁p riv", + "▁pr iv", + "▁pri v", + "▁ priv", + "▁un ivers", + "▁ univers", + "▁w ish", + "▁wis h", + "Re m", + "R em", + "U rl", + "ge b", + "g eb", + "S o", + "ens ions", + "ension s", + "Mod ule", + "Mo dule", + "SI ZE", + "▁p rem", + "▁pre m", + "▁pr em", + "wind ow", + "w indow", + "▁d ies", + "▁di es", + "▁die s", + "de l", + "d el", + "▁r ow", + "▁ro w", + "▁ row", + "▁a verage", + "▁aver age", + "▁ave rage", + "xi m", + "x im", + "▁p u", + "▁ pu", + "an ç", + "De t", + "D et", + "ke r", + "k er", + "y a", + "▁D et", + "▁De t", + "▁ Det", + "▁p å", + "▁n amed", + "▁name d", + "▁na med", + "▁nam ed", + "▁ named", + "▁dec ision", + "▁decis ion", + "wi n", + "w in", + "▁Ge orge", + "▁Georg e", + "ar ily", + "ari ly", + "▁s olution", + "▁sol ution", + "▁mult iple", + "▁multi ple", + "▁multip le", + "▁ multiple", + "at egy", + "ate gy", + "ateg y", + "▁le arning", + "▁learn ing", + "▁lear ning", + "▁ learning", + "▁se cret", + "▁sec ret", + "▁secre t", + "▁ secret", + "D O", + "▁n ice", + "▁ni ce", + "▁nic e", + "▁ nice", + "//////// ////////", + "S u", + "it ation", + "itat ion", + "▁j oin", + "▁jo in", + "▁ join", + "▁el ements", + "▁element s", + "▁ele ments", + "▁elem ents", + "▁ elements", + "▁e mer", + "▁em er", + "til de", + "t ilde", + "▁d ep", + "▁de p", + "▁ dep", + "▁s hot", + "▁sh ot", + "▁ shot", + "▁pl atform", + "▁plat form", + "▁ platform", + "ot hing", + "oth ing", + "o thing", + "M y", + "ed ia", + "edi a", + "om s", + "o ms", + "ail y", + "ai ly", + "a ily", + "( [", + "▁d ress", + "▁dr ess", + "▁dre ss", + "▁off icial", + "▁offic ial", + "es tern", + "est ern", + "ester n", + "este rn", + "▁dis cover", + "▁disc over", + "▁disco ver", + "▁m i", + "▁ mi", + "ны е", + "C A", + "od ing", + "odi ng", + "o ding", + "▁F ound", + "▁Fou nd", + "▁Fo und", + "▁ Found", + "▁a ffect", + "▁aff ect", + "▁af fect", + "Vi s", + "V is", + "st ract", + "str act", + "stra ct", + "s tract", + "ic ed", + "ice d", + "i ced", + "de bug", + "d ebug", + "▁rel ated", + "▁relate d", + "▁ related", + "▁s pect", + "▁sp ect", + "▁spec t", + "▁spe ct", + "▁ spect", + "us hed", + "ush ed", + "сь ко", + "▁b ank", + "▁ban k", + "▁ bank", + "▁c ele", + "▁ce le", + "▁cel e", + "AN D", + "A ND", + "ol f", + "е м", + "▁f ill", + "▁fil l", + "▁fi ll", + "▁ fill", + "▁g ives", + "▁giv es", + "▁give s", + "▁gi ves", + "▁б у", + "▁ бу", + "ar on", + "aro n", + "a ron", + "▁J es", + "▁Je s", + "RE G", + "▁s udd", + "▁su dd", + "▁sud d", + "date d", + "da ted", + "dat ed", + "d ated", + "v i", + "▁g i", + "▁ gi", + "se nd", + "sen d", + "s end", + "cp p", + "c pp", + "▁s pent", + "▁sp ent", + "▁spe nt", + "an de", + "and e", + "a nde", + "▁oper ation", + "▁ operation", + "pro cess", + "proc ess", + "▁in form", + "▁inf orm", + "▁info rm", + "▁F ree", + "▁Fr ee", + "▁Fre e", + "▁ Free", + "yo nd", + "y ond", + "▁per haps", + "▁su rv", + "▁sur v", + "▁L oc", + "▁Lo c", + "▁ Loc", + "▁con cl", + "▁conc l", + "▁ра з", + "▁ раз", + "▁O ver", + "▁ Over", + "ho l", + "h ol", + "ra z", + "r az", + "Wr ite", + "Writ e", + "W rite", + "▁g iving", + "▁giv ing", + "▁gi ving", + "r d", + "in stance", + "inst ance", + "▁re leased", + "▁rele ased", + "▁release d", + "▁R o", + "▁ Ro", + "R A", + "▁pract ice", + "▁g raph", + "▁gr aph", + "▁gra ph", + "▁grap h", + "▁ graph", + "▁incre ase", + "▁fig ure", + "▁ figure", + "Fil ter", + "HE CK", + "id x", + "i dx", + "▁g lass", + "▁gl ass", + "▁ glass", + "sk i", + "s ki", + "com es", + "co mes", + "come s", + "c omes", + "▁c at", + "▁ca t", + "▁ cat", + "▁c old", + "▁col d", + "▁co ld", + "go to", + "got o", + "g oto", + "uf act", + "u fact", + "▁C opyright", + "▁Copy right", + "▁ Copyright", + "}} \\", + "} }\\", + "▁str eng", + "▁stre ng", + "▁d ir", + "▁di r", + "▁ dir", + "to ken", + "tok en", + "t oken", + "▁occ ur", + "▁oc cur", + "arl ier", + "▁me asure", + "▁meas ure", + "▁ measure", + "▁s ec", + "▁se c", + "▁ sec", + "▁m ás", + "▁má s", + "▁N et", + "▁Ne t", + "▁ Net", + "▁arg ument", + "▁ argument", + "▁s ou", + "▁so u", + "▁m oving", + "▁mov ing", + "▁mo ving", + "▁p refer", + "▁pre fer", + "▁pref er", + "ma sk", + "mas k", + "m ask", + "< <", + "▁bre ath", + "▁breat h", + "▁phys ical", + "▁pos itive", + "▁posit ive", + "▁s or", + "▁so r", + "▁ sor", + "▁de part", + "▁dep art", + "▁re move", + "▁rem ove", + "▁ remove", + "▁k it", + "▁ki t", + "▁ kit", + "▁me eting", + "▁meet ing", + "▁D ata", + "▁Da ta", + "▁Dat a", + "▁ Data", + "og raf", + "act ions", + "action s", + "a ctions", + "▁param eters", + "▁parameter s", + "▁ parameters", + "▁A tt", + "▁At t", + "▁ Att", + "es ch", + "esc h", + "e sch", + "▁inv olved", + "▁invol ved", + "▁involve d", + "ä t", + "L L", + "B ar", + "▁с и", + "▁ си", + "ec h", + "e ch", + "GE T", + "G ET", + "▁pre vent", + "▁pr event", + "▁prev ent", + "▁ prevent", + "▁be yond", + "▁O ther", + "▁Ot her", + "▁ Other", + "ä n", + "by te", + "▁sudd en", + "▁sud den", + "ol ve", + "olv e", + "▁н о", + "▁ но", + "LO G", + "L OG", + "un it", + "uni t", + "u nit", + "▁tr uth", + "ra t", + "r at", + "S D", + "▁e at", + "▁M ad", + "▁Ma d", + "▁ Mad", + "▁prov ides", + "▁provide s", + "▁s ession", + "▁ session", + "De le", + "Del e", + "D ele", + "▁con vers", + "▁conv ers", + "▁conver s", + "▁conve rs", + "cent er", + "cen ter", + "c enter", + "▁contin ued", + "▁continue d", + "▁continu ed", + "ot ion", + "oti on", + "ca che", + "c ache", + "dis play", + "disp lay", + "▁prote ct", + "▁prot ect", + "am s", + "a ms", + "▁p ow", + "▁po w", + "▁ pow", + "CT ION", + "C TION", + "▁M ac", + "▁Ma c", + "▁ Mac", + "m o", + "х а", + "▁d istance", + "▁di stance", + "▁dist ance", + "▁ distance", + "▁T ime", + "▁Tim e", + "▁Ti me", + "▁ Time", + "g i", + "▁s equ", + "▁se qu", + "▁seq u", + "▁ sequ", + "T arget", + "с ле", + "Ser ver", + "Serv er", + "▁w ide", + "▁wid e", + "▁ wide", + "cl ose", + "clos e", + "▁c ru", + "▁cr u", + "Ex t", + "E xt", + "▁s elect", + "▁se lect", + "▁sel ect", + "▁sele ct", + "▁ select", + "▁pat tern", + "▁ pattern", + "\") );", + "\")) ;", + "\" ));", + "Pro vider", + "Prov ider", + "UR L", + "U RL", + "▁g reen", + "▁gr een", + "▁gre en", + "▁ green", + "▁wait ing", + "▁wa iting", + "pro to", + "pr oto", + "prot o", + "▁immedi ately", + "▁immediate ly", + "com mon", + "comm on", + "az ione", + "azi one", + "a zione", + "ri ver", + "riv er", + "rive r", + "r iver", + "▁s en", + "▁se n", + "▁ sen", + "▁! ==", + "▁!= =", + "▁Febru ary", + "▁Februar y", + "ur b", + "u rb", + "▁S en", + "▁Se n", + "de st", + "des t", + "d est", + "< ?", + "▁ed ge", + "▁ edge", + "▁m ais", + "▁ma is", + "▁mai s", + "gor ith", + "cp u", + "c pu", + "▁educ ation", + "▁associ ated", + "▁associate d", + "No ne", + "Non e", + "N one", + "h i", + "▁p oor", + "▁po or", + "se m", + "s em", + "▁W il", + "▁Wi l", + "▁b ud", + "▁bu d", + "▁ bud", + "▁a uch", + "▁au ch", + "▁ auch", + "el ler", + "ell er", + "elle r", + "▁L ife", + "▁Li fe", + "▁ Life", + "▁f iles", + "▁fil es", + "▁file s", + "▁fi les", + "▁ files", + "▁le ading", + "▁lead ing", + "▁ leading", + "▁ob tain", + "▁obt ain", + "▁J ul", + "▁Ju l", + "at ory", + "ator y", + "ato ry", + "г у", + "it able", + "ita ble", + "i table", + "▁on to", + "▁ont o", + "▁ onto", + "▁b orn", + "▁bo rn", + "▁bor n", + "▁ born", + "or em", + "ore m", + "o rem", + "▁Stre et", + "▁m aint", + "▁main t", + "▁ma int", + "▁mai nt", + "Param s", + "Par ams", + "ri p", + "r ip", + "▁S T", + "▁ ST", + "u v", + "ma in", + "m ain", + "▁re cent", + "▁rec ent", + "▁rece nt", + "We b", + "W eb", + "ov a", + "o va", + "ц а", + "ais e", + "ai se", + "a ise", + "yle s", + "yl es", + "y les", + "▁de scribed", + "▁desc ribed", + "▁describ ed", + "▁describe d", + "▁begin ning", + "▁D ay", + "▁Da y", + "▁ Day", + "▁V ol", + "▁Vo l", + "▁ Vol", + "▁h uge", + "▁hug e", + "Ha s", + "H as", + "an cy", + "anc y", + "He ader", + "Head er", + "▁a ren", + "▁are n", + "▁ar en", + "▁ aren", + "ва н", + "в ан", + "▁en sure", + "▁ens ure", + "▁ ensure", + "▁p et", + "▁pe t", + "▁ pet", + "mu lt", + "mul t", + "m ult", + "▁L ike", + "▁Li ke", + "▁ Like", + "▁man agement", + "▁manage ment", + "▁ management", + "P S", + "wh ile", + "▁back ground", + "▁ background", + "ount er", + "oun ter", + "o unter", + "bo ol", + "b ool", + "F C", + "N um", + "R L", + "▁ex cl", + "▁exc l", + "▁e ye", + "▁ey e", + "im g", + "i mg", + "▁r om", + "▁ro m", + "▁ rom", + "▁H el", + "▁He l", + "▁ Hel", + "Opt ion", + "O ption", + "▁stop ped", + "▁sto pped", + "▁th read", + "▁thr ead", + "▁ thread", + "to type", + "tot ype", + "t otype", + ")) )", + ") ))", + "▁st age", + "▁stag e", + "▁sta ge", + "▁ stage", + "▁ü ber", + "▁ über", + "▁al though", + "▁ although", + "Type s", + "Ty pes", + "Typ es", + "T ypes", + "▁O h", + "▁ Oh", + "▁e ight", + "▁ eight", + "▁de scription", + "▁des cription", + "▁ description", + "' '", + "ö n", + "▁sur face", + "▁surf ace", + "▁ surface", + "▁Intern ational", + "▁ch arg", + "▁char g", + "▁cha rg", + "▁ charg", + "▁col lection", + "▁coll ection", + "▁collect ion", + "▁colle ction", + "▁ collection", + "▁us ers", + "▁use rs", + "▁user s", + "▁ users", + "▁ob vious", + "▁cent ury", + "▁ century", + "ic ks", + "ick s", + "i cks", + "▁art icle", + "▁artic le", + "▁ article", + "▁\" \\", + "▁ \"\\", + "di m", + "d im", + "▁s in", + "▁si n", + "▁ sin", + "en ge", + "eng e", + "Cont rol", + "▁com mit", + "▁comm it", + "▁ commit", + "ens ity", + "▁t ra", + "▁tr a", + "▁ tra", + "cript or", + "▁N OT", + "▁NO T", + "▁ NOT", + "we ll", + "w ell", + "▁M ichael", + "▁Mich ael", + "▁n od", + "▁no d", + "▁ nod", + "▁m ort", + "▁mor t", + "▁mo rt", + "iv o", + "i vo", + "is ation", + "▁P o", + "▁ Po", + "▁P aris", + "▁Par is", + "▁Pa ris", + "▁ad ministr", + "▁admin istr", + "▁ administr", + "bu rg", + "bur g", + "b urg", + "cd ot", + "c dot", + "▁mil itary", + "▁milit ary", + "▁militar y", + "▁B est", + "▁Be st", + "▁Bes t", + "▁ Best", + "▁К а", + "▁ Ка", + "IN E", + "I NE", + "▁through out", + "S l", + "▁im pl", + "▁imp l", + "▁ impl", + "cont rol", + "contr ol", + "▁ Ч", + "▁u it", + "▁ui t", + "▁ uit", + "▁un signed", + "▁uns igned", + "▁ unsigned", + "▁M ary", + "▁Mar y", + "▁Ma ry", + "Ch ar", + "C har", + "м і", + "▁th reat", + "▁c ourt", + "▁co urt", + "▁cour t", + "▁cou rt", + "▁ court", + "vi lle", + "vil le", + "v ille", + "▁ ш", + "▁C am", + "▁Ca m", + "▁ Cam", + ". \r", + "▁current ly", + "▁curr ently", + "ro t", + "r ot", + "▁D ate", + "▁Da te", + "▁Dat e", + "▁ Date", + "▁s hit", + "▁sh it", + "▁ shit", + "▁$ {\\", + "▁${ \\", + "un n", + "u nn", + "U s", + "▁b uffer", + "▁buff er", + "▁buf fer", + "▁ buffer", + "▁s ont", + "▁so nt", + "▁son t", + "▁let ter", + "▁lett er", + "▁ letter", + "in ated", + "ina ted", + "inate d", + "Ch ange", + "▁h ref", + "▁hr ef", + "▁ href", + "▁l ack", + "▁la ck", + "▁lac k", + "▁o il", + "▁C ons", + "▁Con s", + "▁Co ns", + "▁ Cons", + "▁J er", + "▁Je r", + "BU G", + "B UG", + "if orn", + "▁pro perties", + "▁proper ties", + "▁ properties", + "▁r andom", + "▁ran dom", + "▁rand om", + "▁ random", + "▁br other", + "▁bro ther", + "▁p iece", + "▁pie ce", + "▁ piece", + "б у", + "ist ics", + "istic s", + "isti cs", + "▁techn ology", + "gl obal", + "glob al", + "▁trans form", + "▁ transform", + "er d", + "e rd", + "▁B ecause", + "▁ Because", + "PE CT", + "P ECT", + "pr et", + "pre t", + "p ret", + "▁го ду", + "▁год у", + "▁M et", + "▁Me t", + "▁ Met", + "▁p sy", + "▁ps y", + "▁ psy", + "▁о д", + "▁g od", + "▁go d", + "▁ god", + "▁D el", + "▁De l", + "▁ Del", + "base d", + "ba sed", + "bas ed", + "b ased", + "▁v oor", + "▁vo or", + "▁C all", + "▁Cal l", + "▁Ca ll", + "▁ Call", + "S A", + "▁fil ter", + "▁ filter", + "▁incl udes", + "▁includ es", + "▁include s", + "▁inclu des", + "▁ includes", + "olut ions", + "olution s", + "f d", + "▁w ind", + "▁win d", + "▁ wind", + "▁б о", + "▁ бо", + "▁ab ility", + "▁ ability", + "ca rd", + "car d", + "c ard", + "▁n umer", + "▁num er", + "▁nu mer", + "▁ numer", + "add ress", + "addr ess", + "▁go al", + "ash ington", + "ashing ton", + "▁s light", + "▁sl ight", + "ab a", + "a ba", + "▁L og", + "▁Lo g", + "▁ Log", + "Set tings", + "Setting s", + "ad ow", + "ado w", + "▁p i", + "▁ pi", + "ir ing", + "iri ng", + "i ring", + "F T", + "▁number s", + "▁num bers", + "con f", + "co nf", + "ta sk", + "t ask", + "▁î n", + "т ы", + "▁re ceive", + "▁rece ive", + "▁r oot", + "▁ro ot", + "▁ root", + "▁Ind ia", + "pat ch", + "p atch", + "é l", + "▁sum mer", + "▁method s", + "▁ methods", + "▁pl aces", + "▁place s", + "▁plac es", + "▁М а", + "▁ Ма", + "▁cap ital", + "▁capit al", + "▁ev idence", + "▁G erman", + "▁Germ an", + "▁Ger man", + "\\ ,", + "D A", + "ec ute", + "ecut e", + "col umn", + "▁fun ctions", + "▁function s", + "▁ functions", + "▁c ounter", + "▁co unter", + "▁coun ter", + "▁count er", + "▁ counter", + "▁ar ms", + "▁arm s", + "▁ arms", + "▁f eed", + "▁fe ed", + "▁fee d", + "▁ feed", + "ve y", + "v ey", + "he nt", + "hen t", + "h ent", + "MA X", + "M AX", + "▁ac qu", + "▁app ly", + "▁ap ply", + "▁appl y", + "▁ apply", + "▁hus band", + "▁k illed", + "▁kill ed", + "▁kil led", + "▁S pec", + "▁Sp ec", + "▁Spe c", + "▁ Spec", + "ent ity", + "enti ty", + "▁e arlier", + "▁M iss", + "▁Mi ss", + "▁Mis s", + "▁ Miss", + "▁set ting", + "▁sett ing", + "▁ setting", + "it ect", + "ite ct", + "▁d ed", + "▁de d", + "▁ ded", + "Ro w", + "R ow", + "▁r an", + "▁ra n", + "▁ ran", + "▁Y es", + "▁Ye s", + "▁ Yes", + "▁fin ancial", + "▁financ ial", + "s ession", + "le ar", + "l ear", + "is hing", + "ish ing", + "ishi ng", + "▁ne arly", + "▁near ly", + "▁d ur", + "▁du r", + "▁m achine", + "▁mach ine", + "▁ machine", + "xf f", + "x ff", + "br o", + "b ro", + "▁s ymbol", + "▁sym bol", + "▁ symbol", + "land s", + "lan ds", + "l ands", + "Ac c", + "A cc", + "d i", + "▁Rober t", + "▁Ro bert", + "▁Rob ert", + "pro p", + "pr op", + "p rop", + "ur ity", + "uri ty", + "▁# ####", + "▁## ###", + "▁### ##", + "▁#### #", + "▁walk ed", + "▁wal ked", + "▁intern ational", + "▁internation al", + "▁ Е", + "Y es", + "▁re lease", + "▁rele ase", + "▁ release", + "▁start ing", + "▁star ting", + "st atic", + "stat ic", + "▁b ei", + "▁be i", + "al low", + "all ow", + "allo w", + "▁Pe ople", + "▁ People", + "e z", + "▁param eter", + "▁ parameter", + "C ache", + "▁$ $", + "▁ $$", + "amp ions", + "ampion s", + "▁M er", + "▁Me r", + "▁ Mer", + "▁k om", + "▁ko m", + "▁ kom", + "le ted", + "let ed", + "lete d", + "l eted", + "oi s", + "o is", + "▁O pen", + "▁Op en", + "▁ Open", + "ty pes", + "type s", + "typ es", + "t ypes", + "▁f ue", + "▁fu e", + "ac ters", + "act ers", + "acter s", + "▁re ference", + "▁refer ence", + "▁ reference", + "Equ als", + "Equal s", + "Eq uals", + "▁a ware", + "▁aw are", + "▁ aware", + "▁h ol", + "▁ho l", + "▁ hol", + "▁de mand", + "▁dem and", + "lo r", + "l or", + "▁v eh", + "▁ve h", + "▁ veh", + "▁not ice", + "▁ notice", + "▁com ponent", + "▁compon ent", + "▁ component", + "f n", + "▁anal ysis", + "▁analy sis", + "▁analys is", + "▁ analysis", + "mat ch", + "m atch", + "▁effect ive", + "▁ effective", + "pro duct", + "produ ct", + "prod uct", + "ни к", + "▁le gal", + "▁leg al", + "▁ legal", + "е й", + "se mb", + "sem b", + "s emb", + "▁loc ated", + "▁locate d", + "▁с у", + "▁ су", + "Q L", + "in ct", + "inc t", + "et o", + "e to", + "Dr aw", + "D raw", + "▁sc ale", + "▁scal e", + "▁ scale", + "ро в", + "р ов", + "▁w ants", + "▁want s", + "H ow", + "▁w el", + "▁we l", + "is ions", + "ision s", + "isi ons", + "▁de liver", + "▁del iver", + "un der", + "und er", + "unde r", + "u nder", + "▁d eb", + "▁de b", + "▁j u", + "▁ ju", + "val ues", + "value s", + "▁s ister", + "▁si ster", + "▁sist er", + "ко в", + "к ов", + "▁C reate", + "▁Creat e", + "▁Cre ate", + "▁ Create", + "▁I nc", + "▁In c", + "▁a ux", + "▁au x", + "▁ aux", + "▁Wh ite", + "▁Whit e", + "▁ White", + "Me nu", + "Men u", + "M enu", + "au d", + "a ud", + "re source", + "res ource", + "▁c ab", + "▁ca b", + "▁l if", + "▁li f", + "▁ lif", + "▁c ulture", + "▁cult ure", + "ic he", + "ich e", + "i che", + "▁wh atever", + "▁what ever", + "▁de signed", + "▁des igned", + "▁design ed", + "▁re pe", + "▁rep e", + "▁M ont", + "▁Mon t", + "▁Mo nt", + "▁ Mont", + "▁ch arge", + "▁char ge", + "▁charg e", + "▁ charge", + "Name s", + "Na mes", + "N ames", + "▁in sp", + "▁ins p", + "▁custom ers", + "▁customer s", + "os a", + "o sa", + "▁d aughter", + "▁E ast", + "E Q", + "▁o pin", + "▁op in", + "▁F re", + "▁Fr e", + "▁se ek", + "▁see k", + "▁ seek", + "▁p ush", + "▁pu sh", + "▁ push", + "▁n av", + "▁na v", + "▁ nav", + "▁b urn", + "▁bu rn", + "▁bur n", + "▁ burn", + "ar den", + "ard en", + "arde n", + "ha sh", + "has h", + "h ash", + "▁opportun ity", + "▁M at", + "▁Ma t", + "▁ Mat", + "oy al", + "oya l", + "o yal", + "▁p un", + "▁pu n", + "sc ale", + "scal e", + "yn amic", + "ynam ic", + "yna mic", + "▁T ype", + "▁Ty pe", + "▁Typ e", + "▁ Type", + "il ing", + "ili ng", + "i ling", + "▁qu ery", + "▁que ry", + "▁quer y", + "▁ query", + "▁m ist", + "▁mis t", + "▁mi st", + "ro r", + "r or", + "for ce", + "▁On ce", + "▁ Once", + "▁med ical", + "▁medic al", + "▁medi cal", + "li e", + "l ie", + "▁stud ent", + "▁ student", + "ed eral", + "eder al", + "ede ral", + "▁l ov", + "▁lo v", + "▁ lov", + "if orm", + "i form", + "▁al tern", + "▁alt ern", + "▁alter n", + "▁ altern", + "bi n", + "b in", + "od er", + "ode r", + "o der", + "▁return s", + "▁ returns", + "reg ister", + "ut s", + "u ts", + "C I", + "▁T or", + "▁To r", + "▁ Tor", + "C R", + "▁L os", + "▁Lo s", + "▁ Los", + "am ily", + "ami ly", + "amil y", + "air e", + "ai re", + "a ire", + "++ ;", + "Cont roller", + "Control ler", + "wi de", + "wid e", + "w ide", + "x x", + "row ser", + "rows er", + "▁B ook", + "▁Bo ok", + "▁ Book", + "Cont ainer", + "pl oad", + "plo ad", + "p load", + "▁E v", + "▁ Ev", + "▁t al", + "▁ta l", + "▁ tal", + "▁the ory", + "eqn array", + "б е", + "▁rep orted", + "▁report ed", + "▁me aning", + "▁mean ing", + "▁s y", + "▁ sy", + "ri be", + "rib e", + "r ibe", + "ic ate", + "ica te", + "ho ld", + "hol d", + "h old", + "▁of fers", + "▁off ers", + "▁offer s", + "▁t empl", + "▁tem pl", + "▁temp l", + "cs s", + "c ss", + "▁p icture", + "▁pict ure", + "▁ picture", + "▁a sync", + "▁as ync", + "▁ async", + "▁st ock", + "▁sto ck", + "▁ stock", + "▁in ternal", + "▁inter nal", + "▁intern al", + "▁ internal", + "t i", + "B O", + "V er", + "с по", + "▁d emon", + "▁de mon", + "▁dem on", + "▁demo n", + "▁l augh", + "▁la ugh", + "▁laug h", + "▁E nd", + "▁En d", + "▁ End", + "▁k on", + "▁ko n", + "▁ kon", + "▁ide as", + "▁idea s", + "▁c andid", + "▁can did", + "▁cand id", + "Me m", + "M em", + "iz z", + "i zz", + "re fix", + "ref ix", + "▁A ND", + "▁AN D", + "▁ AND", + "eg en", + "e gen", + "E l", + "▁camp aign", + "H ttp", + "▁R ob", + "▁Ro b", + "▁ Rob", + "д і", + "▁b ul", + "▁bu l", + "▁ bul", + "▁К о", + "▁ Ко", + "▁count ries", + "▁countr ies", + "» .", + "▁ex pression", + "▁exp ression", + "▁express ion", + "▁expr ession", + "▁ expression", + "▁Eng land", + "s f", + "▁certain ly", + "ag en", + "age n", + "a gen", + "▁ч а", + "▁ ча", + "▁A NY", + "▁AN Y", + "▁ ANY", + "▁conne ct", + "▁conn ect", + "▁ connect", + "F E", + "▁and roid", + "▁ android", + "▁G old", + "▁Go ld", + "▁Gol d", + "▁ Gold", + "▁op pos", + "▁opp os", + "ov ern", + "ove rn", + "over n", + "o vern", + "▁Com mun", + "▁Comm un", + ", _", + "as ion", + "asi on", + "L a", + "▁f irm", + "▁fi rm", + "▁fir m", + "▁Al though", + "▁G ood", + "▁Go od", + "▁ Good", + "▁L aw", + "▁La w", + "er ve", + "erv e", + "▁b rand", + "▁br and", + "▁bra nd", + "▁ brand", + "M in", + "fil l", + "fi ll", + "f ill", + "'] ,", + "' ],", + "▁J ew", + "▁Je w", + "il er", + "ile r", + "i ler", + "in gle", + "ing le", + "it hub", + "ith ub", + "▁D iv", + "▁Di v", + "▁ Div", + "▁c ert", + "▁ce rt", + "▁cer t", + "▁ cert", + "He ight", + "H eight", + "ra el", + "r ael", + "The re", + "Th ere", + "T here", + "it ute", + "itut e", + "itu te", + "▁a maz", + "▁am az", + "▁ amaz", + "lo ok", + "l ook", + "▁S E", + "▁ SE", + "▁j o", + "▁ jo", + "▁pull ed", + "▁pul led", + "▁re sources", + "▁res ources", + "▁resource s", + "▁ resources", + "▁M ax", + "▁Ma x", + "▁ Max", + "▁ag reed", + "▁agree d", + "▁agre ed", + "as y", + "a sy", + "▁treat ment", + "\"> < /", + "\" > >", + "▁ >>", + "com mand", + "comm and", + "at z", + "a tz", + "▁m al", + "▁ma l", + "▁ mal", + "ста в", + "▁P ress", + "▁Pr ess", + "▁Pres s", + "▁Pre ss", + "▁ Press", + "▁char acters", + "▁character s", + "▁z ero", + "▁ze ro", + "▁ zero", + "AG E", + "A GE", + "rap per", + "▁kit chen", + "am ing", + "ami ng", + "amin g", + "a ming", + "▁re str", + "▁r estr", + "▁res tr", + "▁rest r", + "X X", + "▁Col lege", + "▁Ar ray", + "▁Arr ay", + "▁ Array", + "▁f resh", + "▁fr esh", + "▁fre sh", + "▁fres h", + "▁sh ift", + "▁ shift", + "▁spec ified", + "pl ete", + "ple te", + "plet e", + "p lete", + "IT E", + "I TE", + "▁C amp", + "▁Cam p", + "▁Ca mp", + "▁ Camp", + "ri al", + "ria l", + "r ial", + "c b", + "▁T H", + "▁ TH", + "I B", + "os en", + "ose n", + "o sen", + "▁ ú", + "▁par ams", + "▁param s", + "▁para ms", + "▁ params", + "ign ment", + "ad ding", + "add ing", + "▁deg ree", + "▁ degree", + "Loc al", + "Lo cal", + "L ocal", + "O h", + "▁z ur", + "▁zu r", + "▁level s", + "▁lev els", + "C S", + "fin ished", + "finish ed", + "C ase", + "ri age", + "ria ge", + "Vec tor", + "V ector", + "▁s ea", + "▁se a", + "▁ sea", + "ant ic", + "anti c", + "▁Le ague", + "▁there fore", + "▁ther efore", + "On e", + "O ne", + "Re turn", + "Ret urn", + "R eturn", + "Acc ess", + "Ac cess", + "A ccess", + "va s", + "v as", + "▁о с", + "▁r at", + "▁ra t", + "▁ rat", + "Bi g", + "B ig", + "▁be havior", + "▁behav ior", + "▁behavi or", + "k r", + "▁un defined", + "▁und efined", + "▁ undefined", + "▁E s", + "▁ Es", + "▁appe ared", + "▁appear ed", + "el es", + "ele s", + "e les", + "▁W AR", + "▁WA R", + "▁ WAR", + "St at", + "S tat", + "▁Go ogle", + "▁ Google", + "▁c redit", + "▁cre dit", + "▁cr edit", + "▁cred it", + "▁F ile", + "▁Fil e", + "▁Fi le", + "▁ File", + "an ging", + "ang ing", + "ho use", + "hou se", + "h ouse", + "rom ise", + "ge nt", + "gen t", + "g ent", + "▁hab it", + "▁ha bit", + "▁soc iety", + "▁soci ety", + "▁societ y", + "▁enc our", + "▁p aint", + "▁pain t", + "▁pa int", + "pe t", + "p et", + "▁U K", + "▁ UK", + "aw s", + "a ws", + "on om", + "ono m", + "o nom", + "G l", + "}_ {\\", + "}_{ \\", + "} _{\\", + "el ess", + "ele ss", + "eles s", + "e less", + "em y", + "e my", + "▁C ong", + "▁Con g", + "▁Co ng", + "▁develop ed", + "▁im ages", + "▁image s", + "▁imag es", + "▁ images", + "▁ ö", + "▁f ont", + "▁fo nt", + "▁fon t", + "▁ font", + "cl ear", + "cle ar", + "c lear", + "gi n", + "g in", + "▁L ord", + "▁Lo rd", + "▁Lor d", + "▁trans port", + "▁ transport", + "▁: :", + "▁ ::", + "▁c up", + "▁cu p", + "▁ cup", + "ul ate", + "ula te", + "u late", + "▁D uring", + "▁Du ring", + "▁Dur ing", + "pr iv", + "p riv", + "▁ext rem", + "▁extr em", + "▁D i", + "▁ Di", + "▁d oubt", + "▁dou bt", + "▁doub t", + "P y", + "if ying", + "ify ing", + "sp lit", + "spl it", + "s plit", + "eg o", + "e go", + "git hub", + "g ithub", + "▁) ,", + "▁ ),", + "RO M", + "R OM", + "▁ch air", + "▁cha ir", + "▁ chair", + "▁t rade", + "▁tr ade", + "▁trad e", + "▁tra de", + "▁n icht", + "▁ni cht", + "▁nic ht", + "To p", + "T op", + "St ore", + "▁p arte", + "▁part e", + "▁par te", + "pro ject", + "ni a", + "n ia", + "▁в ід", + "▁ві д", + "wa r", + "w ar", + "▁Pro f", + "▁Pr of", + "▁c aught", + "Th read", + "ст ва", + "ств а", + "с тва", + "aut hor", + "auth or", + "▁d oll", + "▁do ll", + "▁dol l", + "▁h arm", + "▁ha rm", + "▁har m", + "▁ harm", + "▁G en", + "▁Ge n", + "▁ Gen", + "tr ee", + "tre e", + "t ree", + "et ime", + "eti me", + "e time", + "cf g", + "c fg", + "▁gu ys", + "▁guy s", + "▁Cal ifornia", + "▁G reen", + "▁Gr een", + "▁Gre en", + "▁Gree n", + "▁ Green", + "▁mov ement", + "▁move ment", + "▁mo vement", + "ie j", + "i ej", + "▁stat ement", + "▁state ment", + "▁ statement", + "▁se eing", + "▁see ing", + "▁h aven", + "▁have n", + "▁ha ven", + "▁hav en", + "vent ion", + "v ention", + "S L", + "ched ul", + "ie rt", + "ier t", + "i ert", + "▁pr imary", + "▁prim ary", + "▁pri mary", + "▁prima ry", + "▁ primary", + "▁c ivil", + "▁ci vil", + "▁civ il", + "ri an", + "ria n", + "r ian", + "▁b utton", + "▁but ton", + "▁butt on", + "▁ button", + "▁l ived", + "▁li ved", + "▁live d", + "▁liv ed", + "P ass", + "so r", + "s or", + "▁watch ing", + "▁wat ching", + "▁sk ills", + "▁skill s", + "te e", + "t ee", + "Le vel", + "L evel", + "▁sc ient", + "h s", + "▁a gre", + "▁ag re", + "ca t", + "c at", + "▁t end", + "▁te nd", + "▁ten d", + "▁M ill", + "▁Mil l", + "▁Mi ll", + "▁ Mill", + "▁C ap", + "▁Ca p", + "▁ Cap", + "OR D", + "O RD", + "gl e", + "g le", + "▁с во", + "» ,", + "▁a head", + "▁ah ead", + "ve st", + "ves t", + "v est", + "▁J ose", + "▁Jo se", + "▁Jos e", + "is cher", + "isch er", + "ische r", + "isc her", + "ș i", + "▁le aving", + "▁д ля", + "▁s outh", + "▁so uth", + "▁sou th", + "▁sout h", + "▁con sum", + "▁cons um", + "▁ consum", + "R ange", + "▁activ ities", + "Se c", + "S ec", + "▁s ales", + "▁sa les", + "▁sal es", + "▁sale s", + "▁f ix", + "▁fi x", + "▁ fix", + "▁j ed", + "▁je d", + "▁ jed", + "ru m", + "r um", + "ve ctor", + "vec tor", + "v ector", + "▁s pot", + "▁sp ot", + "▁spo t", + "▁ spot", + "▁man ufact", + "к т", + "or row", + "orr ow", + "si gn", + "sig n", + "s ign", + "▁col lege", + "▁colle ge", + "▁colleg e", + "▁d river", + "▁dr iver", + "▁dri ver", + "▁driv er", + "▁drive r", + "▁ driver", + "▁def initely", + "▁definit ely", + "▁s pend", + "▁sp end", + "▁spe nd", + "miss ion", + "m ission", + "з у", + "at ively", + "ative ly", + "ativ ely", + "b i", + "Call back", + "▁particular ly", + "▁particul arly", + "▁h ell", + "▁he ll", + "▁hel l", + "▁ hell", + "▁p ool", + "▁po ol", + "▁ pool", + "PR E", + "P RE", + "▁cle arly", + "▁clear ly", + "P T", + "ot hes", + "oth es", + "othe s", + "▁I d", + "▁ Id", + "Loc ation", + "L ocation", + "▁R un", + "▁Ru n", + "▁ Run", + "▁f ixed", + "▁fix ed", + "▁ fixed", + "▁H and", + "▁Ha nd", + "▁Han d", + "▁ Hand", + "ba l", + "b al", + "d ouble", + "C an", + "Om ega", + "▁chall eng", + "▁stand ing", + "▁stan ding", + "▁ standing", + "it en", + "ite n", + "i ten", + "▁me chan", + "▁d urch", + "▁dur ch", + "▁d ell", + "▁de ll", + "▁del l", + "▁rais ed", + "▁raise d", + "▁ra ised", + "▁we ak", + "▁ weak", + "▁D u", + "▁ Du", + "gr ad", + "gra d", + "g rad", + "▁sc ene", + "▁scen e", + "▁ scene", + "pos s", + "po ss", + "p oss", + "▁t on", + "▁to n", + "▁ ton", + "▁e arth", + "▁ear th", + "ul ations", + "ulation s", + "▁str ength", + "▁stre ngth", + "▁streng th", + "ak ed", + "ake d", + "a ked", + "▁re main", + "▁rem ain", + "▁B i", + "▁ Bi", + "▁custom er", + "▁cust omer", + "▁ customer", + "ran ge", + "r ange", + "▁inter ested", + "▁interest ed", + "ON E", + "O NE", + "▁c off", + "▁co ff", + "re quire", + "requ ire", + "▁On ly", + "▁ Only", + "▁W eb", + "▁We b", + "▁ Web", + "▁f arm", + "▁far m", + "▁fa rm", + "▁act ivity", + "▁activ ity", + "▁ activity", + "▁r out", + "▁ro ut", + "▁rou t", + "bl ing", + "b ling", + "S Y", + "▁Rich ard", + "▁Ric hard", + "▁R ef", + "▁Re f", + "▁ Ref", + "▁ко н", + "▁к он", + "▁ кон", + "▁j un", + "▁ju n", + "bo rn", + "bor n", + "b orn", + "ij n", + "Config uration", + "um an", + "uma n", + "u man", + "E E", + "▁mar ried", + "▁З а", + "▁ За", + "▁f at", + "▁fa t", + "▁k id", + "▁ki d", + "▁T ur", + "▁Tu r", + "▁ Tur", + "▁off ered", + "▁offer ed", + "ni c", + "n ic", + "▁B ig", + "▁Bi g", + "▁ Big", + "Ga mma", + "G amma", + "▁He alth", + "▁ Health", + "▁T R", + "▁ TR", + "▁s ię", + "▁si ę", + "▁const ruction", + "▁construct ion", + "▁constr uction", + "▁constru ction", + "▁ construction", + "▁Ch urch", + "▁B et", + "▁Be t", + "▁ Bet", + "bu s", + "b us", + "▁e arn", + "▁ear n", + "ri ct", + "ric t", + "r ict", + "▁п ра", + "▁пр а", + "▁ пра", + "▁br ain", + "▁bra in", + "▁f ra", + "▁fr a", + "▁O p", + "▁ Op", + "FI G", + "F IG", + "em a", + "e ma", + "▁Europe an", + "▁S aint", + "▁Sa int", + "▁ Saint", + "AR E", + "A RE", + "ur i", + "u ri", + "▁R iver", + "{ }", + "▁s itting", + "▁sit ting", + "▁under standing", + "▁understand ing", + "▁pl ans", + "▁plan s", + "rop ri", + "▁old er", + "▁ol der", + "▁ older", + "▁pres sure", + "▁press ure", + "Im pl", + "Imp l", + "▁pe ace", + "Conne ction", + "Conn ection", + "Connect ion", + "▁f i", + "▁ fi", + "ri ch", + "ric h", + "r ich", + "▁sh ut", + "ap ers", + "ape rs", + "aper s", + "a pers", + "Po rt", + "P ort", + "▁L ook", + "▁Lo ok", + "▁ Look", + "ri m", + "r im", + "au th", + "aut h", + "a uth", + "au to", + "aut o", + "a uto", + "▁high ly", + "▁un less", + "▁W al", + "▁Wa l", + "▁re n", + "▁r en", + "▁ ren", + "w s", + "▁c ore", + "▁co re", + "▁cor e", + "▁ core", + "( -", + "▁c lim", + "▁cl im", + "ru it", + "r uit", + "▁call back", + "▁ callback", + "he st", + "hes t", + "h est", + "▁Char les", + "▁Charl es", + "▁L ong", + "▁Lo ng", + "▁ Long", + "} =", + "ъ р", + "▁sh ared", + "▁share d", + "▁shar ed", + "▁sha red", + "▁ shared", + "ul ated", + "ula ted", + "ulate d", + "gorith m", + "▁H ome", + "▁Ho me", + "▁Hom e", + "▁ Home", + "▁vill age", + "▁vil lage", + "ee s", + "e es", + "s v", + "▁rest aur", + "re y", + "r ey", + "▁C ast", + "▁Cas t", + "▁Ca st", + "▁ Cast", + "▁P erson", + "▁Per son", + "▁Pers on", + "▁ Person", + "ки й", + "▁organ iz", + "▁R ad", + "▁Ra d", + "▁ Rad", + "pon ents", + "ponent s", + "▁wer den", + "▁werd en", + "▁b ow", + "▁bo w", + "▁ bow", + "se n", + "s en", + "am i", + "a mi", + "Inter face", + "▁b asis", + "▁bas is", + "▁ba sis", + "▁Comp any", + "▁Compan y", + "▁ Company", + "er nel", + "ern el", + "erne l", + "it u", + "i tu", + "Has h", + "Ha sh", + "H ash", + "▁a an", + "▁ х", + "▁s mile", + "▁sm ile", + "x ml", + "▁s cen", + "▁sc en", + "am m", + "a mm", + "to ol", + "too l", + "t ool", + "ar ia", + "ari a", + "a ria", + "▁acc ur", + "▁ac cur", + "▁ accur", + "set tings", + "setting s", + "▁Jes us", + "ac ement", + "ace ment", + "po wer", + "pow er", + "p ower", + "( !", + "▁c alls", + "▁call s", + "▁cal ls", + "▁ calls", + "▁bas ic", + "▁ basic", + "▁set tings", + "▁sett ings", + "▁setting s", + "▁ settings", + "ri pt", + "rip t", + "r ipt", + "po ol", + "p ool", + "ct ors", + "ctor s", + "▁Found ation", + "▁ Foundation", + "▁we ap", + "KE Y", + "K EY", + "fo ot", + "foo t", + "f oot", + "▁r adio", + "▁rad io", + "▁radi o", + "▁ radio", + "▁hel ped", + "▁help ed", + "ma nn", + "man n", + "m ann", + "▁j ump", + "▁ju mp", + "▁t ick", + "▁ti ck", + "▁ tick", + "▁gr owing", + "▁grow ing", + "▁gro wing", + "at en", + "ate n", + "a ten", + "re al", + "rea l", + "▁incre asing", + "Dev ice", + "var epsilon", + "vare psilon", + "▁s ets", + "▁se ts", + "▁set s", + "▁ sets", + "▁adv ant", + "Op en", + "O pen", + "▁re asons", + "▁reason s", + "▁sup posed", + "▁supp osed", + "▁suppose d", + "oe s", + "o es", + "ed e", + "e de", + "te en", + "tee n", + "t een", + "if def", + "▁de lete", + "▁del ete", + "▁delet e", + "▁ delete", + "▁& =", + "▁ &=", + "▁B ill", + "▁Bi ll", + "▁Bil l", + "▁ Bill", + "▁a im", + "▁ai m", + "▁ aim", + "▁O k", + "▁ Ok", + "▁A v", + "▁ Av", + "re ci", + "rec i", + "ac ks", + "ack s", + "a cks", + "is te", + "ist e", + "i ste", + "Pro perties", + "▁t mp", + "▁tm p", + "▁ tmp", + "▁d ei", + "▁de i", + "PE R", + "P ER", + "D C", + "st a", + "s ta", + "ни и", + "▁lim ited", + "▁limit ed", + "▁ limited", + "▁great er", + "▁gre ater", + "de scription", + "des cription", + "or i", + "o ri", + "ain ts", + "aint s", + "▁h y", + "▁ hy", + "▁M el", + "▁Me l", + "▁C H", + "▁ CH", + "con s", + "co ns", + "c ons", + "▁sur round", + "▁W ho", + "▁Wh o", + "▁ Who", + "ar c", + "a rc", + "▁te lev", + "▁tele v", + "▁tel ev", + "it ution", + "itut ion", + "▁e qual", + "▁equ al", + "▁eq ual", + "▁ equal", + "к і", + "▁Is rael", + "ä h", + "▁C aption", + "▁Capt ion", + "▁Ca ption", + "▁ex erc", + "em por", + "emp or", + "▁+ +", + "▁ ++", + "▁l ib", + "▁li b", + "▁ lib", + "ma ke", + "m ake", + "▁M A", + "▁ MA", + "co py", + "cop y", + "c opy", + "f riend", + "▁ко то", + "▁ кото", + "▁dam age", + "▁\\ ,", + "▁ \\,", + "od ed", + "ode d", + "o ded", + "▁n one", + "▁no ne", + "▁non e", + "▁ none", + "▁ev alu", + "▁eval u", + "▁ evalu", + "st on", + "sto n", + "s ton", + "> ,", + "FO R", + "F OR", + "▁n orm", + "▁no rm", + "▁nor m", + "▁ norm", + "ap pe", + "app e", + "a ppe", + "S ession", + "▁ad ult", + "▁h ospital", + "▁hosp ital", + "▁recomm end", + "pro perty", + "ste in", + "fin al", + "fi nal", + "f inal", + "▁n u", + "▁ nu", + "se cond", + "sec ond", + "▁a spect", + "▁as pect", + "▁asp ect", + "\") ]", + "\" )]", + "же н", + "ж ен", + "am ento", + "ament o", + "amen to", + "▁r ac", + "▁ra c", + "▁ rac", + "sa ve", + "s ave", + "▁foot ball", + "A b", + "un gs", + "ung s", + "ab il", + "abi l", + "a bil", + "▁Ar ch", + "▁Arc h", + "▁ Arch", + "sys tem", + "s ystem", + "hi st", + "his t", + "h ist", + "▁l uck", + "▁lu ck", + "▁luc k", + "re nder", + "ren der", + "rend er", + "r ender", + "▁se in", + "▁sei n", + "ion i", + "io ni", + "i oni", + "▁r ot", + "▁ro t", + "▁ rot", + "▁cor ner", + "▁corn er", + "▁app ropri", + "▁ap propri", + "▁ appropri", + "▁Soft ware", + "▁t ele", + "▁te le", + "▁tel e", + "▁ tele", + "De lete", + "Dele te", + "Del ete", + "▁Acc ording", + "▁pr ison", + "▁pri son", + "▁ prison", + "▁l ic", + "▁li c", + "▁ lic", + "▁м и", + "▁ ми", + "ter m", + "te rm", + "t erm", + "se ts", + "set s", + "s ets", + "▁v el", + "▁ve l", + "▁ vel", + "▁r ank", + "▁ran k", + "▁ rank", + "▁ex isting", + "▁exist ing", + "▁ existing", + "▁V ir", + "▁Vi r", + "▁t rip", + "▁tr ip", + "▁tri p", + "▁м у", + "▁ му", + "av ax", + "ava x", + "▁r is", + "▁ri s", + "▁ ris", + "▁def ine", + "▁defin e", + "▁ define", + "▁he at", + "ca r", + "c ar", + "▁con vert", + "▁conv ert", + "▁conver t", + "▁conve rt", + "▁ convert", + "em ail", + "ema il", + "e mail", + "▁U nder", + "▁Un der", + "▁Und er", + "▁ Under", + "▁ Ш", + "▁G rand", + "▁Gr and", + "▁Gran d", + "▁Gra nd", + "▁ex ists", + "▁exist s", + "▁ exists", + "sy s", + "s ys", + "ef f", + "e ff", + "▁T op", + "▁To p", + "▁ Top", + "▁ č", + "▁t empor", + "▁tem por", + "▁temp or", + "▁tempo r", + "▁arg uments", + "▁argument s", + "▁ arguments", + "▁support ed", + "▁supp orted", + "▁ supported", + "en sed", + "ens ed", + "ense d", + "▁Franc is", + "▁co ord", + "▁ coord", + "▁achie ve", + "▁N ame", + "▁Na me", + "▁Nam e", + "▁ Name", + "▁J ahr", + "▁Jah r", + "▁Ja hr", + "▁G i", + "sh e", + "s he", + "▁D ev", + "▁De v", + "▁ Dev", + "▁a lla", + "▁al la", + "▁all a", + "▁ alla", + "▁W IT", + "ag ment", + "c ustom", + "al ls", + "all s", + "& &", + "W E", + "▁h olding", + "▁hold ing", + "▁hol ding", + "pro totype", + "proto type", + "prot otype", + "▁f ing", + "▁fin g", + "▁fi ng", + "▁b ag", + "▁ba g", + "▁ bag", + "▁Par ty", + "▁Part y", + "st ack", + "sta ck", + "▁econom ic", + "▁G al", + "▁Ga l", + "id ents", + "ident s", + "iden ts", + "▁J un", + "▁Ju n", + "▁sh owed", + "▁show ed", + "os h", + "o sh", + "▁B ay", + "▁Ba y", + "▁ Bay", + "ma il", + "m ail", + "▁S O", + "▁ SO", + "▁\" <", + "graph ics", + "▁f u", + "▁ fu", + "cl ick", + "cli ck", + "c lick", + "▁b attle", + "▁batt le", + "▁bat tle", + "{ {", + "▁E vent", + "▁Even t", + "▁Ev ent", + "▁Eve nt", + "▁ Event", + "ri or", + "rio r", + "r ior", + "ch aft", + "cha ft", + "▁f avorite", + "▁favor ite", + "us ive", + "sup port", + "supp ort", + "s upport", + "b m", + "K ind", + "▁saf ety", + "▁safe ty", + "▁E nt", + "▁En t", + "▁ Ent", + "cu p", + "c up", + "▁Austral ia", + "▁dest roy", + "▁destro y", + "▁ destroy", + "▁organ ization", + "▁organiz ation", + "id en", + "ide n", + "i den", + "######## ########", + "de c", + "d ec", + "▁z a", + "▁ za", + "▁s even", + "▁se ven", + "▁ seven", + "ar ely", + "are ly", + "arel y", + "▁f lag", + "▁fl ag", + "▁ flag", + "Di r", + "D ir", + "▁C arl", + "▁Car l", + "▁Ca rl", + "▁do ctor", + "▁doc tor", + "▁var iety", + "▁vari ety", + "▁L in", + "▁Li n", + "▁ Lin", + "▁t om", + "▁to m", + "▁ tom", + "^{ (", + "^ {(", + "B o", + "an tes", + "ant es", + "ante s", + "▁m ine", + "▁min e", + "▁mi ne", + "▁ mine", + "▁M it", + "▁Mi t", + "▁de scribe", + "▁desc ribe", + "▁describ e", + "Ar gs", + "Arg s", + "L S", + "AP I", + "A PI", + "▁L uc", + "▁Lu c", + "▁ Luc", + "ph one", + "▁sc ience", + "▁ science", + "▁O per", + "▁Op er", + "▁ Oper", + "Ne xt", + "N ext", + "▁invest ig", + "▁demon str", + "▁G overn", + "▁Go vern", + "▁object s", + "▁ objects", + "▁Lou is", + "▁Lo uis", + "▁Return s", + "▁ Returns", + "▁h an", + "▁ha n", + "▁ han", + "na m", + "n am", + "▁com me", + "▁comm e", + "▁pres ence", + "▁p el", + "▁pe l", + "▁ pel", + "▁det ect", + "▁ detect", + ") =", + "▁Ch inese", + "▁r ich", + "▁ri ch", + "▁ric h", + "▁ rich", + "▁class es", + "▁classe s", + "▁clas ses", + "▁ classes", + "▁exp and", + "▁ expand", + "▁D om", + "▁Do m", + "▁ Dom", + "▁D ec", + "▁De c", + "▁ Dec", + "s n", + "pe ed", + "p eed", + "▁J im", + "▁Ji m", + "sh ould", + "▁Sm ith", + "▁p ages", + "▁page s", + "▁pa ges", + "▁pag es", + "▁ pages", + "▁Je an", + "ri cs", + "ric s", + "r ics", + "▁S und", + "▁Su nd", + "▁Sun d", + "ad s", + "a ds", + "▁The ir", + "un icip", + "uni cip", + "unic ip", + "в у", + "▁down load", + "▁ download", + "▁st ress", + "▁str ess", + "▁stre ss", + "▁P et", + "▁Pe t", + "▁ Pet", + "me nu", + "men u", + "m enu", + "re me", + "rem e", + "r eme", + "▁com pared", + "▁comp ared", + "▁compar ed", + "▁compare d", + "St e", + "S te", + "IN D", + "I ND", + "cont ainer", + "▁Ind ian", + "▁India n", + "or en", + "ore n", + "o ren", + "▁s es", + "▁se s", + "▁ ses", + "▁W he", + "▁Wh e", + "▁ Whe", + "▁r oku", + "▁ro ku", + "▁estab lished", + "▁establish ed", + "▁gener ally", + "▁general ly", + "▁f le", + "▁fl e", + "__ (", + "_ _(", + "=\" +", + "= \"+", + "V ar", + "▁M ake", + "▁Ma ke", + "▁Mak e", + "▁ Make", + "▁rem oved", + "▁remove d", + "▁ removed", + "z z", + "ü n", + "▁m ix", + "▁mi x", + "▁ mix", + "er k", + "iat ion", + "i ation", + "ou ter", + "out er", + "oute r", + "o uter", + "S K", + "▁be comes", + "▁bec omes", + "▁become s", + "▁H all", + "▁Ha ll", + "▁Hal l", + "sc ious", + "▁w atched", + "▁watch ed", + "▁wat ched", + "▁g ather", + "▁ga ther", + "▁ gather", + "▁Res ult", + "▁ Result", + "pro of", + "pa y", + "p ay", + "▁produ ced", + "▁produce d", + "▁prod uced", + "▁| =", + "▁b order", + "▁bord er", + "▁bor der", + "▁ border", + "▁d in", + "▁di n", + "▁s cript", + "▁sc ript", + "▁scr ipt", + "▁ script", + "▁a ctions", + "▁act ions", + "▁action s", + "▁ actions", + "▁m as", + "▁ma s", + "▁ mas", + "щ а", + "oot h", + "oo th", + "o oth", + "▁Te chn", + "▁Tech n", + "Js on", + "J son", + "▁f illed", + "▁fil led", + "▁fill ed", + "▁ filled", + "де н", + "д ен", + "und le", + "ст у", + "с ту", + "To ol", + "Too l", + "T ool", + "▁k ing", + "▁ki ng", + "▁kin g", + "▁ king", + "▁v en", + "▁ve n", + "▁ ven", + "st ra", + "str a", + "s tra", + "▁pre dict", + "▁pred ict", + "▁ predict", + "▁l ui", + "▁lu i", + "▁WAR RAN", + "▁F un", + "▁Fu n", + "▁ Fun", + "Sc ript", + "S cript", + "▁power ful", + "▁l ose", + "▁lo se", + "▁los e", + "at ically", + "atic ally", + "▁d aily", + "▁da ily", + "▁dai ly", + "▁r ing", + "▁ri ng", + "▁ ring", + "▁ar rived", + "▁arriv ed", + "▁arr ived", + "▁arrive d", + "St ack", + "sc ope", + "s cope", + "▁B ack", + "▁Ba ck", + "▁ Back", + "el ij", + "eli j", + "e lij", + "▁z e", + "▁ ze", + "ke ys", + "key s", + "{ \"", + "VI D", + "V ID", + "▁l icense", + "▁lic ense", + "▁ license", + "wh at", + "w hat", + "▁pro ced", + "▁proc ed", + "ra nt", + "ran t", + "r ant", + "est ival", + "ag ram", + "agr am", + "agra m", + "a gram", + "▁L O", + "▁ LO", + "▁Hen ry", + "▁fl ags", + "▁flag s", + "▁ flags", + "Do wn", + "D own", + "scri ption", + "script ion", + "s cription", + "▁famil ies", + "▁familie s", + "is se", + "iss e", + "bo ur", + "b our", + "▁B ur", + "▁Bu r", + "— \"", + "▁b rief", + "▁br ief", + "▁ brief", + "▁cre ating", + "▁creat ing", + "▁cl ients", + "▁client s", + "ran gle", + "r angle", + "▁amaz ing", + "▁s ind", + "▁si nd", + "▁sin d", + "▁cover ed", + "▁cov ered", + "▁ covered", + "We ll", + "W ell", + "ст е", + "с те", + "то р", + "т ор", + "▁B as", + "▁Ba s", + "▁ Bas", + "to tal", + "tot al", + "t otal", + "▁I nit", + "▁In it", + "▁ Init", + "▁s and", + "▁sa nd", + "▁san d", + "Un it", + "U nit", + "▁mur der", + "▁b right", + "▁br ight", + "▁brig ht", + "▁t rav", + "▁tr av", + "▁tra v", + "ic ans", + "ica ns", + "ican s", + "▁att ribute", + "▁attribut e", + "▁ attribute", + "f c", + "▁pl aced", + "▁place d", + "▁plac ed", + "ES T", + "E ST", + "Var i", + "V ari", + "▁c os", + "▁co s", + "▁ cos", + "▁at tract", + "▁att ract", + "▁attr act", + "▁attra ct", + "an el", + "ane l", + "a nel", + "}) .", + "} ).", + "by tes", + "byte s", + "▁p arse", + "▁par se", + "▁ parse", + "▁be long", + "▁bel ong", + "B N", + "▁S ol", + "▁So l", + "P o", + "` ,", + "▁c alling", + "▁call ing", + "▁cal ling", + "▁? >", + "▁ ?>", + "▁it er", + "▁i ter", + "▁ iter", + "▁u rl", + "▁ur l", + "▁ url", + "▁ev ening", + "▁even ing", + "re ek", + "ree k", + "▁hon est", + "▁direct or", + "▁dire ctor", + "▁dir ector", + "R C", + "▁s olid", + "▁sol id", + "▁ solid", + "▁ph il", + "ie ne", + "ien e", + "i ene", + "FA ULT", + "co pe", + "cop e", + "c ope", + "▁Hist ory", + "▁Histor y", + "▁Hi story", + "▁ History", + "▁Te am", + "▁ Team", + "ree dom", + "reed om", + "▁r u", + "▁ ru", + "U B", + "▁w orse", + "▁wor se", + "im o", + "i mo", + "Ma t", + "M at", + "▁M ex", + "▁Me x", + "ac tor", + "act or", + "a ctor", + "▁v or", + "▁vo r", + "▁ vor", + "ть ся", + "▁exper iment", + "▁experi ment", + "▁P lay", + "▁Pl ay", + "▁ Play", + "▁An other", + "▁happ ens", + "▁happen s", + "ua n", + "u an", + "▁pat ients", + "▁patient s", + "▁re nd", + "▁r end", + "▁ren d", + "▁ rend", + "▁M o", + "▁ Mo", + "▁T ex", + "▁Te x", + "▁ Tex", + "▁w ed", + "▁we d", + "▁ wed", + "t n", + "in sert", + "ins ert", + "▁п а", + "▁ па", + "▁an ti", + "▁ant i", + "▁ anti", + "Mat ch", + "M atch", + "ampions hip", + "ampion ship", + "▁for ces", + "▁force s", + "▁H ot", + "▁Ho t", + "▁ Hot", + "▁ph ase", + "▁ phase", + "▁t emplate", + "▁templ ate", + "▁temp late", + "▁ template", + "st op", + "sto p", + "s top", + "ic ated", + "ica ted", + "icate d", + "▁man aged", + "▁manage d", + "▁ managed", + "wa it", + "w ait", + "▁* (", + "▁ *(", + "G B", + "▁app oint", + "▁ap point", + "▁ appoint", + "ł a", + "▁s tick", + "▁st ick", + "▁ stick", + "▁F OR", + "▁FO R", + "▁ FOR", + "▁V is", + "▁Vi s", + "▁ Vis", + "to r", + "t or", + "▁p ř", + "qu est", + "que st", + "ques t", + "q uest", + "us es", + "use s", + "u ses", + "\"); \r", + "\") ;\r", + "\" );\r", + "▁sudden ly", + "▁sud denly", + "é c", + "N D", + "ur op", + "uro p", + "u rop", + "ре д", + "▁ins urance", + "ac cess", + "acc ess", + "a ccess", + "un finished", + "▁t amb", + "▁ta mb", + "▁tam b", + "▁s ac", + "▁sa c", + "▁C ourt", + "▁Co urt", + "▁Cour t", + "▁Cou rt", + "▁miss ing", + "▁mis sing", + "▁ missing", + "▁W here", + "▁Wh ere", + "▁Whe re", + "▁ Where", + "▁S um", + "▁Su m", + "▁ Sum", + "}^ {\\", + "}^{ \\", + "} ^{\\", + "▁s ua", + "▁su a", + "_ ,", + "▁th ick", + "▁Tr ump", + "▁Tru mp", + "▁oper ations", + "▁operation s", + "▁ operations", + "F S", + "▁de ux", + "d z", + "Temp late", + "T emplate", + "▁\" /", + "▁o dd", + "▁od d", + "▁ odd", + "▁re ality", + "▁real ity", + "▁te ams", + "▁team s", + "▁tea ms", + "▁c er", + "▁ce r", + "▁ cer", + "om a", + "o ma", + "▁ și", + "▁cl oud", + "▁clo ud", + "▁ cloud", + "▁Dep artment", + "N e", + "▁requ ires", + "▁require s", + "it ems", + "ite ms", + "item s", + "▁I II", + "▁II I", + "▁ III", + "right arrow", + ")- >", + ") ->", + "▁w riter", + "▁wr iter", + "▁writ er", + "▁write r", + "▁ writer", + "re place", + "rep lace", + "▁t hr", + "▁th r", + "je n", + "j en", + "▁o t", + "▁ ot", + "▁occ up", + "▁oc cup", + "▁ occup", + "▁event ually", + "▁M ath", + "▁Mat h", + "▁Ma th", + "▁ Math", + "▁con serv", + "▁cons erv", + "▁conse rv", + "am er", + "ame r", + "a mer", + "▁F ort", + "▁For t", + "▁Fo rt", + "▁d ry", + "▁dr y", + "▁sex ual", + "▁co sts", + "▁cost s", + "▁cos ts", + "▁for ms", + "▁form s", + "▁ forms", + "▁V ict", + "▁Vi ct", + "▁Vic t", + "PA R", + "P AR", + "frame work", + "▁д и", + "▁ ди", + "Oper ation", + "з на", + "wh ich", + "▁t ight", + "▁ti ght", + "In valid", + "▁part ner", + "▁п ред", + "▁пре д", + "▁th ank", + "▁than k", + "▁gu ard", + "▁ guard", + "he m", + "h em", + "Bo dy", + "B ody", + "▁e mot", + "▁em ot", + "I X", + "fa st", + "fas t", + "f ast", + "щ о", + "ñ o", + "ni ght", + "n ight", + "▁S ci", + "▁Sc i", + "ни ка", + "ник а", + "▁T O", + "▁ TO", + "▁individ uals", + "▁individual s", + "сс и", + "с си", + "}) ,", + "} ),", + "F alse", + "(\" %", + "( \"%", + "▁op tim", + "▁opt im", + "▁ optim", + "▁- ->", + "▁-- >", + "▁ -->", + "▁f actor", + "▁fact or", + "▁fac tor", + "▁fa ctor", + "▁ factor", + "▁sm aller", + "▁small er", + "▁con tain", + "▁cont ain", + "sp ect", + "spec t", + "spe ct", + "s pect", + "Eng ine", + "▁ann ounced", + "▁announ ced", + "▁announce d", + "▁Dem ocr", + "▁r ob", + "▁ro b", + "▁ rob", + "▁f lat", + "▁fl at", + "▁ flat", + "os oph", + "oso ph", + "Se arch", + "S earch", + "ah l", + "a hl", + "▁Ex ception", + "▁Except ion", + "▁ Exception", + "▁O l", + "equ als", + "eq uals", + "equal s", + "▁un ter", + "▁unt er", + "▁ unter", + "sh ape", + "sha pe", + "N S", + "Ob j", + "▁spec ies", + "▁spe cies", + "we ight", + "wei ght", + "w eight", + "yo u", + "y ou", + "▁e ste", + "▁est e", + "▁es te", + "▁ este", + "▁V iew", + "▁Vi ew", + "▁ View", + "▁m ission", + "▁miss ion", + "▁ mission", + "▁j ournal", + "▁jour nal", + "▁ journal", + "Value s", + "Val ues", + "▁ein em", + "▁eine m", + "is mo", + "ism o", + "▁project s", + "▁ projects", + "▁D as", + "▁Da s", + "ri ble", + "rib le", + "r ible", + "▁s erve", + "▁ser ve", + "▁serv e", + "▁ serve", + "▁op ening", + "▁open ing", + "▁h ur", + "▁program s", + "▁U SA", + "▁US A", + "▁ USA", + "il iar", + "ili ar", + "ilia r", + "id os", + "ido s", + "B r", + "est amp", + "esta mp", + "▁t ools", + "▁to ols", + "▁too ls", + "▁tool s", + "▁ tools", + "an ner", + "ann er", + "anne r", + "R T", + "▁St art", + "▁Star t", + "▁Sta rt", + "▁ Start", + "▁b ath", + "▁bat h", + "▁ba th", + "▁coff ee", + "or ter", + "ort er", + "orte r", + "in ternal", + "inter nal", + "intern al", + "file s", + "fil es", + "fi les", + "f iles", + "IN VAL", + "ak o", + "a ko", + "d t", + "▁Se cond", + "▁Sec ond", + "▁ Second", + "▁al loc", + "▁all oc", + "▁ alloc", + "▁en ded", + "▁end ed", + "▁ende d", + "▁ ended", + "ac ional", + "aci onal", + "acion al", + "acio nal", + "▁man ager", + "▁manage r", + "▁ manager", + "▁S un", + "▁Su n", + "▁ Sun", + "ag g", + "a gg", + "▁le ader", + "▁lead er", + "ol ved", + "olve d", + "olv ed", + "▁ч то", + "▁trad itional", + "▁tradition al", + "sh ot", + "s hot", + "ru p", + "r up", + "C F", + "▁E ach", + "▁ Each", + "w r", + "▁S om", + "▁So m", + "▁ Som", + "▁material s", + "▁mater ials", + "▁m sg", + "▁ms g", + "▁ msg", + "▁s yn", + "▁sy n", + "▁ syn", + "▁produ ce", + "▁prod uce", + "▁st orage", + "▁stor age", + "▁sto rage", + "▁ storage", + "sub section", + "▁S ie", + "▁Si e", + "▁I P", + "▁ IP", + "CE SS", + "▁w a", + "▁ wa", + "Re cord", + "Rec ord", + "▁mark eting", + "▁market ing", + "pl et", + "ple t", + "p let", + "D ialog", + "▁mention ed", + "▁ment ioned", + "▁N a", + "▁ Na", + "▁Un ion", + "▁ Union", + "▁A PI", + "▁AP I", + "▁ API", + "▁neg ative", + "▁ negative", + "tx t", + "t xt", + "▁eas ier", + "le gal", + "leg al", + "De p", + "D ep", + "▁no vel", + "▁nov el", + "▁nove l", + "eu r", + "e ur", + "ac ió", + "aci ó", + "a ció", + "▁B ud", + "▁Bu d", + "▁c arry", + "▁car ry", + "sch aft", + "s chaft", + "▁br oken", + "▁bro ken", + "▁broke n", + "▁t rees", + "▁tr ees", + "▁tre es", + "▁tree s", + ">( );", + ">() ;", + "> ();", + "▁e mb", + "▁em b", + "▁ emb", + "ie der", + "ied er", + "i eder", + "▁r oute", + "▁ro ute", + "▁rout e", + "▁rou te", + "▁ route", + "ik el", + "ike l", + "i kel", + "▁l isten", + "▁li sten", + "▁list en", + "▁ listen", + "ash ion", + "ashi on", + "▁M rs", + "▁Mr s", + "▁equip ment", + "ag ger", + "agg er", + "▁T hus", + "▁Th us", + "▁mat rix", + "▁ matrix", + "al la", + "all a", + "a lla", + "▁T our", + "▁To ur", + "▁con versation", + "▁convers ation", + "Mo n", + "M on", + "our nal", + "▁min ute", + "▁minut e", + "▁ minute", + "A m", + "Ap i", + "A pi", + "▁for get", + "▁forg et", + "M e", + "lev ant", + "te mp", + "tem p", + "t emp", + "▁t elling", + "▁tell ing", + "▁tel ling", + "mo ve", + "mov e", + "m ove", + "▁in dependent", + "▁independ ent", + "to String", + "ed it", + "edi t", + "e dit", + "▁J ac", + "▁Ja c", + "az z", + "a zz", + "re act", + "rea ct", + "▁c in", + "▁ci n", + "▁ cin", + "▁P rov", + "▁Pro v", + "▁Pr ov", + "▁ Prov", + "is ted", + "ist ed", + "iste d", + "i sted", + "▁h ash", + "▁has h", + "▁ha sh", + "▁ hash", + "on na", + "ik i", + "i ki", + "▁gener ated", + "▁generate d", + "▁gene rated", + "▁ generated", + "Re nder", + "Rend er", + "R ender", + "▁psy ch", + "▁ps ych", + "na v", + "n av", + "▁en tr", + "▁ent r", + "▁ entr", + "п ра", + "r x", + "AT H", + "A TH", + "▁ass ume", + "▁assum e", + "Tr ee", + "T ree", + "semb ly", + "sembl y", + "▁M att", + "▁Mat t", + "▁Ma tt", + "ca ption", + "c aption", + "▁s olutions", + "▁solution s", + "▁fa ith", + "▁fait h", + "▁dig ital", + "▁digit al", + "▁ex cell", + "▁exc ell", + "▁V ersion", + "▁Vers ion", + "▁ Version", + "De bug", + "D ebug", + "▁ж и", + "▁ жи", + "▁car ried", + "re set", + "res et", + "▁slow ly", + "an cing", + "anc ing", + "▁own er", + "▁ owner", + "▁T er", + "▁Te r", + "▁D id", + "▁Di d", + "▁ Did", + "▁g est", + "▁ge st", + "▁ges t", + "▁ gest", + "▁é té", + "▁ét é", + "▁ été", + "▁pro of", + "▁ proof", + "F ont", + "▁n ob", + "▁no b", + "▁ nob", + "C o", + "▁G NU", + "▁l iber", + "▁li ber", + "▁lib er", + "it ness", + "▁h ij", + "▁hi j", + "▁v ert", + "▁ver t", + "▁ve rt", + "▁ vert", + "ш а", + "FL AG", + "ME NT", + "M ENT", + "▁S on", + "▁So n", + "Mu lt", + "M ult", + "▁d istrict", + "▁di strict", + "▁dist rict", + "conne ct", + "conn ect", + "ject ion", + "je ction", + "j ection", + "ly mp", + "▁real ized", + "▁realize d", + "▁realiz ed", + "mo s", + "m os", + "y e", + "▁re nder", + "▁r ender", + "▁ren der", + "▁rend er", + "▁ render", + "ri o", + "r io", + "▁inter pret", + "▁ interpret", + "▁slight ly", + "fi x", + "f ix", + "▁stud ies", + "▁r id", + "▁ri d", + "▁ rid", + "at re", + "atr e", + "a tre", + "▁benef its", + "▁benefit s", + "▁F ace", + "▁Fa ce", + "▁Fac e", + "▁ Face", + "iv ery", + "ive ry", + "iver y", + "i very", + "ри я", + "doc ument", + "d ocument", + "▁as king", + "▁ask ing", + "La st", + "L ast", + "ar ante", + "ara nte", + "aran te", + "▁Mart in", + "▁E ll", + "▁El l", + "▁v ector", + "▁ve ctor", + "▁vec tor", + "▁ vector", + "▁for ced", + "▁force d", + "▁ forced", + "о ло", + "P H", + "W R", + "▁K l", + "▁s ky", + "▁sk y", + "▁ sky", + "▁str ategy", + "▁strateg y", + "▁strat egy", + "oc ked", + "ock ed", + "▁ne ck", + "ś ci", + "O UT", + ")) ,", + ") ),", + "C ustom", + "▁w ie", + "▁ wie", + "▁s weet", + "▁swe et", + "▁t emp", + "▁te mp", + "▁tem p", + "▁ temp", + "▁fore ign", + "▁h all", + "▁ha ll", + "▁hal l", + "▁ hall", + "as tr", + "ast r", + "a str", + "As s", + "A ss", + "MO DE", + "MOD E", + "▁max imum", + "▁maxim um", + "an nels", + "ann els", + "annel s", + "anne ls", + "▁t ip", + "▁ti p", + "▁ tip", + "▁second s", + "▁sec onds", + "▁ seconds", + "▁st ack", + "▁sta ck", + "▁ stack", + "ig a", + "i ga", + "▁r aise", + "▁rais e", + "▁ra ise", + "▁ raise", + "en able", + "ena ble", + "oi r", + "o ir", + "▁s oul", + "▁so ul", + "▁sou l", + "K e", + ")$ .", + ") $.", + "▁T im", + "▁Ti m", + "▁ Tim", + "AL SE", + "is er", + "ise r", + "i ser", + "cont in", + "be l", + "b el", + "▁m ad", + "▁ma d", + "▁ mad", + "lic hen", + "li chen", + "lich en", + "liche n", + "l ichen", + "ab e", + "a be", + "sa fe", + "▁con cent", + "▁conc ent", + "▁conce nt", + "bo und", + "b ound", + "▁R equ", + "▁Re qu", + "▁ Requ", + "sw itch", + "▁st one", + "▁sto ne", + "▁ stone", + "▁trans l", + "▁ transl", + "▁v ac", + "▁va c", + "an don", + "and on", + "ando n", + "▁F ore", + "▁For e", + "▁Fo re", + "▁ Fore", + "▁s ounds", + "▁sound s", + "▁P op", + "▁Po p", + "▁ Pop", + "▁H T", + "▁ HT", + "li a", + "l ia", + "en ter", + "ent er", + "ente r", + "▁hel ps", + "▁help s", + "ed y", + "e dy", + "ст вен", + "ств ен", + "стве н", + "an ted", + "ant ed", + "ante d", + "▁I ts", + "▁It s", + "▁St ep", + "▁Ste p", + "▁ Step", + "I con", + "▁EX PECT", + "▁ EXPECT", + "ial ized", + "ialize d", + "Pos t", + "Po st", + "P ost", + "az e", + "a ze", + "▁Car ol", + "▁Ca rol", + "▁re q", + "▁r eq", + "▁ req", + "▁crit ical", + "▁critic al", + "D S", + "▁se at", + "▁sea t", + "ap ed", + "ape d", + "a ped", + "▁up per", + "▁upp er", + "▁ upper", + "▁S y", + "▁ Sy", + "▁ex plain", + "▁expl ain", + "▁' ./", + "▁'. /", + "ut ils", + "util s", + "uti ls", + "poss ible", + "▁d ont", + "▁do nt", + "▁don t", + "H ost", + "▁appro xim", + "▁approx im", + "As ync", + "A sync", + "▁g rab", + "▁gr ab", + "▁gra b", + "▁s ources", + "▁source s", + "▁sour ces", + "▁ sources", + "▁M os", + "▁Mo s", + "▁Germ any", + "▁German y", + "▁Ger many", + "▁r ub", + "▁ru b", + "▁ rub", + "CH AN", + "▁r ain", + "▁ra in", + "▁tr uly", + "▁join ed", + "▁jo ined", + "▁< ?", + "▁ ", + "_ ->", + "ag nost", + "agn ost", + "▁pro posed", + "▁prop osed", + "▁propos ed", + "▁propose d", + "▁G ame", + "▁Ga me", + "▁Gam e", + "▁ Game", + "▁eff orts", + "▁effort s", + "в я", + "t c", + "с к", + "▁int ent", + "▁inte nt", + "▁ intent", + "▁B re", + "▁Br e", + "is c", + "i sc", + "▁pro test", + "▁prote st", + "▁prot est", + "▁h olds", + "▁hold s", + "▁hol ds", + "▁ holds", + "om etry", + "ome try", + "omet ry", + "o metry", + "▁H ave", + "▁Ha ve", + "▁Hav e", + "▁ Have", + "▁de tail", + "▁det ail", + "▁ detail", + "▁WIT HOUT", + "▁WITH OUT", + "ye r", + "y er", + "▁K on", + "▁Ko n", + "▁not iced", + "▁notice d", + "▁require ments", + "▁requirement s", + "DE BUG", + "ki ns", + "kin s", + "k ins", + "▁S pan", + "▁Sp an", + "▁ Span", + "▁c ars", + "▁car s", + "▁ca rs", + "me ta", + "met a", + "m eta", + "▁k il", + "▁ki l", + "▁ kil", + "▁B ron", + "▁Br on", + "▁Bro n", + "▁experience d", + "▁experi enced", + "▁re mind", + "▁rem ind", + "our se", + "ours e", + "▁W estern", + "▁West ern", + "▁Wes tern", + "ter ed", + "te red", + "tere d", + "t ered", + "▁dev ices", + "▁device s", + "▁ devices", + "▁pict ures", + "▁picture s", + "▁t ut", + "▁tu t", + "\" `", + "▁im possible", + "▁r ail", + "▁ra il", + "▁fe els", + "▁feel s", + "▁fee ls", + "ic as", + "ica s", + "i cas", + "il ling", + "ill ing", + "▁acc ident", + "▁' @", + "____ ____", + "▁n otes", + "▁not es", + "▁no tes", + "▁note s", + "▁ notes", + "om an", + "oma n", + "o man", + "Par ser", + "Parse r", + "Pars er", + "▁dis covered", + "▁discover ed", + "▁R oman", + "▁Rom an", + "▁Ro man", + "▁Roma n", + "▁bud get", + "▁gu ide", + "▁guid e", + "ki ng", + "kin g", + "k ing", + "▁in cred", + "▁inc red", + "▁incre d", + "ol ar", + "ola r", + "o lar", + "en den", + "end en", + "ende n", + "Des c", + "De sc", + "D esc", + "▁w ave", + "▁wa ve", + "▁ wave", + "б ли", + "ig t", + "i gt", + "▁re strict", + "▁rest rict", + "▁restr ict", + "▁R et", + "▁Re t", + "▁ Ret", + "▁m ac", + "▁ma c", + "▁ mac", + "у р", + "B S", + "í s", + "▁gener ation", + "de m", + "d em", + "al o", + "a lo", + "б ра", + "▁order ed", + "▁ord ered", + "▁ ordered", + "dr op", + "dro p", + "d rop", + "▁p p", + "▁ pp", + "▁Re view", + "▁Rev iew", + "▁ Review", + "▁liter ally", + "▁literal ly", + "▁S ir", + "▁Si r", + "▁ Sir", + "▁Y eah", + "▁Ye ah", + "▁ Yeah", + "▁d ensity", + "▁dens ity", + "▁ density", + "ri z", + "r iz", + "in de", + "ind e", + "i nde", + "▁g ain", + "▁ga in", + "▁ gain", + "▁p anel", + "▁pan el", + "▁pa nel", + "▁ panel", + "je t", + "j et", + "▁T imes", + "▁Time s", + "▁Tim es", + "▁Ti mes", + "▁ Times", + "▁n ella", + "▁ne lla", + "▁nel la", + "▁nell a", + "▁pre viously", + "▁previous ly", + "▁prev iously", + "point s", + "Se nd", + "S end", + "▁B rown", + "▁Br own", + "▁Bro wn", + "▁Brow n", + "ea ch", + "e ach", + "▁tr igger", + "▁ trigger", + "ome times", + "omet imes", + "ic os", + "ico s", + "i cos", + "G R", + "Pane l", + "Pan el", + "P anel", + "og en", + "oge n", + "o gen", + "▁c m", + "▁ cm", + "ru ctions", + "ruct ions", + "ruction s", + "▁k iss", + "▁ki ss", + "▁s olo", + "▁so lo", + "▁sol o", + "▁f amous", + "▁fam ous", + "ra n", + "r an", + "п ро", + "▁th ro", + "▁thr o", + "Gr aph", + "G raph", + "im it", + "imi t", + "i mit", + "▁V alue", + "▁Val ue", + "▁ Value", + "▁st arts", + "▁start s", + "▁star ts", + "ip eline", + "ipe line", + "h d", + "T C", + "▁dis cussion", + "▁discuss ion", + "▁tr uck", + "ak a", + "a ka", + "On ly", + "▁E qu", + "▁Eq u", + "▁ Equ", + "▁k ö", + "▁ kö", + "▁B es", + "▁Be s", + "▁crit ic", + "▁pro pos", + "▁prop os", + "▁b att", + "▁bat t", + "▁ba tt", + "▁S ection", + "▁Se ction", + "▁ Section", + "Sh ow", + "S how", + "g p", + "ST ATE", + "STAT E", + "PO ST", + "POS T", + "P OST", + "▁N ord", + "▁No rd", + "▁Nor d", + "▁in nov", + "▁inn ov", + "▁c rim", + "▁cr im", + "▁cri m", + "▁ crim", + "ax is", + "a xis", + "▁T urn", + "▁Tur n", + "▁Tu rn", + "▁ Turn", + "con n", + "co nn", + "Run time", + "▁rem aining", + "▁remain ing", + "os ton", + "ost on", + "osto n", + "o ston", + "▁ Э", + "▁window s", + "▁wind ows", + "▁ windows", + "▁R oyal", + "▁Ro yal", + "▁Roy al", + "▁v ide", + "▁vi de", + "▁vid e", + "P P", + "ch ron", + "chr on", + "▁s an", + "▁sa n", + "▁ san", + "▁r ise", + "▁ri se", + "▁ris e", + "▁ rise", + "▁d elle", + "▁de lle", + "▁del le", + "▁dell e", + "▁D ur", + "▁Du r", + "▁rap id", + "▁ra pid", + "ce rt", + "cer t", + "c ert", + "L A", + "ed ge", + "▁\\ ]", + "▁ \\]", + "▁en tered", + "▁ent ered", + "▁enter ed", + "▁l aws", + "▁la ws", + "▁law s", + "▁ph oto", + "▁phot o", + "▁ photo", + "▁ap plications", + "▁applic ations", + "▁application s", + "▁appl ications", + "▁Ber lin", + "▁ar rest", + "▁arr est", + "▁f ederal", + "▁fed eral", + "▁feder al", + "▁R ussia", + "▁Russ ia", + "▁us ual", + "▁r aw", + "▁ra w", + "▁ raw", + "▁pi ù", + "êt re", + "ê tre", + "JS ON", + "J SON", + "SI ON", + "S ION", + "xt ure", + "ist ent", + "iste nt", + "isten t", + "▁P ower", + "▁Po wer", + "▁Pow er", + "▁ Power", + "Bi t", + "B it", + "▁cap acity", + "▁capac ity", + "▁ capacity", + "▁c ards", + "▁car ds", + "▁card s", + "▁ cards", + "UI D", + "U ID", + "im ents", + "iment s", + "imen ts", + "i ments", + "▁d ar", + "▁da r", + "▁ dar", + "▁Ch icago", + "▁comfort able", + "ti p", + "t ip", + "ba s", + "b as", + "▁m u", + "▁ mu", + "▁en emy", + "▁enem y", + "ya n", + "y an", + "▁ф и", + "▁ фи", + "▁up dated", + "▁update d", + "▁ updated", + "an go", + "ang o", + "E v", + "E ffect", + "os ing", + "osi ng", + "o sing", + "ren ce", + "r ence", + "▁Con gress", + "▁Cong ress", + "▁d efe", + "▁de fe", + "▁def e", + "▁i p", + "▁ ip", + "▁t out", + "▁to ut", + "▁tou t", + "▁f reedom", + "▁free dom", + "▁freed om", + "▁a o", + "▁ ao", + "▁There fore", + "▁Ther efore", + "Ed it", + "E dit", + "▁Vir gin", + "RE E", + "R EE", + "ar go", + "arg o", + "▁D am", + "▁Da m", + "▁ Dam", + "▁tra ffic", + "▁traff ic", + "ño s", + "ñ os", + "▁a lle", + "▁al le", + "▁all e", + "▁ alle", + "▁dep th", + "▁ depth", + "No w", + "N ow", + "▁s ides", + "▁side s", + "▁si des", + "▁sid es", + "▁го ди", + "▁год и", + "Des criptor", + "▁art ikel", + "▁n arrow", + "▁narr ow", + "▁nar row", + "__ _", + "_ __", + "k w", + "ut o", + "u to", + "▁Face book", + "▁Fac ebook", + "te gr", + "t egr", + "bo olean", + "ni k", + "n ik", + "b d", + "Tr ack", + "Tra ck", + "▁g ran", + "▁gr an", + "▁gra n", + "res hold", + "resh old", + "ве т", + "в ет", + "wr ap", + "w rap", + "▁n oise", + "▁no ise", + "ig u", + "i gu", + "▁B on", + "▁Bo n", + "▁ Bon", + "▁w y", + "▁ wy", + "lin ux", + "ck s", + "c ks", + "▁f ans", + "▁fa ns", + "▁fan s", + "▁m ach", + "▁ma ch", + "▁mac h", + "▁p rices", + "▁pr ices", + "▁pri ces", + "▁price s", + "é v", + "ou ts", + "out s", + "o uts", + "stand ing", + "stan ding", + "▁c ateg", + "▁cat eg", + "; \\", + "▁de cre", + "▁dec re", + "▁S aturday", + "▁m enu", + "▁me nu", + "▁men u", + "▁ menu", + "▁N ov", + "▁No v", + "▁Y et", + "▁Ye t", + "▁та к", + "lic he", + "li che", + "lich e", + "l iche", + "▁Ac adem", + "▁commun ication", + "us ing", + "u sing", + "▁Soc iety", + "▁Soci ety", + "▁n uc", + "▁nu c", + "pect ive", + "or ial", + "oria l", + "ori al", + "o rial", + "▁af raid", + "▁an imal", + "▁anim al", + "▁turn ing", + "▁tur ning", + "ds t", + "d st", + "math frak", + "le rs", + "ler s", + "l ers", + "▁l ots", + "▁lo ts", + "▁lot s", + "▁ á", + "▁T ra", + "▁Tr a", + "▁ Tra", + "n p", + "▁r ose", + "▁ro se", + "▁ rose", + "▁G L", + "▁ GL", + "▁hel ping", + "▁help ing", + "▁w inter", + "▁win ter", + "▁ко м", + "▁ ком", + "Mo ck", + "M ock", + "▁invest ment", + "Us e", + "U se", + "▁Can ad", + "н д", + "Co py", + "Cop y", + "C opy", + "▁f ly", + "▁fl y", + "▁ fly", + "SE R", + "S ER", + "▁F ar", + "▁Fa r", + "▁R os", + "▁Ro s", + "am il", + "ami l", + "a mil", + "▁fight ing", + "▁rel igious", + "▁relig ious", + "su per", + "sup er", + "s uper", + "sc reen", + "scr een", + "s creen", + "▁f urn", + "▁fur n", + "▁fu rn", + "▁surpr ised", + "▁surprise d", + "▁re plied", + "▁repl ied", + "Act ivity", + "Activ ity", + "▁D own", + "▁Do wn", + "▁Dow n", + "▁ Down", + "▁in sert", + "▁ins ert", + "▁ insert", + "▁O lymp", + "▁point ed", + "▁po inted", + "▁C ard", + "▁Car d", + "▁Ca rd", + "▁ Card", + "dr iver", + "drive r", + "d river", + "▁D a", + "▁ Da", + "! --", + "ro ud", + "rou d", + "r oud", + "un do", + "und o", + "▁m essages", + "▁message s", + "▁mess ages", + "▁ messages", + "▁P oint", + "▁Po int", + "▁ Point", + "V M", + "▁p lane", + "▁pl ane", + "▁plan e", + "▁ plane", + "x c", + "▁telev ision", + "▁tele vision", + "▁televis ion", + "ё н", + "▁thous ands", + "▁thousand s", + "▁c ris", + "▁cr is", + "▁cri s", + "▁de lay", + "▁del ay", + "▁ delay", + "▁N ext", + "▁Ne xt", + "▁ Next", + "▁no mbre", + "▁nom bre", + "▁t u", + "▁ tu", + "▁sk ip", + "▁ski p", + "▁ skip", + "ro ad", + "r oad", + "istr ation", + "▁t ur", + "▁tu r", + "▁De velop", + "▁Devel op", + "▁П а", + "▁д ру", + "▁др у", + "▁wonder ful", + "> &", + "▁L iber", + "▁Li ber", + "▁Lib er", + "▁s cope", + "▁sc ope", + "▁ scope", + "▁man age", + "▁ma nage", + "▁d ass", + "▁da ss", + "▁das s", + "▁re call", + "▁rec all", + "P M", + "▁re levant", + "▁relev ant", + "▁E arth", + "▁ка к", + "▁a pr", + "▁ap r", + "▁A SS", + "▁AS S", + "▁ ASS", + "ié n", + "i én", + "▁S H", + "▁ SH", + "oo m", + "o om", + "it et", + "ite t", + "no ne", + "non e", + "n one", + "as i", + "a si", + "▁mot or", + "▁mo tor", + "▁S how", + "▁Sh ow", + "▁ Show", + "n b", + "▁fact ors", + "▁fa ctors", + "▁factor s", + "▁f orest", + "▁for est", + "▁fore st", + "▁fo rest", + "▁в ре", + "th m", + "t hm", + "▁m unicip", + "▁turn s", + "▁tur ns", + "▁Div ision", + "▁Di vision", + "E C", + "▁dis appe", + "struct or", + "stru ctor", + "▁some where", + "▁Afr ican", + "▁Africa n", + "▁Inst itute", + "▁Institut e", + "Gr id", + "G rid", + "▁te acher", + "▁teach er", + "▁tea cher", + "ur ies", + "uri es", + "u ries", + "▁respect ively", + "▁respective ly", + "▁S D", + "▁ SD", + "▁a live", + "▁al ive", + "▁ali ve", + "▁p ou", + "▁po u", + "▁W ater", + "▁Wat er", + "▁Wa ter", + "▁ Water", + "ф е", + "▁ch anging", + "▁chang ing", + "▁ changing", + "▁after noon", + "▁or ders", + "▁order s", + "▁ord ers", + "▁ orders", + "Re t", + "R et", + "Point er", + "Po inter", + "▁s av", + "▁sa v", + "er g", + "e rg", + "ok ed", + "oke d", + "o ked", + "ess ions", + "ession s", + "▁F ire", + "▁Fi re", + "▁ Fire", + "ar et", + "are t", + "a ret", + "im m", + "i mm", + "▁des ire", + "▁ що", + "▁De sign", + "▁Des ign", + "▁ Design", + "ut ure", + "▁Off ice", + "▁c md", + "▁cm d", + "▁ cmd", + "▁e ating", + "▁eat ing", + "Net work", + "▁r ough", + "▁ro ugh", + "▁rou gh", + "▁ rough", + "oper ator", + "IG N", + "I GN", + "▁s ports", + "▁sp orts", + "▁sport s", + "▁w eren", + "▁we ren", + "▁were n", + "▁wer en", + "▁n oted", + "▁not ed", + "▁no ted", + "▁note d", + "▁tw ice", + "II I", + "I II", + "▁a nx", + "▁an x", + "▁e lim", + "▁el im", + "▁а в", + "▁i o", + "▁ io", + "▁spe ech", + "▁con du", + "▁cond u", + "el les", + "ell es", + "elle s", + "id ade", + "ida de", + "idad e", + "▁adv ance", + "R I", + "oc a", + "o ca", + "/ \\", + "ap shot", + "aps hot", + "▁t ail", + "▁ta il", + "▁ tail", + "mod els", + "model s", + "mode ls", + "og y", + "o gy", + "▁J eff", + "▁Je ff", + "ir ation", + "irat ion", + "▁K ore", + "▁Ko re", + "▁Kor e", + "▁le ads", + "▁lead s", + "ba t", + "b at", + "Ad apter", + "c ategory", + "ang ular", + "angu lar", + "▁s aved", + "▁sa ved", + "▁save d", + "▁sav ed", + "▁ saved", + "▁un iform", + "▁ uniform", + "▁n é", + "▁ né", + "▁business es", + "His t", + "Hi st", + "H ist", + "▁а р", + "▁ ар", + "do main", + "dom ain", + "▁S i", + "▁ Si", + "ra ise", + "rais e", + "rai se", + "r aise", + "▁w arn", + "▁war n", + "▁wa rn", + "▁ warn", + "het ic", + "h etic", + "▁G ro", + "▁Gr o", + ")) .", + ") ).", + "} >", + "з е", + "▁Amaz on", + "▁Or gan", + "▁ Organ", + "▁L ake", + "▁La ke", + "▁ag reement", + "▁agree ment", + "▁agre ement", + "x a", + "▁p erman", + "▁per man", + "▁perm an", + "▁cont aining", + "▁contain ing", + "▁st range", + "▁str ange", + "▁strang e", + "ст і", + "с ті", + "▁st upid", + "▁spe aking", + "▁speak ing", + "▁Intern et", + "▁Inter net", + "pre fix", + "pref ix", + "p refix", + "es c", + "e sc", + "As sert", + "Ass ert", + "pro te", + "pr ote", + "prot e", + "p rote", + "▁m anner", + "▁man ner", + "▁S z", + "un te", + "unt e", + "u nte", + "io t", + "i ot", + "Pro file", + "ov en", + "ove n", + "o ven", + "▁for med", + "▁form ed", + "▁forme d", + "▁ formed", + "▁l it", + "▁li t", + "▁ lit", + "▁econom y", + "▁ec onomy", + "▁c z", + "▁ cz", + "wi d", + "w id", + "RE Q", + "R EQ", + "▁ch osen", + "▁cho sen", + "▁chose n", + "▁P rodu", + "▁Pro du", + "▁ Produ", + "os ter", + "ost er", + "o ster", + "st ances", + "stance s", + "stan ces", + "aw a", + "a wa", + "▁R en", + "▁Re n", + "▁conf irm", + "▁ confirm", + "▁Б о", + "▁b illion", + "▁bill ion", + "▁d éc", + "▁dé c", + "ý ch", + "▁ill ustr", + "TI ES", + "T IES", + "▁P ub", + "▁Pu b", + "▁ Pub", + "▁b an", + "▁ba n", + "▁ ban", + "ad ed", + "ade d", + "a ded", + "ah n", + "a hn", + "▁C ath", + "▁Cat h", + "▁Ca th", + "no number", + "non umber", + "▁wor st", + "▁М е", + "▁sugg ested", + "▁suggest ed", + "st ats", + "stat s", + "sta ts", + "▁c ant", + "▁can t", + "▁ca nt", + "▁al ign", + "▁ali gn", + "▁ align", + "kap pa", + "k appa", + "▁h en", + "▁he n", + "▁ hen", + "▁in iti", + "▁init i", + "'] )", + "' ])", + "B I", + "▁g arden", + "▁gar den", + "▁gard en", + "▁sec ure", + "▁secur e", + "▁ secure", + "▁\\ [", + "▁ \\[", + "hand ler", + "handle r", + "el li", + "ell i", + "e lli", + "ld ots", + "l dots", + "se cut", + "sec ut", + "s ecut", + "▁ext ended", + "▁extend ed", + "} -", + "an ie", + "ani e", + "a nie", + "▁F ind", + "▁Fin d", + "▁Fi nd", + "▁ Find", + "▁M useum", + "▁Muse um", + "▁C onne", + "▁Con ne", + "▁ Conne", + "y y", + "▁pass ion", + "ak ers", + "ake rs", + "aker s", + "a kers", + "ah r", + "a hr", + "olog ies", + "ologie s", + "▁equ ation", + "▁eq uation", + "▁ equation", + "▁occ asion", + "▁occas ion", + "Le t", + "L et", + "'] ['", + "'][ '", + "' ]['", + "Pr int", + "an es", + "ane s", + "a nes", + "ie nte", + "ient e", + "ien te", + "i ente", + "▁T oday", + "▁To day", + "▁Tod ay", + "LE CT", + "L ECT", + "▁A f", + "▁ Af", + ", ,", + "▁Т а", + "▁` ``", + "▁`` `", + "ev en", + "eve n", + "e ven", + "si n", + "s in", + "ur er", + "ure r", + "u rer", + "▁ °", + "ot imes", + "oti mes", + "o times", + "▁I O", + "▁ IO", + "▁po et", + "() ));", + "()) );", + "())) ;", + "( )));", + "▁ −", + "▁ad opt", + "ph ere", + "pher e", + "p here", + "# [", + "▁c entre", + "▁cent re", + "ov es", + "ove s", + "o ves", + "▁a ns", + "▁an s", + "▁ ans", + "d p", + "▁K ir", + "▁Ki r", + "▁applic able", + "f p", + "▁vis ual", + "▁ok ay", + "or o", + "o ro", + "▁opportun ities", + "Re pository", + "Rep ository", + "▁l l", + "▁ ll", + "▁R od", + "▁Ro d", + "▁s hel", + "▁sh el", + "▁she l", + "▁la unch", + "▁con ven", + "▁conv en", + "▁conve n", + "▁S pe", + "▁Sp e", + "▁ Spe", + "Am er", + "A mer", + "▁c ette", + "▁cet te", + "Con d", + "Co nd", + "C ond", + "de p", + "d ep", + "O wn", + "▁h ook", + "▁ho ok", + "▁ hook", + "▁d ict", + "▁di ct", + "▁dic t", + "▁ dict", + "▁Th ose", + "▁f ellow", + "▁fell ow", + "▁fel low", + "▁phil osoph", + "▁philos oph", + "vi n", + "v in", + "fer ences", + "ference s", + "ha v", + "h av", + "▁ad ding", + "▁add ing", + "▁ adding", + "ivers e", + "iver se", + "i verse", + "ga me", + "g ame", + "▁Bl ue", + "▁ Blue", + "▁c lin", + "▁cl in", + "not e", + "no te", + "n ote", + "▁R am", + "▁Ra m", + "ме р", + "м ер", + "co very", + "cover y", + "cov ery", + "c overy", + "ñ a", + "▁б и", + "▁ би", + "▁f ashion", + "▁b roke", + "▁br oke", + "▁bro ke", + "▁' \\", + "▁ '\\", + "▁re ader", + "▁read er", + "▁ reader", + "но е", + "но сти", + "ност и", + "▁pay ment", + "▁ payment", + "▁L ic", + "▁Li c", + "▁l ips", + "▁li ps", + "▁lip s", + "▁ac adem", + "▁M ot", + "▁Mo t", + "el ls", + "ell s", + "C HECK", + "▁р у", + "▁ ру", + "▁M S", + "▁ MS", + "Ed itor", + "Edit or", + "▁z one", + "▁zo ne", + "▁ zone", + "it ure", + "itu re", + "▁I T", + "▁ IT", + "run time", + "▁pro ceed", + "▁proc eed", + "ло в", + "л ов", + "▁M aria", + "▁Mar ia", + "▁Ma ria", + "ol ver", + "olve r", + "olv er", + "▁Th anks", + "▁Thank s", + "▁ Thanks", + "▁should n", + "▁J oh", + "▁Jo h", + "▁Mod el", + "▁Mo del", + "▁Mode l", + "▁ Model", + "▁S ov", + "▁So v", + "! '", + "D i", + "▁c ancer", + "▁can cer", + "Id ent", + "▁ex change", + "il ler", + "ill er", + "ille r", + "in f", + "i nf", + "LE N", + "L EN", + "() {", + "( ){", + "ag a", + "a ga", + "\"] ,", + "\" ],", + "u h", + "▁K en", + "▁Ke n", + "▁ph otos", + "▁phot os", + "▁photo s", + "▁t iny", + "▁ti ny", + "▁tin y", + "▁ tiny", + "▁g ent", + "▁gen t", + "▁ge nt", + "▁ gent", + "ü l", + "▁T ake", + "▁Ta ke", + "▁Tak e", + "▁ Take", + "id el", + "ide l", + "i del", + "ou ting", + "out ing", + "In ternal", + "Inter nal", + "Intern al", + "▁c ells", + "▁cell s", + "▁cel ls", + "ни м", + "н им", + "ha rd", + "har d", + "h ard", + "▁T own", + "▁To wn", + "▁Tow n", + "ob e", + "o be", + "pl ex", + "ple x", + "p lex", + "те р", + "т ер", + "to ns", + "ton s", + "t ons", + "▁conc entr", + "▁concent r", + "mo ck", + "m ock", + "v c", + "á z", + "▁Ch ampionship", + "▁Champion ship", + "▁Champions hip", + "▁б е", + "▁ бе", + "? ?", + "ér i", + "é ri", + "al y", + "a ly", + "▁ Ц", + "ier te", + "iert e", + "▁tot ally", + "▁total ly", + "▁A uf", + "▁Au f", + "▁our selves", + "▁S elf", + "▁Sel f", + "▁ Self", + "Form s", + "For ms", + "ight er", + "igh ter", + "▁is land", + "fm t", + "f mt", + "▁r c", + "▁ rc", + "▁t ells", + "▁tell s", + "▁tel ls", + "B B", + "di t", + "d it", + "▁vari ables", + "▁variable s", + "▁ variables", + "▁int ended", + "▁intend ed", + "iz ont", + "izon t", + "izo nt", + "▁pl ays", + "▁play s", + "da m", + "d am", + "se q", + "s eq", + "▁S up", + "▁Su p", + "▁ Sup", + "▁c ultural", + "▁cult ural", + "▁sc ream", + "__ ,", + "_ _,", + "ci pl", + "cip l", + "Time out", + "▁ ж", + "or te", + "ort e", + "▁repl aced", + "▁replace d", + "E M", + "▁ab andon", + "▁Spec ial", + "▁Spe cial", + "▁ Special", + "el len", + "ell en", + "elle n", + "▁B ru", + "▁Br u", + "ir med", + "irm ed", + "T e", + "ol t", + "o lt", + "j u", + "Arg ument", + "▁ne ut", + "▁neu t", + "▁ neut", + "sc ape", + "▁R ay", + "▁Ra y", + "▁ Ray", + "▁Pol it", + "▁Po lit", + "▁crow d", + "▁cro wd", + "▁Window s", + "▁Wind ows", + "▁ Windows", + "ie go", + "ieg o", + "i ego", + "▁e scape", + "▁esc ape", + "▁ escape", + "▁Ap ache", + "sy nc", + "syn c", + "s ync", + "eb en", + "e ben", + "if ies", + "ifi es", + "et her", + "eth er", + "ethe r", + "e ther", + "Met a", + "Me ta", + "M eta", + "▁big gest", + "Ga me", + "G ame", + "▁trans action", + "▁ transaction", + "En v", + "E nv", + "▁М о", + "▁pl enty", + "▁m el", + "▁me l", + "▁ mel", + "п ре", + "▁mot iv", + "▁о р", + "▁ ор", + "or gan", + "org an", + "▁m ock", + "▁mo ck", + "▁ mock", + "▁$ _", + "▁ $_", + "ен е", + "е не", + "▁N umber", + "▁Num ber", + "▁Nu mber", + "▁ Number", + "ck now", + "c know", + "▁Up date", + "▁ Update", + "ze ro", + "zer o", + "z ero", + "▁sur prise", + "▁surpr ise", + "ce an", + "pd f", + "p df", + "Gl obal", + "▁att end", + "▁f ond", + "▁fo nd", + "▁fon d", + "▁under stood", + "Na v", + "N av", + "▁M ic", + "▁Mi c", + "▁ Mic", + "= $", + "ok ing", + "oki ng", + "o king", + "▁Stad ium", + "Cl ose", + "▁compet ition", + "▁sold iers", + "▁soldier s", + "▁O P", + "▁ OP", + "ag ne", + "agn e", + "▁An ton", + "▁Ant on", + "Ma in", + "M ain", + "á k", + "▁# [", + "▁ #[", + "▁Com mit", + "▁Comm it", + "▁ Commit", + "py x", + "▁e ast", + "▁eas t", + "▁ east", + "▁Or der", + "▁Ord er", + "▁ Order", + "F loat", + "▁accept ed", + "▁mon itor", + "▁ monitor", + "▁p ad", + "▁pa d", + "▁ pad", + "on ic", + "oni c", + "o nic", + "▁p ushed", + "▁push ed", + "▁re place", + "▁rep lace", + "▁repl ace", + "▁ replace", + "CR E", + "C RE", + "▁r ide", + "▁ri de", + "▁rid e", + "▁ ride", + "fo und", + "f ound", + "= %", + "во й", + "▁mat ches", + "▁match es", + "▁ matches", + "▁L ie", + "▁Li e", + "▁exper iences", + "▁experience s", + "▁experi ences", + "Po ol", + "P ool", + "up s", + "u ps", + "A V", + "▁ex istence", + "▁exist ence", + "▁t hin", + "▁th in", + "▁m agn", + "▁mag n", + "▁ma gn", + "CO MP", + "COM P", + "ho me", + "hom e", + "h ome", + "▁n i", + "▁ ni", + "▁wur den", + "▁wurde n", + "ла в", + "▁te eth", + "▁S tan", + "▁St an", + "▁Sta n", + "ap pro", + "app ro", + "an ny", + "ann y", + "if ts", + "ift s", + "▁un known", + "▁ unknown", + "▁h omes", + "▁home s", + "▁hom es", + "▁ho mes", + "▁ent ity", + "▁ entity", + "ci e", + "c ie", + "ле ние", + "ia r", + "i ar", + "▁compl iance", + "▁focus ed", + "uz z", + "u zz", + "=\\ \"", + "= \\\"", + "com ponents", + "component s", + "Att r", + "At tr", + "all ery", + "alle ry", + "aller y", + "▁ident ify", + "O k", + "pi e", + "p ie", + "▁St ill", + "▁off ering", + "▁offer ing", + "▁bu sy", + "▁bus y", + "ct l", + "c tl", + "it ors", + "itor s", + "ito rs", + "▁concern ed", + "▁concer ned", + "▁b rown", + "▁br own", + "▁bro wn", + "▁brow n", + "cl k", + "Se lected", + "Select ed", + "▁B lock", + "▁Bl ock", + "▁Blo ck", + "▁ Block", + "▁e gy", + "▁eg y", + "▁ egy", + "ic ing", + "ici ng", + "i cing", + "▁U RL", + "▁ URL", + "▁t opic", + "▁to pic", + "▁top ic", + "▁ topic", + "▁Pro duct", + "▁Produ ct", + "▁ Product", + "▁ч и", + "▁ чи", + "▁t rial", + "▁tr ial", + "▁tri al", + "▁week end", + "l u", + "▁I V", + "▁ IV", + "▁E gy", + "▁Eg y", + "x C", + "▁n ove", + "▁no ve", + "▁nov e", + "▁l ett", + "▁le tt", + "▁let t", + "▁ lett", + "en ne", + "enn e", + "() ).", + "()) .", + "( )).", + ".* *", + ". **", + "▁p romise", + "▁prom ise", + "el ection", + "ele ction", + "elect ion", + "e lection", + "Aut h", + "A uth", + "r v", + "ri l", + "r il", + "▁con duct", + "▁cond uct", + "▁condu ct", + "▁ conduct", + "▁main tain", + "▁maint ain", + "▁bo at", + "▁ boat", + "▁op posite", + "▁oppos ite", + "sp in", + "spi n", + "s pin", + "web pack", + "an ta", + "ant a", + "▁o rient", + "▁or ient", + "▁ orient", + "▁s uc", + "▁su c", + "▁ex ercise", + "▁exerc ise", + "▁eff icient", + "▁ efficient", + "▁trad ition", + "▁z w", + "▁ zw", + "▁S ud", + "▁Su d", + "go ing", + "▁P ier", + "▁Pi er", + "in v", + "i nv", + "ip es", + "ipe s", + "i pes", + "ensure math", + "▁con ver", + "▁conv er", + "▁conve r", + "cre en", + "cr een", + "c reen", + "▁t error", + "▁ter ror", + "▁terr or", + "▁D ou", + "▁Do u", + "▁in valid", + "▁ invalid", + "ce ived", + "ceive d", + "▁A rab", + "▁Ar ab", + "▁w ire", + "▁wir e", + "▁ wire", + "ap plication", + "sh ift", + "Gener ic", + "▁P lan", + "▁Pl an", + "▁ Plan", + "▁W all", + "▁Wal l", + "▁Wa ll", + "▁ Wall", + "▁direct ory", + "▁director y", + "▁ directory", + "▁e gg", + "▁eg g", + "▁we alth", + "▁ wealth", + "ran dom", + "rand om", + "r andom", + "att ribute", + "▁h ide", + "▁hi de", + "▁hid e", + "▁ hide", + "Se rial", + "Ser ial", + "S erial", + "ca m", + "c am", + "▁it al", + "▁i tal", + "▁ ital", + "▁L ine", + "▁Lin e", + "▁Li ne", + "▁ Line", + "▁C HECK", + "▁ CHECK", + "ploy ment", + "▁mass ive", + "▁ex tract", + "▁ext ract", + "▁extra ct", + "▁extr act", + "▁ extract", + "ch ain", + "cha in", + "Res t", + "Re st", + "R est", + "▁L as", + "▁La s", + "▁b ear", + "▁be ar", + "▁ bear", + "▁l inks", + "▁link s", + "▁lin ks", + "▁ links", + "▁new sp", + "▁news p", + "▁F C", + "▁ FC", + "Car d", + "C ard", + "ak s", + "a ks", + "▁v isible", + "▁vis ible", + "▁ visible", + "▁M arc", + "▁Mar c", + "▁Ma rc", + "▁B oston", + "▁Bo ston", + "▁Bos ton", + "▁res erved", + "▁reserv ed", + "▁reserve d", + "▁ro of", + "lic enses", + "license s", + "d c", + "▁In formation", + "▁ Information", + "▁w itness", + "S k", + "*) ,", + "* ),", + "Sc ope", + "S cope", + "'] ;", + "' ];", + "▁M ir", + "▁Mi r", + "▁ Mir", + "ud ing", + "udi ng", + "u ding", + "▁t rend", + "▁tr end", + "▁tre nd", + "▁tren d", + "re p", + "r ep", + "▁mus ical", + "▁music al", + "▁ne ither", + "▁nei ther", + "▁C reat", + "▁Cre at", + "▁ Creat", + "▁pos itions", + "▁position s", + "▁posit ions", + "L C", + "rid ge", + "r idge", + "▁offic ers", + "▁office rs", + "▁officer s", + "▁vi olence", + "▁viol ence", + "▁T em", + "▁Te m", + "▁S us", + "▁Su s", + "▁W ay", + "▁Wa y", + "Af ter", + "A fter", + "ac ket", + "ack et", + "▁S ou", + "▁So u", + "ac er", + "ace r", + "a cer", + "| |", + "▁re mark", + "▁r emark", + "▁rem ark", + "▁ remark", + "wa ter", + "w ater", + "n ě", + "▁С а", + "▁s ed", + "▁se d", + "▁ sed", + "E ach", + "▁phot ograph", + "▁photo graph", + "▁let ters", + "▁letter s", + "▁lett ers", + "▁in vent", + "▁inv ent", + "▁M as", + "▁Ma s", + "▁s ongs", + "▁son gs", + "▁song s", + "ó l", + "ki nd", + "kin d", + "k ind", + "▁N on", + "▁No n", + "▁ Non", + "▁d ust", + "▁du st", + "** :", + "* *:", + "nab la", + ".\" ,", + ". \",", + "Loc k", + "Lo ck", + "L ock", + "▁Д о", + "▁cl uster", + "▁ cluster", + "lo ss", + "los s", + "l oss", + "▁ASS ERT", + "▁ ASSERT", + "fa ll", + "f all", + "▁re ject", + "▁ reject", + "▁Sp ring", + "▁Spr ing", + "▁ Spring", + "▁wed ding", + "▁g rav", + "▁gr av", + "▁gra v", + "▁ grav", + "ress ion", + "r ession", + "li mit", + "lim it", + "l imit", + "RE S", + "R ES", + "] }", + "▁l isted", + "▁li sted", + "▁list ed", + "▁ listed", + "▁T ele", + "▁Te le", + "▁Tel e", + "▁ Tele", + "hl ine", + "h line", + "▁ch ief", + "▁chi ef", + "ME M", + "M EM", + "да р", + "д ар", + "▁exp ensive", + "tr ace", + "tra ce", + "▁R og", + "▁Ro g", + "▁C oll", + "▁Col l", + "▁Co ll", + "▁ Coll", + "▁Aut hor", + "▁Auth or", + "▁ Author", + "▁B oard", + "▁Bo ard", + "▁ Board", + "▁C apt", + "▁Cap t", + "▁Ca pt", + "▁ Capt", + "TE XT", + "T EXT", + "▁re con", + "▁rec on", + "es ta", + "est a", + "e sta", + "▁proper ly", + "▁& \\", + "▁ &\\", + "le ton", + "let on", + "l eton", + "ik er", + "ike r", + "i ker", + "G u", + "▁K om", + "▁Ko m", + "oc o", + "o co", + "▁any more", + "▁t aste", + "▁ta ste", + "▁tast e", + "▁S anta", + "▁San ta", + "▁Sant a", + "ge x", + "g ex", + "▁Se cret", + "▁Sec ret", + "▁ Secret", + "▁tal ent", + "▁tale nt", + "▁mom ents", + "▁moment s", + "▁mo ments", + "▁B a", + "▁ex tr", + "▁ext r", + "▁ extr", + "▁Com mission", + "▁Comm ission", + "▁mod ify", + "▁Fig ure", + "▁ Figure", + "▁d omin", + "▁do min", + "▁dom in", + "▁ domin", + "▁p lot", + "▁pl ot", + "▁ plot", + "en ger", + "eng er", + "enge r", + "ut ch", + "▁c ities", + "▁cit ies", + "▁ci ties", + "▁n ut", + "▁nu t", + "▁ nut", + "pro file", + "prof ile", + "▁S tat", + "▁St at", + "▁Sta t", + "▁ Stat", + "▁n odes", + "▁no des", + "▁node s", + "▁nod es", + "▁ nodes", + "▁n s", + "▁ ns", + "ess ages", + "essage s", + "essa ges", + "im pl", + "imp l", + "ic ker", + "ick er", + "i cker", + "▁ex amples", + "▁example s", + "▁exam ples", + "ab eth", + "abe th", + "abet h", + "▁st ated", + "▁stat ed", + "▁state d", + "▁sta ted", + "fi re", + "f ire", + "bu l", + "b ul", + "▁danger ous", + "▁P ay", + "▁Pa y", + "▁ Pay", + "▁G re", + "▁Gr e", + "▁ Gre", + "▁Mon day", + "▁Mond ay", + "es ome", + "eso me", + "e some", + "ig an", + "iga n", + "i gan", + "ru nd", + "run d", + "r und", + "pr ise", + "p rise", + "fa il", + "f ail", + "▁N ever", + "▁Ne ver", + "▁Nev er", + "▁ Never", + "A v", + "▁line ar", + "▁lin ear", + "▁ linear", + "▁u l", + "▁ ul", + "WA R", + "W AR", + "ре н", + "р ен", + "▁A T", + "▁ AT", + "▁d op", + "▁do p", + "▁n ou", + "▁no u", + "Des t", + "De st", + "D est", + "▁claim s", + "en da", + "end a", + "▁c razy", + "▁cr azy", + "ge l", + "g el", + "og gle", + "ogg le", + "▁rep resentation", + "▁represent ation", + "in en", + "ine n", + "i nen", + "▁altern ative", + "▁alter native", + "D M", + "AB ILITY", + "face s", + "fa ces", + "fac es", + "f aces", + "▁do ors", + "▁door s", + "▁ doors", + "at iv", + "ati v", + "Lo ok", + "L ook", + "▁J SON", + "▁JS ON", + "▁ JSON", + "▁appe arance", + "▁appear ance", + "б ря", + "S QL", + "▁sil ence", + "ud o", + "u do", + "▁Direct or", + "▁Dire ctor", + "▁Dir ector", + "State ment", + "Stat ement", + "se lected", + "select ed", + "hi gh", + "h igh", + "pr ime", + "prim e", + "▁ign ore", + "▁ignor e", + "▁ ignore", + "▁col ors", + "▁color s", + "▁ colors", + "us hing", + "ush ing", + "▁v irt", + "▁vi rt", + "▁vir t", + "▁ virt", + "man ager", + "▁rem ote", + "▁remot e", + "▁ remote", + "ł o", + "sm all", + "▁cr ime", + "▁crim e", + "▁cri me", + "r b", + "▁c reation", + "▁cre ation", + "▁creat ion", + "▁f light", + "▁fl ight", + "▁S ign", + "▁Si gn", + "▁Sig n", + "▁ Sign", + "IL E", + "I LE", + "▁D O", + "▁ DO", + "com ment", + "comm ent", + "▁C ost", + "▁Co st", + "▁Cos t", + "▁ Cost", + "._ _", + ". __", + "▁C op", + "▁Co p", + "▁ Cop", + "▁v om", + "▁vo m", + "▁Sc ience", + "▁Sci ence", + "ле ния", + "oo p", + "o op", + "inter face", + "▁WARRAN TIES", + "▁P age", + "▁Pa ge", + "▁ Page", + "** ****", + "**** **", + "*** ***", + "ско м", + "с ком", + "TR UE", + "▁re peated", + "▁repe ated", + "▁repeat ed", + "▁е го", + "ш о", + "▁r oz", + "▁ro z", + "▁ roz", + "P e", + "▁IS BN", + "ir ts", + "irt s", + "pos es", + "po ses", + "pose s", + "p oses", + "}) $", + "} )$", + "▁ І", + "child ren", + "ble s", + "bl es", + "b les", + "EC T", + "E CT", + "▁i z", + "▁ iz", + "▁b uilder", + "▁build er", + "▁ builder", + "▁M edia", + "▁Med ia", + "▁ Media", + "ia t", + "i at", + "▁contr ast", + "▁contra st", + "” ,", + "▁L ink", + "▁Lin k", + "▁ Link", + "▁Educ ation", + "▁j oint", + "▁join t", + "▁jo int", + "▁ joint", + "▁ex ternal", + "▁extern al", + "▁ external", + "▁ро з", + "▁b its", + "▁bit s", + "▁bi ts", + "▁ bits", + "FO RM", + "FOR M", + "F ORM", + "er man", + "erm an", + "w p", + "▁M ike", + "▁Mi ke", + "▁Mik e", + "▁M aster", + "▁Ma ster", + "▁Mas ter", + "▁ Master", + "▁sen ior", + "▁N av", + "▁Na v", + "▁ Nav", + "▁record ed", + "el ing", + "eli ng", + "elin g", + "e ling", + "es h", + "e sh", + "f x", + "ка н", + "к ан", + "▁t all", + "▁tal l", + "▁ta ll", + "▁John son", + "▁s ono", + "▁so no", + "▁son o", + "▁an che", + "▁anc he", + "▁anch e", + "▁ anche", + "ic ken", + "ick en", + "i cken", + "lo op", + "l oop", + "ici ency", + "empor ary", + "▁D oes", + "▁Do es", + "▁ Does", + "▁re lation", + "▁rel ation", + "▁ relation", + "м ы", + "wa s", + "w as", + "lo w", + "l ow", + "ich te", + "icht e", + "i chte", + "▁J ones", + "▁Jo nes", + "▁Jon es", + "▁bed room", + "DI S", + "D IS", + "▁mag net", + "▁magn et", + "▁Eng ine", + "▁ Engine", + "▁feel ings", + "▁feeling s", + "▁fee lings", + "G C", + "▁t orn", + "▁to rn", + "▁tor n", + "▁relationship s", + "▁relation ships", + "▁Р е", + "▁p roud", + "▁pro ud", + "▁pr oud", + "▁t we", + "▁tw e", + "ov al", + "ova l", + "o val", + "▁w aste", + "▁was te", + "▁wa ste", + "▁red uced", + "▁redu ced", + "▁reduce d", + "il ton", + "ilt on", + "B P", + "▁for got", + "▁forg ot", + "▁bod ies", + "▁H aw", + "▁Ha w", + "la g", + "l ag", + "▁w ww", + "▁ www", + "do or", + "d oor", + "▁s ufficient", + "▁suff icient", + "▁doll ars", + "▁dollar s", + "Le n", + "L en", + "▁talk ed", + "▁tal ked", + "▁b ond", + "▁bo nd", + "▁bon d", + "▁B or", + "▁Bo r", + "}} {", + "} }{", + "ro d", + "r od", + "Pass word", + "qu are", + "▁l ights", + "▁light s", + "▁ lights", + "er en", + "ere n", + "e ren", + "▁th irty", + "N C", + "▁T ODO", + "▁TO DO", + "▁res pond", + "▁respon d", + "▁resp ond", + "▁ respond", + "ки х", + "dir ect", + "di rect", + "dire ct", + "d irect", + "a ção", + "▁he av", + "Med ia", + "M edia", + "ex it", + "e xit", + "L icense", + "` .", + "▁m ixed", + "▁mix ed", + "▁d esk", + "▁de sk", + "▁des k", + "▁te aching", + "▁teach ing", + "▁tea ching", + "▁m aj", + "▁ma j", + "▁n erv", + "▁ne rv", + "▁ner v", + "in ations", + "ination s", + "type of", + "▁co ast", + "▁ж е", + "▁ же", + "▁be side", + "▁bes ide", + "um my", + "umm y", + "Do c", + "D oc", + "▁sche dule", + "▁schedul e", + "▁sched ule", + "▁ schedule", + "▁re cover", + "▁rec over", + "▁Fur ther", + "▁ste el", + "bo ot", + "b oot", + "▁Per haps", + "▁с ъ", + "▁O s", + "▁ Os", + "ri ck", + "ric k", + "r ick", + "▁В и", + "Supp ort", + "Sup port", + "S upport", + "▁( _", + "▁ (_", + "ni l", + "n il", + "pi s", + "p is", + "x pected", + "▁process ing", + "▁proces sing", + "▁ processing", + "Bu ild", + "B uild", + "ar ian", + "ari an", + "aria n", + "a rian", + "▁i con", + "▁ic on", + "▁ icon", + "▁C A", + "▁ CA", + "wi ck", + "w ick", + "= (", + "▁al gorithm", + "▁ algorithm", + "▁You ng", + "▁Man agement", + "▁ Management", + "▁anc ient", + "▁anci ent", + "но сть", + "ност ь", + "ot i", + "o ti", + "▁comb ination", + "wor ld", + "w orld", + "n n", + "▁d ram", + "▁dr am", + "en abled", + "ena bled", + "enable d", + "A c", + "C CESS", + "ar ation", + "▁bl ocks", + "▁block s", + "▁blo cks", + "▁ blocks", + "▁Ang eles", + "▁Angel es", + "▁Q ual", + "▁Qu al", + "▁ Qual", + "▁suc ceed", + "▁succ eed", + "net work", + "▁ob lig", + "spring framework", + "▁T re", + "▁Tr e", + "ok es", + "oke s", + "o kes", + "mu n", + "m un", + "▁Net work", + "▁ Network", + "De l", + "D el", + "▁e state", + "▁est ate", + "▁esta te", + "▁l iqu", + "▁li qu", + "▁p ob", + "▁po b", + "▁d ad", + "▁da d", + "▁dist inct", + "▁T it", + "▁Ti t", + "▁L ear", + "▁Le ar", + "fer red", + "and roid", + "andro id", + "▁sub sequ", + "▁subs equ", + "▁Flor ida", + "sub set", + "▁whis per", + "Vo l", + "V ol", + "ul ous", + "ulo us", + "▁c rew", + "▁cre w", + "▁cr ew", + "▁l ug", + "▁lu g", + "pi d", + "p id", + "oc ity", + "oci ty", + "o city", + "sk b", + "s kb", + "▁t ea", + "▁te a", + "у н", + "▁hon or", + "▁ho nor", + "▁I ns", + "▁In s", + "▁ Ins", + "▁g ew", + "▁ge w", + "▁ gew", + "Det ails", + "Detail s", + "ene ath", + "e neath", + "at ar", + "ata r", + "a tar", + "▁_ {", + "▁ _{", + "am en", + "ame n", + "a men", + "▁set up", + "▁ setup", + "Trans action", + "▁bl ank", + "▁ blank", + "Fail ed", + "F ailed", + "jo b", + "j ob", + "▁p ret", + "▁pre t", + "▁pr et", + "▁ pret", + "ß e", + "lo or", + "l oor", + "ř í", + "nc ia", + "n cia", + "▁any where", + "▁L ight", + "▁Li ght", + "▁ Light", + "▁A k", + "B D", + "▁exc ited", + "▁excit ed", + "ag ers", + "age rs", + "ager s", + "a gers", + "▁w arning", + "▁war ning", + "▁warn ing", + "▁ warning", + "▁process es", + "▁proces ses", + "h u", + "▁y outh", + "▁you th", + "▁yo uth", + "▁d ogs", + "▁do gs", + "▁dog s", + "▁o ct", + "▁oc t", + "▁ oct", + "▁n ine", + "▁ni ne", + "▁nin e", + "Write r", + "Wr iter", + "Writ er", + "W riter", + "gr id", + "g rid", + "▁import ance", + "est ic", + "▁care fully", + "▁careful ly", + "ma ster", + "mas ter", + "m aster", + "▁dec isions", + "▁decision s", + "▁decis ions", + "▁p in", + "▁pi n", + "▁ pin", + "▁cr ack", + "TE ST", + "TES T", + "T EST", + "▁L ocal", + "▁Loc al", + "▁Lo cal", + "▁ Local", + "▁R ight", + "▁ Right", + "▁v ast", + "▁va st", + "▁vas t", + "▁f aster", + "▁fa ster", + "▁fast er", + "▁inst itut", + "▁ann ual", + "LA N", + "L AN", + "▁e pisode", + "▁epis ode", + "▁X V", + "▁del ivery", + "▁deliver y", + "t l", + "F P", + "ci rc", + "cir c", + "▁typ ically", + "▁typical ly", + "ig o", + "i go", + "▁int el", + "▁inte l", + "▁ intel", + "na t", + "n at", + "x b", + "ст ро", + "с тро", + ") -", + "▁B al", + "▁Ba l", + "▁ Bal", + "▁J os", + "▁Jo s", + "▁g onna", + "▁R est", + "▁Re st", + "▁Res t", + "▁ Rest", + "jo r", + "j or", + "on ia", + "oni a", + "o nia", + "or ship", + "ors hip", + "ov ery", + "ove ry", + "over y", + "o very", + "LI NE", + "LIN E", + "L INE", + "] :", + "Que ue", + "▁com pare", + "▁comp are", + "▁compar e", + "▁ compare", + "▁ap artment", + "▁apart ment", + "▁r ul", + "▁ru l", + "D r", + "gen cy", + "g ency", + "▁ob viously", + "▁obvious ly", + "zi e", + "z ie", + "yc l", + "y cl", + "fort unately", + "fortun ately", + "fortunate ly", + "▁ste pped", + "▁step ped", + "▁S eg", + "▁Se g", + "▁ Seg", + "▁Wh ich", + "▁ Which", + "▁P C", + "▁ PC", + "▁a st", + "▁as t", + "▁ ast", + "end or", + "endo r", + "▁per mission", + "▁perm ission", + "▁ permission", + "CO L", + "C OL", + "▁T EST", + "▁TE ST", + "▁ TEST", + "P ay", + "ère s", + "è res", + "▁stud ied", + "▁accom pl", + "▁accomp l", + "ro le", + "rol e", + "r ole", + "Wh ere", + "Whe re", + "W here", + "proto buf", + "met adata", + "meta data", + "Jo b", + "J ob", + "▁F our", + "▁Fou r", + "▁Fo ur", + "pl ements", + "ple ments", + "plement s", + "dis able", + "▁l oud", + "▁lo ud", + "▁lou d", + "▁happ ening", + "▁happen ing", + "▁U sing", + "▁Us ing", + "▁ Using", + "ro g", + "r og", + "▁depend s", + "▁dep ends", + "í m", + "' \\", + "▁t aught", + "sh ared", + "sha red", + "share d", + "▁att ributes", + "▁attribute s", + "▁attribut es", + "▁ attributes", + "▁A ction", + "▁Act ion", + "▁ Action", + "▁d ess", + "▁de ss", + "▁des s", + "▁ dess", + "▁h ouses", + "▁house s", + "▁hous es", + "▁ho uses", + "▁re set", + "▁res et", + "▁ reset", + "▁b ien", + "▁bi en", + "▁ex plicit", + "▁expl icit", + "LO W", + "-> _", + "▁P M", + "▁ PM", + "C ategory", + "oi ce", + "o ice", + "in to", + "int o", + "▁m ail", + "▁ma il", + "▁mai l", + "▁ mail", + "▁author ity", + "▁un able", + "▁una ble", + "file name", + "fil ename", + "é k", + "ле й", + "л ей", + "▁s ector", + "▁se ctor", + "▁sec tor", + "▁sect or", + "ap point", + "app oint", + "▁h ang", + "▁ha ng", + "▁han g", + "▁ hang", + "▁c el", + "▁ce l", + "▁ cel", + "rel ated", + "it ate", + "ita te", + "itat e", + "▁' <", + "am ber", + "amb er", + "a mber", + "▁c heap", + "▁che ap", + "▁en abled", + "▁enable d", + "▁ enabled", + "▁di vision", + "▁div ision", + "▁divis ion", + "An y", + "A ny", + "▁h ier", + "▁hi er", + "▁H ead", + "▁He ad", + "▁ Head", + "nt ax", + "n tax", + "ud a", + "u da", + "▁lim itations", + "▁limit ations", + "▁limitation s", + "▁st udio", + "▁stud io", + "med ia", + "medi a", + "m edia", + "▁cir cle", + "▁circ le", + "▁ circle", + "но ва", + "нов а", + "▁l aug", + "▁la ug", + "ac ts", + "act s", + "▁В о", + "ó d", + "pl ed", + "ple d", + "p led", + "LO C", + "L OC", + "Ex pr", + "Exp r", + "> :", + "▁pr és", + "▁pré s", + "▁ prés", + "▁laugh ed", + "▁laug hed", + "▁Th ree", + "▁ Three", + "л ы", + "▁en ds", + "▁end s", + "▁ ends", + "▁fund ament", + "▁in her", + "▁ inher", + "▁l iv", + "▁li v", + "▁ liv", + "bi d", + "b id", + "▁respons ibility", + "▁check ed", + "▁ checked", + "▁P ac", + "▁Pa c", + "▁f ault", + "▁fa ult", + "▁y ellow", + "▁s alt", + "▁sa lt", + "▁sal t", + "▁Franc isco", + "▁Francis co", + "▁ ^", + "▁O N", + "▁ ON", + "▁beaut y", + "y g", + "▁A ff", + "▁Af f", + "▁ Aff", + "▁E q", + "▁ Eq", + "▁mag ic", + "▁hand ler", + "▁handle r", + "▁ handler", + "x E", + "▁numer ous", + "▁numero us", + "▁h ole", + "▁hol e", + "▁ho le", + "▁ hole", + "▁ro oms", + "▁room s", + "▁ rooms", + "cc ión", + "cció n", + "c ción", + "▁A rm", + "▁Ar m", + "▁ Arm", + "per son", + "pers on", + "p erson", + "▁build ings", + "▁building s", + "▁p late", + "▁pl ate", + "▁plat e", + "ble d", + "bl ed", + "b led", + "er rors", + "err ors", + "error s", + "▁A gain", + "▁Ag ain", + "▁Def ault", + "▁ Default", + "▁H ard", + "▁Har d", + "▁Ha rd", + "▁ Hard", + "t ó", + "hu s", + "h us", + "▁dim ension", + "ial e", + "ia le", + "i ale", + "▁M ult", + "▁Mu lt", + "▁Mul t", + "▁ Mult", + "▁Govern ment", + "Fun c", + "F unc", + "▁b low", + "▁bl ow", + "▁blo w", + "▁re ct", + "▁r ect", + "▁rec t", + "▁ rect", + "er ra", + "err a", + "conne ction", + "connect ion", + "conn ection", + "▁pass ing", + "▁pas sing", + "ße n", + "ß en", + "ph as", + "pha s", + "p has", + "ens ional", + "ension al", + "re cord", + "rec ord", + "co hol", + "▁H arry", + "▁Har ry", + "▁Harr y", + "izont al", + "izon tal", + "▁f inger", + "▁fin ger", + "▁fing er", + "▁young er", + "▁S C", + "▁ SC", + "oper ation", + "B Y", + "he im", + "▁B ad", + "▁Ba d", + "▁ Bad", + "▁st orm", + "▁stor m", + "▁sto rm", + "▁ storm", + "▁N at", + "▁Na t", + "▁bu ying", + "▁buy ing", + "▁S ometimes", + "▁Some times", + "▁С та", + "es sed", + "ess ed", + "esse d", + "▁da mn", + "▁dam n", + "▁m eg", + "▁me g", + "um es", + "ume s", + "u mes", + "ün d", + "ü nd", + "т ра", + "▁sil ver", + "w d", + "hid den", + "h idden", + "ar do", + "ard o", + "▁commun ities", + "▁d iet", + "▁di et", + "▁die t", + "ot ted", + "ott ed", + "otte d", + "▁b at", + "▁ba t", + "▁ bat", + "an cer", + "ance r", + "anc er", + "▁f mt", + "▁ fmt", + "▁P en", + "▁Pe n", + "▁ Pen", + "▁t il", + "▁ti l", + "▁ til", + "En um", + "E num", + "PA TH", + "P ATH", + "▁mat ters", + "▁matter s", + "▁matt ers", + "time out", + "-- ----------", + "---- --------", + "-------- ----", + "--- ---------", + "----- -------", + "---------- --", + "------ ------", + "--------- ---", + "------- -----", + "----------- -", + "- -----------", + "ka n", + "k an", + "▁Cor por", + "=\" ../../", + "=\"../ ../", + "▁A le", + "▁Al e", + "hent ication", + "hentic ation", + "▁com plic", + "▁comp lic", + "▁compl ic", + "▁Se curity", + "▁Sec urity", + "▁ Security", + "OF F", + "O FF", + "R ad", + "ap se", + "aps e", + "a pse", + "▁d ance", + "▁dan ce", + "▁perm issions", + "▁permission s", + "▁war rant", + "▁l ad", + "▁la d", + "▁ lad", + "▁is ol", + "▁i sol", + "d l", + "▁A u", + "ye s", + "y es", + "▁t v", + "▁ tv", + "▁pro vider", + "▁prov ider", + "▁provide r", + "▁ provider", + "▁ter rible", + "▁terr ible", + "▁dep artment", + "▁depart ment", + "er al", + "era l", + "e ral", + "▁implement ation", + "S R", + "▁h earing", + "▁he aring", + "▁hear ing", + "▁K n", + "F R", + "t v", + "▁d iss", + "▁dis s", + "▁di ss", + "F UN", + "▁dur ante", + "▁durant e", + "os is", + "osi s", + "o sis", + "▁task s", + "▁ tasks", + "▁B lo", + "▁Bl o", + "▁ Blo", + "во д", + "▁br anch", + "▁ branch", + "▁polit ics", + "▁E lle", + "▁El le", + "▁Ell e", + "▁lead ership", + "▁leader ship", + "▁leaders hip", + "ex pr", + "exp r", + "▁techn iques", + "▁technique s", + "pr ec", + "pre c", + "p rec", + "Sig ma", + "S igma", + "im ately", + "imate ly", + "imat ely", + "t k", + "ach ment", + "▁En ter", + "▁Ent er", + "▁ Enter", + "▁cre ative", + "▁creat ive", + "▁з на", + "▁ зна", + "ap py", + "app y", + "un ched", + "unch ed", + "unc hed", + "▁' ',", + "▁'' ,", + "on der", + "ond er", + "onde r", + "o nder", + "{ -", + "NU M", + "N UM", + "▁n arr", + "▁na rr", + "▁nar r", + "Mem ory", + "▁win ning", + "▁ winning", + "▁F ollow", + "▁Fol low", + "▁ Follow", + "*/ \r", + "vis ion", + "v ision", + "res ents", + "resent s", + "zi one", + "z ione", + "▁l atter", + "▁lat ter", + "▁requ ests", + "▁request s", + "▁ requests", + "▁m argin", + "▁mar gin", + "▁marg in", + "▁ margin", + "▁{ \"", + "▁ {\"", + "v ideo", + "c n", + "▁Im age", + "▁ Image", + "T im", + "CON FIG", + "CONF IG", + "▁all owing", + "▁allow ing", + "▁comb ined", + "▁combine d", + "PU T", + "P UT", + "▁instance of", + "ig in", + "igi n", + "i gin", + "▁p ero", + "▁per o", + "▁pe ro", + "▁' '", + "▁ ''", + "▁conf idence", + "▁equ ivalent", + "▁equival ent", + "pa d", + "p ad", + "ef fect", + "eff ect", + "e ffect", + "R X", + "▁l ang", + "▁la ng", + "▁lan g", + "▁ lang", + "str ong", + "▁b ridge", + "▁br idge", + "▁ bridge", + "ay a", + "a ya", + "▁t reated", + "▁tre ated", + "▁treat ed", + "▁f orth", + "▁for th", + "▁fort h", + "S W", + "▁account s", + "▁P O", + "▁ PO", + "▁list ening", + "▁listen ing", + "Ro ute", + "R oute", + "() ))", + "()) )", + "( )))", + "cp y", + "c py", + "▁re form", + "▁ref orm", + "▁g ate", + "▁ga te", + "▁ gate", + "▁W alk", + "▁Wal k", + "▁ Walk", + "▁some how", + "t f", + "▁l ayout", + "▁la yout", + "▁lay out", + "▁ layout", + "um in", + "umi n", + "u min", + "▁consider ing", + "▁consid ering", + "▁pre mi", + "▁pr emi", + "▁prem i", + "▁M om", + "▁Mo m", + "at han", + "ath an", + "a than", + "Ge n", + "G en", + "▁plan et", + "▁plane t", + "am ples", + "amp les", + "ample s", + "▁M O", + "▁ MO", + "sh op", + "s hop", + "▁prem ier", + "▁premi er", + "▁s impl", + "▁sim pl", + "▁s egu", + "▁se gu", + "▁seg u", + "L Y", + "Su m", + "S um", + "▁t ables", + "▁table s", + "▁tab les", + "▁ta bles", + "▁ tables", + "sk a", + "s ka", + "▁ ž", + "p d", + "▁s ous", + "▁so us", + "▁sou s", + "▁con ference", + "▁confer ence", + "▁D at", + "▁Da t", + "▁ Dat", + "Sc roll", + "▁stand ards", + "▁standard s", + "▁г ру", + "es se", + "ess e", + "▁citiz ens", + "▁citizen s", + "▁occur red", + "▁dem ocr", + "▁demo cr", + "▁e lev", + "▁el ev", + "▁ele v", + "▁S em", + "▁Se m", + "▁ Sem", + "ens us", + "he aders", + "head ers", + "header s", + "▁Ch ris", + "im ento", + "iment o", + "imen to", + "ko m", + "k om", + "Co r", + "C or", + "MI N", + "M IN", + "us her", + "ush er", + "Data base", + "Dat abase", + "▁f ormal", + "▁for mal", + "▁form al", + "▁forma l", + "ig ne", + "ign e", + "▁organ izations", + "▁organiz ations", + "▁organization s", + "▁I re", + "▁Ir e", + "X ml", + "и з", + "▁p ray", + "▁pr ay", + "▁pra y", + "▁b omb", + "▁bo mb", + "▁bom b", + "▁m and", + "▁man d", + "▁ma nd", + "▁ mand", + "er ts", + "ert s", + "▁c lock", + "▁cl ock", + "▁clo ck", + "▁ clock", + "▁b uck", + "▁bu ck", + "ва ли", + "вал и", + "в али", + "en sch", + "ens ch", + "▁v olt", + "▁vo lt", + "▁vol t", + "▁ volt", + "▁fil ms", + "▁film s", + "▁pl ants", + "▁plan ts", + "▁plant s", + "in ode", + "ino de", + "i node", + "Bo olean", + "▁restaur ant", + "ía n", + "í an", + "▁de but", + "▁deb ut", + "page s", + "pa ges", + "pag es", + "p ages", + "▁wor dt", + "▁word t", + "▁Б а", + "▁great est", + "(\" /", + "▁c opyright", + "▁copy right", + "▁ copyright", + "▁r it", + "▁ri t", + "▁ rit", + "size of", + "Tr ace", + "Tra ce", + "ue nt", + "uen t", + "u ent", + "ту р", + "т ур", + "▁k o", + "▁ ko", + ": \\", + "▁b igger", + "▁big ger", + "▁perfect ly", + "ten ance", + "MA SK", + "M ASK", + "r é", + "▁e tt", + "▁et t", + "▁ ett", + "▁n ose", + "▁no se", + "▁nos e", + "▁c raft", + "▁cr aft", + "▁ craft", + "it eral", + "ite ral", + "iter al", + "▁discuss ed", + "▁Jew ish", + "C ap", + "▁Un less", + "▁Jack son", + "Att ributes", + "Attribute s", + "Attrib utes", + "▁l unch", + "▁lun ch", + "ö l", + "at r", + "a tr", + "▁pay ing", + "▁pa ying", + "Par se", + "Pars e", + "P arse", + "() \r", + "( )\r", + "la d", + "l ad", + "▁r are", + "▁ra re", + "▁[ ];", + "▁[] ;", + "▁ [];", + "st one", + "ston e", + "sto ne", + "▁u nc", + "▁un c", + "▁ unc", + "▁def ense", + "▁defens e", + "} +", + "▁Gl obal", + "▁ Global", + "▁Sov iet", + "▁Austral ian", + "▁Australia n", + "▁g li", + "▁gl i", + "var iant", + "vari ant", + "▁R on", + "▁Ro n", + "▁lo an", + "St ep", + "Ste p", + "me mber", + "mem ber", + "m ember", + "Sc h", + "S ch", + "▁Commit tee", + "▁s pending", + "▁sp ending", + "▁spend ing", + "▁T ri", + "▁Tr i", + "▁ Tri", + "▁J ournal", + "▁Jour nal", + "▁ Journal", + "▁s ugar", + "▁su gar", + "▁sug ar", + "el ly", + "ell y", + "HT ML", + "▁ad vent", + "▁adv ent", + "win g", + "wi ng", + "w ing", + "▁Wh ether", + "▁Whe ther", + "or ation", + "▁N E", + "▁ NE", + "iv eness", + "ive ness", + "iven ess", + "▁h av", + "▁ha v", + "▁ hav", + "▁con scious", + "▁ conscious", + "ee n", + "e en", + "Sym bol", + "S ymbol", + "▁к у", + "▁ ку", + "Log ger", + "▁L ittle", + "▁Lit tle", + "wide t", + "wi det", + "wid et", + "oc ation", + "pi n", + "p in", + "▁sym met", + "▁A D", + "▁ AD", + "▁pos ts", + "▁po sts", + "▁post s", + "▁ posts", + "sh al", + "sha l", + "s hal", + "▁Con f", + "▁Co nf", + "▁ Conf", + "▁ch ose", + "▁cho se", + "ma l", + "m al", + "ul o", + "u lo", + "▁M ethod", + "▁ Method", + "▁miss ed", + "▁mis sed", + "Re move", + "Rem ove", + "Aut o", + "A uto", + "VAL UE", + "th let", + "▁For ce", + "▁ Force", + "p f", + "▁ Я", + "la te", + "lat e", + "l ate", + "▁p ul", + "▁pu l", + "▁ pul", + "Po p", + "P op", + "▁adv anced", + "▁advance d", + "air es", + "ai res", + "aire s", + "a ires", + "res sed", + "ress ed", + "resse d", + "r essed", + "AM E", + "A ME", + "be ll", + "bel l", + "b ell", + "ac hing", + "ach ing", + "achi ng", + "a ching", + "i ć", + "ec ho", + "ech o", + "e cho", + "H S", + "▁fun ny", + "ри и", + "▁e er", + "▁ve get", + "▁four th", + "c f", + "trans form", + "▁g rown", + "▁gr own", + "▁grow n", + "▁gro wn", + "▁Mc C", + "si te", + "s ite", + "▁b eneath", + "▁be neath", + "▁s hell", + "▁sh ell", + "▁she ll", + "▁shel l", + "▁ shell", + "x d", + "Pl ay", + "P lay", + "sh ort", + "Ro le", + "R ole", + "▁relig ion", + "in ator", + "ina tor", + "} <", + "\" ><", + "as p", + "a sp", + "aj o", + "a jo", + "ex ports", + "exp orts", + "export s", + "▁N ode", + "▁No de", + "▁ Node", + "▁j ako", + "▁ja ko", + "▁jak o", + "▁y a", + "▁ ya", + "▁success fully", + "▁successful ly", + "▁friend ly", + "▁ friendly", + "buf f", + "bu ff", + "b uff", + "DE FAULT", + "▁pre gn", + "▁preg n", + "Requ ired", + "Require d", + "▁b inary", + "▁bin ary", + "▁ binary", + "is ting", + "ist ing", + "isti ng", + "▁st ared", + "▁star ed", + "▁stare d", + "▁sta red", + "▁circum stances", + "▁х о", + "▁ хо", + "re i", + "r ei", + "▁Г о", + "Trans form", + "cn t", + "c nt", + "▁E xt", + "▁Ex t", + "▁ Ext", + "re port", + "rep ort", + "repo rt", + "VER SION", + "▁an aly", + "▁anal y", + "▁ analy", + "▁M arg", + "▁Mar g", + "▁Ma rg", + "▁al leg", + "▁all eg", + "▁alle g", + "build er", + "b uilder", + "To String", + "La yer", + "L ayer", + "ís t", + "í st", + "Pro p", + "Pr op", + "P rop", + "▁E mp", + "▁Em p", + "▁ Emp", + "} ]", + "▁s elling", + "▁sell ing", + "▁sel ling", + "▁ selling", + "▁que ue", + "▁ queue", + "▁ser iously", + "▁serious ly", + "▁L ead", + "▁Le ad", + "▁ Lead", + "text it", + "tex tit", + "test ing", + "tes ting", + "▁П ре", + "se curity", + "sec urity", + "ia ł", + "i ał", + "ú n", + "ch ip", + "chi p", + "c hip", + "▁c andidate", + "▁candid ate", + "▁min ister", + "▁mini ster", + "▁minist er", + "▁ minister", + "er ia", + "eri a", + "e ria", + "▁H et", + "▁He t", + "ди н", + "д ин", + "▁Brit ain", + "▁b arely", + "▁bar ely", + "▁bare ly", + "▁s ty", + "▁st y", + "▁ sty", + "▁Span ish", + "▁V en", + "▁Ve n", + "time r", + "ti mer", + "tim er", + "t imer", + "кі в", + "к ів", + "▁document s", + "▁doc uments", + "(' .", + "( '.", + "▁d ebug", + "▁de bug", + "▁deb ug", + "▁ debug", + "▁cont ro", + "▁contr o", + "сто я", + "▁j oy", + "▁jo y", + "▁ joy", + "S n", + "In v", + "I nv", + "▁pro tocol", + "▁proto col", + "▁prot ocol", + "▁ protocol", + "▁f aces", + "▁face s", + "▁fac es", + "▁fa ces", + "▁ faces", + "▁Des pite", + "se d", + "s ed", + "Con f", + "Co nf", + "AR G", + "A RG", + "▁e volution", + "▁ev olution", + "▁t od", + "▁to d", + "▁P romise", + "▁Prom ise", + "▁ Promise", + "▁pos ted", + "▁po sted", + "▁post ed", + "Per m", + "Pe rm", + "P erm", + "be t", + "b et", + "An g", + "A ng", + "J ust", + "▁r um", + "▁ru m", + "▁ rum", + "la yer", + "lay er", + "l ayer", + "▁beh avi", + "▁behav i", + "ip ping", + "ipp ing", + "ippi ng", + "i pping", + "▁d ynam", + "▁dy nam", + "▁dyn am", + "▁sch eme", + "▁sche me", + "▁ scheme", + "▁pro to", + "▁pr oto", + "▁prot o", + "▁ proto", + ") /", + "Col lections", + "Collection s", + "Collect ions", + "ri ev", + "rie v", + "r iev", + "▁C lick", + "▁Cl ick", + "▁ Click", + "▁u ns", + "▁un s", + "▁ uns", + "wide tilde", + "widet ilde", + "▁remember ed", + "г і", + "in ates", + "ina tes", + "inate s", + "▁incor por", + "▁De scription", + "▁Des cription", + "▁ Description", + "▁pre pare", + "▁prep are", + "▁prepar e", + "▁ prepare", + "▁F inal", + "▁Fin al", + "▁Fi nal", + "▁ Final", + "u ation", + "▁Qu een", + "▁Que en", + "> ;", + "▁autom atically", + "▁automatic ally", + "▁sh arp", + "▁shar p", + "▁sha rp", + "▁me at", + "at eur", + "ate ur", + "as tern", + "ast ern", + "aster n", + "aste rn", + "▁st uck", + "ASS ERT", + "▁pl anned", + "▁plan ned", + "do ts", + "dot s", + "d ots", + "ook ie", + "oo kie", + "▁His tor", + "▁Hist or", + "▁re views", + "▁review s", + "IM P", + "I MP", + "▁answ ered", + "▁answer ed", + "To tal", + "T otal", + "▁s au", + "▁sa u", + "▁Me xico", + "▁Mex ico", + "contin ue", + "▁App le", + "▁Ap ple", + "like ly", + "lik ely", + "з ва", + "us ers", + "use rs", + "user s", + "▁ident ified", + "▁L ev", + "▁Le v", + "▁m ol", + "▁mo l", + "▁Is lam", + "▁com mitted", + "▁comm itted", + "▁commit ted", + "wr it", + "w rit", + "бе р", + "б ер", + "ri ft", + "rif t", + "r ift", + "▁inter rupt", + "▁ interrupt", + "▁read only", + "sch ema", + "sche ma", + "s chema", + "S m", + "D ouble", + "az a", + "a za", + "▁H al", + "▁Ha l", + "▁ Hal", + "Mo ve", + "M ove", + "▁S eries", + "▁Se ries", + "▁Ser ies", + "▁Serie s", + "▁ Series", + "in line", + "▁кото ры", + "so c", + "s oc", + "▁t ent", + "▁te nt", + "▁ten t", + "▁a mer", + "▁am er", + "▁ amer", + "ak i", + "a ki", + "▁l ady", + "▁la dy", + "▁lad y", + "▁t ired", + "▁ti red", + "▁tire d", + "▁tir ed", + "if i", + "i fi", + "▁m ême", + "▁ même", + "ou ver", + "▁a side", + "▁as ide", + "Di d", + "D id", + "', \r", + "' ,\r", + "▁br inging", + "▁bring ing", + "Draw ing", + "ar o", + "a ro", + "▁R h", + "▁N az", + "▁Na z", + "es so", + "ess o", + "▁re action", + "▁react ion", + "mit ted", + "mitt ed", + "m itted", + "▁abs olute", + "▁absolut e", + "▁ absolute", + "ha ust", + "haus t", + "(( )", + "( ()", + "▁T ask", + "▁Ta sk", + "▁ Task", + "ER S", + "E RS", + "▁^ {", + "▁ ^{", + "V D", + "▁t one", + "▁to ne", + "▁ton e", + "dis t", + "di st", + "d ist", + "v s", + "▁whe el", + "▁ wheel", + "▁administr ation", + "▁admin istration", + "▁inter ests", + "▁interest s", + "▁point er", + "▁po inter", + "▁ pointer", + "▁en counter", + "▁enc ounter", + "ave r", + "av er", + "a ver", + "▁n ord", + "▁no rd", + "▁nor d", + "ke t", + "k et", + "▁b each", + "▁be ach", + "▁enjoy ed", + "cont ains", + "▁app end", + "▁ap pend", + "▁appe nd", + "▁ append", + "W ait", + "▁s quad", + "▁squ ad", + "ze l", + "z el", + "▁med ium", + "▁medi um", + "▁ medium", + "▁s ending", + "▁send ing", + "▁sen ding", + "▁L ady", + "▁La dy", + "▁Lad y", + "ç ões", + "▁dest ination", + "▁destin ation", + "▁ destination", + "ny ch", + "n ych", + "▁conf lict", + "▁conflic t", + "▁L y", + "▁v ul", + "▁vu l", + "▁bas ically", + "▁basic ally", + "re ated", + "reat ed", + "reate d", + "rea ted", + "bl ack", + "ug ins", + "ugin s", + "▁cal m", + "▁ca lm", + "ér ie", + "éri e", + "é rie", + "ha r", + "h ar", + "ла н", + "л ан", + "▁С е", + "w atch", + "▁P ut", + "▁Pu t", + "▁ Put", + "▁d ump", + "▁du mp", + "▁ dump", + "ac her", + "ach er", + "ache r", + "a cher", + "sc roll", + "scr oll", + "▁cl aimed", + "▁claim ed", + "▁ claimed", + "▁Cont rol", + "▁ Control", + "▁bl ind", + "en ti", + "ent i", + "▁Ke ep", + "▁ Keep", + "▁Develop ment", + "im ages", + "image s", + "ima ges", + "imag es", + "▁t ough", + "▁to ugh", + "▁tou gh", + "ge bra", + "geb ra", + "▁se pt", + "▁sep t", + "he w", + "h ew", + "▁s kill", + "▁sk ill", + "▁ski ll", + "▁ skill", + "▁T ay", + "▁Ta y", + "▁k tó", + "ow ner", + "own er", + "par e", + "pa re", + "p are", + "▁f ee", + "▁fe e", + "▁ fee", + "▁contin ues", + "▁continue s", + "▁continu es", + "▁k an", + "▁ka n", + "▁ kan", + "be s", + "b es", + "▁c ha", + "▁ch a", + "▁ cha", + "ov o", + "o vo", + "▁N ight", + "▁Ni ght", + "ict ure", + "sh ire", + "s hire", + "▁es say", + "▁ess ay", + "▁sup pose", + "▁supp ose", + "et ic", + "eti c", + "Ar t", + "A rt", + "ac on", + "aco n", + "a con", + "ll a", + "l la", + "word s", + "wor ds", + "w ords", + "▁compar ison", + "▁B E", + "▁ BE", + "▁challeng es", + "▁challenge s", + "▁o l", + "▁ ol", + "cite p", + "cit ep", + "▁F oot", + "▁Fo ot", + "▁ Foot", + "▁S uch", + "▁Su ch", + "▁ Such", + "▁p apers", + "▁paper s", + "▁pa pers", + "▁pap ers", + "act iv", + "qu er", + "que r", + "q uer", + "т я", + "▁Т о", + "сь кий", + "th ur", + "do ne", + "don e", + "d one", + "▁sh ock", + "▁ded icated", + "▁dedic ated", + "▁cor respond", + "▁correspon d", + "Se cond", + "Sec ond", + "▁b ull", + "▁bu ll", + "▁bul l", + "li fe", + "lif e", + "l ife", + "ind ent", + "inde nt", + "inden t", + "▁fig ures", + "▁figure s", + "▁And rew", + "▁Andre w", + "▁Andr ew", + "is p", + "i sp", + "▁fav our", + "зд а", + "з да", + "▁E lect", + "▁El ect", + "▁Ele ct", + "F ull", + "▁near by", + "▁Reg ister", + "▁ Register", + "Sc ale", + "Scal e", + "ic ations", + "ication s", + "и н", + "▁A M", + "▁ AM", + "pa ir", + "p air", + "▁pers pective", + "▁n os", + "▁no s", + "▁ nos", + "ap a", + "a pa", + "ost ał", + "osta ł", + "▁P ers", + "▁Per s", + "▁Pe rs", + "▁ Pers", + "ic er", + "ice r", + "i cer", + "▁pl astic", + "до в", + "д ов", + "ci ples", + "cipl es", + "cip les", + "z ą", + "cl os", + "c los", + "▁у ча", + "▁ Á", + "pl ugin", + "plug in", + "▁an gle", + "▁ang le", + "▁angl e", + "▁ angle", + "▁com mission", + "▁comm ission", + "▁fun ds", + "▁fund s", + "▁in du", + "▁ind u", + "▁d rawn", + "▁dr awn", + "▁draw n", + "á m", + "▁develop ing", + "▁seg ment", + "▁ segment", + "is me", + "ism e", + "sc r", + "s cr", + "▁l ies", + "▁li es", + "▁lie s", + "▁I L", + "▁ IL", + "▁a pi", + "▁ap i", + "▁ api", + "Ext ension", + "▁s cal", + "▁sc al", + "▁ scal", + "inst all", + "▁We ek", + "▁ Week", + "▁gen tle", + "▁gent le", + "▁Canad ian", + "▁d ialog", + "▁dial og", + "▁dia log", + "▁ dialog", + "▁art icles", + "▁article s", + "▁artic les", + "The me", + "Th eme", + "S M", + "▁B ul", + "▁Bu l", + "▁ Bul", + "▁l eur", + "▁le ur", + "▁s tom", + "▁st om", + "▁sto m", + "Pl ugin", + "▁по сле", + "▁пос ле", + "▁st ead", + "▁ste ad", + "▁ stead", + "▁ ś", + "ip her", + "iph er", + "i pher", + "▁pr ze", + "▁prz e", + "▁d raft", + "▁dr aft", + "▁ draft", + "bot tom", + "b ottom", + "▁{ };", + "▁{} ;", + "▁stay ed", + "fe ature", + "feat ure", + "▁v ot", + "▁vo t", + "▁fab ric", + "ç a", + "(' #", + "re a", + "r ea", + "▁re put", + "▁rep ut", + "▁C ir", + "▁Ci r", + "▁ Cir", + "▁A L", + "▁ AL", + "▁assert Equals", + "▁ assertEquals", + "result s", + "▁C ross", + "▁Cr oss", + "▁Cro ss", + "▁ Cross", + "urs day", + "▁a udio", + "▁aud io", + "▁ audio", + "▁g ap", + "▁ga p", + "▁stre ets", + "▁street s", + "▁scient ific", + "pl atform", + "▁a uss", + "▁au ss", + "▁aus s", + "▁C ro", + "▁Cr o", + "▁part ial", + "▁parti al", + "▁ partial", + "un c", + "u nc", + "▁cho ices", + "▁choice s", + "▁и ли", + "pr ed", + "pre d", + "p red", + "▁he ads", + "▁head s", + "▁ heads", + "ter day", + "▁N ick", + "▁Nic k", + "▁Ni ck", + "▁we ird", + "as ant", + "asa nt", + "▁represent ed", + "▁п и", + "▁ пи", + "D P", + "or ders", + "ord ers", + "order s", + "cl ock", + "c lock", + "▁H o", + "ar ters", + "art ers", + "arter s", + "arte rs", + "C md", + "og a", + "o ga", + "Key s", + "Ke ys", + "Re port", + "Rep ort", + "Repo rt", + "▁V ill", + "▁Vi ll", + "▁Vil l", + "▁M u", + "▁ Mu", + "▁own ed", + "▁ owned", + "SU CCESS", + "▁type of", + "▁ typeof", + "hd r", + "h dr", + "ua ble", + "u able", + "▁neighbor hood", + "▁A P", + "▁ AP", + "▁result ing", + "▁sh adow", + "▁ shadow", + "STR ING", + "▁video s", + "▁vide os", + "ле ння", + "лен ня", + "ex pect", + "exp ect", + "▁Val ley", + "▁Vall ey", + "▁g oto", + "▁go to", + "▁got o", + "▁ goto", + "▁S her", + "▁She r", + "▁Sh er", + "fr astr", + "▁oper ating", + "▁opera ting", + "▁э то", + "▁License d", + "▁Lic ensed", + "Var iable", + "Vari able", + "▁P R", + "▁ PR", + "▁H ans", + "▁Ha ns", + "▁Han s", + "cl one", + "▁G esch", + "▁Ge sch", + "▁Ges ch", + "▁B and", + "▁Ba nd", + "▁Ban d", + "▁ Band", + "... .....", + ".... ....", + "..... ...", + "ui ng", + "u ing", + "▁hundred s", + "▁о к", + "▁emot ional", + "▁emotion al", + "▁Ind ust", + ") +", + "▁Egy pt", + "▁fr anç", + "▁ š", + "▁f asc", + "▁fa sc", + "on to", + "ont o", + "▁A dam", + "▁Ad am", + "▁l aid", + "▁la id", + "▁r ig", + "▁ri g", + "▁ rig", + "▁det ailed", + "▁detail ed", + "▁im plements", + "▁implement s", + "▁impl ements", + "▁univers ity", + "▁H y", + "▁ Hy", + "▁g rid", + "▁gr id", + "▁gri d", + "▁ grid", + "▁reg ions", + "▁region s", + "St op", + "S top", + "▁s lot", + "▁sl ot", + "▁ slot", + "▁ang ry", + "▁- =", + "▁wait ed", + "▁wa ited", + "Ver t", + "V ert", + "\": \"", + "\" :\"", + "▁e lem", + "▁el em", + "▁ele m", + "▁ elem", + "▁r ég", + "▁ré g", + "ow ed", + "owe d", + "o wed", + "Mem ber", + "Me mber", + "M ember", + "▁r atio", + "▁rat io", + "▁ ratio", + "is en", + "ise n", + "i sen", + "▁L em", + "▁Le m", + "ge ry", + "ger y", + "g ery", + "▁c ream", + "▁cre am", + "▁ét ait", + "▁ était", + "▁g eb", + "▁ge b", + "▁ geb", + "un ique", + "uni que", + "▁D eb", + "▁De b", + "▁f actory", + "▁fact ory", + "▁factor y", + "▁ factory", + "ż e", + "d ialog", + "▁Con fig", + "▁Conf ig", + "▁ Config", + "Sy nc", + "S ync", + "an gers", + "ang ers", + "ange rs", + "anger s", + "▁gover ning", + "▁govern ing", + "▁H un", + "▁Hu n", + "Sp ace", + "S pace", + "▁j est", + "▁je st", + "ic ious", + "ici ous", + "icio us", + "▁em phas", + "▁emp has", + "um ps", + "ump s", + "▁E sp", + "▁Es p", + "▁ Esp", + "▁s ul", + "▁su l", + "▁histor ical", + "▁historic al", + "ij a", + "i ja", + "▁l ying", + "▁ly ing", + "▁ lying", + "▁St eve", + "▁Ste ve", + "▁me asures", + "▁measure s", + "▁meas ures", + "os to", + "ost o", + "o sto", + "? ”", + "▁p ocket", + "▁poc ket", + "▁S at", + "▁Sa t", + "▁p itch", + "▁pit ch", + "▁n atur", + "▁nat ur", + "▁hum ans", + "▁human s", + "▁Sim on", + "▁Si mon", + "ad ores", + "ado res", + "ador es", + "(\" \\", + "( \"\\", + "in king", + "ink ing", + "▁ex pos", + "▁exp os", + "mat erial", + "mate rial", + "m aterial", + "▁app arently", + "▁apparent ly", + "▁appar ently", + "▁C amb", + "▁Cam b", + "▁Ca mb", + "▁B ox", + "▁Bo x", + "▁ Box", + "▁s paces", + "▁sp aces", + "▁space s", + "ex ists", + "exist s", + "▁act ing", + "▁ac ting", + "OR Y", + "зо ва", + "Go od", + "G ood", + "ien ne", + "i enne", + "▁William s", + "▁f ruit", + "▁fr uit", + "▁fru it", + "ie ra", + "ier a", + "i era", + "▁L im", + "▁Li m", + "▁ Lim", + "▁t rait", + "▁tr ait", + "▁tra it", + "▁ trait", + "▁art ists", + "▁artist s", + "▁ab sor", + "▁abs or", + "ra it", + "rai t", + "r ait", + "LO AD", + "▁mov ies", + "▁movie s", + "▁d ynamic", + "▁dynam ic", + "▁dyn amic", + "▁ dynamic", + "as ts", + "ast s", + "a sts", + "▁In teger", + "▁ Integer", + "▁sm oke", + "п і", + "an gel", + "ang el", + "ange l", + ">( \"", + "> (\"", + "▁in strument", + "▁instr ument", + "▁f uel", + "▁fue l", + "▁fu el", + "но ї", + "atal ogue", + "atalog ue", + "▁s erial", + "▁se rial", + "▁ser ial", + "▁ serial", + "File s", + "Fil es", + "Fi les", + "F iles", + "▁bath room", + "il o", + "i lo", + "es to", + "est o", + "e sto", + "▁p m", + "▁ pm", + "ent ials", + "ential s", + "enti als", + "▁On line", + "wh ite", + "▁t ips", + "▁tip s", + "▁ti ps", + "▁cap able", + "Fi g", + "F ig", + "T V", + "▁о н", + "▁ он", + "k é", + "bit r", + "bi tr", + "b itr", + "Map ping", + "Ma pping", + "M apping", + "▁t ak", + "▁ta k", + "ю щи", + "в ля", + ")\" ,", + ") \",", + "▁K arl", + "▁Kar l", + "▁Ka rl", + "▁H uman", + "▁Hu man", + "▁Hum an", + "▁P ot", + "▁Po t", + "▁rep resents", + "▁represent s", + "▁cons istent", + "▁consist ent", + "_ (", + "we n", + "w en", + "▁R ose", + "▁Ro se", + "▁Ros e", + "la w", + "l aw", + "▁F ROM", + "▁FR OM", + "▁ FROM", + "▁beg ins", + "▁begin s", + "▁e dit", + "▁ed it", + "▁ edit", + "▁mount ain", + "▁ch apter", + "▁chap ter", + "▁wonder ed", + "▁indust rial", + "▁M ajor", + "▁Ma jor", + "▁Maj or", + "▁g es", + "▁ge s", + "▁ ges", + "▁direct ed", + "▁dire cted", + "er os", + "ero s", + "e ros", + "▁W ild", + "▁Wil d", + "▁Wi ld", + "li ament", + "lia ment", + "Bo ok", + "B ook", + "user name", + "ho t", + "h ot", + "▁n am", + "▁na m", + "▁ nam", + "▁le ague", + "br a", + "b ra", + "ко н", + "к он", + "▁T al", + "▁Ta l", + "▁В а", + "▁ex ports", + "▁exp orts", + "▁export s", + "▁ exports", + "( @", + "▁sh aring", + "▁shar ing", + "▁sha ring", + "▁T ro", + "▁Tr o", + "ś ć", + "ues day", + "yl v", + "y lv", + "▁gu itar", + "el en", + "ele n", + "e len", + "Se lection", + "Select ion", + "S election", + "▁conf ident", + "ry pto", + "rypt o", + "▁h ors", + "▁hor s", + "▁ho rs", + "ed itor", + "edit or", + "edi tor", + "▁should ers", + "▁shoulder s", + "get Name", + "en cing", + "enc ing", + "enci ng", + "SE LECT", + "SEL ECT", + "в ши", + "▁kind s", + "▁kin ds", + "▁W el", + "▁We l", + "▁pur poses", + "▁purpose s", + "Mat rix", + "in valid", + "▁own ers", + "▁owner s", + "▁ owners", + "▁Rec ords", + "▁Record s", + "▁ Records", + "▁Pro cess", + "▁ Process", + "▁c hat", + "▁ch at", + "▁cha t", + "▁ chat", + "▁D or", + "▁Do r", + "▁b in", + "▁bi n", + "▁ bin", + "re dit", + "red it", + "r edit", + "oi re", + "oir e", + "o ire", + "▁T otal", + "▁To tal", + "▁Tot al", + "▁ Total", + "▁F amily", + "▁Famil y", + "▁ Family", + "AR Y", + "▁b read", + "▁br ead", + "▁bre ad", + "▁ bread", + "▁com pre", + "▁comp re", + "▁compr e", + "▁sh oes", + "▁shoe s", + "▁r az", + "▁ra z", + "▁ raz", + "▁tr ace", + "▁tra ce", + "▁ trace", + "ne j", + "n ej", + "or ted", + "ort ed", + "orte d", + "h n", + "▁pro cedure", + "▁proced ure", + "pro perties", + "pl ier", + "▁h ero", + "▁he ro", + "▁her o", + "▁ hero", + "pan el", + "pa nel", + "p anel", + "▁mark ed", + "▁mar ked", + "▁wor ried", + "\\ |", + "pt s", + "p ts", + "▁S upport", + "▁Sup port", + "▁Supp ort", + "▁ Support", + "▁ser ving", + "▁serv ing", + "F ail", + "▁dis appoint", + "▁Sc ot", + "▁ple asure", + "▁j udge", + "▁jud ge", + "▁judg e", + "ze ich", + "▁for ever", + "▁fore ver", + "▁Ze it", + "uo us", + "u ous", + "in ent", + "ine nt", + "inen t", + "i nent", + "▁d w", + "▁ dw", + "▁w aren", + "▁war en", + "▁wa ren", + "▁ware n", + "▁fl ash", + "▁ flash", + "▁tro ops", + "▁dr ugs", + "▁dru gs", + "▁drug s", + "▁d iam", + "▁di am", + "▁dia m", + ". ~", + "im p", + "i mp", + "in ned", + "inn ed", + "▁E V", + "▁ EV", + "St ruct", + "Str uct", + "▁just ice", + "▁offic ials", + "▁official s", + "ff ff", + "fff f", + "f fff", + "▁Com mon", + "▁Comm on", + "▁ Common", + "▁C at", + "▁Ca t", + "▁ Cat", + "▁tom orrow", + "▁é l", + "▁ él", + "Text ure", + "Te xture", + "qp oint", + "q point", + "▁F ried", + "▁Fr ied", + "▁T erm", + "▁Te rm", + "▁Ter m", + "▁ Term", + "pgf qpoint", + "▁n em", + "▁ne m", + "▁ nem", + "no rm", + "nor m", + "n orm", + "▁hard ly", + "od a", + "o da", + "ze ta", + "zet a", + "z eta", + "em ic", + "emi c", + "e mic", + "▁по лу", + "▁пол у", + "▁lo aded", + "▁load ed", + "▁ loaded", + "ke s", + "k es", + "ci ó", + "c ió", + "▁f ool", + "▁fo ol", + "▁foo l", + "▁t rick", + "▁tr ick", + "▁tri ck", + "▁d st", + "▁ds t", + "▁ dst", + "Fin d", + "Fi nd", + "F ind", + "▁в се", + "}} ,", + "} },", + "▁frame work", + "▁ framework", + "▁mer ely", + "▁mere ly", + "▁un ion", + "▁ union", + "▁Ed ward", + "ri f", + "r if", + "Fl ag", + "F lag", + "▁cris is", + "▁cri sis", + "▁fin ite", + "▁ finite", + "▁l ol", + "▁lo l", + "▁K im", + "▁Ki m", + "на та", + "sin ce", + "s ince", + "▁com pat", + "▁comp at", + "▁ compat", + "▁p ert", + "▁per t", + "▁pe rt", + "▁ pert", + "ib ilities", + "ibil ities", + "▁tamb ién", + "ib li", + "▁t een", + "▁te en", + "▁ teen", + "▁sym pt", + "or al", + "ora l", + "o ral", + "de rs", + "der s", + "d ers", + "ot te", + "ott e", + "п ри", + "▁J ane", + "▁Jan e", + "▁Ja ne", + "▁original ly", + "▁origin ally", + "▁thro at", + "ma g", + "m ag", + "su p", + "s up", + "un i", + "u ni", + "$ $", + "▁L ibrary", + "▁ Library", + "▁att acks", + "▁attack s", + "in gen", + "ing en", + "inge n", + "(' /", + "▁h es", + "▁he s", + "▁ hes", + "co in", + "c oin", + "oun ce", + "▁Academ y", + "MOD ULE", + "is ms", + "ism s", + "▁A dv", + "▁Ad v", + "▁ Adv", + "▁B ol", + "▁Bo l", + "▁inc ident", + ")^ {", + ") ^{", + "▁b ij", + "▁bi j", + "▁R ome", + "▁Rom e", + "▁Ro me", + "▁It aly", + "▁Ital y", + "ev ents", + "event s", + "even ts", + "▁F ern", + "▁Fe rn", + "▁Fer n", + "▁b er", + "▁be r", + "▁ ber", + "▁sil ent", + "▁p ier", + "▁pie r", + "▁pi er", + "▁Y O", + "▁pl ain", + "▁ plain", + "B as", + "▁p ill", + "▁pi ll", + "▁pil l", + "ra se", + "ras e", + "r ase", + "▁car rying", + "▁carry ing", + "▁re sp", + "▁r esp", + "▁res p", + "▁ resp", + "ну ю", + "▁typ ical", + "Wrap per", + "W rapper", + "▁g au", + "▁ga u", + "▁chem ical", + "▁h al", + "▁ha l", + "▁ hal", + "th row", + "Cl uster", + "▁G ab", + "▁Ga b", + "▁G irl", + "▁Gi rl", + "▁Gir l", + "qu ir", + "▁A rg", + "▁Ar g", + "▁ Arg", + "▁rel ief", + "▁relie f", + "▁reli ef", + "▁В е", + "d m", + "▁fr ustr", + "▁fru str", + "\\ %", + "▁st ores", + "▁store s", + "▁stor es", + "▁sto res", + "▁bott le", + "▁bot tle", + "▁L ew", + "▁Le w", + "tw o", + "t wo", + "st ad", + "sta d", + "▁che ek", + "▁concern s", + "▁concer ns", + "▁help ful", + "▁co verage", + "▁cover age", + "is i", + "i si", + "AD D", + "A DD", + "as ync", + "asy nc", + "a sync", + "▁approxim ately", + "▁approx imately", + "▁approximate ly", + "if fer", + "iff er", + "iffe r", + "ho ok", + "h ook", + "▁e num", + "▁en um", + "▁ enum", + "ov á", + "o vá", + "▁e vil", + "▁ev il", + "▁const antly", + "▁constant ly", + "ap ply", + "app ly", + "▁si è", + "▁pract ices", + "▁practice s", + "▁te achers", + "▁teach ers", + "▁teacher s", + "▁S n", + "▁ Sn", + "▁A wards", + "▁Award s", + "▁Aw ards", + "▁sub stant", + "▁subst ant", + "▁$ .", + "▁ $.", + "d k", + "▁m ob", + "▁mo b", + "▁ mob", + "▁ing red", + "ve re", + "ver e", + "v ere", + "Mult i", + "пе р", + "п ер", + "st al", + "sta l", + "s tal", + "ya rd", + "yar d", + "y ard", + "requ ired", + "require d", + "ve ment", + "v ement", + "▁int elligence", + "▁intellig ence", + "▁th inks", + "▁think s", + "▁thin ks", + "▁person ally", + "▁personal ly", + "▁tr ained", + "▁tra ined", + "▁train ed", + "▁ trained", + "or ney", + "orn ey", + "orne y", + ") \\", + "an al", + "ana l", + "a nal", + "Se ction", + "S ection", + "pl us", + "ü t", + "▁em bed", + "▁emb ed", + "▁ embed", + "▁st rings", + "▁str ings", + "▁string s", + "▁ strings", + "Be fore", + "B efore", + "pro c", + "pr oc", + "p roc", + "▁с по", + "▁сп о", + "▁ спо", + "tr l", + "t rl", + "v r", + "Back ground", + "log ger", + "ag raph", + "agr aph", + "agra ph", + "a graph", + "ie st", + "ies t", + "i est", + "▁good s", + "bat ch", + "b atch", + "▁opt ional", + "▁option al", + "▁ optional", + "▁Tay lor", + "▁recogn ize", + "wal k", + "w alk", + "▁H it", + "▁Hi t", + "▁ Hit", + "▁Eliz abeth", + "} :", + "▁care ful", + "кра ї", + "▁loc ations", + "▁location s", + "▁struct ures", + "▁structure s", + "▁d isk", + "▁dis k", + "▁di sk", + "▁ disk", + "▁sh ips", + "▁ship s", + "▁ ships", + "▁s uo", + "▁su o", + "▁s owie", + "▁so wie", + "▁sow ie", + "▁E ss", + "▁Es s", + "▁H ash", + "▁Ha sh", + "▁Has h", + "▁ Hash", + "▁reason able", + "▁More over", + "▁form ula", + "▁C entre", + "▁Cent re", + "▁res idents", + "▁resident s", + "▁resid ents", + "R S", + "Id s", + "I ds", + "▁K now", + "▁Kn ow", + "▁t rib", + "▁tr ib", + "▁tri b", + "▁r és", + "▁ré s", + "▁s table", + "▁st able", + "▁sta ble", + "▁stab le", + "▁ stable", + "▁W ould", + "▁Wo uld", + "▁ Would", + "▁break ing", + "▁bre aking", + "▁ breaking", + "▁me al", + "▁p hen", + "▁ph en", + "▁f el", + "▁fe l", + "▁ fel", + "▁F red", + "▁Fr ed", + "▁Fre d", + "Aut hor", + "Auth or", + "▁c apture", + "▁capt ure", + "▁ capture", + "op ts", + "opt s", + "o pts", + "▁every where", + "▁s que", + "▁squ e", + "▁sq ue", + "▁m oder", + "▁mod er", + "▁mo der", + "▁mode r", + "set up", + "▁S upp", + "▁Su pp", + "▁Sup p", + "▁ Supp", + "▁when ever", + "▁whe never", + "{ (", + "wa rt", + "war t", + "w art", + "▁t oe", + "▁to e", + "Pre fix", + "Pref ix", + "P refix", + "ho u", + "h ou", + "ga ge", + "g age", + "> \"", + "▁f rag", + "▁fr ag", + "▁fra g", + "▁ frag", + "▁The orem", + "mem ory", + "▁cont ents", + "▁content s", + "▁conten ts", + "▁ contents", + "do cs", + "doc s", + "} '", + "▁Ir ish", + "The n", + "Th en", + "T hen", + "aa ts", + "aat s", + "a ats", + "Sa ve", + "S ave", + "▁a gency", + "▁ag ency", + "▁и ме", + "▁им е", + "до ва", + "дов а", + "▁F unction", + "▁Fun ction", + "▁ Function", + "N N", + "dest roy", + "▁M essage", + "▁Mess age", + "▁ Message", + "▁c ancel", + "▁can cel", + "▁ cancel", + "▁super ior", + "▁e c", + "▁ ec", + "▁liter ature", + "▁P ART", + "▁PA RT", + "▁PAR T", + "▁ PART", + "I l", + "▁C ab", + "▁Ca b", + "eng ine", + "▁b asket", + "▁bas ket", + "wor th", + "wort h", + "w orth", + "▁S el", + "▁Se l", + "f etch", + "▁St adt", + "▁Stad t", + "▁Sta dt", + "▁К и", + "▁con j", + "▁se iner", + "▁sein er", + "▁seine r", + "▁sei ner", + "▁conf irmed", + "▁confirm ed", + "▁Ar gent", + "▁Arg ent", + "am ar", + "ama r", + "a mar", + "pgf path", + "▁strugg le", + "Pat tern", + "▁M iddle", + "it an", + "ita n", + "i tan", + "▁m oon", + "▁mo on", + "or ough", + "oro ugh", + "o rough", + "▁Cath olic", + "▁str uck", + "▁stru ck", + "] ->", + "▁we apon", + "▁weap on", + "▁su bst", + "▁sub st", + "▁subs t", + "▁inst ructions", + "▁instruct ions", + "▁instruction s", + "▁occ as", + "▁oc cas", + "prote cted", + "▁L ess", + "▁Le ss", + "▁Les s", + "▁ Less", + "▁b atch", + "▁bat ch", + "▁ batch", + "▁con tra", + "▁cont ra", + "▁contr a", + "▁de ck", + "▁dec k", + "▁ deck", + "▁ign ored", + "▁ignore d", + "▁ignor ed", + "▁ref used", + "▁refuse d", + "tr igger", + "▁crim inal", + "G A", + "ol ly", + "oll y", + "▁B ell", + "▁Be ll", + "▁Bel l", + "▁ Ю", + "for ward", + "▁p refix", + "▁pre fix", + "▁pref ix", + "▁ prefix", + "▁im mediate", + "▁immedi ate", + "▁as signed", + "▁ass igned", + "▁assign ed", + "▁e lected", + "▁elect ed", + "▁ele cted", + "▁to night", + "▁ton ight", + "▁D ies", + "▁Die s", + "▁Di es", + "▁B each", + "▁Be ach", + "▁pre ced", + "▁prec ed", + "ow ał", + "owa ł", + "▁gal ax", + "▁log ic", + "en za", + "enz a", + "▁Cap tain", + "▁Capt ain", + "▁H ay", + "▁Ha y", + "▁f acts", + "▁fact s", + "▁fac ts", + "▁н и", + "▁ ни", + "t é", + "▁s b", + "▁ sb", + "op ed", + "ope d", + "o ped", + "▁com bat", + "▁comb at", + "▁expl ore", + "▁explo re", + "▁( -", + "▁ (-", + "Load er", + "Lo ader", + "▁Wil son", + "▁l ocked", + "▁loc ked", + "▁lock ed", + "▁ locked", + ": )", + "▁qu el", + "▁que l", + "▁q uel", + "▁ quel", + "▁Г а", + "T y", + "▁tem ps", + "▁temp s", + "▁g host", + "Mat erial", + "M aterial", + "ER CHANT", + "point er", + "po inter", + "ж да", + "ah a", + "a ha", + "ul f", + "▁sup plement", + "▁supp lement", + "▁d ismiss", + "▁dis miss", + "▁cl osing", + "▁clos ing", + "▁clo sing", + "▁vul ner", + "▁ap rès", + "▁apr ès", + "▁over whel", + "ско е", + "▁dis ag", + "ac ia", + "aci a", + "a cia", + "ou red", + "our ed", + "o ured", + "ru ption", + "rupt ion", + "▁P S", + "▁ PS", + "End point", + "Re al", + "▁T ag", + "▁Ta g", + "▁ Tag", + "▁st airs", + "▁sta irs", + "▁stair s", + "▁ stairs", + "ly n", + "l yn", + "▁e leg", + "▁el eg", + "▁ele g", + "▁v eter", + "▁ve ter", + "▁vet er", + "factor y", + "fact ory", + "f actory", + "an ne", + "ann e", + "▁B at", + "▁Ba t", + "▁fr anc", + "▁fra nc", + "lu ng", + "l ung", + "▁\" '", + ".' ,", + ". ',", + "▁C ountry", + "▁Count ry", + "▁Coun try", + "▁ Country", + "^{ [", + "▁y ours", + "▁you rs", + "▁your s", + "▁yo urs", + "ail ability", + "Cl ear", + "C lear", + "ät t", + "ä tt", + "пи с", + "п ис", + "▁j oke", + "▁jo ke", + "▁ann oy", + "▁r ag", + "▁ra g", + "▁ rag", + "var i", + "va ri", + "v ari", + "ле кс", + "лек с", + "▁P sy", + "il ty", + "ilt y", + "mo unt", + "m ount", + "▁c ual", + "▁cu al", + "▁s olar", + "▁so lar", + "▁sol ar", + "}^ {(", + "}^{ (", + "} ^{(", + "Sh ort", + "▁tax es", + "App end", + "Ap pend", + "Appe nd", + "W in", + "est yle", + "esty le", + "e style", + "▁fac il", + "▁fa cil", + "в ро", + "▁s ought", + "▁sou ght", + "▁b are", + "▁bar e", + "▁ba re", + "▁re act", + "▁ react", + "ja r", + "j ar", + "MA C", + "M AC", + "lo v", + "l ov", + "wa rn", + "war n", + "w arn", + "▁cru cial", + "▁m useum", + "ни ц", + "▁K ent", + "▁Ke nt", + "▁Ken t", + "May be", + "▁b ike", + "▁bi ke", + "▁Add ress", + "▁ Address", + "X ML", + "▁ad mitted", + "▁adm itted", + "▁admit ted", + "▁$ (\\", + "▁$( \\", + "▁sp ell", + "▁spe ll", + "▁spel l", + "▁ spell", + "▁v ic", + "▁vi c", + "gr e", + "g re", + "▁p roc", + "▁pro c", + "▁pr oc", + "▁ proc", + "th eless", + "the less", + "▁N om", + "▁No m", + "▁R ail", + "▁Ra il", + "▁acc eler", + "▁con vin", + "▁conv in", + "▁Pro perty", + "▁ Property", + "▁D A", + "▁ DA", + "▁cl ip", + "▁ clip", + "▁pl ugin", + "▁plug in", + "▁ plugin", + "Lim it", + "Li mit", + "L imit", + "view s", + "br u", + "b ru", + "▁p ra", + "▁pr a", + "▁a k", + "▁ ak", + "▁e j", + "▁ ej", + "▁o pts", + "▁op ts", + "▁opt s", + "▁ opts", + "▁sl ip", + "▁g ang", + "▁gan g", + "▁ga ng", + "▁ gang", + "as ted", + "ast ed", + "aste d", + "a sted", + "ual s", + "ua ls", + "u als", + "▁d ying", + "▁dy ing", + "Col l", + "Co ll", + "C oll", + "am men", + "amm en", + "▁Pol icy", + "▁ Policy", + "ERCHANT ABILITY", + "▁Col lection", + "▁Coll ection", + "▁Collect ion", + "▁ Collection", + "▁v ec", + "▁ve c", + "▁ vec", + "▁D ick", + "▁Di ck", + "st ud", + "▁la yers", + "▁lay ers", + "▁layer s", + "▁ layers", + "▁t ied", + "▁tie d", + "▁ti ed", + "}\\ \\", + "} \\\\", + "▁al ors", + "▁j ou", + "▁jo u", + "▁ch icken", + "▁chi cken", + "▁chick en", + "▁perman ent", + "▁Every thing", + "▁L ow", + "▁Lo w", + "▁ Low", + "▁C ook", + "▁Co ok", + "▁pe ak", + "▁PARTIC ULAR", + "▁d ear", + "▁de ar", + "i č", + "▁introdu ce", + "▁caus ing", + "▁ca using", + "пи са", + "пис а", + "Bo und", + "B ound", + "hu nd", + "h und", + "mult i", + "mul ti", + "▁p are", + "▁par e", + "▁pa re", + "▁ pare", + "an nt", + "ann t", + "▁b reat", + "▁bre at", + "▁commit ment", + "▁increasing ly", + "ко й", + "▁F riend", + "▁ Friend", + "▁stat istics", + "▁statist ics", + "▁Man ager", + "▁ Manager", + "pl icate", + "plic ate", + "plica te", + "Cl oud", + "ac i", + "a ci", + "▁Con ference", + "Sp an", + "S pan", + "▁C EO", + "▁CE O", + "▁W ait", + "▁Wa it", + "▁ Wait", + "▁O ber", + "▁Ob er", + "if ting", + "ift ing", + "im iento", + "imi ento", + "get Element", + "▁g le", + "▁gl e", + "▁ gle", + "ли я", + "▁w ieder", + "▁wie der", + "▁inst ruction", + "▁instr uction", + "▁instruct ion", + "gl y", + "g ly", + "▁bl ame", + "▁list ade", + "▁lista de", + "▁a apt", + "▁Lew is", + "Fr agment", + "▁g ear", + "▁ge ar", + "mi ll", + "mil l", + "m ill", + "pro d", + "pr od", + "p rod", + "▁bur ning", + "▁burn ing", + "є ться", + "▁m é", + "▁ mé", + "è ne", + "▁com plicated", + "▁compl icated", + "▁complic ated", + "b h", + "▁Just ice", + "▁t ested", + "▁te sted", + "▁test ed", + "▁st aring", + "▁star ing", + "▁sta ring", + "▁surv ive", + "▁surviv e", + "▁c ous", + "▁co us", + "▁cou s", + "▁r ib", + "▁ri b", + "▁ rib", + "am l", + "a ml", + "▁T rust", + "▁Tr ust", + "▁Tru st", + "▁c ad", + "▁ca d", + "▁T err", + "▁Te rr", + "▁Ter r", + "▁m apping", + "▁map ping", + "▁ma pping", + "▁ mapping", + "▁tw elve", + "▁g rant", + "▁gr ant", + "▁gran t", + "▁gra nt", + "▁th orough", + "▁ Ü", + "▁fol ks", + "▁folk s", + "▁Cont ent", + "▁ Content", + "▁child hood", + "ck er", + "cke r", + "c ker", + "с но", + "RE CT", + "REC T", + "R ECT", + "▁f inale", + "▁fin ale", + "▁final e", + "▁sh ower", + "▁show er", + "ér ic", + "éri c", + "é ric", + "▁s pat", + "▁sp at", + "od ge", + "р ь", + "▁p es", + "▁pe s", + "▁ pes", + "ed a", + "e da", + "D b", + "▁Ant onio", + "▁Anton io", + "▁eng aged", + "▁engage d", + "▁v ess", + "▁ve ss", + "val s", + "va ls", + "v als", + "▁elect ronic", + "▁electron ic", + "▁electro nic", + "le mma", + "lem ma", + "▁W y", + "ma d", + "m ad", + "mer ge", + "ap on", + "a pon", + "▁priv ile", + "▁nov embre", + "▁nove mbre", + "▁S ports", + "▁Sp orts", + "▁Sport s", + "wi ll", + "w ill", + "▁control s", + "▁contr ols", + "▁contro ls", + "▁ controls", + "▁c ategories", + "▁categ ories", + "▁categor ies", + "▁ categories", + "▁Georg ia", + "ip edia", + "▁A V", + "▁ AV", + "at ori", + "ator i", + "ato ri", + "▁_ __", + "▁__ _", + "▁ ___", + "▁ À", + "▁R yan", + "▁Ry an", + "▁Char lie", + "▁Charl ie", + "▁и сто", + "▁ис то", + "▁em otion", + "▁emot ion", + "▁co oking", + "▁cook ing", + "▁attempt s", + "▁FIT NESS", + "ät er", + "ä ter", + "En able", + "D T", + "▁Ch ange", + "▁ Change", + "Asp Net", + "▁г а", + "▁ га", + "▁ord inary", + "▁ordin ary", + "▁S QL", + "▁ SQL", + "pl ane", + "plan e", + "p lane", + "% .", + "▁Sum mer", + "▁av ait", + "up p", + "u pp", + "▁ill ness", + "UI NT", + "U INT", + "> {", + "▁zw ischen", + "▁hard ware", + "▁sound ed", + "equ iv", + "▁p iano", + "▁pi ano", + "▁pian o", + "us et", + "use t", + "u set", + "k n", + "TR Y", + "▁b ab", + "▁ba b", + "не н", + "н ен", + "▁rel iable", + "▁reli able", + "▁Bron nen", + "▁St ore", + "▁Sto re", + "▁ Store", + "A z", + "▁» ,", + "▁ »,", + "St atic", + "Stat ic", + "d w", + "gr een", + "gre en", + "g reen", + "▁' ';", + "▁'' ;", + "li j", + "l ij", + "ev a", + "e va", + "ні й", + "▁S yd", + "▁Sy d", + "in ois", + "ino is", + "con vert", + "conv ert", + "▁decl are", + "▁declar e", + "br es", + "bre s", + "b res", + "IN K", + "it led", + "itle d", + "▁acc ord", + "▁ac cord", + "▁m ars", + "▁mar s", + "▁ma rs", + "Sequ ence", + "zi p", + "z ip", + "▁Braz il", + "▁meet ings", + "▁meeting s", + "▁accur acy", + "▁M achine", + "▁Mach ine", + "▁ Machine", + "▁aut or", + "▁au tor", + "▁auto r", + "▁ autor", + "▁a insi", + "▁ain si", + "Sim ple", + "Res ources", + "Re sources", + "Resource s", + "ка за", + "каз а", + "▁M P", + "▁ MP", + "th ey", + "the y", + "▁B ang", + "▁Ba ng", + "▁Ban g", + "▁e ing", + "▁ein g", + "▁ eing", + "ate ful", + "▁Some thing", + "▁Som ething", + "▁ Something", + "▁up set", + "Hist ory", + "Hi story", + "dim ensional", + "▁explan ation", + "▁c iv", + "▁ci v", + "▁c once", + "▁con ce", + "▁conc e", + "▁kö z", + "▁prom ised", + "▁promise d", + "ж ду", + "we d", + "w ed", + "For e", + "F ore", + "Am ount", + "A mount", + "ab b", + "a bb", + "▁cl othing", + "▁cloth ing", + "▁clo thing", + "ли сь", + "oe n", + "o en", + "▁Pr int", + "▁Pri nt", + "▁Prin t", + "▁ Print", + "▁s izes", + "▁size s", + "▁si zes", + "▁b anks", + "▁bank s", + "▁ban ks", + "ri bed", + "rib ed", + "ribe d", + "▁' ../", + "▁'. ./", + "FI X", + "F IX", + "▁H ug", + "▁Hu g", + "▁z n", + "▁ zn", + "▁I NT", + "▁IN T", + "▁ INT", + "▁in stances", + "▁inst ances", + "▁instance s", + "▁along side", + "Name space", + "Names pace", + "▁re new", + "▁ren ew", + "▁a sc", + "▁as c", + "▁ asc", + "▁w aves", + "▁wa ves", + "▁wave s", + "▁p om", + "▁po m", + "D uration", + "day s", + "da ys", + "d ays", + "$ (", + "▁grab bed", + "▁sur gery", + "▁surge ry", + "▁surg ery", + "▁re store", + "▁rest ore", + "▁ restore", + "Norm al", + "N ormal", + "▁L eb", + "▁Le b", + "▁anal yt", + "▁analy t", + "Lite ral", + "L iteral", + "H A", + "▁sh ares", + "▁share s", + "▁shar es", + "▁sha res", + "il let", + "ill et", + "ille t", + "ol s", + "o ls", + "▁D og", + "▁Do g", + "or no", + "orn o", + "▁man ip", + "ja v", + "j av", + "▁ess entially", + "▁essential ly", + "▁cas ual", + "op l", + "o pl", + "▁ р", + "▁S U", + "▁ SU", + "▁engine ering", + "▁engineer ing", + "▁Pr ime", + "▁Pri me", + "▁Prim e", + "▁S W", + "▁ SW", + "▁re aching", + "▁reach ing", + "▁в ла", + "▁Ро сси", + "▁K re", + "▁Kr e", + "er ry", + "err y", + "▁op pon", + "▁opp on", + "pro gram", + "pr ogram", + "em per", + "emp er", + "is Empty", + "▁U nit", + "▁Un it", + "▁ Unit", + "IN TER", + "INT ER", + "INTE R", + "et he", + "eth e", + "e the", + "z d", + "CU R", + "C UR", + "▁v m", + "▁ vm", + "con v", + "co nv", + "ro pol", + "rop ol", + "r opol", + "▁Co ast", + "▁S elect", + "▁Se lect", + "▁Sel ect", + "▁ Select", + "▁бы ла", + "▁был а", + "▁V e", + "ow y", + "o wy", + "▁my th", + "ce ptions", + "ception s", + "cept ions", + "class es", + "▁w orden", + "▁wor den", + "▁word en", + "▁ass ault", + "▁d ual", + "▁du al", + "OR K", + "▁in ches", + "▁inc hes", + "▁inch es", + "▁F A", + "▁ FA", + "▁St ation", + "▁Stat ion", + "▁ Station", + "▁person ality", + "▁personal ity", + "▁s car", + "▁sc ar", + "▁ scar", + "▁reg ime", + "▁not en", + "▁no ten", + "▁note n", + "▁r ural", + "▁ru ral", + "iz a", + "i za", + "Aud io", + "A udio", + "▁dis put", + "▁disp ut", + "▁a ver", + "▁av er", + "▁ave r", + "▁ aver", + "▁o bst", + "▁ob st", + "▁obs t", + "▁Reg ion", + "▁ Region", + "ut f", + "u tf", + "▁C ass", + "▁Cas s", + "▁Ca ss", + "hs pace", + "h space", + "▁sh ipping", + "▁ship ping", + "ik o", + "i ko", + "ic ked", + "ick ed", + "num er", + "nu mer", + "n umer", + "д на", + "ri el", + "rie l", + "r iel", + "dis abled", + "disable d", + "op ol", + "o pol", + "lo oking", + "look ing", + "▁class ical", + "▁classic al", + "▁construct ed", + "▁constru cted", + "▁refer enties", + "] +", + "▁capt ured", + "▁capture d", + "▁min imal", + "▁minim al", + "▁mini mal", + "▁s ock", + "▁so ck", + "▁soc k", + "▁ sock", + "fa ther", + "f ather", + "is ión", + "isi ón", + "▁equ ally", + "▁equal ly", + "▁eq ually", + "▁red uction", + "▁redu ction", + "An t", + "A nt", + "ais on", + "ai son", + "a ison", + "▁ar gue", + "▁arg ue", + "cir cle", + "circ le", + "▁t oler", + "▁to ler", + "}\" ,", + "} \",", + "▁prim arily", + "us al", + "usa l", + "u sal", + "▁al gebra", + "▁gather ed", + "▁Re member", + "▁Rem ember", + "_) ;", + "_ );", + "UT E", + "U TE", + "▁K it", + "▁Ki t", + "▁ Kit", + "S y", + "HE AD", + "▁re cipe", + "▁rec ipe", + "▁recip e", + "▁sc enario", + "▁scen ario", + "▁Follow ing", + "VA R", + "V AR", + "▁y ard", + "▁ya rd", + "▁ yard", + "▁st ad", + "▁sta d", + "▁ stad", + "* (", + "▁valid ate", + "▁ validate", + "DE X", + "D EX", + "▁commit tee", + "▁t emporary", + "▁tempor ary", + "▁consequ ences", + "▁consequence s", + "▁égal ement", + "кти в", + "к тив", + "▁r a", + "▁ ra", + "▁dis pl", + "▁di spl", + "▁disp l", + "▁app s", + "▁ap ps", + "▁ apps", + "▁Te il", + "▁» .", + "▁ ».", + "▁adopt ed", + "ten sor", + "t ensor", + "▁fe min", + "▁fem in", + "▁м ар", + "▁ма р", + "ло ги", + "te ch", + "t ech", + "▁R ot", + "▁Ro t", + "▁ Rot", + "▁kn ees", + "▁kne es", + "▁knee s", + "ph ys", + "phy s", + "ow ej", + "owe j", + "▁Ox ford", + "ан д", + "а нд", + "he ll", + "hel l", + "h ell", + "ograf ia", + "▁ex posed", + "▁exp osed", + "▁expos ed", + "▁expose d", + "kt op", + "k top", + "ob y", + "o by", + "lo wer", + "low er", + "l ower", + "▁Se nate", + "▁Sen ate", + "▁s word", + "▁sw ord", + "▁swo rd", + "Fl ow", + "F low", + "▁Un fortunately", + "▁box es", + "▁ boxes", + "▁cu ando", + "▁pi lot", + "▁pil ot", + "▁Al bum", + "▁Alb um", + "B al", + "So rt", + "S ort", + "FI ELD", + "▁de sert", + "▁des ert", + "CO MM", + "COM M", + "ro ns", + "ron s", + "r ons", + "ad ows", + "ado ws", + "adow s", + "▁l oyal", + "▁lo yal", + "▁as set", + "▁ass et", + "▁ asset", + "▁m ud", + "▁mu d", + "ф а", + "▁second ary", + "▁ secondary", + "▁А р", + "▁c ul", + "▁cu l", + "▁ cul", + "▁As ian", + "▁Asia n", + "▁stay ing", + "▁sta ying", + "▁data set", + "▁dat aset", + "▁ dataset", + "▁U SE", + "▁US E", + "▁ USE", + "▁l oves", + "▁lo ves", + "▁love s", + "▁lov es", + "▁vel ocity", + "▁veloc ity", + "á v", + "▁purch ased", + "▁purchase d", + "SO C", + "S OC", + "▁compet itive", + "▁Foot ball", + "is ka", + "isk a", + "i ska", + "▁kn ock", + "st airs", + "sta irs", + "az y", + "a zy", + "▁v end", + "▁ve nd", + "▁ven d", + "▁ar ts", + "▁art s", + "▁ arts", + "▁B ras", + "▁Br as", + "▁Bra s", + "ue la", + "uel a", + "u ela", + "кт о", + "к то", + "tr im", + "tri m", + "t rim", + "▁d irty", + "▁dir ty", + "▁dirt y", + "▁ dirty", + "▁webs ites", + "▁website s", + "▁In dep", + "▁Ind ep", + "▁с тра", + "▁ст ра", + "▁ стра", + "s r", + "▁t icket", + "▁tick et", + "at ile", + "ati le", + "a tile", + "▁implement ed", + "▁вре мя", + "▁bo wl", + "▁bow l", + "DA TE", + "DAT E", + "D ATE", + "▁al ter", + "▁alt er", + "▁ alter", + "▁S pace", + "▁Sp ace", + "▁ Space", + "▁accom pan", + "▁accomp an", + "or don", + "ord on", + "▁do ctors", + "▁doctor s", + "ist as", + "ista s", + "C ast", + "до м", + "CT L", + "C TL", + "ur ers", + "ure rs", + "urer s", + "▁ingred ients", + "▁calcul ated", + "▁calculate d", + "▁calc ulated", + "▁le ather", + "▁s ensitive", + "▁sens itive", + "▁sus pic", + "▁susp ic", + "st an", + "sta n", + "s tan", + "▁an ni", + "▁ann i", + "▁ anni", + "aw ait", + "awa it", + "a wait", + "▁Fr anç", + "▁Fran ç", + "▁ab ort", + "▁ abort", + "▁Sp irit", + "▁W alter", + "▁Wal ter", + "▁Walt er", + "un kt", + "unk t", + "▁vert ical", + "▁ vertical", + "OR S", + "O RS", + "be st", + "bes t", + "b est", + "▁Cl ient", + "▁ Client", + "it ated", + "ita ted", + "itate d", + "itat ed", + "▁в а", + "▁ ва", + "▁ Č", + "▁v ille", + "▁vi lle", + "▁vill e", + "▁vil le", + "▁ ville", + "▁di plom", + "or ne", + "orn e", + "▁b ars", + "▁bar s", + "▁ba rs", + "▁ bars", + "U ri", + "AP TER", + "pon s", + "po ns", + "p ons", + "ut z", + "u tz", + "Pro to", + "Pr oto", + "▁st ir", + "▁ц е", + "▁ це", + "▁pr imer", + "▁prim er", + "▁pri mer", + "▁prime r", + "ig ible", + "igi ble", + "ex tra", + "ext ra", + "extr a", + "▁Bo oks", + "▁Book s", + "▁B os", + "▁Bo s", + "▁E t", + "▁W elt", + "▁We lt", + "▁Wel t", + "▁Kore a", + "▁Ko rea", + "▁Kor ea", + "ри то", + "р ито", + "▁v ibr", + "▁vi br", + "S elf", + "line ar", + "lin ear", + "о б", + "▁L ang", + "▁La ng", + "▁Lan g", + "▁ Lang", + "▁de eper", + "▁deep er", + "▁term in", + "▁ter min", + "▁ termin", + "en schaft", + "ens chaft", + "ensch aft", + "▁ро ці", + "am med", + "amm ed", + "vis ible", + "v isible", + "▁IO Exception", + "▁ IOException", + "▁W ind", + "▁Win d", + "▁Wi nd", + "us qu", + "▁S top", + "▁St op", + "▁Sto p", + "▁ Stop", + "▁ор га", + "IN VALID", + "INVAL ID", + "▁c ub", + "▁cu b", + "▁j ew", + "▁je w", + "▁cap tain", + "▁capt ain", + "з і", + "ch unk", + "apt ure", + "ash board", + "▁div ided", + "▁divid ed", + "▁divide d", + "▁ext ensive", + "▁extens ive", + "▁s uffer", + "▁suff er", + "▁he ading", + "▁head ing", + "▁ heading", + "cre ated", + "create d", + "creat ed", + "c reated", + "▁quiet ly", + "▁n y", + "▁ ny", + "▁по л", + "▁ пол", + "\" +", + "ik an", + "ika n", + "i kan", + "▁design s", + "z u", + "}+ \\", + "} +\\", + "Oper ator", + "▁Le mma", + "▁Lem ma", + "▁на у", + "ac ji", + "ло ве", + "лов е", + "Serv let", + "▁K evin", + "▁Ke vin", + "st age", + "sta ge", + "b n", + "text width", + "fa iled", + "fail ed", + "f ailed", + "▁St aff", + "▁Sta ff", + "▁e nem", + "▁en em", + "un de", + "und e", + "u nde", + "ен ь", + "е нь", + "Pack et", + "P acket", + "▁A ls", + "▁Al s", + "ka r", + "k ar", + "][ '", + "] ['", + "ke d", + "k ed", + "Per s", + "Pe rs", + "P ers", + ">: :", + "> ::", + "▁a rc", + "▁ar c", + "▁ arc", + "▁sy nt", + "▁syn t", + "SP E", + "S PE", + "▁Д а", + "▁M i", + "▁M oh", + "▁Mo h", + "▁De ath", + "b rowser", + "▁D ave", + "▁Dav e", + "▁Da ve", + "▁s ucc", + "▁su cc", + "▁suc c", + "t oggle", + "▁t ack", + "▁ta ck", + "Com ment", + "Comm ent", + "er on", + "ero n", + "e ron", + "▁aware ness", + "▁h ug", + "▁cont emporary", + "▁contempor ary", + "ul ating", + "ula ting", + "▁T itle", + "▁Tit le", + "▁Ti tle", + "▁ Title", + "▁TH IS", + "hav ior", + "ran k", + "r ank", + "▁do zen", + "▁che ese", + "co ln", + "col n", + "▁rad ius", + "▁radi us", + "▁ radius", + "▁dim ensions", + "▁dimension s", + "rodu ction", + "rod uction", + "▁ad ds", + "▁add s", + "▁house hold", + "▁D avis", + "▁Dav is", + "▁Da vis", + "pk g", + "p kg", + "{ $", + "▁cas ino", + "▁P ierre", + "▁Pier re", + "▁Pi erre", + "▁object ive", + "tr ain", + "tra in", + "▁Mich igan", + "pay load", + "▁r ug", + "▁ru g", + "▁ rug", + "▁se vere", + "▁sever e", + "me an", + "▁t oss", + "▁to ss", + "▁embar rass", + "▁V ery", + "▁Ver y", + "▁Ve ry", + "▁ Very", + "▁appe al", + "▁Com put", + "▁Comp ut", + "▁ Comput", + "▁forgot ten", + "▁k ernel", + "▁ker nel", + "▁ kernel", + "▁car bon", + "▁carb on", + "f w", + "▁С у", + "▁Emp ire", + "▁qu ote", + "▁quot e", + "▁ quote", + "et z", + "e tz", + "▁m ini", + "▁min i", + "▁mi ni", + "▁p ipe", + "▁pi pe", + "▁pip e", + "▁ pipe", + "▁n ous", + "▁no us", + "▁nou s", + "▁M ove", + "▁Mo ve", + "▁Mov e", + "▁ Move", + "▁д у", + "▁ ду", + "▁nerv ous", + "▁М ар", + "▁Ма р", + "* \r", + "▁B ush", + "▁Bus h", + "▁Bu sh", + "▁pe er", + "▁ peer", + "▁W rit", + "▁Wr it", + "▁ Writ", + "▁satisf ied", + "▁pull ing", + "▁pul ling", + "▁P ur", + "▁Pu r", + "▁M iller", + "▁Mil ler", + "▁Mill er", + "▁F L", + "▁ FL", + "am az", + "ama z", + "a maz", + "▁m ile", + "▁mil e", + "▁mi le", + "▁ mile", + "▁N eed", + "▁Ne ed", + "▁ Need", + "▁sup plies", + "▁a ño", + "▁p ace", + "▁pa ce", + "▁pac e", + "▁ pace", + "▁Vict oria", + "▁Victor ia", + "▁ou ght", + "▁ ought", + "▁P layer", + "▁Pl ayer", + "▁Play er", + "▁ Player", + "agnost ic", + "▁v iv", + "▁vi v", + "▁ viv", + "▁Pat rick", + "▁Patri ck", + "▁ Š", + "▁St ory", + "▁Sto ry", + "ac a", + "a ca", + "▁mount ains", + "▁mountain s", + "CL ASS", + "▁fr agment", + "▁frag ment", + "▁ fragment", + "▁sett lement", + "▁settle ment", + "▁Further more", + "▁dr ivers", + "▁dri vers", + "▁driv ers", + "▁drive rs", + "▁driver s", + "▁J u", + "▁бы ли", + "▁был и", + "Row s", + "Ro ws", + "R ows", + "▁im pression", + "▁imp ression", + "▁impress ion", + "▁in fer", + "▁inf er", + "▁Ex pl", + "▁Exp l", + "ol ute", + "olut e", + "olu te", + "ov an", + "ova n", + "o van", + "ar ance", + "aran ce", + "CA P", + "C AP", + "▁en force", + "▁B urn", + "▁Bur n", + "▁Bu rn", + "Res et", + "Re set", + "mo ther", + "mot her", + "m other", + "▁B attle", + "▁Bat tle", + "▁Batt le", + "▁ Battle", + "pad ding", + "p adding", + "ia te", + "iat e", + "i ate", + "▁c ried", + "▁cr ied", + "▁cri ed", + "A K", + "un s", + "u ns", + "▁siè cle", + "▁Cont in", + "▁ Contin", + "ban k", + "b ank", + "ju nit", + "j unit", + "object s", + "Ro t", + "R ot", + "is sa", + "iss a", + "▁be gun", + "▁beg un", + "* -", + "▁vis iting", + "▁visit ing", + "ж де", + "▁target s", + "▁tar gets", + "▁L atin", + "▁Lat in", + "у т", + "▁E sc", + "▁Es c", + "* ;", + "ån g", + "å ng", + "▁( {", + "▁ ({", + "▁di agram", + "▁dia gram", + "Mod els", + "Model s", + "Mode ls", + "▁part nership", + "▁partner ship", + "▁partners hip", + "▁fr ån", + "ul ty", + "ult y", + "Po d", + "P od", + "CA LL", + "CAL L", + "C ALL", + "mod al", + "mo dal", + "si g", + "s ig", + "it zer", + "itz er", + "it el", + "ite l", + "▁convin ced", + "▁convince d", + "ab l", + "a bl", + "ст ве", + "ств е", + "▁c ot", + "▁co t", + "▁re peat", + "▁repe at", + "▁ repeat", + "▁l ists", + "▁li sts", + "▁list s", + "▁ lists", + "so und", + "s ound", + "▁r oyal", + "▁ro yal", + "▁gr ace", + "▁gra ce", + "▁o raz", + "▁or az", + "Not ification", + "pr ite", + "prit e", + "p rite", + "▁arriv al", + "▁arr ival", + "an cell", + "ance ll", + "anc ell", + "ancel l", + "hent ic", + "de code", + "dec ode", + "▁fant astic", + "pro gress", + "pro xy", + "pr oxy", + "z ő", + "ke l", + "k el", + "▁conven ient", + "aqu e", + "a que", + "ri et", + "rie t", + "r iet", + "▁Dig ital", + "io rs", + "ior s", + "i ors", + "▁B udd", + "▁Bud d", + "▁Bu dd", + "and ra", + "ad dy", + "add y", + "▁o vers", + "▁over s", + "▁ov ers", + "▁consum ers", + "▁consumer s", + "▁consume rs", + "p n", + "mo use", + "m ouse", + "▁B C", + "▁ BC", + "de g", + "d eg", + "pe rm", + "per m", + "p erm", + "it és", + "ité s", + "▁и спо", + "▁ис по", + "he ast", + "h east", + "ho ur", + "hou r", + "h our", + "PAR AM", + "con scious", + "▁w ing", + "▁win g", + "▁ wing", + "▁atmos phere", + "▁g ig", + "▁gi g", + "▁con tre", + "▁cont re", + "▁contr e", + "▁dr ama", + "▁dram a", + "я т", + "▁Fr ont", + "▁Fro nt", + "▁ Front", + "▁philosoph y", + "▁H art", + "▁Har t", + "▁Ha rt", + "▁n urs", + "▁nu rs", + "▁nur s", + "ur as", + "ura s", + "u ras", + "▁T ru", + "▁Tr u", + "▁s ud", + "▁su d", + "▁per forming", + "▁perform ing", + "п ы", + "▁conf used", + "▁che cks", + "▁check s", + "am t", + "a mt", + "Ma ke", + "M ake", + "▁R O", + "▁ RO", + "▁d f", + "▁ df", + "iz ations", + "ization s", + "▁deg li", + "▁architect ure", + "Render er", + "▁Л а", + "▁p tr", + "▁pt r", + "▁ ptr", + "▁die ser", + "▁dies er", + "▁diese r", + "sub mit", + "▁top ics", + "▁topic s", + "▁princip les", + "▁prin ciples", + "▁principle s", + "var s", + "va rs", + "v ars", + "so ck", + "soc k", + "s ock", + "▁ton gue", + "▁tong ue", + "▁percent age", + "▁S S", + "▁ SS", + "▁d ol", + "▁do l", + "▁r ice", + "▁ri ce", + "▁ric e", + "▁ rice", + "í o", + "▁E astern", + "▁East ern", + "▁Easter n", + "▁recogn ition", + "▁E rn", + "▁Er n", + "▁U t", + "▁ Ut", + "▁c aut", + "▁ca ut", + "▁Cl oud", + "▁ Cloud", + "▁con version", + "▁conv ersion", + "▁convers ion", + "▁Oh io", + "▁M E", + "▁ ME", + "▁sur ely", + "▁sure ly", + "▁g ard", + "▁gar d", + "▁ga rd", + "pu is", + "p uis", + "▁u rg", + "▁ur g", + "▁ urg", + "im i", + "i mi", + "▁abs ence", + "▁w inner", + "▁win ner", + "L anguage", + "▁HT TP", + "▁ HTTP", + "w t", + "▁trans lation", + "▁transl ation", + "▁ translation", + "с с", + "▁K ind", + "▁Ki nd", + "▁Kin d", + "▁ Kind", + "Tw o", + "T wo", + "▁Re volution", + "▁Rev olution", + "In sert", + "Ins ert", + "Ev ery", + "E very", + "or ient", + "ori ent", + "orie nt", + "o rient", + "▁т ра", + "▁ тра", + "▁emot ions", + "▁emotion s", + "det ails", + "detail s", + "▁f lu", + "▁fl u", + "▁ flu", + "▁oper ate", + "▁opera te", + "A g", + "un ning", + "unn ing", + "▁part ie", + "▁parti e", + "tr i", + "t ri", + "▁gold en", + "▁gol den", + "▁Б и", + "▁found ation", + "is ten", + "ist en", + "iste n", + "i sten", + "▁Car los", + "▁Carl os", + "▁Carlo s", + "Child ren", + "▁neigh b", + "▁C art", + "▁Car t", + "▁Ca rt", + "▁ Cart", + "Be gin", + "B egin", + "г да", + "▁s cheduled", + "▁schedule d", + "▁schedul ed", + "' >", + "▁observ ations", + "▁observation s", + "▁produ cer", + "▁produce r", + "ath ers", + "ather s", + "a thers", + "но му", + "ном у", + "▁expect ations", + "▁expectation s", + "os o", + "o so", + "z h", + "mu table", + "mut able", + "▁wr ites", + "▁writ es", + "▁write s", + "▁p ushing", + "▁push ing", + "▁se ats", + "▁sea ts", + "▁seat s", + "▁br east", + "▁bre ast", + "ap ing", + "api ng", + "a ping", + "▁Sim ple", + "▁ Simple", + "▁s ocket", + "▁soc ket", + "▁sock et", + "▁ socket", + "▁sl ave", + "▁sla ve", + "▁ slave", + "il ey", + "ile y", + "i ley", + "▁ass istant", + "▁assist ant", + "▁t rim", + "▁tr im", + "▁tri m", + "▁ trim", + "▁land scape", + "▁landsc ape", + "▁associ ation", + "qu ant", + "▁Pal est", + "▁swe at", + "en gers", + "eng ers", + "enge rs", + "enger s", + "? _", + "é p", + "> .", + "▁c urious", + "▁cur ious", + "▁Com ponent", + "▁ Component", + "▁re placement", + "▁repl acement", + "▁replace ment", + "ра ль", + "рал ь", + "р аль", + "▁Tr ack", + "▁Tra ck", + "▁ Track", + "▁Re move", + "▁Rem ove", + "▁ Remove", + "▁S ize", + "▁Si ze", + "▁ Size", + "pe ror", + "per or", + "▁cal culate", + "▁calcul ate", + "▁calc ulate", + "▁s essions", + "▁session s", + "▁type d", + "▁typ ed", + "▁ty ped", + "▁sub mit", + "▁subm it", + "▁ submit", + "!! !", + "! !!", + "▁part ition", + "▁ partition", + "ed ing", + "edi ng", + "e ding", + "-- ---", + "---- -", + "--- --", + "- ----", + "az ioni", + "azi oni", + "lie ß", + "on al", + "ona l", + "o nal", + "▁sh ru", + "▁shr u", + "▁RE G", + "▁ REG", + "▁F ac", + "▁Fa c", + "▁ Fac", + "config uration", + "▁бы ло", + "▁был о", + "▁A mong", + "▁Am ong", + "__ );", + "__) ;", + "_ _);", + "▁Ser ver", + "▁Serv er", + "▁ Server", + "▁L OG", + "▁LO G", + "▁ LOG", + "▁c and", + "▁can d", + "▁ca nd", + "'] );", + "']) ;", + "' ]);", + "go v", + "g ov", + "▁S ix", + "▁Si x", + "un defined", + "und efined", + "undef ined", + "▁t y", + "▁ ty", + "as a", + "a sa", + "▁part icles", + "▁partic les", + "▁particle s", + "▁parti cles", + "▁ф ор", + "▁фо р", + "▁ фор", + "` `", + "T ube", + "el and", + "ela nd", + "e land", + "fo ld", + "fol d", + "f old", + "og o", + "o go", + "▁appro aches", + "▁approach es", + "on da", + "ond a", + "ag r", + "a gr", + ", $", + "▁{ {", + "▁ {{", + "▁Mod ern", + "▁Mo dern", + "▁Mode rn", + "▁W inter", + "▁Win ter", + "av ailable", + "▁L ud", + "▁Lu d", + "▁c asa", + "▁cas a", + "▁ca sa", + "▁C ould", + "▁Co uld", + "▁Cou ld", + "▁ Could", + "▁fif teen", + "▁pot entially", + "▁potential ly", + "^ ^", + "▁se it", + "▁sei t", + "An imation", + "Anim ation", + "ко го", + "к ого", + "Z one", + "el if", + "eli f", + "e lif", + "▁acknow led", + "▁own ership", + "▁owner ship", + "▁owners hip", + "▁describ es", + "▁describe s", + "▁re verse", + "▁revers e", + "▁rever se", + "▁ reverse", + "▁con test", + "▁cont est", + "▁sc ored", + "▁score d", + "▁op posed", + "▁opp osed", + "▁oppos ed", + "fl ex", + "f lex", + "kr e", + "k re", + "▁mer ge", + "▁ merge", + "▁cover ing", + "▁cov ering", + "▁hon estly", + "▁honest ly", + "▁M ess", + "▁Me ss", + "▁Mes s", + "▁r arely", + "▁rare ly", + "▁incred ible", + "it age", + "ita ge", + "▁vict ims", + "▁victim s", + "ны ми", + "ным и", + "w l", + "iz za", + "izz a", + "i zza", + "d n", + "on de", + "ond e", + "o nde", + "▁pr zy", + "▁prz y", + "▁HT ML", + "▁ HTML", + "▁pay load", + "▁ payload", + "Bu s", + "B us", + "us b", + "u sb", + "F n", + "▁display ed", + "▁o cean", + "▁A venue", + "▁Av enue", + "ac ion", + "aci on", + "acio n", + "gh an", + "g han", + "met ric", + "m etric", + "ie ties", + "iet ies", + "▁attract ive", + "▁attr active", + "▁f ö", + "▁ fö", + "C reat", + "ver ter", + "vert er", + "▁Al ice", + "▁Ali ce", + "по л", + "▁f raction", + "▁fr action", + "▁fra ction", + "▁fract ion", + "▁behav iour", + "▁behavi our", + "▁Jer sey", + "▁re venue", + "▁rev enue", + "▁reven ue", + "▁t res", + "▁tr es", + "▁tre s", + "▁ tres", + "IL D", + "I LD", + "▁É t", + "▁s ync", + "▁sy nc", + "▁syn c", + "▁ sync", + "wi ch", + "w ich", + "▁anc est", + "ъ т", + "om o", + "o mo", + "▁I de", + "▁Id e", + "▁g ained", + "▁gain ed", + "▁ga ined", + "▁moment um", + "▁K o", + "ie u", + "i eu", + "ie lt", + "iel t", + "i elt", + "▁bon us", + "▁te xture", + "▁text ure", + "▁ texture", + "Mod al", + "Mo dal", + "NE XT", + "N EXT", + "▁годи не", + "▁l anguages", + "▁language s", + "v t", + "▁represent ing", + "▁D ream", + "▁Dre am", + "cur r", + "cu rr", + "qu al", + "q ual", + "▁j s", + "▁ js", + "bu rn", + "bur n", + "b urn", + "▁contribut ions", + "▁contribution s", + "▁r ic", + "▁ri c", + "▁ ric", + "}- \\", + "} -\\", + "={ {", + "= {{", + "ca rt", + "car t", + "c art", + "F B", + "ju d", + "j ud", + "es p", + "e sp", + "▁elect ron", + "▁electro n", + "▁e ll", + "▁el l", + "▁ ell", + "▁Run time", + "▁ Runtime", + "ac hel", + "ach el", + "ache l", + "a chel", + "\\ _", + "we ek", + "pack et", + "p acket", + "▁Secret ary", + "▁Jahr hund", + "▁th reshold", + "▁ threshold", + "ba ge", + "bag e", + "b age", + "▁con cer", + "▁conc er", + "▁conce r", + "▁b one", + "▁bo ne", + "▁bon e", + "▁ bone", + "▁Holly wood", + "Cur sor", + "C ursor", + "▁aw arded", + "▁award ed", + "▁sum mary", + "▁summar y", + "▁ summary", + "ag gio", + "agg io", + "aggi o", + "▁st ell", + "▁ste ll", + "▁ stell", + "▁f lesh", + "▁fl esh", + "▁fle sh", + "P air", + "▁A ge", + "▁Ag e", + "ing ton", + "▁' .", + "▁ '.", + "as er", + "ase r", + "a ser", + "ко ва", + "ков а", + "▁qu art", + "▁q uart", + "▁quar t", + "ry ption", + "rypt ion", + "All oc", + "Al loc", + "ft en", + "fte n", + "f ten", + "Oper and", + "▁ind icated", + "▁indic ated", + "▁indicate d", + "($ _", + "( $_", + "get String", + "▁list ener", + "▁listen er", + "▁ listener", + "sp ir", + "spi r", + ") _", + "ve ns", + "ven s", + "v ens", + "▁food s", + "▁foo ds", + "an za", + "anz a", + "te il", + "DE SC", + "▁n otion", + "▁not ion", + "▁em ployment", + "▁employ ment", + "▁s wing", + "▁sw ing", + "▁ swing", + "nb sp", + "▁p ounds", + "▁pound s", + "to ols", + "tool s", + "too ls", + "t ools", + "▁particip ate", + "▁T ax", + "▁Ta x", + "▁ Tax", + "▁с кла", + "ap ol", + "a pol", + "▁f ost", + "▁fo st", + "▁fos t", + "com pat", + "comp at", + "▁public ation", + "▁rapid ly", + "▁W is", + "▁Wi s", + "Event Listener", + "▁prem ière", + "▁premi ère", + "us o", + "u so", + "ext end", + "▁M ERCHANTABILITY", + "UT F", + "U TF", + "▁exper iments", + "▁experi ments", + "▁experiment s", + "sin gle", + "sing le", + "s ingle", + "z k", + "▁n aj", + "▁na j", + "}} }", + "} }}", + "Li n", + "L in", + "▁inter act", + "▁inte ract", + "▁c ms", + "▁cm s", + "▁Ro ger", + "▁Rog er", + "▁Р у", + "> '", + "com mit", + "comm it", + "ло сь", + "▁out come", + "▁h its", + "▁hit s", + "▁hi ts", + "▁и м", + "▁ им", + "▁s park", + "▁sp ark", + "con sole", + "cons ole", + "▁ver w", + "▁ve rw", + "▁ка то", + "agnost ics", + "agnostic s", + "▁s oci", + "▁so ci", + "▁soc i", + "▁d ining", + "▁di ning", + "▁din ing", + "▁t ech", + "▁te ch", + "▁ tech", + "š t", + "fo lio", + "fol io", + "ult ane", + "ultan e", + "кт ор", + "кто р", + "к тор", + "▁B rand", + "▁Br and", + "▁Bra nd", + "Jo in", + "J oin", + "▁и ю", + "▁p ros", + "▁pro s", + "▁pr os", + "▁pos it", + "Pub lic", + "P ublic", + "AspNet Core", + "▁S hop", + "▁Sh op", + "▁ Shop", + "▁co inc", + "▁coin c", + "ни ем", + "ние м", + "▁re ferences", + "▁refer ences", + "▁reference s", + "ab out", + "name space", + "names pace", + "D L", + "▁I R", + "▁ IR", + "▁c ada", + "▁ca da", + "▁cad a", + "▁Jord an", + "▁g ep", + "▁ge p", + "▁b ron", + "▁br on", + "▁bro n", + "andid ate", + "EX PECT", + "EXP ECT", + "am o", + "a mo", + "▁De utsch", + "au c", + "a uc", + "▁ра йо", + "▁рай о", + "▁L abor", + "▁La bor", + "▁Lab or", + "▁surround ed", + "т ро", + "▁n ome", + "▁no me", + "▁nom e", + "▁under lying", + "▁educ ational", + "▁education al", + "R IGHT", + "CO UNT", + "in ch", + "inc h", + "Ty p", + "T yp", + "um ph", + "ump h", + "fo ur", + "f our", + "Control s", + "▁c p", + "▁ cp", + "co st", + "cos t", + "c ost", + "▁mechan ism", + "en ess", + "ene ss", + "enes s", + "e ness", + "é qu", + "▁acqu ired", + "▁acquire d", + "▁f alls", + "▁fall s", + "▁fal ls", + "▁ falls", + "▁H ou", + "▁Ho u", + "▁L E", + "▁ LE", + "for Each", + "▁ver tex", + "▁vert ex", + "▁ vertex", + "▁I F", + "▁ IF", + "cur s", + "cu rs", + "c urs", + "' =>", + "те ри", + "тер и", + "▁S A", + "▁ SA", + "ri ers", + "rie rs", + "rier s", + "r iers", + "▁u w", + "▁ uw", + "▁m arks", + "▁mark s", + "▁mar ks", + "▁ marks", + "▁en erg", + "▁ener g", + "ho f", + "h of", + "ylv ania", + "▁Al len", + "▁All en", + "um py", + "ump y", + "о го", + "ст ву", + "ств у", + "vo ice", + "v oice", + "▁en gage", + "▁eng age", + "▁m ant", + "▁man t", + "▁ma nt", + "or se", + "ors e", + "== =", + "= ==", + "▁impro vement", + "▁improve ment", + "Op t", + "O pt", + "▁arr ested", + "▁arrest ed", + "ти я", + "▁с ле", + "▁ сле", + "it ched", + "itch ed", + "soc ket", + "sock et", + "s ocket", + "▁c ycl", + "▁cy cl", + "▁ cycl", + "▁S M", + "▁ SM", + "▁S ex", + "▁Se x", + "▁neut ral", + "▁neutr al", + "ва в", + "▁J ess", + "▁Je ss", + "▁Jes s", + "▁d ip", + "▁di p", + "▁op position", + "▁oppos ition", + "▁b orrow", + "▁bor row", + "с пе", + "▁av ant", + "ко ла", + "▁t a", + "▁ ta", + "An im", + "A nim", + "▁G all", + "▁Gal l", + "▁Ga ll", + "rg b", + "r gb", + "▁gu ilty", + "▁guilt y", + "▁bu ried", + "▁bur ied", + "▁g y", + "▁ gy", + "Init ial", + "▁acc omp", + "▁ac comp", + "▁accom p", + "▁breath ing", + "▁breat hing", + "ber ry", + "b erry", + "GR O", + "G RO", + "▁subsequ ent", + "rou pe", + "roup e", + "ul pt", + "ulp t", + "t b", + "▁ ä", + "P i", + "arg v", + "▁M ust", + "▁Mus t", + "▁Mu st", + "▁ Must", + ": '", + "sv g", + "ou p", + "o up", + "▁prec isely", + "▁precise ly", + "▁T a", + "re na", + "ren a", + "r ena", + "▁f older", + "▁fol der", + "▁fold er", + "▁ folder", + "▁Ch annel", + "▁ Channel", + "▁re vol", + "▁rev ol", + "M iss", + "ло м", + "red dit", + "adel ph", + "▁dis crim", + "▁disc rim", + "▁a ve", + "▁av e", + "▁ ave", + "pl eted", + "ple ted", + "plete d", + "plet ed", + "p leted", + "▁g ently", + "▁gent ly", + "FF FF", + "ro py", + "rop y", + "r opy", + "▁d ial", + "▁di al", + "▁dia l", + "Not Found", + "▁\" [", + "Hom e", + "H ome", + "on te", + "ont e", + "o nte", + "▁re lie", + "▁rel ie", + "▁reli e", + "▁Con text", + "▁Cont ext", + "▁ Context", + "▁st ats", + "▁stat s", + "▁sta ts", + "▁ stats", + "▁E nergy", + "oun ced", + "ounce d", + "▁gr ave", + "▁grav e", + "▁gra ve", + "▁re cip", + "▁rec ip", + "ли н", + "л ин", + "bl og", + "blo g", + "b log", + "▁na am", + "▁w o", + "▁ wo", + "▁direct ions", + "▁dire ctions", + "▁direction s", + "▁Lin coln", + "! )", + "un ci", + "unc i", + "ne q", + "n eq", + "Tag s", + "T ags", + "▁t um", + "▁tu m", + "▁s aving", + "▁sa ving", + "▁sav ing", + "ail le", + "ai lle", + "a ille", + "item ize", + "▁F amil", + "▁Fa mil", + "ms m", + "m sm", + "ne ws", + "new s", + "FF ER", + "F FER", + "▁D ead", + "▁De ad", + "▁ Dead", + "▁terr itory", + "▁territor y", + "▁territo ry", + "▁K at", + "▁Ka t", + "oc ker", + "ock er", + "o cker", + "in teger", + "inte ger", + "▁s ne", + "▁sn e", + "▁f ails", + "▁fa ils", + "▁fail s", + "▁franç ais", + "▁int roduction", + "▁introdu ction", + "▁G rant", + "▁Gr ant", + "▁Gran t", + "▁Gra nt", + "ycl e", + "yc le", + "y cle", + "'] .", + "' ].", + "▁v ier", + "▁vi er", + "▁vie r", + "▁ vier", + "nat ive", + "n ative", + "▁K le", + "▁Kl e", + "qu ote", + "quot e", + "User s", + "Us ers", + "Use rs", + "▁ad vis", + "▁adv is", + "▁g ym", + "▁gy m", + "▁prote in", + "ا ل", + "▁M ai", + "▁Ma i", + "▁prov iders", + "▁provide rs", + "▁provider s", + "▁so il", + "gu i", + "g ui", + "▁N ation", + "▁Nat ion", + "re ation", + "reat ion", + "▁T ab", + "▁Ta b", + "▁ Tab", + "en sis", + "ens is", + "in as", + "ina s", + "i nas", + "▁Scot land", + "▁dis patch", + "▁disp atch", + "▁ dispatch", + "un ion", + "uni on", + "▁b ere", + "▁be re", + "▁ber e", + "▁ bere", + "▁P ow", + "▁Po w", + "▁H ig", + "▁Hi g", + "▁stud ying", + "▁study ing", + "RE F", + "R EF", + "SS L", + "S SL", + "▁f right", + "▁fr ight", + "▁S ORT", + "▁SO RT", + "▁com pr", + "▁comp r", + "▁Mad rid", + "row ned", + "rown ed", + "r owned", + "op es", + "ope s", + "o pes", + "pd ev", + "p dev", + "▁w ash", + "▁was h", + "▁wa sh", + "▁' ../../", + "▁'../ ../", + "}} _", + "} }_", + "▁acc um", + "rol ling", + "roll ing", + "▁N C", + "▁ NC", + "▁f iction", + "▁fi ction", + "▁fict ion", + "ip t", + "i pt", + "conne cted", + "connect ed", + "lim its", + "limit s", + "▁l ap", + "▁la p", + "▁ lap", + "▁where as", + "pro m", + "pr om", + "p rom", + "▁appoint ment", + "Pro gram", + "Pr ogram", + "▁П ер", + "▁Пе р", + "na h", + "n ah", + "Valid ation", + "ic ons", + "ico ns", + "icon s", + "i cons", + "äl l", + "ä ll", + "▁rad ical", + "▁radi cal", + "▁ex clusive", + "▁excl usive", + "▁exclus ive", + "em ony", + "emon y", + "▁challeng ing", + "▁m s", + "▁ ms", + "▁P rivate", + "▁Priv ate", + "▁ Private", + "▁v ida", + "▁vi da", + "▁vid a", + "▁дру ги", + "▁camp us", + "▁cam pus", + "form s", + "for ms", + "д но", + "pl aat", + "bs t", + "b st", + "AT ED", + "ATE D", + "▁Ab stract", + "▁Abs tract", + "▁ Abstract", + "▁int ense", + "▁intens e", + "▁L td", + "▁contro vers", + "ó g", + "▁s ă", + "▁land ing", + "▁lan ding", + "! =", + "▁sc enes", + "▁scene s", + "▁scen es", + "▁Ch ap", + "▁Cha p", + "▁sp oken", + "▁spoke n", + "▁spo ken", + "cre d", + "cr ed", + "c red", + "▁p ride", + "▁pr ide", + "▁pri de", + "qu et", + "que t", + "▁m eter", + "▁me ter", + "▁met er", + "▁de utsch", + "uu m", + "u um", + "▁b less", + "▁bl ess", + "▁ble ss", + "▁H ann", + "▁Ha nn", + "▁Han n", + "▁input s", + "▁ inputs", + "▁R ow", + "▁Ro w", + "▁ Row", + "▁with draw", + "▁withd raw", + "P al", + "ac les", + "acle s", + "acl es", + "a cles", + "as sets", + "ass ets", + "asse ts", + "asset s", + "▁v l", + "▁ vl", + "ве де", + "вед е", + "▁G ot", + "▁Go t", + "▁air port", + "win d", + "wi nd", + "w ind", + "▁Columb ia", + "▁ch ocolate", + "▁h ö", + "▁ hö", + "▁al arm", + "FT WARE", + "▁J ay", + "▁Ja y", + "▁s ake", + "▁sa ke", + "▁reg istration", + "▁registr ation", + "vi d", + "v id", + "▁l ake", + "▁la ke", + "▁user name", + "▁ username", + "▁h ack", + "▁ha ck", + "index Of", + "c x", + "▁f estival", + "▁fest ival", + "▁club s", + "case s", + "ca ses", + "cas es", + "c ases", + "CT RL", + "]; \r", + "] ;\r", + "▁A ud", + "▁Au d", + "▁ Aud", + "▁prim era", + "▁prime ra", + "▁primer a", + "ва т", + "в ат", + "▁brill iant", + "ut her", + "uth er", + "u ther", + "▁difficult y", + "it als", + "ital s", + "ita ls", + "▁sc ores", + "▁score s", + "▁pol ít", + "data base", + "dat abase", + "as ka", + "ask a", + "a ska", + "▁## ####", + "▁### ###", + "▁#### ##", + "▁##### #", + "▁a cid", + "▁ac id", + "at on", + "ato n", + "a ton", + "at omic", + "ato mic", + "atom ic", + "fr eq", + "fre q", + "f req", + "▁WARRAN TY", + "▁report ing", + ".) ,", + ". ),", + "▁n ights", + "▁night s", + "▁program me", + ")} {", + ") }{", + "xi c", + "x ic", + "▁s po", + "▁sp o", + "line d", + "li ned", + "lin ed", + "l ined", + "qu arters", + "er ee", + "ere e", + "e ree", + "mer s", + "me rs", + "m ers", + "▁s erves", + "▁ser ves", + "▁serv es", + "▁serve s", + "co w", + "c ow", + "ль ко", + "en so", + "ens o", + "▁env iron", + "▁ environ", + "Li ke", + "L ike", + "an che", + "anc he", + "anch e", + "▁cr ash", + "▁K ap", + "▁Ka p", + "no indent", + "Con n", + "Co nn", + "▁ав то", + "▁in frastructure", + "IM E", + "I ME", + "▁R oom", + "▁Ro om", + "▁ Room", + "ne ed", + "n eed", + "or er", + "ore r", + "o rer", + "▁D est", + "▁De st", + "▁Des t", + "▁ Dest", + "▁D omin", + "▁Do min", + "▁Dom in", + "ather ine", + "▁Syd ney", + "▁g auge", + "▁gau ge", + "▁ga uge", + "▁j et", + "▁je t", + "▁ jet", + "b ably", + "▁comm only", + "▁common ly", + "▁st ations", + "▁stat ions", + "▁station s", + "ia h", + "i ah", + "n l", + "ж у", + "et en", + "ete n", + "e ten", + "_ )", + "ia c", + "i ac", + "am os", + "amo s", + "a mos", + "ne ment", + "nem ent", + "n ement", + "ko n", + "k on", + "Inter val", + "▁cab in", + "▁ca bin", + "▁e g", + "▁ eg", + "▁sh ots", + "▁shot s", + "▁ shots", + "▁A rea", + "▁Ar ea", + "▁Are a", + "▁ Area", + "sm ith", + "param eter", + "' }", + "▁h em", + "▁he m", + "▁ hem", + "▁s inging", + "▁sing ing", + "▁sin ging", + "▁access ible", + "▁P rin", + "▁Pr in", + "▁Pri n", + "opt ional", + "option al", + "an cial", + "anc ial", + "ancia l", + "sh ips", + "ship s", + "▁can vas", + "▁ canvas", + "sp e", + "s pe", + "▁address es", + "▁x ml", + "▁ xml", + "▁' \"", + "▁ '\"", + "▁k ar", + "▁ka r", + "▁ kar", + "ö ff", + "▁a ges", + "▁ag es", + "▁age s", + "▁ ages", + "ё р", + "zi ng", + "zin g", + "z ing", + "▁ö ver", + "▁C lean", + "▁Cle an", + "▁ Clean", + "▁Sil ver", + "▁о со", + "▁ос о", + "he alth", + "Al i", + "A li", + "▁t s", + "▁ ts", + "at ern", + "ate rn", + "ater n", + "a tern", + "▁cho osing", + "▁bur ned", + "▁burn ed", + "br id", + "b rid", + "ro oms", + "room s", + "öt t", + "ö tt", + "K ERN", + "▁d ish", + "▁dis h", + "▁di sh", + "S a", + "De tail", + "Det ail", + "▁H ind", + "▁Hi nd", + "▁D ans", + "▁Dan s", + "▁Da ns", + "i ę", + "▁J ahren", + "▁Jah ren", + "▁Jahr en", + "▁Jahre n", + "▁Ja hren", + "ext ension", + "al las", + "all as", + "alla s", + "▁B illy", + "▁Bill y", + "▁Bil ly", + "us ammen", + "it ud", + "itu d", + "ge on", + "geo n", + "Te mp", + "T emp", + "Le g", + "L eg", + "itt el", + "itte l", + "add le", + "▁mus cle", + "▁sc ared", + "▁scar ed", + "ss on", + "s son", + "▁de note", + "▁den ote", + "ie urs", + "ieu rs", + "ieur s", + "i eurs", + "▁o range", + "▁or ange", + "▁h ub", + "▁ hub", + "▁re b", + "▁r eb", + "▁ reb", + "ed i", + "e di", + "▁vo ices", + "▁voice s", + "F older", + "▁s uspend", + "▁sus pend", + "▁susp end", + "▁ suspend", + "▁He art", + "▁sc rap", + "▁scr ap", + "▁a ggreg", + "▁ag greg", + "▁Gu ide", + "trans action", + "▁r iding", + "▁ri ding", + "▁rid ing", + "▁v á", + "▁ vá", + "▁b reed", + "▁br eed", + "▁bre ed", + "▁bree d", + "▁con cert", + "▁conc ert", + "▁conce rt", + "▁concer t", + "appro x", + "▁ch ances", + "▁chance s", + "To k", + "T ok", + "E q", + "par ts", + "part s", + "p arts", + "▁sch olar", + "▁schol ar", + "of fs", + "off s", + "fl ush", + "flu sh", + "! ”", + "▁lo gin", + "▁log in", + "▁ login", + "▁so ort", + "▁M and", + "▁Man d", + "▁Ma nd", + "▁function al", + "▁B ou", + "▁Bo u", + "▁subject s", + "my s", + "m ys", + "▁extra ord", + "▁Build ing", + "ik t", + "i kt", + "B ad", + "ia mi", + "iam i", + "i ami", + "Dr iver", + "D river", + "êt e", + "ê te", + "▁k v", + "▁ kv", + "▁t imer", + "▁time r", + "▁tim er", + "▁ti mer", + "▁ timer", + "ition ally", + "itional ly", + "▁a thlet", + "▁ath let", + "▁\" );", + "▁\") ;", + "▁ \");", + "w y", + "CF G", + "▁he aven", + "▁heav en", + "о в", + "▁exper imental", + "▁experiment al", + "▁b ounds", + "▁bound s", + "▁ bounds", + "IC K", + "I CK", + "▁ex cit", + "▁exc it", + "▁qu it", + "▁qui t", + "▁q uit", + "▁univers al", + "д ь", + "▁S P", + "▁ SP", + "▁st ub", + "▁ stub", + "▁k le", + "▁kl e", + "▁ kle", + "▁B art", + "▁Bar t", + "▁Ba rt", + "▁\" @", + "pe l", + "p el", + "▁( !(", + "▁(! (", + "▁se lector", + "▁select or", + "▁sel ector", + "▁sele ctor", + "▁ selector", + "E B", + "▁c oc", + "▁co c", + "et ed", + "ete d", + "e ted", + "ют ь", + "ю ть", + "▁poss ess", + "▁R ick", + "▁Ric k", + "▁unus ual", + "ter min", + "term in", + "▁b ags", + "▁bag s", + "▁ba gs", + "▁lo ading", + "▁load ing", + "▁ loading", + "▁t f", + "▁ tf", + "▁) \r", + "▁ )\r", + "pro vider", + "prov ider", + "plet ion", + "▁c ursor", + "▁cur sor", + "▁ cursor", + "▁pa used", + "▁paus ed", + "▁pause d", + "и м", + "▁coun sel", + "] <", + "ze ch", + "zec h", + "z ech", + "▁t ie", + "▁ti e", + "▁M oon", + "▁Mo on", + "▁ar med", + "▁arm ed", + "▁ armed", + "▁ob serve", + "▁observ e", + "▁obs erve", + "▁per met", + "▁perm et", + "▁J ob", + "▁Jo b", + "▁ Job", + "fö r", + "f ör", + "arg ument", + "▁egg s", + "▁eg gs", + "ás t", + "á st", + "▁incred ibly", + "wer ken", + "werk en", + "iz ard", + "izar d", + "iza rd", + "▁p ainted", + "▁pain ted", + "▁pa inted", + "▁paint ed", + "▁Viet nam", + "▁vi olent", + "▁viol ent", + "Es t", + "E st", + "ier ra", + "i erra", + "re ader", + "read er", + "rea der", + "we ise", + "wei se", + "▁J osh", + "▁Jo sh", + "▁Jos h", + "▁H im", + "▁Hi m", + "as hes", + "ash es", + "or igin", + "orig in", + "ori gin", + "▁sp ir", + "▁ spir", + "▁T ree", + "▁Tr ee", + "▁Tre e", + "▁ Tree", + "▁n iet", + "▁nie t", + "▁ni et", + "WI N", + "W IN", + "mar gin", + "m argin", + "▁inv olves", + "▁invol ves", + "▁involve s", + "▁organ is", + "▁N acional", + "bar a", + "ba ra", + "b ara", + "▁de puis", + "▁dep uis", + "pi o", + "p io", + "fe atures", + "feature s", + "feat ures", + "st ru", + "str u", + "▁Dis ney", + "▁restaur ants", + "▁restaurant s", + "Mil l", + "M ill", + ")) \r", + ") )\r", + "с ла", + "rem ote", + "▁Th ird", + "▁base ball", + "▁al gun", + "▁alg un", + "] $", + "▁em ployed", + "▁employ ed", + "po t", + "p ot", + "▁Un ityEngine", + "▁ UnityEngine", + "▁integr ation", + "▁risk s", + "▁ris ks", + "▁st ro", + "▁str o", + "▁ag osto", + "▁ago sto", + "incl uding", + "▁M ind", + "▁Min d", + "▁Mi nd", + "▁st roke", + "▁str oke", + "▁stro ke", + "▁ stroke", + "▁de als", + "▁deal s", + "aj ax", + "aja x", + "a jax", + "ё т", + "▁\\ |", + "▁ \\|", + "ta r", + "t ar", + "adelph ia", + "▁s ab", + "▁sa b", + "pu r", + "p ur", + "▁sc rew", + "▁scr ew", + "▁in ev", + "▁\\ ;", + "▁Don ald", + "▁ Donald", + "ö d", + "cc a", + "c ca", + "es is", + "esi s", + "e sis", + "▁separ ated", + "▁separate d", + "DB G", + "D BG", + "ag ent", + "age nt", + "agen t", + "a gent", + "▁p acked", + "▁pack ed", + "▁pac ked", + "▁ packed", + "н ня", + "in tern", + "int ern", + "inter n", + "inte rn", + "▁M onte", + "▁Mon te", + "▁Mont e", + "▁Mo nte", + "▁prov ince", + "▁provinc e", + "▁provin ce", + "▁exp anded", + "▁expand ed", + "▁appro ached", + "▁approach ed", + "▁E p", + "CL K", + "▁o re", + "▁or e", + "▁ ore", + "B atch", + "▁impress ive", + "R M", + "▁L ocation", + "▁Loc ation", + "▁ Location", + "▁sh ame", + "▁sha me", + "wrap per", + "w rapper", + "un wrap", + "pe er", + "Bit s", + "Bi ts", + "B its", + "▁S N", + "▁ SN", + "sc ar", + "s car", + "Com e", + "Co me", + "C ome", + "▁coun cil", + "▁shout ed", + "ma king", + "m aking", + "▁M aur", + "▁Ma ur", + "▁Mau r", + "▁w is", + "LE TE", + "LET E", + "▁f s", + "▁ fs", + "▁d z", + "▁ dz", + "un que", + "ue go", + "u ego", + "R andom", + "H tml", + "ze m", + "z em", + "▁D utch", + "▁Gold en", + "▁Gol den", + "▁T ar", + "▁Ta r", + "▁H erm", + "▁He rm", + "▁Her m", + "▁str etch", + "▁stret ch", + "var d", + "va rd", + "v ard", + "▁t ries", + "▁tr ies", + "▁tri es", + "W I", + "▁disappe ared", + "▁disappear ed", + "▁cr usher", + "▁crush er", + "▁K an", + "▁Ka n", + "Ma g", + "M ag", + "ø r", + "▁Cam bridge", + "▁Camb ridge", + "▁do po", + "▁dop o", + "at ura", + "atur a", + "atu ra", + "he art", + "▁Sp iel", + "/* *\r", + "/** \r", + "Dir ection", + "Direct ion", + "Di rection", + "D irection", + "at ting", + "att ing", + "atti ng", + "wi g", + "w ig", + "▁c odes", + "▁co des", + "▁code s", + "▁cod es", + "▁ codes", + "▁pow der", + "al ert", + "ale rt", + "aler t", + "sem bl", + "semb l", + "▁y e", + "▁ ye", + "St ar", + "S tar", + "▁ro ots", + "▁root s", + "▁H oll", + "▁Hol l", + "▁Ho ll", + "Re le", + "Rel e", + "R ele", + "▁const itu", + "n c", + "“ .", + "re ference", + "refer ence", + "if icial", + "ific ial", + "ifi cial", + "clos ure", + "▁fig ured", + "▁figure d", + "▁assum ption", + "getElement ById", + "▁A G", + "▁ AG", + "os es", + "ose s", + "o ses", + "▁_ \"", + "ep per", + "ob re", + "o bre", + "en umerate", + "о графи", + "▁less ons", + "▁lesson s", + "▁qual ified", + "Per son", + "Pers on", + "P erson", + "an se", + "ans e", + "▁M ort", + "▁Mor t", + "▁Mo rt", + "s ylvania", + "▁c ré", + "▁cr é", + "Bind ing", + "Bin ding", + "B inding", + "і с", + "▁V ari", + "▁Var i", + "▁Va ri", + "▁ Vari", + "▁re minded", + "▁remind ed", + "▁members hip", + "▁member ship", + "ip er", + "ipe r", + "i per", + "zt e", + "z te", + "▁c ref", + "▁cre f", + "▁cr ef", + "▁ cref", + "▁P A", + "▁ PA", + "plaat st", + "▁Env ironment", + "▁ Environment", + "bo y", + "b oy", + "▁ph rase", + "▁phr ase", + "▁ phrase", + "riv ial", + "ra g", + "r ag", + "во ди", + "вод и", + "▁p se", + "▁ps e", + "▁ pse", + "▁tour nament", + ")} ,", + ") },", + "▁S ound", + "▁So und", + "▁Sou nd", + "▁ Sound", + "▁V el", + "▁Ve l", + "▁ Vel", + "▁B erg", + "▁Be rg", + "▁Ber g", + "el son", + "els on", + "▁ref uge", + "▁else where", + "qu ality", + "qual ity", + "▁abandon ed", + "▁F lo", + "▁Fl o", + "ib il", + "i bil", + "UA L", + "U AL", + "▁Pl atz", + "▁d elta", + "▁del ta", + "▁ delta", + "▁B uy", + "▁Bu y", + "ri ère", + "r ière", + "▁fl our", + "▁flo ur", + "▁laugh ing", + "▁laug hing", + "▁Look ing", + "▁Lo oking", + "Ag ent", + "A gent", + "▁w x", + "▁ wx", + "▁W ales", + "▁Wal es", + "▁Wa les", + "C tx", + "▁c ake", + "▁ca ke", + "▁c rate", + "▁cr ate", + "▁ crate", + "▁к ла", + "▁ кла", + "an ga", + "ang a", + "Z ero", + "▁amount s", + "Tr a", + "T ra", + "om etric", + "omet ric", + "o metric", + "▁con straints", + "▁constr aints", + "▁constraint s", + "▁tem ple", + "▁templ e", + "▁temp le", + "▁install ation", + "st roke", + "str oke", + "▁N eder", + "▁Ne der", + "▁Ned er", + "ț i", + "▁I bid", + "▁o bs", + "▁ob s", + "▁ obs", + "ent ries", + "entr ies", + "▁j usqu", + "OR M", + "O RM", + "▁S ky", + "▁Sk y", + "ik es", + "ike s", + "i kes", + "na k", + "n ak", + "▁m odes", + "▁mod es", + "▁mo des", + "▁mode s", + "▁Hit ler", + "▁b elt", + "▁be lt", + "▁bel t", + "▁point ing", + "▁B an", + "▁Ba n", + "ign ore", + "▁per su", + "▁pers u", + "▁Bes ides", + "yn om", + "y nom", + "▁leg is", + "▁C PU", + "▁CP U", + "▁ CPU", + "an ded", + "and ed", + "ande d", + "ui s", + "u is", + "bs ite", + "b site", + "▁E uro", + "▁Eu ro", + "▁ut ter", + "▁ utter", + "e clipse", + "▁ir re", + "▁irr e", + "▁D ocument", + "▁Doc ument", + "▁ Document", + "▁Mean while", + "▁famil ie", + "ver ify", + "▁J ason", + "▁Ja son", + "▁O rt", + "▁Or t", + "▁ci udad", + "▁techn ologies", + "▁ча сти", + "▁част и", + "▁час ти", + "ni ca", + "nic a", + "n ica", + "can cel", + "c ancel", + "V irtual", + "▁ev ident", + "am an", + "ama n", + "a man", + "▁Sup reme", + "at oes", + "ato es", + "▁ste ady", + "▁stead y", + "▁month ly", + "▁SO FTWARE", + "Di e", + "D ie", + "▁app lying", + "▁apply ing", + "▁appl ying", + "Di g", + "D ig", + "vi er", + "v ier", + "▁го ро", + "▁W H", + "▁ WH", + "▁min ds", + "▁mind s", + "▁k am", + "▁ka m", + "▁expert ise", + "▁not ification", + "▁ notification", + ". -", + "▁del iber", + "▁H E", + "▁ HE", + "▁res ist", + "ou tes", + "out es", + "oute s", + "o utes", + "▁How ard", + "▁Ho ward", + "spec ial", + "spe cial", + "▁p resentation", + "▁present ation", + "▁You Tube", + "mi r", + "m ir", + "▁r ust", + "▁ru st", + "▁rus t", + "▁ rust", + "▁n ations", + "▁nat ions", + "▁nation s", + "▁G ets", + "▁Ge ts", + "▁Get s", + "▁respon ses", + "▁response s", + "▁respons es", + "ar ded", + "ard ed", + "arde d", + "im mer", + "imm er", + "▁reve al", + "▁M eg", + "▁Me g", + "▁tod os", + "▁todo s", + "▁a de", + "▁ad e", + "▁ ade", + "ateg ories", + "ategor ies", + "▁pay ments", + "▁payment s", + "ô t", + "En umer", + "Enum er", + "E numer", + "▁platform s", + "▁plat forms", + "▁life time", + "▁lif etime", + "Com plete", + "Comp lete", + "Qu est", + "Que st", + "Q uest", + "en ders", + "end ers", + "ender s", + "ende rs", + "▁c um", + "▁cu m", + "pl er", + "ple r", + "p ler", + "▁app l", + "▁ap pl", + "äh rend", + "ähr end", + "з ь", + "en ez", + "ene z", + "e nez", + "over ty", + "yn chron", + "▁arg ued", + "▁argue d", + "▁K ath", + "▁Kat h", + "▁Ka th", + "▁s ynchron", + "▁syn chron", + "▁B uilder", + "▁Build er", + "▁ Builder", + "B order", + "Pl an", + "P lan", + "ri eb", + "rie b", + "r ieb", + "n m", + "FOR MAT", + "FORM AT", + "us k", + "u sk", + "▁j umped", + "▁jump ed", + "ch arg", + "char g", + "cha rg", + "▁cont ribute", + "▁contribut e", + "Me sh", + "M esh", + "Un ivers", + "re ll", + "rel l", + "r ell", + "▁p olar", + "▁pol ar", + "▁po lar", + "▁tr ois", + "▁tro is", + "ic io", + "ici o", + "i cio", + "Group s", + "G roups", + "▁( %", + "▁ (%", + "Lo op", + "L oop", + "▁g az", + "▁ga z", + "db g", + "d bg", + "LA Y", + "L AY", + "Jo hn", + "J ohn", + "bl ocks", + "block s", + "blo cks", + "▁l ung", + "▁lu ng", + "▁lun g", + "▁ lung", + "▁k ön", + "▁kö n", + "th rough", + "▁fif th", + "lish er", + "l isher", + "▁inv olving", + "▁invol ving", + "▁De ep", + "▁ Deep", + "▁обла сти", + "▁s ull", + "▁su ll", + "▁sul l", + "Ex port", + "Exp ort", + "▁K ate", + "▁Kat e", + "▁Ka te", + "per iod", + "ch arge", + "char ge", + "charg e", + "G T", + "\"> \r", + "\" >\r", + "ти н", + "т ин", + "▁O tt", + "▁Ot t", + "▁inter actions", + "▁interaction s", + "▁interact ions", + "▁Tor onto", + "TR ACE", + "TRA CE", + "▁d ifer", + "▁di fer", + "▁dif er", + "▁lib eral", + "▁liber al", + "▁p article", + "▁part icle", + "▁partic le", + "▁parti cle", + "▁sur ve", + "▁surv e", + "al ous", + "alo us", + "re ason", + "rea son", + "▁de pression", + "▁dep ression", + "▁depress ion", + "а л", + "▁f lower", + "▁fl ower", + "▁flo wer", + "▁flow er", + "▁wa ar", + "▁h ade", + "▁had e", + "▁ha de", + "▁cent uries", + "ut y", + "u ty", + "par ty", + "part y", + "▁appro val", + "gener ate", + "▁B arn", + "▁Bar n", + "▁Ba rn", + "▁m arg", + "▁mar g", + "▁ma rg", + "▁m onde", + "▁mon de", + "▁mo nde", + "▁mond e", + "▁o ok", + "▁ ook", + "▁Cl ark", + "▁Clar k", + "▁the oret", + "vious ly", + "vi ously", + "v iously", + "? )", + "▁R ud", + "▁Ru d", + "st mt", + "in ction", + "inct ion", + "▁t un", + "▁tu n", + "▁ro ads", + "▁road s", + "▁rot ation", + "▁ rotation", + "pp en", + "ppe n", + "p pen", + "sen sor", + "s ensor", + "▁K ol", + "▁Ko l", + "id elines", + "ide lines", + "idel ines", + "▁ є", + "▁com posed", + "▁comp osed", + "▁compos ed", + "▁v irus", + "▁vi rus", + "▁vir us", + "' $", + "S N", + "▁V on", + "▁Vo n", + "mon t", + "mo nt", + "m ont", + "la r", + "l ar", + "▁opin ions", + "▁opinion s", + "uct ion", + "u ction", + "ru pal", + "rup al", + "under line", + "▁hor ror", + "Mus t", + "Mu st", + "M ust", + "ot to", + "ott o", + "o tto", + "Sh ould", + "▁stat ist", + "▁g em", + "▁ge m", + "▁ gem", + "▁se cre", + "▁sec re", + "▁st rip", + "▁str ip", + "▁stri p", + "▁ strip", + "▁d irt", + "▁di rt", + "▁dir t", + "ama zon", + "amaz on", + "▁R ound", + "▁Ro und", + "▁Rou nd", + "▁ Round", + "▁dis covery", + "▁disc overy", + "▁discover y", + "▁disco very", + "▁G O", + "▁ GO", + "▁substant ial", + "ib t", + "i bt", + "▁dem ands", + "▁demand s", + "▁every day", + "▁b esch", + "▁be sch", + "▁bes ch", + "▁B ridge", + "▁Br idge", + "▁H D", + "▁ HD", + "▁D ol", + "▁Do l", + "▁t rès", + "▁tr ès", + "an ni", + "ann i", + "ro it", + "() );\r", + "()); \r", + "()) ;\r", + "( ));\r", + "fa r", + "f ar", + "tim estamp", + "▁bul k", + "Bl ack", + "▁g an", + "▁ga n", + "▁ gan", + "set ting", + "ret val", + "ва не", + "ван е", + "nu ng", + "n ung", + "▁talk s", + "▁tal ks", + "▁scient ists", + "▁scientist s", + "▁v ig", + "▁vi g", + "▁quant ity", + "▁G ard", + "▁Gar d", + "▁Ga rd", + "▁mov ements", + "▁move ments", + "▁movement s", + "äh r", + "ä hr", + "ling s", + "lin gs", + "l ings", + "▁Т е", + "te am", + "ri to", + "rit o", + "r ito", + "▁as sembly", + "▁ assembly", + "il st", + "ils t", + "i lst", + "▁happ iness", + "▁le af", + "▁ leaf", + "▁ass essment", + "▁assess ment", + "Co ord", + "ir s", + "i rs", + "sa m", + "s am", + "▁att orney", + "▁g eme", + "▁ge me", + "▁gem e", + "▁ geme", + "ID E", + "I DE", + "▁V ere", + "▁Ver e", + "▁Ve re", + "▁Anth ony", + "am iento", + "ami ento", + "▁A st", + "▁As t", + "▁cir cul", + "▁circ ul", + "▁Fr ances", + "▁Franc es", + "▁France s", + "▁Fran ces", + "▁p ent", + "▁pe nt", + "▁pen t", + "▁ pent", + "▁m ate", + "▁mat e", + "▁ma te", + "▁ mate", + "▁Trans port", + "▁ Transport", + "ow o", + "o wo", + "ч у", + "is tes", + "ist es", + "iste s", + "TR AN", + "TRA N", + "T RAN", + "IM PORT", + "IMP ORT", + "▁B reak", + "▁Bre ak", + "▁ Break", + "▁s ons", + "▁so ns", + "▁son s", + "▁invest ors", + "▁Phil ipp", + "▁Philip p", + "TH OD", + "▁pan ic", + "▁pa nic", + "▁ panic", + "▁: )", + "▁d etection", + "▁det ection", + "▁detect ion", + "▁sim ultane", + "nt e", + "n te", + "▁list ened", + "▁listen ed", + "к ре", + "▁B rig", + "▁Br ig", + "Option al", + "Opt ional", + "▁a bund", + "▁ab und", + "▁c riteria", + "▁crit eria", + "▁c hip", + "▁ch ip", + "▁chi p", + "▁ chip", + "▁ок ру", + "▁Con stant", + "▁Const ant", + "▁ Constant", + "▁m ining", + "▁min ing", + "▁mi ning", + "▁mini ng", + "та л", + "т ал", + "ma tes", + "mat es", + "mate s", + "m ates", + "▁w orship", + "▁wor ship", + "ro uter", + "rou ter", + "route r", + "r outer", + "C N", + "▁M atch", + "▁Mat ch", + "▁ Match", + "▁C ole", + "▁Col e", + "▁Co le", + "▁down t", + "▁dow nt", + "▁h oles", + "▁hol es", + "▁ho les", + "▁hole s", + "▁gr ateful", + "RES ULT", + "▁Europ a", + "▁Euro pa", + "▁con sent", + "▁cons ent", + "▁conse nt", + "l ä", + "op ter", + "opt er", + "▁colle agues", + "or ous", + "oro us", + "o rous", + "▁enem ies", + "ha ng", + "han g", + "h ang", + "act ual", + "Object s", + "▁я к", + "▁fl uid", + "▁flu id", + "fix ed", + "f ixed", + "▁G raph", + "▁Gr aph", + "▁Gra ph", + "▁ Graph", + "▁scr atch", + "ce rs", + "cer s", + "c ers", + "ri bu", + "rib u", + "▁valid ation", + "▁ validation", + "▁com pletion", + "▁complet ion", + "▁B egin", + "▁Be gin", + "▁Beg in", + "▁ Begin", + "end point", + "ri ent", + "rie nt", + "rien t", + "r ient", + "C M", + "▁S ite", + "▁Si te", + "▁ Site", + "▁expl ains", + "▁explain s", + "tr es", + "tre s", + "t res", + "▁any body", + "fo reach", + "fore ach", + "for each", + "lo n", + "l on", + "Ch ain", + "▁B uff", + "▁Bu ff", + "▁ Buff", + "oc al", + "oca l", + "o cal", + "▁M organ", + "▁Mor gan", + "▁s ang", + "▁sa ng", + "▁san g", + "▁pass es", + "▁pas ses", + "@ @", + "ij d", + "i jd", + "W ord", + "▁H ung", + "▁Hun g", + "▁Hu ng", + "▁F er", + "▁Fe r", + "▁v ý", + "ba st", + "bas t", + "b ast", + "▁enter tainment", + "▁entertain ment", + "hi n", + "h in", + "▁g rat", + "▁gr at", + "▁gra t", + "▁M ember", + "▁Me mber", + "▁Mem ber", + "▁ Member", + "▁M inn", + "▁Min n", + "▁Mi nn", + "▁pr inted", + "▁print ed", + "▁prin ted", + "▁Frank lin", + "▁I mp", + "▁Im p", + "▁ Imp", + "M achine", + "column s", + "▁de leted", + "▁del eted", + "▁delete d", + "▁delet ed", + "▁ deleted", + "▁manufact uring", + "▁re ly", + "▁r ely", + "▁rel y", + "▁con se", + "▁cons e", + "▁f ishing", + "▁fish ing", + "▁fis hing", + "bl o", + "b lo", + "- $", + "▁. \"", + "▁ .\"", + "▁clin ical", + "▁clinic al", + "▁Stud ies", + "▁Б у", + "def inition", + "▁evalu ation", + "▁eval uation", + "▁att acked", + "▁attack ed", + "▁fro zen", + "ze nt", + "zen t", + "z ent", + "▁ú lt", + "▁r ational", + "▁rat ional", + "▁ratio nal", + "ot he", + "oth e", + "o the", + "Can cel", + "C ancel", + "hi story", + "hist ory", + "set Text", + "▁a lc", + "▁al c", + "▁h ydro", + "▁hy dro", + "▁hyd ro", + "▁The atre", + "▁M aterial", + "▁Mat erial", + "▁ Material", + "IO Exception", + "**** **/", + "****** /", + "sp l", + "s pl", + "NO DE", + "att rs", + "attr s", + "▁m ie", + "▁mi e", + "▁off ices", + "▁offic es", + "▁office s", + "r ó", + "▁j am", + "▁ja m", + "▁Id ent", + "▁Ide nt", + "▁ Ident", + "v é", + "Set ting", + "▁Sever al", + "▁Sev eral", + "▁dec ay", + "And roid", + "▁S ave", + "▁Sa ve", + "▁Sav e", + "▁ Save", + "un ted", + "unt ed", + "unte d", + "▁Mount ain", + "us c", + "u sc", + "▁mar zo", + "▁a sleep", + "▁as leep", + "▁sold ier", + "▁D ouble", + "▁Dou ble", + "▁ Double", + "P K", + "▁cont rad", + "▁contr ad", + "▁contra d", + "▁w ins", + "▁win s", + "ce iver", + "ceive r", + "▁se asons", + "▁season s", + "▁seas ons", + "▁C hall", + "▁Ch all", + "▁Cha ll", + "▁health care", + "ła d", + "ł ad", + "о т", + "▁F ive", + "▁Fi ve", + "▁H ell", + "▁He ll", + "▁Hel l", + "▁world wide", + "▁' ,", + "▁ ',", + "я н", + "ma de", + "mad e", + "m ade", + "▁respon ded", + "▁respond ed", + "▁a y", + "▁ ay", + "▁proced ures", + "▁procedure s", + "те ра", + "тер а", + "▁cle ared", + "▁clear ed", + "\"] .", + "\" ].", + "▁T arget", + "▁Tar get", + "▁ Target", + "▁S ide", + "▁Si de", + "▁Sid e", + "▁ Side", + "om in", + "omi n", + "o min", + "▁de ploy", + "▁T ell", + "▁Te ll", + "▁Tel l", + "▁ Tell", + "▁on going", + "fl oor", + "f loor", + "▁b ones", + "▁bo nes", + "▁bon es", + "▁bone s", + "▁De lete", + "▁Del ete", + "▁ Delete", + "▁shru gged", + "O ur", + "De r", + "D er", + "▁init ialize", + "▁initial ize", + "▁ initialize", + "▁T ed", + "▁Te d", + "MA GE", + "MAG E", + "M AGE", + "▁h ire", + "▁hi re", + "▁ hire", + "▁tr acking", + "▁track ing", + "▁a sh", + "▁as h", + "▁ ash", + "▁ce iling", + "ка х", + "et ti", + "ett i", + "e tti", + "▁cour age", + "▁cou rage", + "ensch app", + "ют ся", + "ю тся", + "Mo re", + "M ore", + "▁fol g", + "▁fo lg", + "▁ folg", + "▁Gr ace", + "▁Gra ce", + "▁K elly", + "▁Kel ly", + "▁re ven", + "▁r even", + "▁rev en", + "▁reve n", + "▁A li", + "▁Al i", + "▁ Ali", + "▁d isp", + "▁dis p", + "▁di sp", + "▁ disp", + "▁de feat", + "▁defe at", + "▁cre ature", + "▁creat ure", + "▁Kenn edy", + "▁D iego", + "▁Die go", + "▁Di ego", + "EM P", + "E MP", + "▁s team", + "▁ste am", + "end ance", + "ri g", + "r ig", + "▁ign or", + "▁ig nor", + "em en", + "eme n", + "e men", + "▁G ru", + "▁Gr u", + "▁pro posal", + "▁propos al", + "▁we iter", + "▁weit er", + "▁ лі", + "ib les", + "ible s", + "i bles", + "▁consider ation", + "▁belie ves", + "▁believe s", + "▁S oph", + "▁So ph", + "“ ,", + "▁Matt hew", + "▁circ uit", + "▁s inger", + "▁sing er", + "▁sin ger", + "▁S quare", + "ç o", + "Ed ge", + "▁a str", + "▁as tr", + "▁ast r", + "▁ astr", + "▁represent ative", + "▁comprehens ive", + "li ga", + "lig a", + "l iga", + "▁m ere", + "▁me re", + "▁mer e", + "tb l", + "t bl", + "▁contin uing", + "▁continu ing", + "ograph er", + "ograp her", + "LE D", + "L ED", + "▁/* **/", + "▁/** */", + "▁s ear", + "▁se ar", + "▁sea r", + "▁enorm ous", + "iz i", + "i zi", + "Di t", + "D it", + "th ere", + "ther e", + "the re", + "t here", + "і н", + "си те", + "▁gu erra", + "▁end point", + "▁ endpoint", + "▁le sson", + "▁les son", + "▁less on", + "zo n", + "z on", + "var iable", + "vari able", + "и с", + "▁research ers", + "▁attempt ed", + "▁e nf", + "▁en f", + "ту ра", + "тур а", + "▁de fin", + "▁def in", + "ве ст", + "▁aw ful", + "▁lo west", + "▁low est", + "ru les", + "rule s", + "r ules", + "▁un like", + "inter val", + "▁produ cing", + "▁K am", + "▁Ka m", + "▁I MP", + "▁IM P", + "▁ IMP", + "Gener al", + "Gen eral", + "▁f aire", + "▁fa ire", + "▁fair e", + "▁max im", + "▁ma xim", + "as semb", + "ass emb", + "asse mb", + "assem b", + "ac ent", + "ace nt", + "a cent", + "? >", + "pl ica", + "plic a", + "p lica", + "▁r am", + "▁ra m", + "▁ ram", + "ma te", + "mat e", + "m ate", + "ц у", + "m n", + "▁H i", + "▁ Hi", + "▁st ages", + "▁stage s", + "▁stag es", + "▁sta ges", + "▁Ed itor", + "▁Edit or", + "▁ Editor", + "▁t ang", + "▁tan g", + "▁ta ng", + "R D", + "▁i ch", + "▁ic h", + "▁ ich", + "▁depend ent", + "▁dep endent", + "▁ dependent", + "li fer", + "life r", + "lif er", + "l ifer", + "as cript", + "asc ript", + "a script", + "▁expos ure", + "ре з", + "▁m art", + "▁mar t", + "▁ma rt", + "▁ mart", + "▁Bar cel", + "xs pace", + "x space", + "SE SSION", + "▁p rest", + "▁pre st", + "▁pr est", + "▁pres t", + "UR CE", + "- .", + "▁се ло", + "ha ve", + "hav e", + "h ave", + "▁observ ation", + "▁obs ervation", + "▁comm ands", + "▁command s", + "▁ commands", + "▁e ager", + "▁out door", + "▁DE BUG", + "▁ DEBUG", + "▁h r", + "▁ hr", + "A X", + "▁p uzz", + "▁pu zz", + "bl ank", + "бу р", + "б ур", + "▁k ennis", + "▁reg arded", + "▁regard ed", + "▁} ),", + "▁}) ,", + "▁ }),", + "vol ume", + "▁про из", + "▁Tr aining", + "▁Tra ining", + "▁Train ing", + "a ñ", + "▁f ois", + "▁foi s", + "▁fo is", + "▁т ри", + "▁ три", + "в ня", + "▁opt imal", + "▁optim al", + "▁sub scription", + "▁subs cription", + "▁ subscription", + "br idge", + "brid ge", + "b ridge", + "im ental", + "iment al", + "imen tal", + "▁Th ink", + "▁\" ;", + "▁ \";", + "▁leg isl", + "▁legis l", + "▁H op", + "▁Ho p", + "▁br anches", + "▁branch es", + "▁V eg", + "▁Ve g", + "▁s print", + "▁spr int", + "▁fl ux", + "▁flu x", + "▁Fr eder", + "▁Fre der", + "▁Fred er", + "si s", + "s is", + "not ify", + "▁Ф ран", + "so m", + "s om", + "ny m", + "n ym", + "▁R é", + "le tt", + "let t", + "l ett", + "ing ham", + "▁F arm", + "▁Far m", + "▁Fa rm", + "DO M", + "D OM", + "▁sh ield", + "He re", + "Her e", + "H ere", + "▁T reat", + "▁Tre at", + "▁Lu ke", + "▁un safe", + "an ton", + "ant on", + "anto n", + "▁Im per", + "▁Imp er", + "▁tele phone", + "▁un lock", + "▁ unlock", + "Own er", + "col lection", + "coll ection", + "collect ion", + "▁s nd", + "▁sn d", + "▁ snd", + "▁su iv", + "▁ent ering", + "▁enter ing", + "ше н", + "ш ен", + "▁L abel", + "▁La bel", + "▁Lab el", + "▁ Label", + "se lector", + "sel ector", + "select or", + "▁G ET", + "▁ GET", + "▁qu ando", + "▁quand o", + "▁f ed", + "▁fe d", + "▁ fed", + "j Query", + "Or igin", + "▁A lan", + "▁Al an", + "math scr", + "▁pregn ant", + "▁preg nant", + "Ex pect", + "Exp ect", + "re sources", + "res ources", + "resource s", + "▁er sten", + "▁erst en", + "▁ers ten", + "▁erste n", + "al ia", + "ali a", + "a lia", + "▁ret ired", + "▁retire d", + "û t", + "Cr ed", + "C red", + "▁m éd", + "▁mé d", + "▁e rh", + "▁er h", + "Frame work", + "Sl ot", + "S lot", + "d uration", + "sa l", + "s al", + "▁com position", + "▁compos ition", + "art icle", + "gp u", + "g pu", + "▁per mitted", + "▁perm itted", + "▁permit ted", + "▁F ont", + "▁Fo nt", + "▁ Font", + "▁M uch", + "▁Mu ch", + "▁p ending", + "▁pen ding", + "▁ pending", + "▁ag encies", + "Column s", + "▁k lik", + "▁kl ik", + "▁r ating", + "▁rat ing", + "▁ra ting", + "▁ rating", + "min d", + "mi nd", + "m ind", + "▁Penn sylvania", + "J ava", + "ab stract", + "abs tract", + "▁d umb", + "▁du mb", + "▁V I", + "▁ VI", + "us a", + "u sa", + "Rem ote", + "▁YO U", + "▁C reek", + "▁Cre ek", + "ма ти", + "мат и", + "Bot tom", + "B ottom", + "▁roll ing", + "▁ rolling", + "▁b undle", + "▁bund le", + "▁ bundle", + "▁g olf", + "▁gol f", + "gp io", + "g pio", + "▁Ch air", + "▁Cha ir", + "▁c ls", + "▁cl s", + "▁ cls", + "$ }", + "▁Par liament", + "f ühr", + "Man y", + "Ma ny", + "M any", + "▁S ep", + "▁Se p", + "▁ Sep", + "▁bad ly", + "ig i", + "i gi", + "▁Geme inde", + "Il l", + "I ll", + "▁А н", + "ua rt", + "uar t", + "u art", + "it empty", + "item pty", + "▁N iger", + "▁Ni ger", + "▁im migr", + "▁imm igr", + "Su per", + "Sup er", + "S uper", + "v á", + "ist ribute", + "istribut e", + "Hel pers", + "Helper s", + "Help ers", + "▁w aters", + "▁water s", + "▁wat ers", + "▁wa ters", + "▁join ing", + "▁jo ining", + "om itempty", + "▁Other wise", + "▁H ost", + "▁Ho st", + "▁ Host", + "▁re dd", + "▁red d", + "▁d y", + "▁ dy", + "▁con verted", + "▁convert ed", + "▁conver ted", + "▁pr ayer", + "▁pray er", + "▁pra yer", + "▁У краї", + "▁Укра ї", + "▁e lections", + "▁elect ions", + "▁ele ctions", + "▁election s", + "re b", + "r eb", + "er ie", + "eri e", + "e rie", + "▁с вя", + "Ab s", + "A bs", + "ie mbre", + "iem bre", + "i embre", + "hol ders", + "hold ers", + "holder s", + "▁R ol", + "▁Ro l", + "ut schen", + "uts chen", + "utsch en", + "utsche n", + "▁G h", + "ter y", + "te ry", + "t ery", + "ан г", + "а нг", + "▁narr ative", + "min us", + "m inus", + "▁I ron", + "▁Ir on", + "=\" #", + "▁w and", + "▁wa nd", + "▁ wand", + "▁w ished", + "▁wish ed", + "▁wis hed", + "ic ode", + "ico de", + "i code", + "or r", + "o rr", + "[ [", + "▁detect ed", + "▁municip al", + "▁P our", + "▁Po ur", + "▁S erv", + "▁Se rv", + "▁Ser v", + "▁ Serv", + "cite t", + "cit et", + "c itet", + "▁g rey", + "▁gr ey", + "▁gre y", + "▁R ap", + "▁Ra p", + "▁v oy", + "▁vo y", + "▁l leg", + "▁ll eg", + "▁cur rency", + "▁curr ency", + "▁ currency", + "▁S cript", + "▁Sc ript", + "▁ Script", + "str ument", + "stru ment", + "▁expect ing", + "▁t ickets", + "▁tick ets", + "▁ticket s", + "▁b ucket", + "▁buck et", + "▁ bucket", + "eg r", + "e gr", + "▁j acket", + "▁jack et", + "dr v", + "d rv", + "▁lo ans", + "▁loan s", + "▁k ann", + "▁kan n", + "▁ka nn", + "▁integr al", + "▁character istics", + "▁characteristic s", + "(\" .", + "( \".", + "▁man ual", + "▁d ynamics", + "▁dynam ics", + "▁dynamic s", + ": *", + "sh a", + "s ha", + "re ens", + "ree ns", + "reen s", + "on ical", + "oni cal", + "onic al", + "▁to ile", + "añ a", + "a ña", + "▁d istant", + "▁di stant", + "▁dist ant", + "▁hand led", + "▁handle d", + "Bo ol", + "B ool", + "▁pe nal", + "▁pen al", + "▁Th ings", + "▁prom inent", + "▁ex ped", + "▁exp ed", + "▁He lp", + "▁Hel p", + "▁ Help", + "▁a sp", + "▁as p", + "▁ asp", + "la p", + "l ap", + "▁A uth", + "▁Aut h", + "▁Au th", + "▁ Auth", + "Bas ic", + "ach uset", + "▁B ild", + "▁Bi ld", + "▁Bil d", + "▁ent itled", + "▁j ag", + "▁ja g", + "▁reject ed", + "▁m emor", + "▁me mor", + "▁mem or", + "▁memo r", + "or ts", + "ort s", + "▁ap plies", + "▁appl ies", + "▁L anguage", + "▁ Language", + "spec ific", + "achuset ts", + "HA ND", + "H AND", + "▁R oute", + "▁Ro ute", + "▁Rou te", + "▁ Route", + "mark et", + "mar ket", + "▁K y", + "▁p ose", + "▁pos e", + "▁po se", + "▁ pose", + "AC HE", + "ACH E", + "po ll", + "pol l", + "p oll", + "▁r ocks", + "▁ro cks", + "▁rock s", + "bo ne", + "bon e", + "b one", + "▁D IS", + "▁DI S", + "▁ DIS", + "W atch", + "▁sm iling", + "ри о", + "Mon th", + "Mont h", + "▁e fter", + "con struct", + "const ruct", + "▁b ands", + "▁band s", + "▁ban ds", + "▁ bands", + "▁collabor ation", + "ни ми", + "ним и", + "gl as", + "g las", + "▁v y", + "▁ vy", + "▁eng agement", + "▁engage ment", + "__ )", + "_ _)", + "▁w ings", + "▁win gs", + "▁wing s", + "ки м", + "к им", + "net je", + "at iva", + "ati va", + "ativ a", + "▁Du ke", + "ле е", + "▁With in", + "▁d ove", + "▁do ve", + "▁c b", + "▁ cb", + "ye rs", + "yer s", + "y ers", + "po w", + "p ow", + "[ (", + "▁evalu ate", + "▁eval uate", + "Point s", + "▁р і", + "▁ рі", + "od igd", + "odi gd", + "on omy", + "ono my", + "onom y", + "▁Ill inois", + "▁T yp", + "▁Ty p", + "▁ Typ", + "▁coord inates", + "▁coordinate s", + "pis ode", + "uck ed", + "uc ked", + "▁f lav", + "▁fl av", + "▁br ands", + "▁brand s", + "▁cal endar", + "▁ calendar", + "Li b", + "L ib", + "▁uit gen", + "▁t ale", + "▁tal e", + "▁ta le", + "▁brief ly", + "▁m ic", + "▁mi c", + "▁ mic", + "RE SS", + "RES S", + "▁sp äter", + "▁integr ated", + "▁integrate d", + "▁cook ies", + "▁cookie s", + "▁uitgen odigd", + "▁P riv", + "▁Pr iv", + "▁Pri v", + "▁ Priv", + "▁phen omen", + "▁vo egen", + "Su pp", + "Sup p", + "S upp", + "▁re fers", + "▁ref ers", + "▁refer s", + "па д", + "▁Cl inton", + "▁Clin ton", + "▁ass ignment", + "▁assign ment", + "in als", + "ina ls", + "inal s", + "i nals", + "▁a sym", + "▁as ym", + "cy cle", + "cycl e", + "c ycle", + "▁And erson", + "▁Anders on", + "▁b inding", + "▁bin ding", + "▁bind ing", + "▁ binding", + "ri que", + "r ique", + "hi nd", + "hin d", + "h ind", + "▁be half", + "▁beh alf", + "▁F le", + "▁Fl e", + "▁break s", + "▁bre aks", + "▁so ap", + "▁ soap", + "ва р", + "в ар", + "▁v ä", + "▁ vä", + "▁c rying", + "▁cr ying", + "▁cry ing", + "▁ →", + "▁m sm", + "▁ms m", + "▁ msm", + "▁bo ots", + "▁boot s", + "ow ing", + "owi ng", + "o wing", + "▁b ell", + "▁be ll", + "▁bel l", + "▁ bell", + "su ite", + "suit e", + "▁Bund es", + "▁Bun des", + "Y ear", + "nd ef", + "nde f", + "n def", + "O ther", + "▁go ogle", + "▁goog le", + "▁ google", + "EN CE", + "ENC E", + "WE R", + "W ER", + "Le s", + "L es", + "Sh ared", + "Share d", + "▁E D", + "▁ ED", + "IF T", + "I FT", + "▁flo ating", + "▁float ing", + "ý m", + "{} ,", + "{ },", + "Bin ary", + "B inary", + "▁ro ce", + "ra j", + "r aj", + "▁be werken", + "B F", + "▁H ur", + "▁Hu r", + "ce n", + "c en", + "▁e re", + "▁er e", + "▁ ere", + "▁c amb", + "▁cam b", + "▁ca mb", + "▁Pak istan", + "▁great ly", + "▁log ging", + "▁ logging", + "/ .", + "Ten sor", + "T ensor", + "▁op ens", + "▁open s", + "▁ opens", + "▁R io", + "▁klik ken", + "▁sc ulpt", + "ap ore", + "apor e", + "w x", + "▁N ich", + "▁Nic h", + "▁Ni ch", + "na n", + "n an", + "▁inj ured", + "com pare", + "comp are", + "compar e", + "th a", + "t ha", + "Sam ple", + "S ample", + "Sh ell", + "She ll", + "S hell", + "▁comm ander", + "▁command er", + "▁re ceiver", + "▁rece iver", + "▁receive r", + "▁h opes", + "▁hope s", + "▁hop es", + "▁ho pes", + "▁b yl", + "▁by l", + "▁pro xy", + "▁pr oxy", + "▁ proxy", + "▁g all", + "▁gal l", + "▁ga ll", + "get Id", + "▁B ab", + "▁Ba b", + "fe ld", + "fel d", + "f eld", + "▁\" _", + "▁H ab", + "▁Ha b", + "sim ple", + "▁execut ed", + "▁execute d", + "▁a te", + "▁at e", + "▁ ate", + "▁an imation", + "▁anim ation", + "▁ animation", + "▁in hab", + "▁бо ль", + "▁r outer", + "▁ro uter", + "▁rout er", + "▁route r", + "▁rou ter", + "▁ router", + "▁gl ob", + "▁glo b", + "▁ glob", + "Ge plaatst", + "▁begin netje", + "▁K ur", + "▁Ku r", + "▁Х а", + "al igned", + "align ed", + "▁cert ificate", + "▁ Å", + ".) .", + ". ).", + "▁s oll", + "▁so ll", + "▁sol l", + "▁Im port", + "▁Imp ort", + "▁ Import", + "ре ди", + "ред и", + "р еди", + "▁pand emic", + "▁n ic", + "▁ni c", + "▁ nic", + "v ä", + "▁G ree", + "▁Gr ee", + "▁Gre e", + "▁S ay", + "▁Sa y", + "▁д і", + "▁ ді", + "▁N um", + "▁Nu m", + "▁ Num", + "▁rough ly", + "▁des pués", + "▁ ​", + "▁spec ify", + "Map per", + "lic ht", + "li cht", + "lich t", + "l icht", + "▁th umb", + "▁ thumb", + "wi e", + "w ie", + "▁un likely", + "▁unlike ly", + "▁ unlikely", + "▁E dd", + "▁Ed d", + "He y", + "H ey", + "▁O pt", + "▁Op t", + "▁ Opt", + "B LOCK", + "во р", + "в ор", + "▁ ×", + "▁b a", + "▁ ba", + "▁period s", + "▁title s", + "▁tit les", + "Me d", + "M ed", + "▁f on", + "▁fo n", + "▁ fon", + "▁b ast", + "▁bas t", + "▁ba st", + "▁ bast", + "▁F orest", + "▁For est", + "▁Fore st", + "▁Fo rest", + "▁ №", + "on ds", + "ond s", + "▁f al", + "▁fa l", + "▁g esch", + "▁ge sch", + "▁ges ch", + "▁ gesch", + "dir ection", + "di rection", + "direct ion", + "dire ction", + "d irection", + "IF Y", + "▁L A", + "▁ LA", + "▁( ((", + "▁(( (", + "▁ (((", + "GT H", + "G TH", + "it udes", + "itude s", + "itu des", + "itud es", + "▁dest ruction", + "▁destruct ion", + "▁J a", + "▁s take", + "▁st ake", + "▁sta ke", + "iffer ent", + "iffe rent", + "▁ident ical", + "▁f og", + "▁fo g", + "▁R eb", + "▁Re b", + "▁ Reb", + "ски е", + "сту п", + "ja x", + "j ax", + "▁M ars", + "▁Mar s", + "▁Ma rs", + "▁hist oric", + "▁histor ic", + "▁V o", + "▁ Vo", + "▁entre pre", + "▁t ension", + "▁tens ion", + "▁W HERE", + "▁WH ERE", + "▁WHE RE", + "▁Phil adelphia", + "Count er", + "Co unter", + "C ounter", + "▁fr ames", + "▁frame s", + "▁fra mes", + "▁fram es", + "▁ frames", + "▁m uy", + "▁mu y", + "e j", + "ö t", + "e u", + "▁че лове", + "PRO C", + "PR OC", + "▁res olved", + "▁resolve d", + "▁ resolved", + "▁t ape", + "▁tap e", + "▁ta pe", + "ци он", + "▁sing ular", + "▁person nel", + "▁M un", + "▁Mu n", + "▁O cc", + "▁ Occ", + "▁scal ar", + "▁ scalar", + "de ss", + "des s", + "d ess", + "▁c able", + "▁cab le", + "▁ca ble", + "be ing", + "b eing", + "▁J enn", + "▁Je nn", + "▁Jen n", + "▁er st", + "▁ers t", + "▁ erst", + "Action s", + "Act ions", + "A ctions", + "Env ironment", + "vi a", + "v ia", + "▁strugg ling", + "▁D VD", + "wh e", + "w he", + "▁throw ing", + "▁thr owing", + "▁thro wing", + "Bound s", + "B ounds", + "▁M D", + "▁ MD", + "▁\" ../", + "▁\". ./", + "▁satisf y", + "▁Color ado", + "▁Act ive", + "▁Activ e", + "▁ Active", + "Task s", + "<>( );", + "<> ();", + "< >();", + "▁sl ipped", + "▁slip ped", + "▁po ison", + "▁poi son", + "z b", + "Dis patch", + "war ning", + "warn ing", + "w arning", + "▁ult imate", + "p icture", + "ex pression", + "exp ression", + "expr ession", + "express ion", + "▁T alk", + "▁Tal k", + "▁f lick", + "▁fl ick", + "▁rais ing", + "▁ra ising", + "▁ raising", + "▁trans actions", + "▁transaction s", + "▁gl ance", + "▁g ri", + "▁gr i", + "▁п рез", + "▁пре з", + "se lection", + "sel ection", + "select ion", + "s election", + "њ а", + "en dl", + "end l", + "▁A bb", + "▁Ab b", + "▁b old", + "▁bo ld", + "▁bol d", + "▁ bold", + "▁maint ained", + "▁maintain ed", + "Ex ists", + "▁encour aged", + "▁encourage d", + "Qu al", + "Q ual", + "▁ess ere", + "▁h ired", + "▁hi red", + "▁hire d", + "let ter", + "lett er", + "lette r", + "it ches", + "itch es", + "oth ers", + "other s", + "othe rs", + "o thers", + "▁w oj", + "▁wo j", + "▁inj uries", + "▁d il", + "▁di l", + "ex ecut", + "exec ut", + "▁Ste el", + "▁G arden", + "▁Gar den", + "▁Gard en", + "з я", + "\\, \\", + "\\ ,\\", + "▁An gel", + "▁Ang el", + "pr im", + "p rim", + ">: ]<", + "g b", + "pe at", + "in te", + "int e", + "i nte", + "▁ap olog", + "▁reg ulations", + "▁regul ations", + "▁regulation s", + "S rc", + "k h", + "Up load", + "U pload", + "ma pping", + "map ping", + "m apping", + "▁p resents", + "▁pres ents", + "▁present s", + "▁po etry", + "▁poet ry", + "▁st ops", + "▁stop s", + "▁sto ps", + "▁T ol", + "▁To l", + "▁t ower", + "▁to wer", + "▁tow er", + "▁O UT", + "▁ OUT", + "Th ank", + "Than k", + "▁organ ic", + "▁d rei", + "▁dr ei", + "▁dre i", + "▁p ound", + "▁po und", + "▁pou nd", + "cent ury", + "▁mod ules", + "▁module s", + "▁ modules", + "▁д ере", + "▁де ре", + "▁w orn", + "▁wor n", + "▁wo rn", + "▁par ad", + "▁para d", + "▁pa rad", + "▁C os", + "▁Co s", + "fi c", + "f ic", + "▁бе з", + "▁Jim my", + "▁l ands", + "▁land s", + "▁lan ds", + "▁ lands", + "▁min ist", + "▁mini st", + "vs pace", + "v space", + "▁light ing", + "▁n aked", + "▁na ked", + "▁design er", + "▁St ream", + "▁Stre am", + "▁ Stream", + "TM P", + "T MP", + "Cent er", + "C enter", + "resent ation", + "ON T", + "O NT", + "▁e rs", + "▁er s", + "▁ ers", + "▁measure ment", + "▁mus cles", + "▁muscle s", + "▁I gn", + "▁ Ign", + "▁C OM", + "▁CO M", + "▁ COM", + "▁f ru", + "▁fr u", + "▁gen re", + "▁al pha", + "▁ alpha", + "▁ret irement", + "▁retire ment", + "▁G on", + "▁Go n", + "ő l", + "cont ents", + "content s", + "▁he aling", + "▁heal ing", + "▁s ido", + "▁si do", + "▁sid o", + "incip al", + "Per mission", + "Perm ission", + "ра к", + "▁G ordon", + "▁Gor don", + "▁R ank", + "▁Ran k", + "▁ Rank", + "▁Aut om", + "▁Au tom", + "▁Auto m", + "▁ Autom", + "Con structor", + "Construct or", + "wi ki", + "wik i", + "w iki", + "▁concern ing", + "▁concer ning", + "riz ona", + "▁var iant", + "▁vari ant", + "▁ variant", + "▁arr anged", + "▁arrang ed", + "▁arrange d", + "▁S pr", + "▁Sp r", + "BP ACK", + "B PACK", + "Tim estamp", + "re store", + "rest ore", + "aw are", + "awa re", + "a ware", + "▁Ob serv", + "▁ Observ", + "▁S V", + "▁ SV", + "ip p", + "i pp", + "▁Execut ive", + "▁col leg", + "▁coll eg", + "▁colle g", + "▁explicit ly", + "wr itten", + "writ ten", + "▁K ön", + "▁Kö n", + "ir us", + "i rus", + "▁H old", + "▁Hol d", + "▁Ho ld", + "▁P ract", + "▁Pr act", + "▁Pra ct", + "Char acter", + "▁red istribute", + "uer to", + "▁Stud ent", + "▁ Student", + "▁el der", + "▁D op", + "▁Do p", + "v p", + "▁H ub", + "▁Hu b", + "▁ Hub", + "▁gr ounds", + "▁ground s", + "▁R y", + "▁sign als", + "▁sig nals", + "▁signal s", + "▁g ifts", + "▁gift s", + "▁streng then", + "▁strength en", + "▁L yn", + "▁Ly n", + "com mun", + "comm un", + "▁на й", + "▁fin ance", + "▁financ e", + "no c", + "n oc", + "he lm", + "hel m", + "h elm", + "▁c uts", + "▁cut s", + "▁cu ts", + "▁advent ure", + "▁R ic", + "▁intellect ual", + "▁Out put", + "▁ Output", + "▁aw k", + "▁ awk", + "▁concentr ation", + "▁guid ance", + "Buf f", + "Bu ff", + "B uff", + "▁f illing", + "▁fil ling", + "▁fill ing", + "▁reg ul", + "▁del icious", + "([ ]", + "( []", + "ши х", + "▁t ons", + "▁to ns", + "▁ton s", + "▁ tons", + "act ivity", + "activ ity", + "G P", + "LO B", + "L OB", + "st adt", + "sta dt", + "stad t", + "ta l", + "t al", + "▁im g", + "▁i mg", + "▁ img", + "▁r ush", + "▁ru sh", + "▁rus h", + "att ice", + "atti ce", + "▁p ok", + "▁po k", + "st eps", + "ste ps", + "step s", + "▁l id", + "▁li d", + "▁D NA", + "B rowser", + "▁lad ies", + "▁an nées", + "▁ann ées", + "▁resc ue", + "av ity", + "avi ty", + "ro ck", + "roc k", + "r ock", + "▁glass es", + "▁B ey", + "▁Be y", + ")} $", + ") }$", + "de tail", + "det ail", + "▁d és", + "▁dé s", + "ta x", + "t ax", + "▁favour ite", + "▁prec ision", + "▁con oc", + "▁co noc", + "M s", + "▁N ative", + "▁Nat ive", + "▁ Native", + "▁P il", + "▁Pi l", + "Input Stream", + "or p", + "o rp", + "▁P ap", + "▁Pa p", + "▁p icking", + "▁pick ing", + "▁pic king", + "ip h", + "i ph", + "Load ing", + "Lo ading", + "▁pr iest", + "▁pri est", + "H ook", + "▁p ist", + "▁pi st", + "▁U ne", + "▁Un e", + "▁ Une", + "% ,", + "▁b il", + "▁bi l", + "▁ bil", + "▁conserv ative", + "ev al", + "eva l", + "e val", + "ik ing", + "iki ng", + "i king", + "'} ,", + "' },", + "▁sa uce", + "▁sau ce", + "▁D ue", + "▁Du e", + "as sen", + "ass en", + "asse n", + "▁occasion ally", + "▁occasional ly", + "▁Д ж", + "un known", + "unk nown", + "DE D", + "D ED", + "▁d rum", + "▁dr um", + "▁dru m", + "▁d ub", + "▁du b", + "AT URE", + "us age", + "usa ge", + "get Type", + "re ply", + "rep ly", + "▁strateg ic", + "▁k ap", + "▁ka p", + "▁ kap", + "de sign", + "des ign", + "date time", + "dat etime", + "▁P rim", + "▁Pr im", + "▁Pri m", + "▁ Prim", + "Ma ster", + "M aster", + "▁Cor ps", + "▁consider able", + "▁T u", + "▁ ла", + "▁t ous", + "▁to us", + "▁tou s", + "▁c lar", + "▁cl ar", + "▁po em", + "al bum", + "] *", + "lo aded", + "load ed", + "▁travel ing", + "▁trav eling", + "вы е", + "▁F err", + "▁Fe rr", + "▁Fer r", + "▁p harm", + "▁ph arm", + "ab i", + "a bi", + "▁} \\", + "▁ }\\", + "col lect", + "coll ect", + "▁B our", + "▁Bo ur", + "▁Bou r", + "O C", + "▁measure ments", + "▁measurement s", + "▁Profess ional", + "▁s ensor", + "▁sens or", + "▁sen sor", + "▁ sensor", + "ut sche", + "uts che", + "utsch e", + "▁dem anded", + "▁demand ed", + "▁accompan ied", + "▁p rend", + "▁pre nd", + "▁pr end", + "▁enc oding", + "▁ encoding", + "▁Gesch ichte", + "▁m ig", + "▁mi g", + "▁G ib", + "▁Gi b", + "▁Re ich", + "▁m yster", + "▁my ster", + "▁myst er", + "▁M ock", + "▁Mo ck", + "▁ Mock", + "▁phys ically", + "▁physical ly", + "▁B au", + "▁Ba u", + "▁S ingle", + "▁Sing le", + "▁Sin gle", + "▁ Single", + "▁man aging", + "▁K il", + "▁Ki l", + "▁Tem ple", + "▁Temp le", + "▁l ev", + "▁le v", + "▁ lev", + "▁l í", + "CP U", + "C PU", + "▁Prem ier", + "▁G ive", + "▁Gi ve", + "ir i", + "i ri", + "N V", + "▁A I", + "▁ AI", + "▁f p", + "▁ fp", + "лекс анд", + "▁t ant", + "▁tan t", + "▁ta nt", + "▁f ot", + "▁fo t", + "Null able", + "▁gu ards", + "▁guard s", + "On ce", + "▁ch amber", + "▁cha mber", + "fil m", + "fi lm", + "▁b ias", + "▁bi as", + "▁ bias", + "▁T ai", + "▁Ta i", + "ins ic", + "insi c", + "▁m l", + "▁ ml", + "▁K a", + "ва л", + "в ал", + "▁S ER", + "▁SE R", + "▁ SER", + "▁Some one", + "}} _{", + "}}_ {", + "} }_{", + "Fix ed", + "F ixed", + "▁b ent", + "▁be nt", + "▁ben t", + "▁pro hib", + "▁b id", + "▁bi d", + "▁ bid", + "▁fe wer", + "▁few er", + "к ры", + "▁l ugar", + "▁lug ar", + "▁lu gar", + "▁de serve", + "▁des erve", + "ss l", + "s sl", + "▁c fg", + "▁cf g", + "▁ cfg", + "re ck", + "rec k", + "▁st ability", + "▁stabil ity", + "▁stab ility", + "re size", + "res ize", + "▁assert That", + "Tr igger", + "▁ста нов", + "▁стан ов", + "▁ станов", + "pl ugins", + "plugin s", + "plug ins", + "▁l ets", + "▁le ts", + "▁let s", + "▁ lets", + "хі д", + "х ід", + "▁La ura", + "▁Lau ra", + "не р", + "н ер", + "▁br ut", + "▁bru t", + "▁F I", + "▁ FI", + "is ons", + "ison s", + "iso ns", + "▁d yn", + "▁dy n", + "▁ dyn", + "ic her", + "ich er", + "iche r", + "i cher", + "ray ed", + "▁frequ ent", + "▁jed och", + "▁Mar ine", + "st rings", + "str ings", + "string s", + "▁U til", + "▁Ut il", + "▁ Util", + "▁b os", + "▁bo s", + "Mu s", + "M us", + "▁Portug al", + "Str ategy", + "▁по се", + "▁пос е", + "▁sl ice", + "▁slic e", + "▁ slice", + "▁ins ight", + "▁w idget", + "▁wid get", + "▁ widget", + "▁gén éral", + "message s", + "m essages", + "▁H u", + "▁requ irement", + "▁require ment", + "Si de", + "S ide", + "empl ates", + "emplate s", + "▁cer emony", + "▁ceremon y", + "▁phys ics", + "▁grad uate", + "▁gradu ate", + "▁ graduate", + "par a", + "pa ra", + "p ara", + "▁pre serv", + "▁pres erv", + "▁sh ops", + "▁shop s", + "▁ shops", + "ze k", + "z ek", + "▁u b", + "▁ ub", + "pre pare", + "▁O il", + "▁f ib", + "▁fi b", + "▁run time", + "▁ runtime", + "▁h ogy", + "▁ho gy", + "Warn ing", + "War ning", + "W arning", + "▁Con vert", + "▁ Convert", + "bour ne", + "▁emer ged", + "▁emerge d", + "▁Д и", + "ight h", + "igh th", + "gu ard", + "ka l", + "k al", + "valid ation", + "ên cia", + "ê ncia", + "▁dr inks", + "▁drink s", + "the orem", + "H R", + "ie v", + "i ev", + "ploy ee", + "Us age", + "▁с пе", + "▁сп е", + "▁ спе", + "dis patch", + "disp atch", + "▁inst antly", + "▁instant ly", + "ob i", + "o bi", + "▁just ify", + "▁N ev", + "▁Ne v", + "▁я вля", + "ag ra", + "agr a", + "a gra", + "▁trans mission", + "▁transm ission", + "fl y", + "f ly", + "; ' ;", + "> ';", + "▁cou sin", + "▁cous in", + "create Element", + "Co uld", + "C ould", + "▁cap ac", + "▁p ause", + "▁pa use", + "▁paus e", + "▁ pause", + "Array List", + "kt e", + "k te", + "ord ered", + "order ed", + "▁sh aking", + "▁sha king", + "label s", + "lab els", + "▁redu cing", + "вы х", + "US ED", + "USE D", + "U SED", + "▁v oting", + "▁vo ting", + "▁vot ing", + "▁Min istry", + "▁M ig", + "▁Mi g", + "▁C hen", + "▁Ch en", + "▁Che n", + "▁ac company", + "▁accompan y", + "▁accomp any", + "ul le", + "ull e", + "u lle", + "▁g a", + "▁ ga", + "▁equ ipped", + "▁equip ped", + "▁n un", + "▁nu n", + "Be t", + "B et", + "▁lic ensed", + "▁license d", + "AR CH", + "F N", + "▁eng ines", + "▁engine s", + "▁s ter", + "▁st er", + "▁ste r", + "▁ ster", + "▁loc ale", + "▁local e", + "▁ locale", + "▁в ъ", + "lin ks", + "link s", + "l inks", + "▁Cap ital", + "▁al ien", + "▁ali en", + "W r", + "р ъ", + "Car t", + "C art", + "▁Mark eting", + "▁Market ing", + "▁R T", + "▁ RT", + "File Name", + "▁t i", + "▁ ti", + "ij i", + "i ji", + "▁vers us", + "li ve", + "liv e", + "l ive", + "Sy m", + "S ym", + "ko r", + "k or", + "▁e mission", + "▁em ission", + "um m", + "u mm", + "yc z", + "y cz", + "▁clim bed", + "▁climb ed", + "▁plus ieurs", + "к ри", + "ya r", + "y ar", + "os ten", + "ost en", + "o sten", + "▁u sb", + "▁us b", + "▁ usb", + "▁cross ing", + "▁pol ynom", + "▁poly nom", + "▁rem oval", + "▁Ad ams", + "▁Adam s", + "▁i hre", + "▁ih re", + "▁ihr e", + "an den", + "and en", + "ande n", + "▁Ben j", + "▁P hill", + "▁Ph ill", + "▁Phil l", + "▁wound ed", + "▁Cast le", + "▁Cas tle", + "bi ld", + "bil d", + "b ild", + "An notation", + "Process or", + "▁t in", + "▁ti n", + "fo lg", + "fol g", + "▁Stud ents", + "▁Student s", + "▁Mex ican", + "▁administr ative", + "IL ED", + "ILE D", + "I LED", + "▁con qu", + "▁che er", + "▁C es", + "▁Ce s", + "B ecause", + "▁J uni", + "▁Jun i", + "▁Ju ni", + "▁en contr", + "av i", + "a vi", + "V I", + "ak u", + "a ku", + "▁T on", + "▁To n", + "▁sm oking", + "▁b ay", + "▁ba y", + "work s", + "wor ks", + "а т", + "at tered", + "att ered", + "atter ed", + "atte red", + "▁Bo olean", + "▁ Boolean", + "▁B alt", + "▁Ba lt", + "▁Bal t", + "de fer", + "def er", + "path y", + "pat hy", + "pa thy", + "A h", + "▁a kt", + "▁ak t", + "▁ akt", + "▁gover nor", + "▁govern or", + "P ad", + "▁si sters", + "▁sister s", + "▁sist ers", + "La t", + "L at", + "▁re vel", + "▁r evel", + "▁rev el", + "▁reve l", + "▁S Y", + "▁ SY", + "it os", + "ito s", + "i tos", + "▁fil ters", + "▁filter s", + "▁ filters", + "Ch unk", + "con sum", + "cons um", + "▁rem oving", + "▁H err", + "▁He rr", + "▁Her r", + "▁gener ator", + "▁ generator", + "▁C ra", + "▁Cr a", + "▁far mers", + "▁farm ers", + "▁farmer s", + "▁Mem bers", + "▁Member s", + "▁ Members", + "▁over come", + "▁C in", + "▁Ci n", + "ig keit", + "cri ptions", + "cription s", + "cript ions", + "Test s", + "Te sts", + "T ests", + "▁к лу", + "▁sh ake", + "▁sha ke", + "▁ shake", + "▁y y", + "▁ yy", + "pl acement", + "place ment", + "plac ement", + "▁a wards", + "▁aw ards", + "▁award s", + "▁epis odes", + "▁episode s", + "▁Bl ood", + "▁Blo od", + "▁bul let", + "▁bull et", + "▁ bullet", + "▁v iene", + "▁vi ene", + "▁vie ne", + "▁Fin ancial", + "F uture", + "▁r ou", + "▁ro u", + "▁ rou", + "▁bi ologie", + "▁use State", + "ia ni", + "ian i", + "i ani", + "pie ce", + "p iece", + "▁spe aker", + "▁speak er", + "▁re fr", + "▁ref r", + "AR K", + "▁M IT", + "▁MI T", + "▁ MIT", + "▁T an", + "▁Ta n", + "▁B ased", + "▁Bas ed", + "▁Base d", + "▁Ba sed", + "▁ Based", + "▁cult iv", + "▁hung ry", + "▁A y", + "▁H ey", + "▁He y", + "▁ Hey", + "▁excit ement", + "ibr aries", + "Hi t", + "H it", + "▁E nde", + "▁En de", + "▁End e", + "N G", + "FI L", + "F IL", + ".\" )", + ". \")", + "F amily", + "in ery", + "ine ry", + "iner y", + "ne cess", + "ve lope", + "vel ope", + "velop e", + "▁B ot", + "▁Bo t", + "▁ Bot", + "port er", + "por ter", + "porte r", + "p orter", + "▁cl imb", + "▁clim b", + "▁E li", + "▁El i", + "ur ent", + "ure nt", + "uren t", + "u rent", + "▁mist akes", + "▁mistake s", + "áb an", + "á ban", + "mark s", + "mar ks", + "m arks", + "pk t", + "p kt", + "L ibrary", + "st ed", + "ste d", + "s ted", + "ublic e", + "ubl ice", + "▁Administr ation", + "▁Admin istration", + "▁sh apes", + "▁shape s", + "▁sha pes", + "пу бли", + "Go d", + "G od", + "in nen", + "inn en", + "ко ло", + "к оло", + "<< <<", + "ib e", + "i be", + "ê s", + "▁С ША", + "▁Fore ign", + "▁ Foreign", + "▁Marg aret", + "▁g ene", + "▁gen e", + "▁ge ne", + "▁dist urb", + "▁т ер", + "▁те р", + "▁ тер", + "▁on Click", + "▁Engine ering", + "▁stop ping", + "▁sto pping", + "▁restr ictions", + "▁restrict ions", + "▁restriction s", + ", *", + "BU F", + "▁sh adows", + "▁shadow s", + "hc i", + "h ci", + "▁Christ ians", + "▁Christian s", + "▁f ence", + "▁fen ce", + "▁lux ury", + "ak h", + "a kh", + "co ord", + "▁invest igate", + "▁investig ate", + "▁convent ional", + "▁convention al", + "\" —", + "▁vis its", + "▁visit s", + "is é", + "▁S ac", + "▁Sa c", + "class Name", + "▁Psy ch", + "▁ref lected", + "▁reflect ed", + "▁п ло", + "▁ пло", + "▁V ice", + "▁Vi ce", + "▁Vic e", + "ła w", + "ł aw", + "________ ________", + "▁W olf", + "▁Wol f", + "re nte", + "ren te", + "rent e", + "r ente", + "▁Ch ampion", + "▁sim ulation", + "es ota", + "eso ta", + "▁S oon", + "▁So on", + "▁C el", + "▁Ce l", + "▁the ories", + "▁S TR", + "▁ST R", + "▁ STR", + "▁collect ive", + "▁coord inate", + "query Selector", + "em ed", + "eme d", + "e med", + "B reak", + "▁g ef", + "▁ge f", + "▁electric ity", + "▁gather ing", + "at ers", + "ate rs", + "ater s", + "a ters", + "ex per", + "exp er", + "▁R oma", + "▁Rom a", + "▁Ro ma", + "▁Co oper", + "SY MBOL", + "v d", + "ivers ary", + "ain es", + "ai nes", + "aine s", + "a ines", + "▁G rad", + "▁Gr ad", + "▁Gra d", + "▁ Grad", + "▁independ ence", + "wo h", + "w oh", + "▁con sequence", + "▁consequ ence", + "▁convers ations", + "▁conversation s", + "▁R ou", + "▁Ro u", + "▁and ere", + "▁ander e", + "▁System s", + "га р", + "г ар", + "▁mo ist", + "▁mois t", + "fl u", + "f lu", + "ці я", + "ни ш", + "▁r ode", + "▁ro de", + "▁rod e", + "▁p erd", + "▁per d", + "▁pe rd", + "▁s zer", + "▁sz er", + "▁fl ood", + "▁flo od", + "▁in tim", + "▁int im", + "std err", + "▁ref lection", + "▁reflect ion", + "Sc an", + "S can", + "▁dis aster", + "ake spe", + "akes pe", + "▁In valid", + "▁ Invalid", + "▁hum or", + "▁Fried rich", + "▁suggest ions", + "▁suggestion s", + "uv ud", + "De lay", + "Del ay", + "br ief", + "b rief", + "▁и с", + "▁ ис", + "gl ied", + "fa s", + "f as", + "▁S mart", + "▁Sm art", + "▁m edi", + "▁me di", + "▁med i", + "▁ medi", + "sd k", + "s dk", + "▁se us", + "▁seu s", + "▁A rizona", + "▁innoc ent", + "War n", + "W arn", + "ac ious", + "aci ous", + "acio us", + "▁Mos cow", + "▁c aps", + "▁cap s", + "▁ca ps", + "▁ caps", + "Dele gate", + "▁dram atic", + "bo oks", + "book s", + "▁sh ore", + "▁ shore", + "uk i", + "u ki", + "▁Russ ell", + "▁cor relation", + "▁corre lation", + "▁correl ation", + "He lp", + "Hel p", + "▁pub blic", + "zy m", + "z ym", + "com b", + "co mb", + "c omb", + "E Y", + "LEN GTH", + "▁M ün", + "▁_ .", + "▁ _.", + "▁f erm", + "▁fe rm", + "▁fer m", + "▁I an", + "▁St udio", + "▁Stud io", + "▁aff airs", + "▁affair s", + "lo s", + "l os", + "Rule s", + "R ules", + "run ning", + "r unning", + "▁Post ed", + "▁Po sted", + "▁Pos ted", + "P ixel", + "▁d ancing", + "▁dan cing", + "▁agree ments", + "▁agre ements", + "▁agreement s", + "▁P ic", + "▁Pi c", + "an cia", + "anc ia", + "a ncia", + "▁m á", + "ation Token", + "des criptor", + "▁C arter", + "▁Car ter", + "▁Cart er", + "Re lease", + "Rele ase", + "**** ********", + "******** ****", + "****** ******", + "▁out standing", + "ch anges", + "change s", + "chan ges", + "AR RAY", + "▁Bar bara", + "▁Barb ara", + "▁nur se", + "▁nurs e", + "( \r", + "▁Dou glas", + "▁Doug las", + "▁nu cle", + "▁nuc le", + "ou ri", + "our i", + "o uri", + "▁St yle", + "▁ Style", + "av o", + "a vo", + "▁pain ful", + "▁s lic", + "▁sl ic", + "▁sein em", + "▁seine m", + "▁sei nem", + "SUP PORT", + "og ene", + "ogen e", + "oge ne", + "▁sat ell", + "ta gon", + "tag on", + "t agon", + "▁coll apse", + "▁ collapse", + "ve lle", + "vel le", + "v elle", + "MO N", + "M ON", + "augh ters", + "aught ers", + "aughter s", + "▁threat ened", + "▁Il legal", + "▁desper ate", + "st rict", + "str ict", + "stri ct", + "ru s", + "r us", + "сти ту", + "\\\" :", + "\\ \":", + "▁conf lic", + "down load", + "at os", + "ato s", + "a tos", + "▁Pos ition", + "▁ Position", + ".* ;", + ". *;", + "▁the ater", + "▁ple asant", + "▁C ette", + "▁Sing apore", + "he et", + "▁p ir", + "▁pi r", + "▁ac quis", + "▁acqu is", + "▁на зва", + "те ля", + "тел я", + "▁rec ru", + "же ния", + "ё л", + "вер сите", + "▁res pective", + "▁respect ive", + "▁t unnel", + "▁tun nel", + "▁tunn el", + "▁De an", + "D u", + "▁un cle", + "▁unc le", + "▁off ensive", + "co lo", + "col o", + "c olo", + "▁Un like", + "se ries", + "ser ies", + "serie s", + "s eries", + "▁A rn", + "▁Ar n", + "min ute", + "▁des criptor", + "▁ descriptor", + "▁st ones", + "▁stone s", + "▁sto nes", + "IC ATION", + "▁P ad", + "▁Pa d", + "▁ Pad", + "▁i Phone", + "e i", + "▁fant asy", + "▁Kore an", + "▁Korea n", + "\" }", + "▁or th", + "▁ orth", + "hal ten", + "halt en", + "de ep", + "▁K ay", + "▁Ka y", + "requ ency", + "▁du ties", + "▁dut ies", + "aw t", + "a wt", + "▁ne arest", + "▁near est", + "▁dis order", + "ст ру", + "▁Ch ile", + "▁Chi le", + "▁s eq", + "▁se q", + "▁ seq", + "▁transport ation", + "O O", + "▁D ez", + "▁De z", + "ij u", + "i ju", + "▁Result s", + "▁ Results", + "je d", + "j ed", + "iv el", + "ive l", + "i vel", + "HO ST", + "H OST", + "▁ €", + "▁ Î", + "▁c hin", + "▁ch in", + "▁chi n", + "▁m att", + "▁mat t", + "▁ma tt", + "▁v oted", + "▁vo ted", + "▁vote d", + "▁vot ed", + "▁ge hör", + "▁s ue", + "▁su e", + "▁leg acy", + "в ся", + "SO URCE", + "W ORK", + "it is", + "iti s", + "▁$ |", + "▁о бо", + "▁об о", + "▁n r", + "▁ nr", + "▁T amb", + "▁Ta mb", + "▁Tam b", + "▁sn ap", + "▁ snap", + "▁im pressed", + "▁imp ressed", + "▁impress ed", + "▁depos it", + "▁d ivid", + "▁di vid", + "▁div id", + "Seg ment", + "▁к ар", + "▁ка р", + "▁ кар", + "▁G as", + "▁Ga s", + "▁cr imes", + "▁crim es", + "▁crime s", + "▁cri mes", + "▁ins ult", + "▁H um", + "▁Hu m", + "▁bound ed", + "▁k icked", + "▁kick ed", + "▁М у", + "▁| \\", + "▁ |\\", + "ad ded", + "add ed", + "Pro du", + "P rodu", + "▁. /", + "▁ ./", + "▁awk ward", + "▁К ра", + "▁ ї", + "▁CON TR", + "▁be im", + "▁bei m", + "▁place holder", + "▁ placeholder", + "sp i", + "s pi", + "▁B ei", + "▁Be i", + "▁P f", + "ient es", + "ien tes", + "iente s", + "i entes", + "dis k", + "di sk", + "d isk", + "bl k", + "ne o", + "it arian", + "ita rian", + "itar ian", + "▁c ogn", + "▁co gn", + "▁s out", + "▁so ut", + "▁sou t", + "▁tr ash", + "▁tra sh", + "▁tras h", + "▁R ab", + "▁Ra b", + "▁dec line", + "▁decl ine", + "ta t", + "t at", + "▁comb ine", + "▁T ot", + "▁To t", + "▁dr ops", + "▁dro ps", + "▁drop s", + "Time s", + "Tim es", + "T imes", + "ched uler", + "chedul er", + "▁govern ments", + "▁government s", + "Te x", + "T ex", + "▁U sed", + "▁Us ed", + "▁Use d", + "▁ Used", + "за н", + "з ан", + "▁p d", + "▁ pd", + "ме т", + "м ет", + "▁&= &", + "▁N ag", + "▁Na g", + "▁до л", + "▁ дол", + "▁Al ways", + "rt c", + "r tc", + "ск е", + "с ке", + "▁perform ances", + "▁performance s", + "rupt ed", + "rup ted", + "▁д ва", + "▁man agers", + "▁manager s", + "▁manage rs", + "▁P itt", + "▁Pi tt", + "▁myst ery", + "▁myster y", + "▁set tle", + "▁sett le", + "ul se", + "uls e", + "cr oss", + "cro ss", + "c ross", + "quest ion", + "as ha", + "ash a", + "a sha", + "se ed", + "see d", + "s eed", + "ur able", + "ura ble", + "Fin al", + "Fi nal", + "F inal", + "++ ++", + "input s", + "▁back up", + "▁ backup", + "▁Le arning", + "▁Lear ning", + "▁Learn ing", + "▁* ,", + "▁ *,", + "lo go", + "log o", + "l ogo", + "▁se inen", + "▁sein en", + "▁seine n", + "▁sei nen", + "▁vulner able", + "direct ory", + "i ë", + "▁friend ship", + "▁friends hip", + "t u", + "▁V ec", + "▁Ve c", + "▁ Vec", + "rif ice", + "rific e", + "▁б ра", + "▁ бра", + "▁inv olve", + "▁invol ve", + "TO N", + "T ON", + "▁cor rid", + "se par", + "sep ar", + "Dest roy", + "▁j ul", + "▁ju l", + "▁inequ ality", + "▁a in", + "▁ai n", + "▁ ain", + "he x", + "h ex", + "▁w ider", + "▁wide r", + "▁wid er", + "те ли", + "тел и", + "▁j ack", + "▁ja ck", + "▁ jack", + "▁qu ot", + "▁ quot", + "▁G len", + "▁Gl en", + "▁Gle n", + "init ely", + "ih ood", + "i hood", + "▁wa ist", + "▁Man chester", + "reg ular", + "▁( &", + "▁ (&", + "▁mass es", + "▁mas ses", + "▁DE FAULT", + "▁ DEFAULT", + "▁ch airs", + "▁chair s", + "▁cha irs", + "▁F ast", + "▁Fa st", + "▁ Fast", + "▁c itt", + "▁cit t", + "▁ci tt", + "_{ {\\", + "_ {{\\", + "o a", + "▁$ \\{", + "▁$\\ {", + "▁se eds", + "▁see ds", + "▁seed s", + "▁A ld", + "▁Al d", + "▁B att", + "▁Ba tt", + "▁Bat t", + "fa b", + "f ab", + "▁democr acy", + "DT O", + "D TO", + "▁H ij", + "▁Hi j", + "PT R", + "P TR", + "N a", + "▁Har vard", + "si d", + "s id", + "Pr ed", + "Pre d", + "P red", + "fer s", + "fe rs", + "f ers", + "▁s pare", + "▁sp are", + "AM P", + "A MP", + "▁g roupe", + "▁group e", + "▁s ender", + "▁se nder", + "▁send er", + "▁sen der", + "▁ sender", + "▁Christ opher", + "▁prison ers", + "▁prisoner s", + "▁K er", + "▁Ke r", + "▁C rist", + "▁Cr ist", + "▁Cris t", + "▁A LL", + "▁AL L", + "▁ ALL", + "ri ce", + "ric e", + "r ice", + "▁an tes", + "▁ant es", + "▁ante s", + "▁ antes", + "nat ural", + "▁Su san", + "▁Sus an", + "▁J uli", + "▁Jul i", + "▁Ju li", + "▁di ab", + "▁dia b", + "ix on", + "ic ator", + "ica tor", + "▁flex ible", + "▁re serve", + "▁res erve", + "▁reserv e", + "Cont ains", + "▁H il", + "▁Hi l", + "▁I sa", + "▁Is a", + "▁town s", + "▁tow ns", + "G S", + "▁T rad", + "▁Tr ad", + "▁Tra d", + "▁L ock", + "▁Loc k", + "▁Lo ck", + "▁ Lock", + "▁G rund", + "▁Gr und", + "▁Gru nd", + "▁crit icism", + "▁critic ism", + "н ю", + "▁c ă", + "▁polit ician", + "st able", + "sta ble", + "s table", + "Ac cept", + "Sum mary", + "▁tamb ém", + "▁també m", + "}^ {-", + "}^{ -", + "} ^{-", + "▁I M", + "▁ IM", + "id al", + "ida l", + "i dal", + "мо р", + "м ор", + "Bl ue", + "GRO UP", + "▁term inal", + "▁termin al", + "▁complex ity", + "▁loc ally", + "▁local ly", + "DO WN", + "▁N ear", + "▁Ne ar", + "Dep th", + "▁p ole", + "▁pol e", + "▁po le", + "▁e quality", + "▁equ ality", + "▁equal ity", + "Si te", + "S ite", + "▁is instance", + "Sp eed", + "Spe ed", + "S peed", + "ip pi", + "ipp i", + ", &", + "▁E nc", + "▁En c", + "▁ Enc", + "ще н", + "щ ен", + "▁m ater", + "▁mat er", + "▁ma ter", + "▁mate r", + "▁sl aves", + "▁slave s", + "▁sla ves", + "AC TION", + "ACT ION", + "A CTION", + "usal em", + "usa lem", + "▁h az", + "▁ha z", + "▁Be at", + "▁w rest", + "▁wr est", + "▁l lam", + "▁ll am", + "In s", + "I ns", + "ми на", + "▁бу в", + "▁Fr ame", + "▁Fra me", + "▁ Frame", + "us hes", + "ush es", + "▁virtual ly", + "▁virt ually", + "▁P erm", + "▁Per m", + "▁Pe rm", + "▁ Perm", + "▁we ights", + "▁weight s", + "▁weigh ts", + "▁ weights", + "▁ll vm", + "▁ llvm", + "▁c ave", + "▁ca ve", + "▁cav e", + "st ates", + "state s", + "stat es", + "sta tes", + "DM A", + "D MA", + "el lt", + "ell t", + "if act", + "ifa ct", + "i fact", + "v endor", + "▁E mma", + "▁Em ma", + "Loc ale", + "Local e", + "▁S ET", + "▁SE T", + "▁ SET", + "▁ge ometry", + "▁ geometry", + "St yles", + "Style s", + "▁Ref eree", + "▁Refer ee", + "▁we it", + "fi ca", + "fic a", + "f ica", + "▁a ds", + "▁ad s", + "▁ ads", + "gr ay", + "gra y", + "g ray", + "▁B urg", + "▁Bur g", + "▁Bu rg", + "ion a", + "io na", + "i ona", + "dag ger", + "d agger", + "▁Jan uar", + "де й", + "д ей", + "ister schaft", + "pp o", + "p po", + "oid s", + "oi ds", + "o ids", + "▁dé part", + "Sh ader", + "▁con straint", + "▁constr aint", + "▁ constraint", + "Se cret", + "Sec ret", + "▁P eters", + "▁Pe ters", + "▁Peter s", + "▁Pet ers", + "▁Pete rs", + "▁ey eb", + "▁eye b", + "▁m esh", + "▁me sh", + "▁mes h", + "▁ mesh", + "▁c ookie", + "▁cook ie", + "▁ cookie", + "▁P ick", + "▁Pic k", + "▁Pi ck", + "▁n ick", + "▁ni ck", + "▁nic k", + "▁ nick", + "by e", + "b ye", + "▁sav ings", + "▁saving s", + "Tr y", + "T ry", + "py thon", + "▁p atri", + "▁pat ri", + "▁pa tri", + "▁mult ip", + "▁multi p", + "▁mul tip", + "▁ multip", + "▁k inda", + "▁kind a", + "▁kin da", + "▁' _", + "▁ '_", + "▁Fr anz", + "▁Fran z", + "▁cl oth", + "▁clo th", + "зу льта", + "▁fle et", + "▁human ity", + "re sa", + "res a", + "r esa", + "bl ob", + "blo b", + "▁T X", + "▁ TX", + "▁B uch", + "▁Bu ch", + "▁Buc h", + "▁L ond", + "▁Lo nd", + "▁val ley", + "▁m urm", + "▁mur m", + "▁mu rm", + "▁T rade", + "▁Tr ade", + "▁Tra de", + "▁Trad e", + "line width", + "▁e special", + "▁espec ial", + "up per", + "upp er", + "▁h osp", + "▁ho sp", + "▁t anto", + "▁tan to", + "▁tant o", + "▁old est", + "▁ol dest", + "▁R oose", + "▁Ro ose", + "▁h itting", + "▁hit ting", + "do g", + "d og", + "ov i", + "o vi", + "}, \r", + "} ,\r", + "▁compat ible", + "▁ compatible", + "▁We bsite", + "▁Web site", + "po ch", + "p och", + "▁B ag", + "▁Ba g", + "▁ Bag", + "▁accompl ish", + "▁accomp lish", + "Ch rist", + "as set", + "ass et", + "asse t", + "▁U ntil", + "▁Un til", + "▁ Until", + "▁g eld", + "▁ge ld", + "▁gel d", + "List en", + "Li sten", + "L isten", + "S B", + "Set up", + "ic ia", + "ici a", + "i cia", + "▁l um", + "▁lu m", + "▁jan vier", + "PA GE", + "P AGE", + "▁N u", + "/ \"", + "▁divor ce", + "Ex ecute", + "Execut e", + "Exec ute", + "De pend", + "Dep end", + "▁Scott ish", + "▁T s", + "ru ppe", + "rup pe", + "▁ref use", + "▁Ok tober", + "ij k", + "i jk", + "▁A my", + "▁Am y", + "▁di min", + "▁dim in", + "▁g ross", + "▁gr oss", + "▁gro ss", + "▁t rat", + "▁tr at", + "▁tra t", + "is ible", + "isi ble", + "mix er", + "m ixer", + "▁aut res", + "▁au tres", + "▁autre s", + "▁ autres", + "▁ne at", + "▁ot ros", + "▁otro s", + "Vo id", + "V oid", + "▁sc hol", + "▁sch ol", + "▁Wal ker", + "▁Walk er", + "▁t ube", + "▁tu be", + "▁tub e", + "olog ists", + "ologist s", + "▁г руп", + "▁гру п", + "▁h aben", + "▁hab en", + "▁ha ben", + "ub er", + "ube r", + "u ber", + "ACT IVE", + "▁Att endance", + "▁о п", + "▁bl ade", + "opl us", + "o plus", + "▁Or iginal", + "▁Origin al", + "▁ Original", + "▁manufact urer", + "as z", + "a sz", + "ât e", + "â te", + "re r", + "r er", + "▁J son", + "▁ Json", + "▁succeed ed", + "uff le", + "▁b acked", + "▁back ed", + "es ian", + "esi an", + "ti ck", + "t ick", + "Ex ternal", + "▁X IX", + "▁XI X", + "▁he arts", + "▁heart s", + "▁hear ts", + "▁По сле", + "ol u", + "o lu", + "▁ле т", + "▁ лет", + "VI CE", + "V ICE", + "ár io", + "á rio", + "▁fr aud", + "▁fra ud", + "ed u", + "e du", + "Pr imary", + "Prim ary", + "▁g aming", + "▁gam ing", + "▁ga ming", + "▁p lt", + "▁pl t", + "ig ator", + "iga tor", + "IE S", + "I ES", + "Comp iler", + "▁mon ument", + "ag em", + "age m", + "a gem", + "▁R ain", + "▁Ra in", + "▁mo ins", + "ok u", + "o ku", + "os ex", + "ose x", + "o sex", + "▁K ansas", + "▁gep ublice", + "▁J oy", + "▁Jo y", + "Sc ene", + "▁king dom", + "ri ces", + "ric es", + "rice s", + "r ices", + "▁ju in", + "▁uncomfort able", + "▁M oney", + "▁Mon ey", + "▁Mo ney", + "ob b", + "o bb", + "ex pl", + "exp l", + "str cmp", + "▁d read", + "▁dr ead", + "▁dre ad", + "rit ion", + "r ition", + "▁C hi", + "▁Ch i", + "▁demonstr ated", + "▁demonstrate d", + "▁vert ices", + "ч о", + "▁C ulture", + "▁ Culture", + "F X", + "D ictionary", + "▁D ru", + "▁Dr u", + "tr m", + "t rm", + "▁ex amine", + "▁exam ine", + "▁the rap", + "▁ther ap", + "i ème", + "ми ни", + "▁produ ces", + "▁produce s", + "▁photograph s", + "▁thread s", + "▁ threads", + "▁M I", + "▁ MI", + "▁extraord inary", + "ски м", + "ск им", + "с ким", + "▁gepublice erd", + "▁Pol and", + "▁Po land", + "▁guarante ed", + "▁guarantee d", + "R G", + "os c", + "o sc", + "ал и", + "а ли", + "▁те х", + "err no", + "sc ience", + "if fs", + "iff s", + "▁T am", + "▁Ta m", + "▁B eth", + "▁Be th", + "▁Bet h", + "▁Tr avel", + "▁Tra vel", + "▁trans late", + "▁transl ate", + "▁ translate", + "ch é", + "▁l ing", + "▁li ng", + "▁lin g", + "▁ ling", + "▁bel ongs", + "▁belong s", + "▁elect rical", + "▁electric al", + "en sk", + "ens k", + "▁Com pet", + "▁Comp et", + "c g", + "V C", + "to pic", + "top ic", + "t opic", + "▁pre sum", + "▁pres um", + "ве та", + "вет а", + "▁approxim ation", + "▁approx imation", + "▁g rim", + "▁gr im", + "▁gri m", + "▁И з", + "_{ (", + "_ {(", + "ви н", + "в ин", + "ut ion", + "uti on", + "ow ych", + "owy ch", + "å g", + "ster reich", + "▁character istic", + "om ing", + "omin g", + "omi ng", + "o ming", + "▁/* !", + "▁ /*!", + "▁pr ize", + "▁pri ze", + "▁Minn esota", + "te d", + "t ed", + "ц ы", + "▁O m", + "▁ Om", + "▁ind ices", + "▁indic es", + "▁ indices", + "▁s tem", + "▁st em", + "▁ste m", + "re gon", + "reg on", + "ни че", + "▁Sal v", + "▁Sa lv", + "és e", + "é se", + "▁a ged", + "▁ag ed", + "▁age d", + "▁ aged", + "▁P ast", + "▁Pa st", + "▁Pas t", + "▁intern ation", + "▁V ic", + "▁Vi c", + "▁res ume", + "▁ resume", + "akespe are", + "▁est ado", + "▁esta do", + "▁estad o", + "▁ab ilities", + "▁ abilities", + "▁b row", + "▁br ow", + "▁bro w", + "▁N FL", + "▁tr ends", + "▁trend s", + "▁tren ds", + "▁Aust in", + "▁L IMIT", + "▁LI MIT", + "▁ LIMIT", + "▁K or", + "▁Ko r", + "▁f olk", + "▁fol k", + "▁ folk", + "▁w ard", + "▁war d", + "▁wa rd", + "▁ ward", + "▁n est", + "▁ne st", + "▁Jun ior", + "▁Juni or", + "▁maint aining", + "▁maintain ing", + "P ub", + "OB JECT", + "▁blo ody", + "▁blood y", + "▁s j", + "▁d type", + "▁dt ype", + "▁ dtype", + "Pan e", + "P ane", + "▁b acter", + "▁grad ually", + "▁gradu ally", + "m r", + "Te am", + "▁ind icating", + "▁indic ating", + "▁decre ase", + "te k", + "t ek", + "▁Re present", + "▁Rep resent", + "▁develop ers", + "▁developer s", + "Gu id", + "Gui d", + "G uid", + "▁D iet", + "▁Die t", + "▁Di et", + "▁re tr", + "▁r etr", + "▁ret r", + "Nav igation", + "es i", + "e si", + "▁l azy", + "▁la zy", + "Stand ard", + "E r", + "A W", + "▁Ét ats", + "▁ass ured", + "▁assure d", + "Sa n", + "S an", + "▁And re", + "▁Andr e", + "’ ,", + "fa ng", + "fan g", + "f ang", + "ér ation", + "▁indust ries", + "▁in con", + "▁inc on", + "Em it", + "E mit", + "▁г де", + "▁ret riev", + "▁retr iev", + "en i", + "e ni", + "▁Tur key", + "▁Turk ey", + "iz ers", + "ize rs", + "izer s", + "An gle", + "Ang le", + "▁o c", + "▁ oc", + "▁pal m", + "▁pa lm", + "▁s tan", + "▁st an", + "▁sta n", + "▁ stan", + "ль но", + "▁C SS", + "▁CS S", + "▁ CSS", + "▁fr ances", + "▁franc es", + "▁g rin", + "▁gr in", + "▁gri n", + "▁tiem po", + "▁P rix", + "▁Pr ix", + "▁Pri x", + "]) .", + "] ).", + "▁de put", + "▁dep ut", + "▁P in", + "▁Pi n", + "▁ Pin", + "▁si xt", + "▁six t", + "▁predict ed", + "▁pred icted", + "az ure", + "azu re", + "▁Mo tor", + "▁Mot or", + "▁i hm", + "▁ih m", + "▁man us", + "ap os", + "a pos", + "▁instr uments", + "▁instrument s", + "▁co unts", + "▁coun ts", + "▁count s", + "▁aim ed", + "▁ai med", + "▁ aimed", + "pro fit", + "prof it", + "▁d ok", + "▁do k", + "об ра", + "о бра", + "▁e stud", + "▁est ud", + "ie sz", + "ies z", + "i esz", + "▁p iss", + "▁pi ss", + "▁in aug", + "▁vo ters", + "▁vote rs", + "▁vot ers", + "▁pack ages", + "▁package s", + "▁ packages", + "▁c ute", + "▁cut e", + "▁cu te", + "▁f itness", + "▁fit ness", + "▁l eurs", + "▁le urs", + "▁leur s", + "▁s orted", + "▁sort ed", + "▁sor ted", + "ph ant", + "pha nt", + "phan t", + "OP T", + "O PT", + "▁z ip", + "▁ zip", + "se ason", + "sea son", + "em i", + "e mi", + "enc oding", + "wo n", + "w on", + "el ect", + "ele ct", + "e lect", + "▁t ooth", + "▁to oth", + "▁too th", + "▁up coming", + "▁G raham", + "▁Gra ham", + "nu t", + "n ut", + "▁Ar k", + "äl t", + "ä lt", + "▁prec ious", + "ag le", + "a gle", + "né e", + "n ée", + "ни ца", + "ниц а", + "ar is", + "ari s", + "a ris", + "▁p ile", + "▁pi le", + "▁pil e", + "co le", + "col e", + "c ole", + "▁W ITH", + "▁WIT H", + "▁ WITH", + "rou ting", + "r outing", + "▁* **", + "▁** *", + "▁ ***", + "Appe arance", + "ll vm", + "▁O liver", + "▁Ol iver", + "▁P L", + "▁ PL", + "if ndef", + "et zt", + "etz t", + "sk iego", + "ski ego", + "▁p on", + "▁po n", + "▁ pon", + "AR GET", + "ARG ET", + "k ö", + "al led", + "all ed", + "alle d", + "▁= \\", + "▁ =\\", + "su re", + "sur e", + "s ure", + "mat ches", + "match es", + "▁temper atures", + "▁temperature s", + "SE L", + "S EL", + "▁cl one", + "▁clo ne", + "▁ clone", + "▁el ler", + "▁elle r", + "▁ell er", + "▁ eller", + "er na", + "ern a", + "▁п оло", + "▁по ло", + "▁пол о", + "Man agement", + "comp any", + "▁l un", + "▁lu n", + "▁stre aming", + "▁stream ing", + "▁N i", + "▁s í", + "Cont act", + "▁C redit", + "▁Cr edit", + "▁Cre dit", + "▁O ak", + "▁пред став", + "rad ius", + "cl i", + "c li", + "IE NT", + "I ENT", + "▁Lu cy", + "▁Luc y", + "▁calcul ation", + "▁calc ulation", + "▁p ixel", + "▁ pixel", + "▁m ul", + "▁mu l", + "▁ mul", + "▁out comes", + "▁outcome s", + "▁cent ers", + "▁center s", + "▁res idence", + "▁resid ence", + "Con straint", + "▁pre serve", + "▁pres erve", + "▁preserv e", + "pe on", + "uf fix", + "uff ix", + "▁Rober ts", + "▁Robert s", + "▁Rob erts", + "▁pro mot", + "▁pr omot", + "▁prom ot", + "? !", + "bal ance", + "▁cour ts", + "▁court s", + "▁dis g", + "▁di sg", + "PR INT", + "PRI NT", + "▁и х", + "el fare", + "elf are", + "▁ret reat", + "▁А в", + "Co st", + "C ost", + "al so", + "als o", + "▁F ür", + "▁Mär z", + "DI O", + "D IO", + "▁b ez", + "▁be z", + "▁ bez", + "AUT H", + "AU TH", + "De n", + "D en", + "▁a tom", + "▁at om", + "▁ atom", + "▁r oman", + "▁ro man", + "▁rom an", + "▁P el", + "▁Pe l", + "▁Roose velt", + "▁Pl ant", + "▁Plan t", + "Cont ents", + "Content s", + "▁Bet ween", + "▁cou pling", + "▁coup ling", + "str ucture", + "struct ure", + "▁Mar shall", + "▁Mars hall", + "▁Marshal l", + "▁Care er", + "▁rail way", + "▁B ureau", + "▁Bur eau", + "▁poss ibilities", + "▁k or", + "▁ko r", + "▁ kor", + "){ \r", + ") {\r", + "mer o", + "me ro", + "m ero", + "mo v", + "m ov", + "анг л", + "AI N", + "A IN", + "mu nd", + "mun d", + "m und", + "let te", + "lett e", + "l ette", + "▁sum mar", + "▁describ ing", + "▁N AS", + "▁NA S", + "▁E mb", + "▁Em b", + "▁ Emb", + "Inst ruction", + "li est", + "lie st", + "l iest", + "▁S ig", + "▁Si g", + "▁ Sig", + "Bi ll", + "B ill", + "▁v erd", + "▁ver d", + "▁ve rd", + "pl ant", + "plan t", + "▁galax ies", + "\"] )", + "\" ])", + "▁Py Object", + "▁ PyObject", + "▁G y", + "▁m ě", + "▁organ isation", + "▁organis ation", + "He r", + "H er", + "Se p", + "S ep", + "oc om", + "oco m", + "o com", + "▁S ame", + "▁Sam e", + "▁Sa me", + "▁ Same", + "▁b ite", + "▁bit e", + "▁bi te", + "▁Se attle", + "зы ва", + "Ob server", + "Observ er", + "’ .", + "▁m orph", + "▁mor ph", + "ur ches", + "urch es", + "al ph", + "re ement", + "ree ment", + "con sin", + "cons in", + "^ -", + "▁d ann", + "▁da nn", + "▁dan n", + "trans late", + "transl ate", + "ви х", + "Re act", + "▁c ats", + "▁cat s", + "▁ca ts", + "▁b rew", + "▁br ew", + "▁bre w", + "▁ brew", + "▁d s", + "▁ ds", + "▁cir cles", + "▁circ les", + "▁circle s", + "▁d rift", + "▁dr ift", + "▁dri ft", + "ag ma", + "▁Val ent", + "PI N", + "P IN", + "AR M", + "A RM", + "▁sur viv", + "▁surv iv", + "al in", + "ali n", + "a lin", + "Pr ef", + "Pre f", + "P ref", + "friend ly", + "▁uncertain ty", + "▁f d", + "▁ fd", + "▁engine er", + "Be n", + "B en", + "ic ular", + "i cular", + "or est", + "ore st", + "ores t", + "o rest", + "▁hor izontal", + "▁horizon tal", + "▁ horizontal", + "UT C", + "U TC", + "text rm", + "tex trm", + "Li ve", + "L ive", + "Sc ore", + "S core", + "▁Germ ans", + "▁German s", + "▁Ger mans", + "di stance", + "dist ance", + "d istance", + "ut i", + "u ti", + "▁é qu", + "▁ équ", + "▁numer ical", + "▁re ass", + "Act iv", + "▁c od", + "▁co d", + "▁ cod", + "bul let", + "en sing", + "ens ing", + "▁G em", + "▁Ge m", + "▁nav igation", + "▁navig ation", + "▁ navigation", + "add Class", + "▁simultane ously", + "ви й", + "▁йо го", + "▁й ого", + "▁H ö", + "▁har sh", + "prec ated", + "p recated", + "С СР", + "▁Equ ip", + "ad get", + "▁T YPE", + "▁ TYPE", + "▁m g", + "▁ mg", + "IG H", + "▁v in", + "▁vi n", + "▁ vin", + "▁fin dings", + "▁find ings", + "▁finding s", + "iv an", + "iva n", + "i van", + "▁pos session", + "▁poss ession", + "▁possess ion", + "▁т ого", + "▁то го", + "▁ того", + "▁par sed", + "▁parse d", + "▁ parsed", + "ri ors", + "rior s", + "rio rs", + "r iors", + "zeich net", + "ни ков", + "ник ов", + "Work er", + "▁en ables", + "▁enable s", + "▁( $\\", + "▁($ \\", + "▁C opy", + "▁Co py", + "▁Cop y", + "▁ Copy", + "▁orient ation", + "ст ре", + "с тре", + "▁Ind ians", + "▁India ns", + "▁Indian s", + "▁G ary", + "▁Gar y", + "▁Ga ry", + "▁Ins urance", + "is an", + "isa n", + "i san", + "Ch at", + "C hat", + "▁com un", + "▁co mun", + "▁co ron", + "▁cor on", + "ографи я", + "up dated", + "update d", + "▁И н", + "The se", + "Th ese", + "SE C", + "S EC", + "▁boy friend", + "Di agnostics", + "Hi nt", + "H int", + "mu l", + "m ul", + "▁in ode", + "▁i node", + "▁ inode", + "x A", + "ef t", + "e ft", + "OP TION", + "OPT ION", + "un ct", + "unc t", + "an non", + "ann on", + "anno n", + "EN S", + "E NS", + "st rip", + "str ip", + "stri p", + "▁enthus i", + "▁W hit", + "▁Wh it", + "▁Ф и", + "au de", + "aud e", + "a ude", + "▁disag ree", + "▁sn apped", + "▁snap ped", + "Ph ys", + "▁S yn", + "▁Sy n", + "▁s our", + "▁so ur", + "▁sou r", + "▁L ux", + "▁Lu x", + "ug ar", + "uga r", + "u gar", + "til e", + "ti le", + "t ile", + "▁in fection", + "▁inf ection", + "▁infect ion", + "▁F eb", + "▁Fe b", + "▁C hem", + "▁Ch em", + "▁Che m", + "data set", + "dat aset", + "ch ts", + "cht s", + "D ynamic", + "▁с ред", + "▁qu een", + "▁que en", + "work er", + "wor ker", + "sw ap", + "▁tim estamp", + "▁ timestamp", + "▁In tegr", + "▁Int egr", + "▁ Integr", + "▁inter views", + "▁interview s", + "su ch", + "s uch", + "▁l aughter", + "▁laugh ter", + "pro f", + "pr of", + "▁B ird", + "▁Bi rd", + "▁Bir d", + "( |", + "â n", + "▁g ra", + "▁gr a", + "▁ gra", + "& =", + "ze ns", + "zen s", + "z ens", + "get Message", + "▁O st", + "▁Os t", + "▁g ab", + "▁ga b", + "▁mort gage", + "mult icol", + "multi col", + "LE VEL", + "part ition", + "se en", + "see n", + "s een", + "▁dec lar", + "▁decl ar", + "A U", + "▁o x", + "▁ ox", + "▁l igger", + "▁lig ger", + "▁C arm", + "▁Car m", + "▁Ca rm", + "ge me", + "gem e", + "g eme", + "▁Ve gas", + "▁Veg as", + "▁E ug", + "▁Eu g", + "or us", + "o rus", + "▁b rick", + "▁br ick", + "▁as í", + "▁Mag azine", + "HasColumn Type", + "V R", + "lic her", + "li cher", + "lich er", + "liche r", + "l icher", + "▁F uture", + "▁Fut ure", + "▁ Future", + "▁J ug", + "▁Ju g", + "at tan", + "att an", + "atta n", + "con structor", + "construct or", + "V P", + "▁т ур", + "▁ту р", + "▁ тур", + "чи на", + "чин а", + "Comp arator", + "Compar ator", + "▁aut hentic", + "▁mon ster", + "▁trans formed", + "▁transform ed", + "▁firm s", + "▁fir ms", + "F W", + "▁c atalog", + "▁catal og", + "▁ catalog", + "bo ards", + "board s", + "▁dise ases", + "▁disease s", + "▁Benj amin", + "▁hor izon", + "▁Av ailable", + "▁ Available", + "M vc", + "St ud", + "▁l ord", + "▁lo rd", + "▁ lord", + "gen eral", + "gener al", + "па р", + "п ар", + "▁cab inet", + "▁cabin et", + "▁Bas ic", + "▁ Basic", + "Test Case", + "an sk", + "ans k", + "▁S now", + "▁Sn ow", + "ier ten", + "iert en", + "ierte n", + "i erten", + "▁v ocal", + "▁vo cal", + "▁voc al", + "Pad ding", + "P adding", + "ha lt", + "hal t", + "h alt", + "▁Alex and", + "▁Col omb", + "iv amente", + "iva mente", + "▁art ificial", + "▁Atl anta", + "▁m entre", + "▁men tre", + "▁ment re", + "▁est aba", + "▁estab a", + "▁esta ba", + "je kt", + "jek t", + "j ekt", + "▁sle pt", + "▁end less", + "▁endl ess", + "ér o", + "é ro", + "at tery", + "att ery", + "atter y", + "atte ry", + "uu r", + "u ur", + "▁weak ness", + "▁attempt ing", + "BY TE", + "▁found er", + "▁fo under", + "▁fou nder", + "▁sa lv", + "▁sal v", + "▁Medic ine", + "ti d", + "t id", + "▁Sch we", + "▁Schw e", + "ra ction", + "ract ion", + "r action", + "▁ ¿", + "cr ate", + "c rate", + "SER VER", + "▁comp ound", + "▁con ve", + "▁conv e", + "▁c af", + "▁ca f", + "▁hand ful", + "on ne", + "úblic a", + "▁def ensive", + "▁defens ive", + "Al ignment", + "Align ment", + "▁pr éc", + "▁pré c", + "▁signific ance", + "él é", + "é lé", + "ar ta", + "art a", + "Da m", + "D am", + "▁per pet", + "▁c aller", + "▁call er", + "▁cal ler", + "ic ients", + "ici ents", + "icient s", + "ce p", + "c ep", + "▁Mult i", + "▁Mul ti", + "▁ Multi", + "▁st olen", + "▁sto len", + "▁stole n", + "▁focus ing", + "em bed", + "emb ed", + "▁b ree", + "▁br ee", + "▁bre e", + "▁A B", + "▁ AB", + "▁occasion s", + "▁occas ions", + "se a", + "s ea", + "Pro v", + "Pr ov", + "P rov", + "че ние", + "▁C ategory", + "▁ Category", + "▁s q", + "▁ sq", + "▁Ф е", + "V A", + "Di ff", + "D iff", + "Tr i", + "T ri", + "iss ement", + "isse ment", + "▁act ress", + "▁П е", + "▁j ej", + "▁je j", + "▁tw isted", + "▁twist ed", + "▁N icol", + "▁Nic ol", + "▁Ni col", + "▁jun ior", + "▁junio r", + "▁juni or", + "So und", + "S ound", + "▁Bra sil", + "▁Bras il", + "▁ju ice", + "▁> >>", + "▁>> >", + "▁ >>>", + "▁A lb", + "▁Al b", + "▁soft ly", + "▁Mc K", + "▁G ren", + "▁Gr en", + "▁Gre n", + "▁ital iano", + "▁cre atures", + "▁creat ures", + "▁creature s", + "▁res idential", + "▁resident ial", + "▁resid ential", + "▁Inst agram", + "uck s", + "uc ks", + "u cks", + "▁k iller", + "▁kill er", + "▁kil ler", + "▁John ny", + "▁enter prise", + "D to", + "ch estra", + "che stra", + "ches tra", + "chestr a", + "▁T el", + "▁Te l", + "▁Act iv", + "▁ Activ", + "fa ctor", + "fac tor", + "fact or", + "f actor", + "ou st", + "ous t", + "o ust", + "▁vac uum", + "ра л", + "р ал", + "') ->", + "' )->", + "▁L eft", + "▁Le ft", + "▁ Left", + "▁de fect", + "▁def ect", + "▁defe ct", + "▁nine te", + "▁nin ete", + "fa re", + "far e", + "f are", + "▁reg ret", + "▁s har", + "▁sh ar", + "▁sha r", + "ctr ine", + "me sh", + "mes h", + "m esh", + "ci ty", + "cit y", + "c ity", + "ic it", + "ici t", + "i cit", + "▁F em", + "▁Fe m", + "lim ited", + "limit ed", + "ok a", + "o ka", + "!\\ !\\", + "Don ald", + "з но", + "▁pro vision", + "▁prov ision", + "▁discuss ions", + "▁discussion s", + "Dr ag", + "D rag", + "▁In cl", + "▁Inc l", + "Ex it", + "E xit", + "▁A bd", + "▁Ab d", + "st ory", + "sto ry", + "ie ve", + "iev e", + "i eve", + "▁by ł", + "ol ving", + "olv ing", + "woh ner", + "▁gu idelines", + "▁guide lines", + "▁guid elines", + "▁st raw", + "▁str aw", + "▁stra w", + "ü ss", + "▁бу ло", + "▁bur den", + "▁spat ial", + "▁stret ched", + "▁stretch ed", + "▁I nf", + "▁In f", + "▁ Inf", + "▁type def", + "▁typed ef", + "▁ro bot", + "▁rob ot", + "▁D oc", + "▁Do c", + "▁ Doc", + "pl iers", + "plier s", + "wa l", + "w al", + "ca mp", + "cam p", + "c amp", + "▁dif fé", + "▁diff é", + "▁Mc G", + "▁t el", + "▁te l", + "ar ette", + "aret te", + "▁sub sequently", + "▁subsequ ently", + "▁subsequent ly", + "▁h oney", + "▁hon ey", + "▁ho ney", + "FUN C", + "▁establish ment", + "te sy", + "tes y", + "▁któ ry", + "▁се ль", + "▁F O", + "▁ FO", + "▁Is lands", + "▁Island s", + "▁m p", + "▁ mp", + "Scal ar", + "▁Y an", + "▁Ya n", + "ck en", + "cke n", + "c ken", + "▁var iation", + "▁vari ation", + "i ą", + "op tim", + "opt im", + "az or", + "tu ple", + "t uple", + "▁gr avity", + "▁grav ity", + "▁con clude", + "▁concl ude", + "▁col lections", + "▁collection s", + "▁collect ions", + "▁colle ctions", + "és z", + "é sz", + "▁L iver", + "▁Li ver", + "▁Live r", + "▁Liv er", + "▁eth nic", + "comp ile", + "▁p arl", + "▁par l", + "▁pa rl", + "Sur face", + "{ '", + "▁par agraph", + "▁para graph", + "▁ paragraph", + "pos ite", + "po site", + "ít ulo", + "ob a", + "o ba", + "bin ary", + "b inary", + "ro b", + "r ob", + "▁Pe dro", + "▁Ped ro", + "▁f is", + "▁fi s", + "▁Gr ande", + "▁Grand e", + "▁Gran de", + "▁Gra nde", + "od ox", + "odo x", + "▁pos ting", + "▁post ing", + "< !--", + "▁rac ial", + "▁ra cial", + "CO M", + "C OM", + "ё м", + "▁A UT", + "▁AU T", + "▁ AUT", + "▁d ishes", + "▁dis hes", + "▁dish es", + "assert True", + "▁G row", + "▁Gr ow", + "▁Gro w", + "▁sl id", + "▁ju illet", + "сс о", + "с со", + "Run ner", + "Sa l", + "S al", + "Sa me", + "Sam e", + "S ame", + "▁Stud y", + "▁Col onel", + "▁J oin", + "▁Jo in", + "▁ Join", + "ar ms", + "arm s", + "▁l y", + "▁ ly", + "▁co oper", + "▁cur ves", + "▁curve s", + "▁curv es", + "He alth", + "▁M OD", + "▁MO D", + "▁ MOD", + "▁pr imo", + "▁prim o", + "▁pri mo", + "ock ets", + "ocket s", + "multi column", + "multicol umn", + "▁С ан", + "▁Са н", + "▁H unter", + "▁Hun ter", + "▁Hunt er", + "Custom er", + "ot hy", + "oth y", + "o thy", + "Des ign", + "De sign", + "ma ss", + "mas s", + "m ass", + "▁fam ille", + "▁famil le", + "▁fue ron", + "▁fu eron", + "▁fuer on", + "ä m", + "▁head quarters", + "▁d ign", + "▁di gn", + "▁dig n", + "▁Ro bin", + "▁Rob in", + "▁me ets", + "▁meet s", + "▁so it", + "па да", + "пад а", + ")\" );", + ") \");", + "▁w rapper", + "▁wrap per", + "▁ wrapper", + "▁theoret ical", + "▁u d", + "▁ ud", + "pl icity", + "plic ity", + "plicit y", + "▁w p", + "▁ wp", + "▁испо ль", + "▁c amps", + "▁camp s", + "▁cam ps", + "▁A gency", + "▁Ag ency", + "g c", + "hu m", + "h um", + "AT T", + "A TT", + "B tn", + "C ent", + "▁H elen", + "▁He len", + "▁Hel en", + "▁am plit", + "▁ampl it", + "▁Mem orial", + "und ial", + "SH IFT", + "wi k", + "w ik", + "▁Lie utenant", + "VAL ID", + "▁B ath", + "▁Ba th", + "▁Bat h", + "▁Jeff erson", + "▁C ut", + "▁Cu t", + "▁ Cut", + "▁ser vers", + "▁serv ers", + "▁server s", + "▁serve rs", + "▁ servers", + "ly ph", + "▁CO PY", + "▁COP Y", + "▁comput ers", + "▁computer s", + "▁compute rs", + "const ruction", + "construct ion", + "▁P DF", + "▁PD F", + "▁ PDF", + "▁pro tagon", + "▁prot agon", + "▁fore head", + "custom er", + "Un is", + "U nis", + "▁sign ing", + "▁sig ning", + ". ’", + "F etch", + "▁S core", + "▁Sc ore", + "▁ Score", + "hu man", + "hum an", + "h uman", + "▁down town", + "▁downt own", + "In tern", + "Int ern", + "Inter n", + "▁bes ides", + "▁beside s", + "▁д во", + "▁пра ви", + "▁ прави", + "▁c c", + "▁ cc", + "▁D ebug", + "▁De bug", + "▁Deb ug", + "▁ Debug", + "▁Cl ose", + "▁ Close", + "el ihood", + "eli hood", + "▁al gorithms", + "▁algorithm s", + "▁H amb", + "▁Ham b", + "▁Ha mb", + "ч на", + "▁c ust", + "▁cu st", + "▁mo unted", + "▁mount ed", + "par en", + "pa ren", + "pare n", + "p aren", + "▁isol ated", + "▁A gr", + "▁Ag r", + "▁or bit", + "▁orb it", + "print k", + "▁t urb", + "▁tu rb", + "▁tur b", + "▁gru po", + "ми и", + "\"\" \"", + "\" \"\"", + "▁h ills", + "▁hill s", + "ря д", + "▁B od", + "▁Bo d", + "▁об ще", + "est one", + "esto ne", + "eston e", + "e stone", + "▁satisf ying", + "▁satisfy ing", + "▁I van", + "▁Iv an", + "▁associ ate", + "name d", + "na med", + "nam ed", + "n amed", + "oc cup", + "occ up", + "GP IO", + "G PIO", + "hi t", + "h it", + "▁dis tract", + "▁di stract", + "▁dist ract", + "▁bar rel", + "▁barr el", + "▁in variant", + "di d", + "d id", + "▁l ieu", + "▁li eu", + "▁lie u", + "sc ene", + "UN K", + "▁Ont ario", + "▁M ission", + "▁Miss ion", + "zi al", + "z ial", + "▁comp ete", + "▁compet e", + "▁cou ples", + "▁couple s", + "▁coup les", + "SH A", + "S HA", + "▁s ei", + "▁se i", + "▁m igration", + "▁migr ation", + "ac ked", + "ack ed", + "▁b arn", + "▁bar n", + "▁ba rn", + "hal f", + "h alf", + "▁neigh bour", + "▁neighb our", + "ft e", + "f te", + "▁od ds", + "▁odd s", + "▁optim ization", + "▁I C", + "▁ IC", + "▁H end", + "▁He nd", + "▁Hen d", + "pay ment", + "M r", + "') :", + "' ):", + "vo ir", + "v oir", + "▁R ange", + "▁Rang e", + "▁Ran ge", + "▁ Range", + "▁polit icians", + "▁politician s", + "▁K han", + "▁Kh an", + "▁shel ter", + "▁tim ing", + "▁ti ming", + "Create d", + "Creat ed", + "C reated", + "▁sept embre", + "li t", + "l it", + "▁S hel", + "▁She l", + "▁Sh el", + "▁c ouch", + "▁co uch", + "▁cou ch", + "▁d är", + "ult ur", + "▁G iov", + "▁Gi ov", + "ô le", + "RE AM", + "▁O cean", + "▁M B", + "▁ MB", + "▁lie gt", + "▁o v", + "▁ ov", + "▁car pet", + "та р", + "т ар", + "▁го дина", + "▁годи на", + "▁S ão", + "▁о тно", + "▁от но", + "ab ling", + "abl ing", + "a bling", + "in th", + "int h", + "▁purs ue", + "▁Const itution", + "an j", + "▁F BI", + "▁ar row", + "▁arr ow", + "▁ arrow", + "ph ones", + "phone s", + "▁kn ocked", + "▁knock ed", + "▁de com", + "▁dec om", + "ie k", + "i ek", + "ь е", + "St rip", + "Str ip", + "▁V enez", + "▁Ven ez", + "▁Ve nez", + "▁p upp", + "▁pu pp", + "▁pup p", + "bi an", + "bia n", + "b ian", + "▁cot ton", + "h p", + "▁the atre", + "▁accept able", + "cuss ion", + "▁r ounds", + "▁round s", + "▁act ively", + "▁activ ely", + "▁active ly", + "▁among st", + "▁a bc", + "▁ab c", + "▁ abc", + "F M", + "Pop up", + "▁divers ity", + "us z", + "u sz", + "▁employ er", + "spec ially", + "special ly", + "▁sus pected", + "▁suspect ed", + "▁c rypt", + "▁cry pt", + "▁O scar", + "▁Os car", + "no r", + "n or", + "▁bab ies", + "во м", + "▁m undo", + "▁li bert", + "▁lib ert", + "▁liber t", + "S G", + "ah ren", + "ahr en", + "a hren", + "▁magn itude", + "T M", + "' +", + "▁об ъ", + "▁G ust", + "▁Gu st", + "▁gr ain", + "▁gra in", + "мен т", + "м ент", + "to Equal", + "▁m os", + "▁mo s", + "▁ mos", + "▁consist ently", + "▁consistent ly", + "х у", + "▁domin ant", + "Con verter", + "Convert er", + "at able", + "ata ble", + "a table", + "▁J ag", + "▁Ja g", + "scri ptions", + "script ions", + "scription s", + "s criptions", + "x B", + "▁ ©", + "fol der", + "fold er", + "f older", + "▁sub stance", + "▁subst ance", + "▁по с", + "L o", + "BU S", + "B US", + "bas ic", + "us sen", + "uss en", + "▁co ins", + "▁coin s", + ": -", + "▁N elson", + "▁Nel son", + "In ner", + "ograf ía", + "▁ex empl", + "▁exem pl", + "ch g", + "▁sy nd", + "▁syn d", + "dyn amic", + "d ynamic", + "ver ted", + "vert ed", + "▁EV ENT", + "▁ EVENT", + "se ek", + "see k", + "av ier", + "avi er", + "a vier", + "▁p rot", + "▁pro t", + "▁pr ot", + "▁ prot", + "-- ----", + "---- --", + "--- ---", + "----- -", + "- -----", + "▁con vention", + "▁conv ention", + "▁convent ion", + "▁станов ника", + "gl ing", + "g ling", + "hor a", + "ho ra", + "h ora", + "ши й", + "▁wh ilst", + "ser ialize", + "serial ize", + "s erialize", + "▁R ing", + "([ '", + "( ['", + "▁c her", + "▁ch er", + "▁che r", + "▁ cher", + "сь кі", + "▁D anny", + "▁Dan ny", + "▁re aches", + "▁reach es", + "▁el igible", + "▁P arent", + "▁Par ent", + "▁Pa rent", + "▁ Parent", + "▁came ras", + "▁cam eras", + "▁camera s", + "▁discipl ine", + "▁s illy", + "▁sil ly", + "re ts", + "ret s", + "r ets", + "yt ics", + "▁Reg ional", + "▁Region al", + "▁B aby", + "▁Ba by", + "▁Bab y", + "te le", + "t ele", + "WAR NING", + "WARN ING", + "su pp", + "sup p", + "s upp", + "▁refer ring", + "▁mer ch", + "▁merc h", + "ol ves", + "olve s", + "olv es", + "em et", + "eme t", + "e met", + "ck e", + "c ke", + "▁M unicip", + "▁Mun icip", + "Wh ite", + "▁ Ś", + "ri os", + "rio s", + "r ios", + "log ging", + "▁d x", + "▁ dx", + "▁su sp", + "▁sus p", + "ex ternal", + "▁Liber al", + "▁Lib eral", + "▁Init ialize", + "▁Initial ize", + "▁ Initialize", + "▁exhib ition", + "▁exhibit ion", + "▁ext ensions", + "▁extension s", + "▁extens ions", + "▁ extensions", + "ke eper", + "keep er", + "kee per", + "SY S", + "▁J ake", + "▁Ja ke", + "▁Jak e", + "fo oter", + "foot er", + "foo ter", + "▁ph ones", + "▁phone s", + "▁ phones", + "▁real m", + "▁contribut ed", + "▁contribute d", + "ME SS", + "▁For mat", + "▁Form at", + "▁ Format", + "Per iod", + "▁h id", + "▁hi d", + "▁ hid", + "▁me tres", + "▁met res", + "▁D im", + "▁Di m", + "▁ Dim", + "ache lor", + "achel or", + "▁T ak", + "▁Ta k", + "▁ве ли", + "▁g ram", + "▁gr am", + "▁gra m", + "▁ gram", + "▁M Y", + "▁ MY", + "on ders", + "ond ers", + "onder s", + "onde rs", + "'; \r", + "' ;\r", + "▁F ro", + "▁Fr o", + "▁advant ages", + "▁advantage s", + "io v", + "i ov", + "▁she ets", + "▁sheet s", + "ce mbre", + "c embre", + "ž e", + "] \r", + "▁D J", + "subset eq", + "UP DATE", + "▁b locked", + "▁bl ocked", + "▁block ed", + "▁pan els", + "▁pa nels", + "▁panel s", + "E A", + "nd e", + "n de", + "ê t", + "Bu l", + "B ul", + "▁m eters", + "▁me ters", + "▁met ers", + "▁meter s", + "jo ur", + "j our", + "▁rap port", + "▁rapp ort", + "▁J ak", + "▁Ja k", + "▁V AL", + "▁VA L", + "▁ VAL", + "▁p up", + "▁pu p", + "▁k a", + "▁ ka", + "for ced", + "force d", + "▁ав гу", + "ener gy", + "e nergy", + "▁V a", + "not es", + "no tes", + "note s", + "n otes", + "▁relax ed", + "C r", + "id ding", + "idd ing", + "▁def ines", + "▁define s", + "▁defin es", + "▁kiss ed", + "▁inv asion", + "▁invas ion", + "▁sc reens", + "▁screen s", + "C trl", + "▁pass engers", + "▁passenger s", + "▁Х о", + "ation ship", + "ations hip", + "per cent", + "\\ }", + "▁be ating", + "▁beat ing", + "life ray", + "lifer ay", + "▁V M", + "▁ VM", + "▁Gab riel", + "▁g allery", + "▁gall ery", + "▁Л о", + "iv ot", + "ivo t", + "▁r ental", + "▁ren tal", + "▁rent al", + "▁sh ocked", + "▁shock ed", + "▁Ste in", + "▁B h", + "▁ ло", + "Un e", + "U ne", + "ге н", + "г ен", + "▁kom mun", + "an ka", + "ank a", + "▁C ape", + "▁Cap e", + "▁Ca pe", + "Re ady", + "Read y", + "▁к ри", + "▁ кри", + "tr ag", + "tra g", + "t rag", + "Al ign", + "Ali gn", + "▁host ed", + "▁ho sted", + "▁\\ (", + "▁S ession", + "▁ Session", + "ys k", + "y sk", + "Pen ding", + "P ending", + "ellig ence", + "elli gence", + "▁Never theless", + "bit ro", + "bitr o", + "ho lm", + "hol m", + "quir y", + "▁mechan ical", + "▁D é", + "an eous", + "ane ous", + "▁psych ological", + "▁a broad", + "▁ab road", + "▁a voir", + "▁av oir", + "▁separ ation", + "▁sep aration", + "▁Haw ai", + "iej sc", + "▁N ether", + "▁Ne ther", + "▁Net her", + "▁sub tle", + "bi rd", + "b ird", + "▁mark er", + "▁mar ker", + "▁ marker", + "▁со зда", + "ва ла", + "вал а", + "▁Work ing", + "▁Wor king", + "▁h over", + "▁ho ver", + "▁ hover", + "%%%% %%%%", + "▁м ат", + "▁ма т", + "▁ мат", + "▁s oup", + "▁so up", + "▁sou p", + "Al ert", + "ch r", + "c hr", + "▁P CI", + "▁PC I", + "▁ PCI", + "▁m ús", + "ient ras", + "ien tras", + "▁St orage", + "▁Sto rage", + "▁ Storage", + "▁av ailability", + "▁op era", + "▁oper a", + "▁P roduction", + "▁Produ ction", + "▁Product ion", + "ia ne", + "ian e", + "i ane", + "▁Bet ter", + "▁B utton", + "▁But ton", + "▁ Button", + "▁Pe ace", + "▁Mor ris", + "▁s ib", + "▁si b", + "▁f iber", + "▁fi ber", + "▁fib er", + "Int ent", + "▁D esc", + "▁De sc", + "▁Des c", + "▁ Desc", + "ning en", + "n ingen", + "ze j", + "z ej", + "av an", + "ava n", + "a van", + "cover ed", + "cov ered", + "▁s yst", + "▁sy st", + "▁sys t", + "_ +", + "▁орга ни", + "▁Re lig", + "▁Rel ig", + "ци аль", + "▁s pite", + "▁sp ite", + "▁re prés", + "▁~ ~", + "▁ ~~", + "▁to xic", + "▁a pro", + "▁ap ro", + "▁apr o", + "X Y", + "▁tr ips", + "▁tri ps", + "▁trip s", + "▁pl aats", + "▁con vey", + "▁conv ey", + "▁conve y", + "Pr im", + "P rim", + "▁о ста", + "▁ос та", + "▁ост а", + "ok o", + "o ko", + "▁l obby", + "▁lob by", + "▁recommend ations", + "▁recommendation s", + "SP ACE", + "▁overwhel ming", + "ennes see", + "▁ac quire", + "▁acqu ire", + "w m", + "LOB AL", + "▁D EF", + "▁DE F", + "▁ DEF", + "je r", + "j er", + "▁re cur", + "▁rec ur", + "om men", + "omm en", + "▁j og", + "▁jo g", + "▁n ast", + "▁na st", + "▁nas t", + "▁L P", + "▁ LP", + "jo n", + "j on", + "▁w ishes", + "▁wish es", + "▁wis hes", + "▁N ancy", + "▁support ers", + "▁supp orters", + "^{ -\\", + "^{- \\", + "▁T rib", + "▁Tr ib", + "▁Tri b", + "▁ Ä", + "▁disappoint ed", + "▁у ни", + "x D", + "li nt", + "lin t", + "l int", + "I p", + "▁Islam ic", + "än de", + "änd e", + "ä nde", + "end ment", + "dt ype", + "d type", + "▁di gest", + "▁dig est", + "▁Set tings", + "▁Setting s", + "▁ Settings", + "ér a", + "é ra", + "▁aggress ive", + "▁intellig ent", + "eder börd", + "ster dam", + "pc i", + "p ci", + "▁over flow", + "▁ overflow", + "im b", + "i mb", + "re ach", + "rea ch", + "r each", + "cept or", + "cep tor", + "▁yield s", + "▁Se bast", + "▁ut ility", + "▁util ity", + "▁р и", + "▁ ри", + "▁fac ulty", + "▁In ternal", + "▁Intern al", + "▁Inter nal", + "▁ Internal", + "▁attract ed", + "▁attra cted", + "рі в", + "р ів", + "▁mix ing", + "▁R uth", + "▁Ru th", + "▁esc aped", + "▁escape d", + "▁E asy", + "▁dr ain", + "▁r ings", + "▁ring s", + "▁ rings", + "qu ire", + "quir e", + "Av ailable", + "▁ц и", + "▁ ци", + "▁conv ince", + "▁convin ce", + "or sch", + "ors ch", + "ут бо", + "CP P", + "C PP", + "ra ge", + "rag e", + "r age", + "ч і", + "▁p rod", + "▁pro d", + "▁pr od", + "▁ prod", + "▁p ig", + "▁pi g", + "▁C atal", + "▁Cat al", + "▁Ca tal", + "▁al ias", + "▁ali as", + "▁ alias", + "▁че мпи", + "▁чем пи", + "Pl ace", + "P lace", + "▁g orge", + "▁depend ence", + "▁cr uel", + "▁cru el", + "▁ther mal", + "▁therm al", + "ut down", + "ref resh", + "▁re sort", + "▁res ort", + "▁S HA", + "▁SH A", + "▁ SHA", + "ти й", + "fo od", + "foo d", + "f ood", + "▁N ad", + "▁Na d", + "▁pregn ancy", + "▁pro jection", + "▁project ion", + "▁pa ís", + "▁полу чи", + "▁the mes", + "▁them es", + "▁theme s", + "▁fun eral", + "▁cas o", + "▁ca so", + "ле кт", + "лек т", + "Ex tra", + "Ext ra", + "▁t issue", + "▁dr agon", + "▁drag on", + "▁l ig", + "▁li g", + "▁ lig", + "▁n ei", + "▁ne i", + "▁com edy", + "▁come dy", + "▁comed y", + "те м", + "т ем", + "сла в", + "с лав", + "▁pass enger", + "Cl one", + "i ção", + "yg on", + "y gon", + "▁H alf", + "▁Hal f", + "▁la bour", + "▁lab our", + "▁vill ages", + "▁village s", + "▁ві й", + "▁О т", + "▁L isa", + "▁Li sa", + "▁Lis a", + "_ [", + "ba g", + "b ag", + "▁d iver", + "▁di ver", + "▁div er", + "▁dive r", + "▁M L", + "▁ ML", + "▁transl ated", + "▁translate d", + "▁per ò", + "ab ama", + "aba ma", + "▁cas tle", + "▁cast le", + "▁ castle", + "* \\", + "▁reg ia", + "!! !!", + "!!! !", + "! !!!", + "*> (", + "* >(", + "▁Work s", + "▁Wor ks", + "▁N ature", + "▁Nat ure", + "▁Natur e", + "NE L", + "N EL", + "▁P om", + "▁Po m", + "tt a", + "t ta", + "▁Jam ie", + "▁p unch", + "▁pun ch", + "tain ment", + "▁K rieg", + "▁Kr ieg", + "▁restr icted", + "▁restrict ed", + "mob ile", + "m obile", + "▁grand mother", + "Arg uments", + "Argument s", + "▁s inc", + "▁si nc", + "▁sin c", + "▁Mon th", + "▁Mont h", + "▁ Month", + "esc ape", + "e scape", + "▁opt ical", + "▁L ane", + "▁La ne", + "▁Lan e", + "▁Deutsch land", + "▁S aison", + "▁Sa ison", + "▁V irtual", + "▁ Virtual", + "pe z", + "p ez", + "In line", + "ow any", + "owa ny", + "rad io", + "r adio", + "ö ß", + "▁O thers", + "▁Other s", + "MA IN", + "M AIN", + "sc al", + "s cal", + "▁D allas", + "▁Dal las", + "▁an chor", + "▁anc hor", + "▁anch or", + "▁ anchor", + "en cias", + "enc ias", + "encia s", + "enci as", + "▁re porter", + "▁rep orter", + "▁report er", + "▁veget ables", + "▁enforce ment", + "▁Wis consin", + "▁con dem", + "▁cond em", + "▁e b", + "▁ eb", + "▁s its", + "▁sit s", + "▁si ts", + "▁calcul ations", + "▁calculation s", + "▁calc ulations", + "▁\" --", + "▁\"- -", + "ue lle", + "uel le", + "u elle", + "▁tip o", + "▁ti po", + "▁P AR", + "▁PA R", + "▁ PAR", + "co rd", + "cor d", + "c ord", + "▁ро ків", + "ph an", + "pha n", + "p han", + "▁kon nte", + "▁z ap", + "▁za p", + "wr iting", + "writ ing", + "en gu", + "eng u", + "▁pert urb", + "Fac e", + "F ace", + "ag og", + "ago g", + "▁De cl", + "▁Dec l", + "▁ Decl", + "est ly", + "▁War ren", + "▁H ills", + "▁Hill s", + "▁Hil ls", + "▁ref resh", + "▁refr esh", + "▁refres h", + "▁ refresh", + "▁fl ip", + "io p", + "i op", + "▁key board", + "is to", + "ist o", + "i sto", + "▁prom oted", + "▁promote d", + "▁promot ed", + "back s", + "ba cks", + "b acks", + "Enc oding", + "▁ ال", + "▁g min", + "ро б", + "р об", + "▁follow ers", + "▁p epper", + "um ble", + "umb le", + "▁sp ray", + "▁spr ay", + "▁dr ives", + "▁dri ves", + "▁driv es", + "▁drive s", + "P ush", + "cook ie", + "c ookie", + "▁gel dig", + "▁geld ig", + "ig ung", + "igu ng", + "vis it", + "▁at omic", + "▁atom ic", + "▁ atomic", + "▁A thlet", + "▁Ath let", + "▁Or igin", + "▁Ori gin", + "▁ Origin", + "▁H appy", + "▁G ra", + "▁Gr a", + "▁att ribut", + "▁п ов", + "▁по в", + "▁ пов", + "▁n ost", + "▁no st", + "▁nos t", + "▁ nost", + "ur u", + "u ru", + "▁Ne ither", + "▁ma ar", + "ject ions", + "je ctions", + "jection s", + "▁re nov", + "▁ren ov", + "fin ity", + "f inity", + "gener ic", + "init ialize", + "initial ize", + "pgf set", + "▁hyp othes", + "▁ma cro", + "▁mac ro", + "ma ps", + "map s", + "m aps", + "▁f are", + "▁far e", + "▁fa re", + "▁ fare", + "Be st", + "B est", + "uch t", + "uc ht", + "u cht", + "co d", + "c od", + "▁h orm", + "▁hor m", + "▁ho rm", + "▁P oll", + "▁Pol l", + "▁Po ll", + "▁host ing", + "▁Re ading", + "▁Read ing", + "Cert ificate", + "▁и ма", + "▁им а", + "▁C ov", + "▁Co v", + "▁P red", + "▁Pr ed", + "▁Pre d", + "▁ Pred", + "re direct", + "red irect", + "▁l attice", + "▁port folio", + "▁o ven", + "▁ov en", + "▁ oven", + "ie len", + "iel en", + "iele n", + "i elen", + "sub scribe", + "foot note", + "но ю", + "▁mom ento", + "▁moment o", + "▁d ich", + "▁di ch", + "▁dic h", + "▁ent ert", + "▁enter t", + "▁g é", + "▁connect ing", + "▁n acional", + "▁o tt", + "▁ot t", + "▁ ott", + "ні в", + "н ів", + "▁rac ist", + "▁penal ty", + "ül t", + "ü lt", + "▁Israel i", + "▁( †", + "▁desc end", + "▁ос іб", + "▁b elly", + "▁bel ly", + "▁bell y", + "ні сть", + "▁encounter ed", + "T ip", + "▁gu ilt", + "▁d amp", + "▁da mp", + "▁dam p", + "ze ug", + "▁Mem ory", + "▁ Memory", + "Check ed", + "▁Sh akespeare", + "hi ll", + "h ill", + "▁w oke", + "▁wo ke", + "▁sal ary", + "eth eless", + "ethe less", + "e theless", + "▁Т и", + "er de", + "erd e", + "▁He in", + "▁g it", + "▁gi t", + "▁ git", + "=\" \"", + "= \"\"", + "ül l", + "ü ll", + "ge ben", + "geb en", + "g eben", + "Pr es", + "Pre s", + "P res", + "ie val", + "iev al", + "i eval", + "mark er", + "mar ker", + "▁д ан", + "▁да н", + "▁ дан", + "▁oct obre", + "RO L", + "R OL", + "▁jan u", + "▁ja nu", + "▁) :", + "▁ ):", + "br anch", + "▁J erry", + "▁Jer ry", + "ke hr", + "▁contr acts", + "▁contract s", + "▁aff air", + "▁Росси и", + "ja ck", + "j ack", + "AN G", + "A NG", + "▁dro pping", + "▁drop ping", + "▁d ic", + "▁di c", + "sch ool", + "▁Fin land", + "▁d ort", + "▁do rt", + "▁K ings", + "▁King s", + "▁Kin gs", + "▁Arg ument", + "▁ Argument", + "▁Sim ilarly", + "▁Similar ly", + "▁V erm", + "▁Ver m", + "▁Ve rm", + "▁pret end", + "! _", + "łu g", + "ł ug", + "же ння", + "жен ня", + "da ting", + "dat ing", + "d ating", + "cs v", + "c sv", + "▁dialog ue", + "▁dial ogue", + "STR U", + "▁public ly", + "wed ge", + "w edge", + "▁H och", + "▁Ho ch", + "▁spe aks", + "▁speak s", + "▁compens ation", + "an ca", + "anc a", + "text tt", + "▁Fil ter", + "▁ Filter", + "▁part ly", + "▁us eless", + "▁use less", + "▁г у", + "▁ гу", + "▁d eter", + "▁de ter", + "▁det er", + "IE W", + "▁con secut", + "▁cons ecut", + "▁conse cut", + "▁h oly", + "▁hol y", + "▁ho ly", + "▁grad uated", + "▁gradu ated", + "▁graduate d", + "an dal", + "and al", + "anda l", + "ți e", + "ț ie", + "▁W ant", + "▁Wa nt", + "▁Aust ria", + "or den", + "ord en", + "fr ag", + "f rag", + "▁f oo", + "▁fo o", + "▁ foo", + "cl aimed", + "claim ed", + "во е", + "▁not able", + "▁no table", + "▁journal ist", + "▁M ail", + "▁Ma il", + "▁Mai l", + "▁ Mail", + "!( \"", + "! (\"", + "ps e", + "p se", + "▁C lay", + "▁Cl ay", + "iv i", + "i vi", + "▁sc ales", + "▁scale s", + "▁scal es", + "▁er ste", + "▁erst e", + "▁ers te", + "Data Type", + "▁D iam", + "▁Di am", + "í r", + "loc ale", + "local e", + "▁rel uct", + "ien st", + "iens t", + "ast ro", + "astr o", + "act ly", + "я х", + "▁Vill age", + "▁Villa ge", + "▁Vil lage", + "▁d aughters", + "▁daughter s", + "▁manufact urers", + "▁manufacturer s", + "▁print ing", + "▁prin ting", + "ч ка", + "Nd Ex", + "Ch anges", + "Change s", + "▁/ ******/", + "ver tex", + "vert ex", + "▁b rows", + "▁br ows", + "▁bro ws", + "▁brow s", + "▁K ö", + "not ations", + "notation s", + "▁i ls", + "▁il s", + "▁ ils", + "at el", + "ate l", + "C ir", + "▁meaning ful", + "q a", + "▁C old", + "▁Col d", + "▁Co ld", + "ue to", + "u eto", + "you r", + "yo ur", + "y our", + "m f", + "мо в", + "м ов", + "▁Ü ber", + "▁fam ilia", + "▁famil ia", + "▁ste ep", + "▁pres idential", + "▁president ial", + "▁presid ential", + "▁z á", + "▁ zá", + "▁w ars", + "▁war s", + "▁wa rs", + "▁C re", + "▁Cr e", + "▁after wards", + "▁afterward s", + "ha lb", + "hal b", + "▁strugg led", + "▁struggle d", + "Ch art", + "Char t", + "User Id", + "ac ular", + "a cular", + "iv ia", + "ivi a", + "i via", + "▁u gly", + "▁K unst", + "E s", + "▁Q String", + "▁C ow", + "▁Co w", + "Rad ius", + "▁Gr iff", + "▁V as", + "▁Va s", + "HA L", + "H AL", + "Mod ified", + "ra le", + "ral e", + "r ale", + "mem cpy", + "▁в клю", + "▁r s", + "▁ rs", + "▁h alt", + "▁ha lt", + "▁hal t", + "▁ halt", + "▁Miss iss", + "▁h uvud", + "ec a", + "e ca", + "▁Jahrhund ert", + "E urope", + "Sign ature", + "▁grand father", + "▁O regon", + "gu e", + "g ue", + "xy gen", + "fr ames", + "frame s", + "▁hab its", + "▁ha bits", + "▁habit s", + "Support ed", + "Supp orted", + "▁low ered", + "▁lower ed", + "▁rad iation", + "▁radi ation", + "ab en", + "abe n", + "a ben", + "▁Pro gress", + "▁ Progress", + "▁C osta", + "▁Co sta", + "▁Cost a", + "▁Cos ta", + "▁dev oted", + "▁gest ure", + "▁Dez ember", + "▁qu oted", + "▁quote d", + "▁quot ed", + "▁difficult ies", + "т ре", + "▁sustain able", + "▁d ense", + "▁den se", + "▁dens e", + "▁ih rer", + "▁ihr er", + "▁ihre r", + "▁firm ly", + "â t", + "om ent", + "ome nt", + "omen t", + "o ment", + "▁c out", + "▁co ut", + "▁cou t", + "▁ cout", + "▁p oi", + "▁po i", + "d jango", + "▁pro found", + "▁prof ound", + "▁Wil helm", + "▁fl ush", + "▁flu sh", + "▁ flush", + "▁av ril", + "LA B", + "L AB", + "▁B row", + "▁Br ow", + "▁Bro w", + "▁pro pose", + "▁prop ose", + "▁propos e", + "▁r anks", + "▁ran ks", + "▁rank s", + "WI D", + "W ID", + "▁mut ual", + "▁text s", + "▁tex ts", + "▁S ale", + "▁Sal e", + "▁Sa le", + "▁qu asi", + "▁n og", + "▁no g", + "▁ nog", + "▁nouve au", + "▁c v", + "▁ cv", + "▁no ble", + "▁nob le", + "▁dé cembre", + "▁déc embre", + "▁cl ever", + "▁cle ver", + "▁P ir", + "▁Pi r", + "▁graph ics", + "▁graphic s", + "▁ graphics", + "▁G R", + "▁ GR", + "че ской", + "▁s ag", + "▁sa g", + "ict ions", + "iction s", + "i ctions", + "na nt", + "nan t", + "n ant", + "▁th é", + "C G", + "▁Jac ques", + "W M", + "▁F inn", + "▁Fin n", + "▁Fi nn", + "▁dev ast", + "зо м", + "хо в", + "х ов", + "▁En tre", + "▁Ent re", + ". ;", + "▁fl uct", + "▁flu ct", + "▁Sc iences", + "▁Sci ences", + "▁Science s", + "▁т у", + "▁ ту", + "path s", + "pat hs", + "▁sh orter", + "▁short er", + "▁suggest ion", + "ER Y", + "▁D ire", + "▁Di re", + "▁Dir e", + "at eurs", + "ate urs", + "ateur s", + "▁round ed", + "▁t art", + "▁tar t", + "▁ta rt", + "ю ще", + "up er", + "u per", + "▁secret s", + "▁sec rets", + "▁secre ts", + "▁compan ion", + "▁K EY", + "▁ KEY", + "T ile", + "▁B ibli", + "x s", + "▁ang ular", + "▁ angular", + "pa g", + "p ag", + "er ness", + "ern ess", + "erne ss", + "▁S orry", + "▁Sor ry", + "▁ Sorry", + "▁pre diction", + "▁predict ion", + "▁pred iction", + "▁M aking", + "▁Ma king", + "▁Mak ing", + "на род", + "ol are", + "ola re", + "olar e", + "rp c", + "r pc", + "▁t ens", + "▁te ns", + "▁ten s", + "en as", + "ena s", + "e nas", + "▁Re ally", + "▁Real ly", + "H I", + "port al", + "por tal", + "▁for me", + "▁form e", + "gan g", + "ga ng", + "g ang", + "▁l ane", + "▁la ne", + "▁lan e", + "▁ lane", + "▁s tag", + "▁st ag", + "▁sta g", + "▁Mar x", + "▁Ma rx", + "▁L LC", + "▁LL C", + "▁d are", + "▁da re", + "▁dar e", + "▁Olymp ic", + "▁p ant", + "▁pan t", + "▁pa nt", + "build ing", + "; ;", + "▁c ops", + "▁co ps", + "▁cop s", + "▁r ushed", + "▁rush ed", + "▁rus hed", + "▁L ot", + "▁Lo t", + "▁init iative", + "▁initi ative", + "▁inv ite", + "▁Saf ety", + "▁Safe ty", + "FA ILED", + "FAIL ED", + "▁habit ants", + "en sen", + "ens en", + "ense n", + "▁l ég", + "▁W elcome", + "▁Wel come", + "Valid ate", + "▁qu atre", + "▁G ray", + "▁Gr ay", + "▁Gra y", + "▁E ve", + "▁Ev e", + "▁C omb", + "▁Com b", + "▁Co mb", + "▁ Comb", + "▁p endant", + "a qu", + "con figure", + "config ure", + "▁A dm", + "▁Ad m", + "▁rif le", + "▁Exper ience", + "Decl aration", + "▁å r", + "▁ år", + "ill ery", + "ille ry", + "iller y", + "os pel", + "osp el", + "▁A rena", + "▁Ar ena", + "▁Are na", + "▁bo ards", + "▁board s", + "▁ boards", + "▁pur ple", + "▁p ills", + "▁pil ls", + "▁pill s", + "ueto oth", + "li que", + "l ique", + "▁pop ulations", + "▁population s", + "▁popul ations", + "▁acc ent", + "▁ac cent", + "▁r anges", + "▁range s", + "▁ran ges", + "▁rang es", + "▁Anal ysis", + "▁ Analysis", + "▁d ictionary", + "▁Dr agon", + "▁Drag on", + "re ction", + "rect ion", + "r ection", + "▁vis itor", + "▁visit or", + "seg ment", + "▁д р", + "▁F uck", + "▁Fu ck", + "д ж", + "▁ident ification", + "Class Name", + "boot strap", + "▁sur faces", + "▁surface s", + "▁surf aces", + "▁scream ing", + "кт у", + "к ту", + "pl ain", + "sh adow", + "incl udes", + "include s", + "▁j azz", + "▁ja zz", + "▁á l", + "▁ ál", + "ri ka", + "rik a", + "r ika", + "ho p", + "h op", + "▁i on", + "▁io n", + "▁ ion", + "vr e", + "v re", + "▁newsp apers", + "▁newspaper s", + "▁i hn", + "▁ih n", + "▁P arse", + "▁Par se", + "▁Pars e", + "▁ Parse", + "П о", + "▁strict ly", + "▁re covered", + "▁recover ed", + "▁U na", + "▁Un a", + "▁err e", + "▁er re", + "▁ erre", + "iss ues", + "issue s", + "▁exp ense", + "че ния", + "▁do nc", + "▁don c", + "Bi n", + "B in", + "▁Com ment", + "▁Comm ent", + "▁ Comment", + "▁sac rifice", + "▁sacrific e", + "T uple", + "() [", + "( )[", + "▁tra vers", + "▁trav ers", + "Im p", + "I mp", + "J e", + "▁Lin ux", + "▁е ё", + "▁P i", + "▁ Pi", + "▁cur ios", + "▁cu rios", + "▁r age", + "▁rag e", + "▁ra ge", + "▁ rage", + "▁e scal", + "▁es cal", + "▁esc al", + "▁al ignment", + "▁align ment", + "▁pent ru", + "▁cur r", + "▁cu rr", + "▁ curr", + "▁b este", + "▁be ste", + "▁best e", + "▁bes te", + "[] ,", + "[ ],", + "▁// !", + "H ub", + "Vis ibility", + "▁A sk", + "▁As k", + "ab ul", + "a bul", + "co lon", + "col on", + "colo n", + "▁D ays", + "▁Day s", + "▁Da ys", + "Aut hentication", + "ві т", + "▁l od", + "▁lo d", + "xF C", + "x FC", + "Look up", + "js ce", + "Al pha", + "▁harm ony", + "▁harmon y", + "▁W ard", + "▁War d", + "▁Wa rd", + "trans fer", + "▁H orn", + "▁Hor n", + "▁Ho rn", + "▁s d", + "▁ sd", + "so ap", + "▁z ich", + "▁Con sole", + "▁Cons ole", + "▁ Console", + "▁ко ли", + "▁Ph one", + "▁ Phone", + "pa per", + "p aper", + "й н", + "▁z m", + "▁ zm", + "Do ne", + "Don e", + "D one", + "ph ase", + "pha se", + "phas e", + "▁Jul ia", + "▁Ju lia", + "▁Juli a", + "▁ed ited", + "▁edit ed", + "af fe", + "aff e", + "Sy ntax", + "yl l", + "y ll", + "▁Lu cas", + "▁Luc as", + "▁and eren", + "▁andere n", + "▁ander en", + "[ <", + "▁Data base", + "▁Dat abase", + "▁ Database", + "▁spect ral", + "▁spectra l", + "ass ador", + "ска та", + "с ката", + "▁import ante", + "▁important e", + "▁х а", + "▁ ха", + "t z", + "▁s tere", + "▁st ere", + "▁ste re", + "▁ster e", + "▁m elt", + "▁me lt", + "▁mel t", + "▁C row", + "▁Cr ow", + "▁Cro w", + "ш ка", + "it utes", + "itut es", + "itute s", + "itu tes", + "▁satisf ies", + "▁L iga", + "▁Li ga", + "▁t omb", + "▁to mb", + "▁tom b", + "▁f ühr", + "▁ führ", + "▁sol ely", + "▁sole ly", + "▁E ither", + "▁t ennis", + "▁ten nis", + "▁s igh", + "▁si gh", + "▁sig h", + "ser de", + "s erde", + "ub a", + "u ba", + "ę d", + "le z", + "l ez", + "Fac t", + "F act", + "▁sque ez", + "▁Thom pson", + "▁N L", + "▁ NL", + "▁P ara", + "▁Par a", + "▁Pa ra", + "▁? ?", + "▁ ??", + "▁fin ishing", + "▁finish ing", + "She et", + "S heet", + "LIN K", + "L INK", + "▁б ро", + "▁ бро", + "▁l over", + "▁lo ver", + "▁love r", + "▁lov er", + "m achine", + "▁L esser", + "▁Les ser", + "▁Less er", + "pon d", + "po nd", + "p ond", + "▁pain tings", + "▁paint ings", + "▁painting s", + "▁assum ptions", + "▁assumption s", + "▁mod ification", + "fr e", + "f re", + "▁U lt", + "▁Ul t", + "▁A F", + "▁ AF", + "R V", + "bin ding", + "bind ing", + "b inding", + "▁toile t", + "ra r", + "r ar", + "▁an ge", + "▁ang e", + "▁ ange", + "▁she ep", + "PRO TO", + "act ic", + "a ctic", + "▁S peed", + "▁Sp eed", + "▁Spe ed", + "▁ Speed", + "▁I ce", + "gn u", + "g nu", + "ow ned", + "own ed", + "Sub scription", + "yr ics", + "y rics", + "▁back ward", + ">\" .", + "> \".", + "pi t", + "p it", + "▁real istic", + "öff ent", + "az i", + "a zi", + "DE R", + "D ER", + "b ucket", + "én y", + "é ny", + "xF E", + "x FE", + "▁f ancy", + "▁fan cy", + "ex cept", + "▁S ul", + "▁Su l", + "▁l aser", + "▁la ser", + "▁las er", + "Mon itor", + "▁c omic", + "▁com ic", + "▁co mic", + "▁Arch itect", + "▁ex pr", + "▁exp r", + "▁ expr", + "ount ers", + "oun ters", + "ounter s", + "▁Mel bourne", + "com plex", + "comp lex", + "'. $", + "' .$", + "om ot", + "omo t", + "o mot", + "▁M enu", + "▁Me nu", + "▁Men u", + "▁ Menu", + "astic search", + "▁ed iting", + "▁edit ing", + "Pre sent", + "Pres ent", + "P resent", + "op les", + "ople s", + "opl es", + "o ples", + "è ncia", + "▁в то", + "gl ise", + "she et", + "s heet", + "▁he lic", + "▁hel ic", + "▁str anger", + "▁strange r", + "▁strang er", + "▁ex ec", + "▁ exec", + "FE R", + "F ER", + "in ian", + "ini an", + "SET TING", + "▁M ix", + "▁Mi x", + "▁ Mix", + "▁com plain", + "▁compl ain", + "▁in crement", + "▁incre ment", + "CS S", + "C SS", + "mm a", + "m ma", + "sl ide", + "▁про тив", + "▁проти в", + "▁Lim ited", + "Con sole", + "Cons ole", + "▁eng aging", + "ul er", + "ule r", + "u ler", + "▁O ptions", + "▁Option s", + "▁Opt ions", + "▁ Options", + "▁l ens", + "▁le ns", + "▁len s", + "Ma il", + "M ail", + "▁bar rier", + "▁barr ier", + "trans port", + "▁c ups", + "▁cu ps", + "▁cup s", + "it err", + "ite rr", + "iter r", + "▁const ants", + "▁constant s", + "▁ constants", + "▁T ech", + "▁Te ch", + "iz io", + "izi o", + "сту па", + "ступ а", + "▁Sw eden", + "at hon", + "ath on", + "a thon", + "▁M agn", + "▁Mag n", + "▁Ma gn", + "trans ition", + "де ла", + "es k", + "e sk", + "So ft", + "S oft", + "fun ctions", + "function s", + "ne a", + "n ea", + "Im plement", + "Impl ement", + "Imp lement", + "ev ery", + "ever y", + "eve ry", + "e very", + "▁Man ufact", + "▁improve ments", + "▁improvement s", + "▁Ind iana", + "▁India na", + "▁Indian a", + "▁host s", + "▁ho sts", + "C V", + "We st", + "W est", + "to wn", + "t own", + "can vas", + "▁ш ко", + "▁Col umn", + "▁ Column", + "▁Par ker", + "▁Park er", + "▁es pa", + "▁esp a", + "▁Pub lish", + "▁которы й", + "av is", + "avi s", + "a vis", + "▁Z w", + "▁emphas is", + "ol v", + "o lv", + "▁re curs", + "▁rec urs", + "▁recur s", + "it aire", + "ita ire", + "▁B ishop", + "▁Bi shop", + "▁Bis hop", + "ne ro", + "ner o", + "n ero", + "▁d eny", + "▁de ny", + "▁den y", + "▁do ub", + "▁dou b", + "peon ato", + "▁C ourse", + "▁Cour se", + "▁Que ens", + "▁Queen s", + "▁bl ur", + "el ed", + "ele d", + "e led", + "iz o", + "i zo", + "▁dé but", + "▁Mod ule", + "▁Mo dule", + "▁ Module", + "▁anx ious", + "▁st are", + "▁star e", + "▁sta re", + "▁Pro position", + "▁K u", + "▁i c", + "▁ ic", + "Per cent", + "Qu ant", + "▁И сто", + "▁h ex", + "▁he x", + "▁ hex", + "ass oci", + "asso ci", + "▁arrang ement", + "▁arrange ment", + "▁bo ats", + "▁boat s", + "Un d", + "U nd", + "▁sl ots", + "▁slot s", + "се н", + "с ен", + "necess ary", + "▁app earing", + "▁appe aring", + "▁appear ing", + "▁R ule", + "▁Ru le", + "▁ Rule", + "▁G T", + "▁ GT", + "For ce", + "et to", + "ett o", + "e tto", + "ze nia", + "zen ia", + "▁o uts", + "▁out s", + "▁ou ts", + "▁ outs", + "▁vari ations", + "▁variation s", + "▁wh ites", + "▁white s", + "▁g lo", + "▁gl o", + "▁B R", + "▁ BR", + "ic ky", + "ick y", + "▁j ury", + "▁ju ry", + "▁jur y", + "▁treat ments", + "▁treatment s", + "▁The ater", + "kn ow", + "k now", + "▁pro files", + "▁prof iles", + "▁profile s", + "▁con spir", + "▁class room", + "▁B ass", + "▁Bas s", + "▁Ba ss", + "▁law yers", + "▁lawyer s", + "v ue", + "▁A rc", + "▁Ar c", + "▁ Arc", + "▁s la", + "▁sl a", + "▁att ending", + "▁attend ing", + "n x", + "m x", + "TO P", + "T OP", + "▁b ored", + "▁bo red", + "▁bore d", + "▁bor ed", + "pre vious", + "prev ious", + "r w", + "pt ic", + "љ у", + "▁app ar", + "▁ap par", + "▁P ont", + "▁Po nt", + ": _", + "ii i", + "i ii", + "▁j erk", + "▁jer k", + "hed ral", + "сс а", + "с са", + "▁Pr ize", + "▁Pri ze", + "▁Р и", + "б ре", + "▁hand les", + "▁handle s", + "▁j ak", + "▁ja k", + "▁Afghan istan", + "▁b oring", + "▁bo ring", + "▁bor ing", + "if ik", + "ifi k", + "▁sh ade", + "▁sha de", + "air o", + "ai ro", + "a iro", + "od ay", + "oda y", + "o day", + "▁pl ates", + "▁plate s", + "▁plat es", + "▁Championship s", + "▁Champion ships", + "▁che eks", + "▁cheek s", + "ri ke", + "rik e", + "r ike", + "▁kön nen", + "▁app le", + "▁ap ple", + "▁appl e", + "▁ apple", + "▁Ed die", + "▁Edd ie", + "▁s od", + "▁so d", + "▁tr ains", + "▁tra ins", + "▁train s", + "pan ic", + "pa nic", + "▁Ad vent", + "▁Adv ent", + "ub re", + "u bre", + "▁d å", + "▁S ymbol", + "▁Sym bol", + "▁ Symbol", + "▁с те", + "▁ст е", + "▁ сте", + "Sa m", + "S am", + "inher it", + "cam era", + "▁c ours", + "▁co urs", + "▁cour s", + "▁cou rs", + "▁make up", + "re gex", + "reg ex", + "▁U E", + "▁ UE", + "▁Det roit", + "▁W eight", + "▁We ight", + "▁ Weight", + "▁P iet", + "▁Pi et", + "▁a ria", + "▁ar ia", + "▁ aria", + "DI RECT", + "DIR ECT", + "ace ae", + "▁In fo", + "▁Inf o", + "▁ Info", + "an ya", + "any a", + "back end", + "▁T ennessee", + "pi cker", + "pic ker", + "pick er", + "p icker", + "▁Le o", + "▁P oss", + "▁Po ss", + "▁Pos s", + "pr ises", + "prise s", + "▁m ature", + "▁mat ure", + "сь ких", + "▁F ant", + "▁Fa nt", + "Re ason", + "▁m oy", + "▁mo y", + "▁B aker", + "▁Ba ker", + "▁Bak er", + "▁sub set", + "▁subs et", + "▁ subset", + "▁Stan ley", + "▁el even", + "▁ele ven", + "▁elev en", + "ol ate", + "ola te", + "o late", + "▁fort une", + "Status Code", + "▁ent ities", + "▁ entities", + "▁Ok ay", + "▁ Okay", + "ц о", + "an os", + "ano s", + "a nos", + "rel ative", + "▁order ing", + "▁ord ering", + "▁No body", + "▁Nob ody", + "▁str len", + "▁ strlen", + "▁r ope", + "▁ro pe", + "▁cig arette", + "hol ds", + "hold s", + "h olds", + "ir able", + "ira ble", + "value Of", + "St ub", + "▁phot ography", + "▁photograph y", + "es tra", + "est ra", + "estr a", + "e stra", + "▁cult ures", + "▁culture s", + "▁decl aration", + "▁declar ation", + "mer cial", + "LI ED", + "au te", + "aut e", + "a ute", + "al ter", + "alt er", + "Sub mit", + "▁Mag ic", + "▁r hythm", + "Pay ment", + "ni h", + "n ih", + "▁inter section", + "l é", + "EN TRY", + "/ )", + "▁m og", + "▁mo g", + "ru st", + "rus t", + "r ust", + "▁threat s", + "▁Mil itary", + "ap or", + "a por", + "▁s igu", + "▁si gu", + "▁sig u", + "set minus", + "▁I ng", + "▁In g", + "st ation", + "stat ion", + "T ake", + "▁s hed", + "▁sh ed", + "▁she d", + "▁Fr ancia", + "▁Franc ia", + "▁Fra ncia", + "▁Fran cia", + "pos ts", + "po sts", + "post s", + "Mar ker", + "Mark er", + "Lower Case", + "▁be find", + "▁bef ind", + "▁C zech", + "▁Cz ech", + "ícul a", + "▁Per formance", + "▁W es", + "▁We s", + "▁L arry", + "▁Lar ry", + "▁o st", + "▁os t", + "▁ ost", + "▁em ails", + "▁email s", + "▁Re lease", + "▁ Release", + "▁ad apter", + "▁adapt er", + "▁ adapter", + "▁pad re", + "ac io", + "aci o", + "a cio", + "▁з ем", + "▁gen etic", + "▁ge netic", + "▁U nd", + "▁Un d", + "▁ Und", + "▁accept ance", + "да н", + "д ан", + "▁Girl s", + "▁Gir ls", + "comp iler", + "compile r", + "su n", + "s un", + "▁whe els", + "▁wheel s", + "▁thorough ly", + "gr und", + "gru nd", + "g rund", + "un ction", + "unct ion", + "▁e lla", + "▁el la", + "▁ell a", + "▁ ella", + "X FF", + "ug s", + "u gs", + "ient os", + "ien tos", + "iento s", + "▁D M", + "▁ DM", + "▁polit ique", + "▁campaign s", + "▁Tok yo", + "▁album s", + "KERN EL", + "pd ata", + "p data", + "▁lap top", + "▁lapt op", + "▁v ál", + "▁vá l", + "▁f ou", + "▁fo u", + "or b", + "o rb", + "▁T ower", + "▁To wer", + "▁Tow er", + "▁Get ting", + "▁cor ners", + "▁corner s", + "▁corn ers", + "pl ess", + "ple ss", + "ples s", + "p less", + "▁special ist", + "▁i v", + "▁ iv", + "Ui nt", + "U int", + "▁name ly", + "▁nam ely", + "▁sc aling", + "▁scal ing", + "Ext ensions", + "Extension s", + "▁cent ro", + "omorph ism", + "▁dé f", + "), \\", + ") ,\\", + "▁contr ary", + "▁contra ry", + "▁str iking", + "▁stri king", + "▁B ere", + "▁Be re", + "▁Ber e", + "▁fore cast", + "▁z ones", + "▁zone s", + "▁zo nes", + "sm art", + "s mart", + "as hi", + "ash i", + "ri n", + "r in", + "NE W", + "▁sim ulations", + "▁simulation s", + "▁R ather", + "▁Ra ther", + "▁Rat her", + "▁Writ ing", + "▁Wr iting", + "▁$ [", + "▁as sh", + "▁ass h", + "▁f ailing", + "▁fa iling", + "▁fail ing", + "▁man if", + "▁B og", + "▁Bo g", + "▁D ir", + "▁Di r", + "▁ Dir", + "▁influ enced", + "▁influence d", + "conf irm", + "▁we igh", + "▁in ventory", + "▁invent ory", + "▁a pare", + "▁ap are", + "▁e u", + "▁ eu", + "char acter", + "io m", + "i om", + "▁o rb", + "▁or b", + "▁ orb", + "dev ices", + "device s", + "▁L ED", + "▁LE D", + "▁ LED", + "▁prop ortion", + "▁proport ion", + "▁Hon or", + "▁Ho nor", + "▁appro aching", + "▁approach ing", + "de leg", + "del eg", + "▁B B", + "▁ BB", + "hel pers", + "help ers", + "helper s", + "re pository", + "rep ository", + "▁б ере", + "▁бе ре", + "▁inhab it", + "▁s ão", + "▁travel ed", + "▁trav eled", + "ne x", + "n ex", + "▁C lin", + "▁Cl in", + "CE PT", + "▁off ense", + "▁in cent", + "▁inc ent", + "ID S", + "I DS", + "▁coeff icients", + "▁coefficient s", + "▁l p", + "▁ lp", + "чно го", + "ч ного", + "▁c d", + "▁ cd", + "mu st", + "mus t", + "m ust", + "▁soon er", + "ez e", + "e ze", + "C at", + "ma ker", + "make r", + "m aker", + "▁r anked", + "▁ran ked", + "▁rank ed", + "ful ness", + "▁part ially", + "▁partial ly", + "▁parti ally", + "Pro m", + "Pr om", + "P rom", + "▁ф он", + "▁фо н", + "▁Pro bably", + "▁c ached", + "▁cache d", + "▁ca ched", + "▁ cached", + "▁bal anced", + "▁balance d", + "ah oma", + "aho ma", + "▁Mur ray", + "▁a li", + "▁al i", + "▁ ali", + "iv os", + "ivo s", + "▁b ark", + "▁bar k", + "IT EM", + "ITE M", + "▁Kir che", + "▁alloc ated", + "▁allocate d", + "Al t", + "A lt", + "▁am éric", + "íl ia", + "í lia", + "▁c ens", + "▁ce ns", + "▁lic enses", + "▁license s", + "▁ licenses", + "ac z", + "a cz", + "▁G ate", + "▁Ga te", + "▁ Gate", + "▁B L", + "▁ BL", + "▁re public", + "▁rep ublic", + "RO W", + "▁состав ля", + "▁соста вля", + "▁Fil ip", + "▁Ind ivid", + "▁tr ials", + "▁tri als", + "▁trial s", + "/* !", + "▁G P", + "▁ GP", + "ni ka", + "nik a", + "n ika", + "▁ex em", + "▁ad vers", + "▁adv ers", + "um ped", + "ump ed", + "▁Dev ice", + "▁ Device", + "wa ke", + "w ake", + "Ex ec", + "ar ding", + "ard ing", + "ardi ng", + "▁pobl ación", + "▁k een", + "▁ke en", + "▁b itch", + "▁bit ch", + "▁embed ded", + "▁B ond", + "▁Bo nd", + "▁Bon d", + "ri des", + "ride s", + "rid es", + "r ides", + "▁W oman", + "▁Wo man", + ". [", + "ér é", + "é ré", + "▁Hash Map", + "▁ HashMap", + "▁co unting", + "▁coun ting", + "▁count ing", + "▁Init ial", + "▁ Initial", + "▁ver se", + "▁vers e", + "▁ verse", + "▁Vere in", + ">\" ,", + "> \",", + "▁an th", + "▁ant h", + "▁ anth", + "ci d", + "c id", + "▁h unt", + "▁hun t", + "на л", + "н ал", + "ci es", + "cie s", + "c ies", + "Pi n", + "P in", + "▁# !", + "ва я", + "sn d", + "s nd", + "▁u k", + "▁ uk", + "▁sw ift", + "▁tempor ada", + "▁environment s", + "▁environ ments", + "claim er", + "eme tery", + "emet ery", + "j är", + "▁ча ст", + "▁час т", + "Trans port", + "▁A rr", + "▁Ar r", + "▁ Arr", + "▁P aper", + "▁Pa per", + "▁Pap er", + "▁b ew", + "▁be w", + "▁ bew", + "▁har vest", + "▁- ----", + "▁-- ---", + "▁--- --", + "▁ -----", + "product s", + "ле т", + "л ет", + "ident ifier", + "RO OT", + "▁M ak", + "▁Ma k", + "▁App ro", + "▁Ap pro", + "▁ Appro", + "ie ri", + "ier i", + "i eri", + "▁F ly", + "▁Fl y", + "▁is set", + "▁iss et", + "▁ isset", + "▁determ ination", + "▁determin ation", + "Ge ometry", + "▁emer ging", + "sub scription", + "ol y", + "o ly", + "▁R ace", + "▁Ra ce", + "▁B ah", + "▁Ba h", + "▁Config uration", + "▁ Configuration", + "▁Inter est", + "ско в", + "ск ов", + "с ков", + "ist rz", + "istr z", + "▁S han", + "▁Sh an", + "▁Sha n", + "▁P ain", + "▁Pa in", + "CON NE", + "ma jor", + "m ajor", + "▁St ay", + "▁Sta y", + "▁bron ze", + "▁f itting", + "▁fit ting", + "▁J ar", + "▁Ja r", + "mg r", + "m gr", + "▁S har", + "▁Sh ar", + "▁Sha r", + "FL O", + "F LO", + "ut er", + "ute r", + "u ter", + "с ы", + "▁cont acts", + "▁contact s", + "▁f iring", + "▁fi ring", + "▁fir ing", + "на н", + "н ан", + "▁prof es", + "sk é", + "s ké", + "▁rule d", + "▁ru led", + "▁rul ed", + "=\" /", + "an dro", + "and ro", + "▁ens uring", + "iz en", + "ize n", + "i zen", + "▁че рез", + "ise cond", + "i second", + "ob il", + "obi l", + "o bil", + "▁re ck", + "▁rec k", + "▁ reck", + ")} (", + ") }(", + "bit map", + "▁B run", + "▁Br un", + "▁Bru n", + "▁Jer usalem", + "▁W o", + "▁Republic ans", + "▁Republican s", + "mat ic", + "m atic", + "▁E arl", + "▁d ock", + "▁do ck", + "▁doc k", + "▁M all", + "▁Mal l", + "▁Ma ll", + "k k", + "▁ Й", + "▁C OL", + "▁CO L", + "▁ COL", + "▁lat ach", + "UI nt", + "U Int", + "ци ональ", + "цион аль", + "циона ль", + "▁seg ments", + "▁segment s", + "▁re fund", + "▁ref und", + "fa c", + "f ac", + "▁Art icle", + "▁B orn", + "▁Bo rn", + "▁Bor n", + "² .", + "br and", + "bra nd", + "b rand", + "{$ \\", + "{ $\\", + "▁s s", + "▁ ss", + "▁Re sources", + "▁Res ources", + "▁Resource s", + "▁ Resources", + "▁re cycl", + "▁rec ycl", + "▁$ $\\", + "▁$$ \\", + "▁Conne ction", + "▁Connect ion", + "▁ Connection", + "▁imp erial", + "▁imper ial", + "▁pract ically", + "▁practical ly", + "▁– ,", + "▁Dis play", + "▁ Display", + "ier no", + "mo uth", + "m outh", + "ed es", + "ede s", + "e des", + "ba hn", + "b ahn", + "▁C atherine", + "▁high way", + "un ting", + "unt ing", + "▁Any way", + "Sp ell", + "Spe ll", + "▁L iste", + "▁List e", + "▁Li ste", + "▁Lis te", + "▁ret rieve", + "▁retr ieve", + "▁retriev e", + "▁z d", + "▁ zd", + "stra ße", + "▁dom inated", + "▁domin ated", + "to uch", + "t ouch", + "▁m b", + "▁ mb", + "LO NG", + "L ONG", + "as ures", + "asure s", + "TL S", + "T LS", + "▁accompl ished", + "▁accomp lished", + "▁accomplish ed", + "▁f ears", + "▁fe ars", + "▁fear s", + "▁seem ingly", + "▁d ag", + "▁da g", + "▁ dag", + "▁b ureau", + "▁bur eau", + "▁Gro ß", + "▁accord ance", + ". ]", + "ou x", + "o ux", + "▁col onial", + "▁colon ial", + "▁compass ion", + "th umb", + "▁s wo", + "▁sw o", + "on line", + "▁J i", + "▁work shop", + "▁works hop", + "▁l ub", + "▁lu b", + "év rier", + "ш і", + ">\" ;", + "> \";", + "▁gener ous", + "▁gene rous", + "ro us", + "rou s", + "r ous", + "av id", + "avi d", + "a vid", + "igen ous", + "▁R aw", + "▁Ra w", + "▁ Raw", + "▁sw ap", + "▁ swap", + "h c", + "java script", + "jav ascript", + "Fact or", + "Fac tor", + "F actor", + "▁gar bage", + "▁M icro", + "▁Mic ro", + "▁Mi cro", + "co u", + "c ou", + "ü ber", + "▁f atal", + "▁fa tal", + "▁fat al", + "▁trans parent", + "▁b earing", + "▁be aring", + "▁bear ing", + "▁celebr ated", + "▁celebrate d", + "VI S", + "V IS", + "▁B M", + "▁ BM", + "▁pr ince", + "▁prin ce", + "to l", + "t ol", + "▁' ", + "\\ \">", + "▁du rant", + "▁dur ant", + "▁vent ure", + "▁F itz", + "▁Fi tz", + "▁C BD", + "▁CB D", + "▁b acking", + "▁back ing", + "▁w are", + "▁war e", + "▁wa re", + "▁ ware", + "ev e", + "e ve", + "O G", + "ed ish", + "edi sh", + "▁Giov anni", + "▁Sh are", + "▁Shar e", + "▁Sha re", + "▁ Share", + "▁rec ipes", + "▁recipe s", + "▁recip es", + "big g", + "bi gg", + "b igg", + "▁minor ity", + "▁n ar", + "▁na r", + "▁ nar", + "oll ary", + "ollar y", + "▁F E", + "▁ FE", + "sh irt", + "▁redu ces", + "▁reduce s", + "Ch e", + "C he", + "▁NOT E", + "▁NO TE", + "j query", + "▁F low", + "▁Fl ow", + "▁Flo w", + "▁ Flow", + "task s", + "pr event", + "pre vent", + "prev ent", + "▁со вет", + "▁сов ет", + "it as", + "ita s", + "▁exam ined", + "▁examine d", + "ho n", + "h on", + "▁M ine", + "▁Min e", + "▁Mi ne", + "▁grad ient", + "▁V ien", + "▁Vi en", + "▁b eds", + "▁be ds", + "▁bed s", + "ET H", + "E TH", + "fl at", + "f lat", + "an son", + "ans on", + "▁in tu", + "▁int u", + "▁fl ows", + "▁flo ws", + "▁flow s", + "но к", + "▁E ine", + "▁Ein e", + "ро ди", + "род и", + "▁ко р", + "▁к ор", + "▁ кор", + "▁aff ection", + "▁af fection", + "▁affect ion", + "▁p orts", + "▁por ts", + "▁port s", + "▁ ports", + "__ .", + "_ _.", + "re po", + "rep o", + "ail and", + "ai land", + "▁по да", + "▁под а", + "int age", + "inta ge", + "▁Prote ction", + "î t", + "▁[ {", + "▁l amp", + "▁la mp", + "▁benef icial", + "ка де", + "▁Станов ништво", + "▁l ined", + "▁li ned", + "▁line d", + "▁lin ed", + "▁ lined", + "▁Ex change", + "▁f itted", + "▁fit ted", + "▁v erk", + "▁ver k", + "▁focus es", + "vo d", + "v od", + "▁Car lo", + "▁Carl o", + "▁ра спо", + "▁рас по", + "ain ted", + "aint ed", + "ainte d", + "a inted", + "▁r ape", + "▁rap e", + "▁ra pe", + "▁t ogg", + "▁to gg", + "ac ker", + "ack er", + "a cker", + "T w", + "ra h", + "r ah", + "trans l", + "▁je alous", + "▁re pository", + "▁rep ository", + "▁ repository", + "re marks", + "rem arks", + "remark s", + "▁i e", + "▁ ie", + "í d", + "▁sk ull", + "ra c", + "r ac", + "() ]", + "( )]", + "ri en", + "rie n", + "r ien", + "? (", + "▁K ids", + "▁Ki ds", + "▁Kid s", + "▁sw itched", + "▁switch ed", + "▁G ew", + "▁Ge w", + "▁be ef", + "▁appear ances", + "▁appearance s", + "▁Coll ins", + "▁V illa", + "▁Vill a", + "▁Vi lla", + "▁Vil la", + "▁z ona", + "▁zo na", + "▁n eu", + "▁ne u", + "те льно", + "тель но", + "▁х удо", + "▁oper ational", + "▁operation al", + "ON LY", + "▁h ockey", + "▁ś wi", + "ö k", + "Sl ice", + "Ref resh", + "▁n uts", + "▁nu ts", + "▁nut s", + "sa y", + "s ay", + "▁ста нови", + "▁станов и", + "х е", + "▁le aning", + "▁lean ing", + "▁H aus", + "▁Ha us", + "▁o ral", + "▁or al", + "▁ oral", + "▁ Ž", + "▁Sup pose", + "▁Supp ose", + "▁ess ence", + "EN TER", + "ENT ER", + "B ucket", + "▁C ant", + "▁Can t", + "▁Ca nt", + "▁N azi", + "▁Na zi", + "▁Naz i", + "ш ти", + "▁Vol ume", + "▁ Volume", + "▁wor thy", + "▁worth y", + "▁ worthy", + "B u", + "Ent ries", + "on ie", + "oni e", + "o nie", + "▁h ood", + "▁ho od", + "▁ hood", + "▁emp ire", + "▁dé velop", + "▁p robe", + "▁pro be", + "▁pr obe", + "▁prob e", + "▁ probe", + "▁K night", + "▁Kn ight", + "▁peace ful", + "hu b", + "h ub", + "▁ál bum", + "su it", + "s uit", + "▁sil k", + "+ =", + "▁p ione", + "▁pi one", + "' \"", + "ка ми", + "▁N ull", + "▁Nu ll", + "▁ Null", + "Label s", + "au tres", + "aut res", + "autre s", + "to LowerCase", + "▁b uzz", + "▁bu zz", + "▁w ashed", + "▁was hed", + "▁wash ed", + "' *", + "itzer land", + "▁r amp", + "▁ra mp", + "▁ram p", + "▁к ни", + "▁k un", + "col ors", + "color s", + "colo rs", + "▁vacc ine", + "an imation", + "anim ation", + "▁Just in", + "mem set", + "▁c ensus", + "▁cens us", + "in fl", + "inf l", + "▁statist ical", + "▁trop ical", + "Dis abled", + "Disable d", + "\r \r", + "▁Cra ig", + "Page s", + "Pag es", + "P ages", + "▁mag az", + "▁comput ing", + "▁flo ors", + "▁floor s", + "oin e", + "oi ne", + "o ine", + "▁tit olo", + "▁an ci", + "▁anc i", + "▁Indust ry", + "▁г лав", + "▁гла в", + "Bo ot", + "B oot", + "Cl ip", + "▁d v", + "▁ dv", + "▁met all", + "▁metal l", + "▁meta ll", + "▁Is abel", + "▁Isa bel", + "▁look up", + "▁ lookup", + "▁ц ер", + "▁це р", + "▁ цер", + "▁car ries", + "f u", + "tp l", + "t pl", + "pe rp", + "per p", + "▁St orm", + "▁Sto rm", + "eh icle", + "▁S even", + "▁Se ven", + "▁Sev en", + "љ а", + "▁l ut", + "▁lu t", + "th reshold", + "▁d ull", + "▁du ll", + "▁E ND", + "▁EN D", + "▁ END", + "▁O tto", + "▁Ot to", + "▁Ott o", + "▁there by", + "TE MP", + "T EMP", + "▁S cal", + "▁Sc al", + "▁ Scal", + "Com put", + "Comp ut", + "ip v", + "i pv", + "▁ins ane", + "▁myster ious", + "▁M is", + "▁Mi s", + "uch ar", + "uc har", + "u char", + "as ma", + "asm a", + "au ch", + "auc h", + "a uch", + "ne tt", + "net t", + "n ett", + "El em", + "E lem", + "de rive", + "der ive", + "▁murder ed", + "ak ten", + "akt en", + "akte n", + "ро ван", + "ров ан", + "рова н", + "▁a nos", + "▁an os", + "▁ano s", + "▁ anos", + "}} ^", + "} }^", + "▁F uß", + "▁Fu ß", + "▁S ister", + "▁Si ster", + "▁volunte er", + ":: _", + ": :_", + "er ta", + "ert a", + "▁бо лее", + "og rá", + "▁Im Gui", + "sa me", + "sam e", + "s ame", + "Sh adow", + "▁re actions", + "▁reaction s", + "▁react ions", + "▁purch asing", + "PRE FIX", + "▁emb od", + "со м", + "▁alt ogether", + "▁prom oting", + "▁promot ing", + "U V", + "▁ind uced", + "▁indu ced", + "▁eer ste", + "▁eerst e", + "Li fe", + "Lif e", + "L ife", + "hd d", + "h dd", + "ní ch", + "▁c hill", + "▁ch ill", + "▁chi ll", + "RG B", + "R GB", + "red uce", + "redu ce", + "FR OM", + "F ROM", + "dir name", + "▁t une", + "▁tu ne", + "▁tun e", + "▁r ay", + "▁ra y", + "▁ ray", + "T D", + "▁к ъ", + "▁Febru ar", + "▁suspend ed", + "▁susp ended", + "▁u pp", + "▁up p", + "▁ upp", + "er i", + "e ri", + "pr eter", + "pre ter", + "pret er", + "▁E R", + "▁ ER", + "то н", + "т он", + "▁c atal", + "▁cat al", + "▁ca tal", + "▁h iring", + "▁hi ring", + "▁п ів", + "▁пі в", + "▁Olymp ics", + "▁Olympic s", + "da le", + "dal e", + "d ale", + ":: {", + ": :{", + "▁expl oring", + "▁explo ring", + "▁с тал", + "▁ста л", + "▁ст ал", + "▁univers ities", + "Class es", + "▁ча с", + "▁C ool", + "▁Co ol", + "▁S ony", + "▁So ny", + "▁Son y", + "th al", + "tha l", + "t hal", + "▁es crit", + "▁esc rit", + "▁cor ruption", + "▁corrupt ion", + "az ar", + "aza r", + "▁N eb", + "▁Ne b", + "▁Py thon", + "▁c him", + "▁ch im", + "▁chi m", + "▁cap ability", + "cy cl", + "c ycl", + "▁re try", + "▁r etry", + "▁ret ry", + "▁retr y", + "▁ retry", + "++ ]", + "▁t oy", + "▁to y", + "▁T erry", + "▁Ter ry", + "▁Terr y", + "View ById", + "▁v ine", + "▁vi ne", + "▁vin e", + "▁Kit chen", + "▁B iden", + "▁Bi den", + "Back end", + "gl ich", + "g lich", + "re lation", + "rel ation", + "▁rat ings", + "▁ra tings", + "▁rating s", + "Execut or", + "ibr ation", + ">( )", + "> ()", + "▁he al", + "if iable", + "ifi able", + "par k", + "p ark", + "▁P ete", + "▁Pe te", + "▁Pet e", + "▁tr aged", + "▁tra ged", + "▁trag ed", + "▁ch uck", + "▁wire less", + "▁wir eless", + "Re place", + "Rep lace", + "IR Q", + "▁се зо", + "i ß", + "▁j unto", + "▁jun to", + "Lo w", + "L ow", + "▁s id", + "▁si d", + "▁ sid", + "Tag Helpers", + "TagHelper s", + "▁comp aring", + "▁compar ing", + "▁c elle", + "▁cell e", + "▁ce lle", + "▁cel le", + "▁obt aining", + "▁obtain ing", + "▁qu ar", + "▁q uar", + "Br o", + "B ro", + "▁E C", + "▁ EC", + "in ea", + "ine a", + "i nea", + "▁F ue", + "▁Fu e", + "▁Prince ss", + "▁Prin cess", + "ij o", + "i jo", + "ge ns", + "gen s", + "g ens", + "PO L", + "P OL", + "è tres", + "▁h ind", + "▁hi nd", + "▁ hind", + "Var iant", + "Vari ant", + "▁rece ives", + "▁receive s", + "go d", + "g od", + "ik en", + "ike n", + "i ken", + "na il", + "n ail", + "▁amer ican", + "▁ american", + "br as", + "bra s", + "b ras", + "(' \\", + "( '\\", + "ie ce", + "if ference", + "iffer ence", + "iffe rence", + "▁b ubble", + "▁bub ble", + "▁B ear", + "▁Be ar", + "un ivers", + "uni vers", + "▁demand ing", + "sa ved", + "save d", + "s aved", + "▁cred entials", + "MS M", + "M SM", + "▁struct ural", + "Con s", + "Co ns", + "C ons", + "▁Way ne", + "▁blank et", + "▁re pet", + "▁rep et", + "▁repe t", + "Ne g", + "N eg", + "▁exclusive ly", + "▁exclus ively", + "IF I", + "I FI", + "бур г", + "▁arg uing", + "▁Re pub", + "▁Rep ub", + "▁f rowned", + "▁fr owned", + "Met ric", + "M etric", + "sk im", + "ski m", + "s kim", + "▁П ет", + "▁Пе т", + "▁rele ases", + "▁release s", + "▁t ast", + "▁ta st", + "▁p reference", + "▁pre ference", + "▁prefer ence", + "▁S üd", + "▁Sü d", + "oc c", + "o cc", + "▁r x", + "▁ rx", + "activ ate", + "cl am", + "c lam", + "▁фи ль", + "▁Sud denly", + "▁cr ushing", + "▁crush ing", + "▁L ower", + "▁Lo wer", + "▁Low er", + "▁ Lower", + "ei ng", + "e ing", + "wa lt", + "wal t", + "w alt", + "▁Г ер", + "▁Ге р", + "▁m ö", + "ри сто", + "la gen", + "lag en", + "lage n", + "l agen", + "▁co aching", + "▁coach ing", + "ight ers", + "igh ters", + "ighter s", + "▁bas ement", + "▁base ment", + "▁F IX", + "▁FI X", + "▁ FIX", + "Te le", + "T ele", + "With out", + "▁Com mons", + "▁Comm ons", + "▁Common s", + "ul ly", + "ull y", + "h box", + "fl ash", + "▁por tal", + "▁port al", + "▁ portal", + "ot ype", + "o type", + "▁S or", + "▁So r", + "▁trou bles", + "▁trouble s", + "ar si", + "ars i", + "▁с тан", + "▁ста н", + "▁ст ан", + "▁ стан", + "CA M", + "C AM", + "▁de notes", + "▁den otes", + "▁denote s", + "LA NG", + "LAN G", + "L ANG", + "▁Be yond", + "▁Bey ond", + "▁Bo wl", + "▁Bow l", + "▁import antly", + "▁important ly", + "▁W R", + "▁ WR", + "▁rel ating", + "▁a nder", + "▁and er", + "▁an der", + "▁ ander", + "▁gr inned", + "▁grin ned", + "▁D ak", + "▁Da k", + "▁Brook lyn", + "▁d p", + "▁ dp", + "▁P oly", + "▁Pol y", + "▁Po ly", + "▁ Poly", + "▁Sch ul", + "▁B uffer", + "▁Buff er", + "▁ Buffer", + "▁h older", + "▁hold er", + "▁hol der", + "▁ holder", + "IC AL", + "I CAL", + "▁tra iler", + "▁trail er", + "er ek", + "ere k", + "e rek", + "▁n ě", + "▁ ně", + "sh aped", + "shape d", + "sha ped", + ": `", + "▁de code", + "▁dec ode", + "▁ decode", + "▁co unted", + "▁coun ted", + "▁count ed", + "▁v amp", + "▁va mp", + "▁re late", + "▁rel ate", + "▁M ason", + "▁Ma son", + "▁Mas on", + "▁t itled", + "▁title d", + "▁tit led", + "▁Kent ucky", + "▁particip ated", + "▁participate d", + "▁Jenn ifer", + "▁mat rices", + "Cal endar", + "st s", + "s ts", + "Ass oci", + "▁f orum", + "▁for um", + "▁fo rum", + "▁s phere", + "▁sp here", + "▁spher e", + "▁S EO", + "▁SE O", + "pop up", + "▁Current ly", + "CL E", + "C LE", + "▁vol unt", + "▁stell ar", + "for all", + "Is s", + "I ss", + "im et", + "ime t", + "i met", + "q p", + "la test", + "lat est", + "late st", + "▁config ured", + "▁configure d", + "ab ol", + "a bol", + "ig ent", + "igen t", + "ige nt", + "i gent", + "▁delay ed", + "ff ic", + "f fic", + "▁g ing", + "▁gi ng", + "▁ ging", + "▁s cent", + "▁sc ent", + "▁scen t", + "▁disg ust", + "▁disgu st", + "he sis", + "hes is", + "h esis", + "im en", + "ime n", + "i men", + "▁re ign", + "▁П и", + "ul as", + "ula s", + "u las", + "um ing", + "umin g", + "umi ng", + "u ming", + "in nings", + "inn ings", + "Re nd", + "R end", + "id ity", + "idi ty", + "▁do zens", + "▁dozen s", + "wa rf", + "war f", + "▁Del hi", + "▁bi ological", + "▁corrid or", + "Vis ual", + "▁I z", + "▁s uits", + "▁su its", + "▁suit s", + "Py Object", + "ia go", + "i ago", + "▁div ide", + "▁divid e", + "pe nt", + "pen t", + "p ent", + "hel lo", + "hell o", + "h ello", + "▁b eta", + "▁be ta", + "▁bet a", + "▁ beta", + "▁ex terior", + "▁fin est", + "▁fine st", + "▁B ir", + "▁Bi r", + "▁f reed", + "▁fr eed", + "▁free d", + "▁fre ed", + "▁K el", + "▁Ke l", + "Se m", + "S em", + "▁fr uits", + "▁fruit s", + "▁fru its", + "▁serv ants", + "▁servant s", + "▁pub lisher", + "▁publish er", + "▁cop per", + "ol ation", + "o lation", + "se p", + "s ep", + "▁chair man", + "ti k", + "t ik", + "▁m others", + "▁mother s", + "▁mo thers", + "A ug", + "▁je ans", + "[] )", + "[ ])", + "▁D ATA", + "▁DA TA", + "▁ DATA", + "▁reve als", + "▁reveal s", + "▁un conscious", + "▁h acer", + "▁ha cer", + "▁hace r", + "ric ulum", + "▁T ogether", + "▁ш та", + "▁ шта", + "or sz", + "ors z", + "▁c anal", + "▁can al", + "▁ca nal", + "ös t", + "ö st", + "▁equ als", + "▁equal s", + "▁eq uals", + "▁ equals", + "▁по мо", + "▁al location", + "▁all ocation", + "▁alloc ation", + "st änd", + "▁ч ер", + "▁че р", + "ac king", + "ack ing", + "▁motiv ation", + "со н", + "с он", + "▁R ole", + "▁Ro le", + "▁Rol e", + "▁ Role", + "App ly", + "Ap ply", + "ig es", + "ige s", + "i ges", + "* {", + "▁f ires", + "▁fire s", + "▁fi res", + "▁fir es", + "Us ed", + "Use d", + "U sed", + "▁he ute", + "sk iej", + "ski ej", + "▁Or leans", + "yl an", + "y lan", + "▁warm th", + "▁w elfare", + "▁wel fare", + "je m", + "j em", + "▁си сте", + "be z", + "b ez", + "ř e", + "ke e", + "k ee", + "▁segu ito", + "un ge", + "ung e", + "▁y oga", + "▁yo ga", + "▁d ug", + "▁du g", + "▁rest ored", + "▁restore d", + "Dr oid", + "D roid", + "▁P ent", + "▁Pe nt", + "▁Pen t", + "▁ran king", + "▁rank ing", + "mo r", + "m or", + ".~ (\\", + "ograph ical", + "ographic al", + "▁p ian", + "▁pi an", + "▁g ates", + "▁gate s", + "▁ga tes", + "▁с ти", + "▁ст и", + "▁ сти", + "s quare", + "▁im plicit", + "▁impl icit", + "▁G ram", + "▁Gr am", + "▁Gra m", + "▁Apr ès", + "▁Ap rès", + "▁Ass istant", + "▁p ac", + "▁pa c", + "▁P ope", + "▁Po pe", + "▁Pop e", + "г ре", + "▁sc attering", + "▁scatter ing", + "стра тив", + "▁all ocate", + "▁alloc ate", + "▁Man hattan", + "▁а нг", + "▁ан г", + "▁ анг", + "▁inter rupted", + "▁interrupt ed", + "ér ieur", + "éri eur", + "érie ur", + "数 据", + "Sign al", + "Sig nal", + "▁Con tract", + "▁Cont ract", + "▁ Contract", + "ór ia", + "ó ria", + "WI TH", + "W ITH", + "хо дя", + "ход я", + "Ag greg", + "A ggreg", + "cul es", + "cu les", + "cule s", + "c ules", + "J an", + "▁s to", + "▁st o", + "▁ sto", + "▁G PIO", + "▁GP IO", + "▁ GPIO", + "▁ident ifying", + "▁identify ing", + "▁p id", + "▁pi d", + "▁ pid", + "ę p", + "▁di git", + "▁dig it", + "el ia", + "eli a", + "e lia", + "inv oke", + "▁Fl oren", + "▁Flor en", + "▁Flo ren", + "▁sh allow", + "▁shall ow", + "get Class", + "getC lass", + "▁advert is", + "ем ы", + "е мы", + "▁H R", + "▁ HR", + "ym an", + "y man", + "▁C E", + "▁ CE", + "▁sec ured", + "▁secure d", + "▁secur ed", + "▁rel atives", + "▁relative s", + "▁relativ es", + "▁s ob", + "▁so b", + "▁s tab", + "▁st ab", + "▁sta b", + "Trans ition", + "▁w en", + "▁we n", + "▁ wen", + "sh ops", + "shop s", + "▁k ont", + "▁kon t", + "▁ko nt", + "▁h acia", + "▁ha cia", + "H y", + "в ри", + "sh ell", + "she ll", + "s hell", + "▁ant ib", + "▁anti b", + "env ironment", + "environ ment", + "um bs", + "umb s", + "Tr acker", + "Track er", + "Tra cker", + "en tr", + "ent r", + "▁Polit ical", + "ex tract", + "ext ract", + "extra ct", + "extr act", + "=\" {{", + "▁m erc", + "▁me rc", + "▁mer c", + "▁p oc", + "▁po c", + "▁Re set", + "▁Res et", + "▁ Reset", + "▁pur ely", + "▁pure ly", + "▁M ul", + "▁Mu l", + "▁gorge ous", + "▁Î n", + "ri ven", + "riv en", + "rive n", + "r iven", + "▁rom ance", + "▁roman ce", + "▁d av", + "▁da v", + "че ского", + "ér ica", + "éri ca", + "éric a", + "▁tra ject", + "▁a rise", + "▁ar ise", + "▁sw ung", + "▁p ockets", + "▁pocket s", + "▁trad itions", + "▁tradition s", + "▁re ver", + "▁r ever", + "▁rev er", + "▁reve r", + ">> >", + "> >>", + "▁n d", + "▁ nd", + "▁di vis", + "▁div is", + "▁bel oved", + "▁quant ities", + "▁é d", + "▁ éd", + "ien do", + "i endo", + "▁tal ented", + "▁talent ed", + "▁C ad", + "▁Ca d", + "▁В ла", + "▁imm igration", + "▁immigr ation", + "▁ju ris", + "▁jur is", + "▁a er", + "▁e aten", + "▁eat en", + "▁m iejsc", + "▁sum mon", + "pe ople", + "▁g ains", + "▁gain s", + "▁ga ins", + "▁пра во", + "▁restr iction", + "▁restrict ion", + "st ub", + "▁b out", + "▁bo ut", + "▁bou t", + "▁slave ry", + "▁sla very", + "▁comput ation", + "▁ar mor", + "▁arm or", + "▁e k", + "▁ ek", + "▁Muslim s", + "▁co operation", + "▁cooper ation", + "▁enh anced", + "▁enhance d", + "os lav", + "▁ab rupt", + "▁pod cast", + "▁hospital s", + "▁hosp itals", + "нь о", + "▁hot els", + "▁hotel s", + "▁Wik ipedia", + "▁ж ен", + "▁же н", + "▁ жен", + "G LOBAL", + "▁Commun ist", + "an gles", + "ang les", + "angle s", + "▁t high", + "▁th igh", + "▁K irk", + "▁Kir k", + "▁t ends", + "▁ten ds", + "▁tend s", + "▁M ode", + "▁Mod e", + "▁Mo de", + "▁ Mode", + "▁N atur", + "▁Nat ur", + "▁de let", + "▁del et", + "▁po pul", + "▁pop ul", + "▁Ch amber", + "▁Cha mber", + "▁Conserv ative", + "kr ieg", + "k rieg", + "▁Class ic", + "▁die sem", + "▁dies em", + "▁diese m", + "▁em power", + "▁emp ower", + "▁M es", + "▁Me s", + "▁de alt", + "▁deal t", + "▁e stad", + "▁est ad", + "▁esta d", + "▁Se it", + "▁cred its", + "▁credit s", + "sub subsection", + "Inv oke", + "▁phys ician", + "це в", + "ц ев", + "ás a", + "á sa", + "▁g ob", + "▁go b", + "▁R ug", + "▁Ru g", + "▁м іс", + "▁мі с", + "sh aller", + "shal ler", + "shall er", + "▁k ol", + "▁ko l", + "▁ kol", + "▁c ared", + "▁car ed", + "▁care d", + "▁ca red", + "▁of icial", + "no s", + "n os", + "▁j el", + "▁je l", + "▁ jel", + "null able", + "GU I", + "G UI", + "▁r app", + "▁rap p", + "▁ra pp", + "▁An nie", + "▁Ann ie", + "▁st ocks", + "▁stock s", + "▁sto cks", + "▁develop er", + "▁pl acement", + "▁place ment", + "▁plac ement", + "▁ placement", + "(\" <", + "▁l avor", + "▁la vor", + "▁lav or", + "▁acc us", + "Mar t", + "Ma rt", + "M art", + "amer ikan", + "▁sk etch", + "▁sent iment", + "▁а мерикан", + "An chor", + "Mer ge", + "Pe ople", + "▁rend ered", + "▁render ed", + "▁la und", + "▁n ons", + "▁no ns", + "▁non s", + "▁bl ew", + "▁ble w", + "k b", + "ate gor", + "ateg or", + "▁franç aise", + "▁français e", + "KE N", + "K EN", + "method s", + "▁Part icip", + "nost i", + "nos ti", + "n osti", + "▁com merce", + "▁commer ce", + "▁ commerce", + "▁до ма", + "▁d re", + "▁dr e", + "▁t win", + "▁tw in", + "▁ded ic", + "▁U TC", + "▁ UTC", + "We ek", + "▁differ ential", + "▁different ial", + "л ё", + "▁Ch oose", + "▁Cho ose", + "▁\" (", + "▁то м", + "▁ том", + "▁про фе", + "em ark", + "e mark", + "▁fe ared", + "▁fear ed", + "sk o", + "s ko", + "Br anch", + "▁in vention", + "▁inv ention", + "▁invent ion", + "er mine", + "erm ine", + "▁car act", + "▁ca ract", + "ро го", + "р ого", + "lo yd", + "▁ку ль", + "▁ куль", + "▁del icate", + "Or gan", + "▁Im pro", + "▁Imp ro", + "▁r ip", + "▁ri p", + "▁ rip", + "Up dated", + "Update d", + "ul ent", + "ule nt", + "▁o bra", + "▁ob ra", + "s uspend", + "Line s", + "Lin es", + "Li nes", + "L ines", + "▁b anda", + "▁band a", + "▁ban da", + "ot ta", + "ott a", + "o tta", + "▁k ole", + "▁ko le", + "▁kol e", + "il io", + "ili o", + "i lio", + "▁output s", + "▁ outputs", + "est ro", + "estr o", + "AAAA AAAA", + "R UN", + "ne nt", + "nen t", + "n ent", + "▁d ated", + "▁da ted", + "▁dat ed", + "▁date d", + "▁ dated", + "▁s py", + "▁sp y", + "▁c rap", + "▁cr ap", + "▁in coming", + "▁inc oming", + "▁ф ев", + "▁фе в", + "PH Y", + "P HY", + "▁O range", + "▁Or ange", + "▁ob server", + "▁observ er", + "▁observe r", + "▁up stairs", + "ion ed", + "io ned", + "ione d", + "i oned", + "▁a tr", + "▁at r", + "▁ atr", + "igh bor", + "▁expect ation", + "Hi s", + "H is", + "im edia", + "i media", + "com put", + "comp ut", + "▁arg v", + "▁ argv", + "▁ear liest", + "та ли", + "тал и", + "т али", + "мо н", + "м он", + "ol len", + "oll en", + "ra ke", + "r ake", + "▁pat ience", + "ходи т", + "ход ит", + "▁де ка", + "▁bu yers", + "▁buy ers", + "▁buyer s", + "▁Conne ct", + "▁ Connect", + "▁Univers al", + "▁adjust ed", + "▁adj usted", + "im eq", + "ime q", + "el lers", + "ell ers", + "elle rs", + "eller s", + "▁ru in", + "▁Cr usher", + "▁Freder ick", + "ott age", + "otta ge", + "▁com prom", + "▁comp rom", + "▁compr om", + "ia sm", + "ias m", + "i asm", + "wa ve", + "w ave", + "▁encour aging", + "▁be ans", + "▁bean s", + "▁ beans", + "▁per ceived", + "… ]", + "▁gl obe", + "▁glob e", + "▁glo be", + "▁S F", + "▁ SF", + "he rent", + "her ent", + "here nt", + "▁a like", + "▁al ike", + "▁ali ke", + "▁hur ried", + "qu el", + "que l", + "q uel", + "▁mus icians", + "▁music ians", + "▁musician s", + "ar z", + "a rz", + "по в", + "п ов", + "drop down", + "ac l", + "a cl", + "pre view", + "prev iew", + "p review", + "▁under neath", + "ze ś", + "▁fem ales", + "▁female s", + "list ener", + "listen er", + "▁C AN", + "▁CA N", + "▁ CAN", + "▁T ow", + "▁To w", + "▁pe ers", + "▁peer s", + "tl s", + "t ls", + "at ra", + "atr a", + "a tra", + "se nder", + "send er", + "sen der", + "s ender", + "TIME OUT", + "fu rt", + "fur t", + "f urt", + "▁Gu erra", + "{} )", + "{ })", + "▁D urch", + "▁Dur ch", + "▁s ki", + "▁sk i", + "▁ ski", + "il las", + "ill as", + "illa s", + "▁S of", + "▁So f", + "▁Organ ization", + "▁C leveland", + "▁b utt", + "▁but t", + "▁bu tt", + "▁sim ilarly", + "▁similar ly", + "▁assert True", + "▁ assertTrue", + "▁inev itable", + "ne ll", + "nel l", + "n ell", + "▁R af", + "▁Ra f", + "DIS ABLE", + "am ine", + "ami ne", + "amin e", + "a mine", + "▁Com plete", + "▁Comp lete", + "▁ Complete", + "▁be iden", + "▁bei den", + "▁Chall enge", + "Rad io", + "R adio", + "▁Not ice", + "He x", + "H ex", + "▁C uba", + "▁Cub a", + "▁Cu ba", + "▁aug ust", + "▁Philipp ines", + "Mar gin", + "M argin", + "ja l", + "j al", + "gener ator", + "▁t atto", + "▁ta tto", + "▁H em", + "▁He m", + "▁S alt", + "▁Sal t", + "▁Sa lt", + "un ately", + "unate ly", + "▁terr ain", + "▁terra in", + ",\\ ,", + ", \\,", + "гра д", + "▁c rop", + "▁cr op", + "▁cro p", + "Name d", + "Na med", + "N amed", + "▁W onder", + "▁Wo nder", + "▁Won der", + "es sen", + "ess en", + "esse n", + "▁f ist", + "▁fi st", + "▁fis t", + "▁z oom", + "▁zo om", + "▁ zoom", + "пе н", + "п ен", + "▁ru ling", + "▁rul ing", + "un likely", + "as sy", + "ass y", + "or ent", + "ore nt", + "oren t", + "o rent", + "▁g ibt", + "▁gi bt", + "▁A w", + "sim eq", + "s imeq", + "▁r aid", + "▁ra id", + "▁ raid", + "▁Com par", + "▁Comp ar", + "▁ Compar", + "▁free ly", + "▁fre ely", + "▁esp añ", + "▁espa ñ", + "▁py thon", + "▁ python", + "▁diagn osis", + "▁ch ips", + "▁chip s", + "▁chi ps", + "R azor", + "▁V ert", + "▁Ver t", + "▁Ve rt", + "▁ Vert", + "For ward", + "▁P é", + "▁compar able", + "▁anal ys", + "▁analy s", + "St d", + "S td", + "▁Franç ois", + "▁c ó", + "jo s", + "j os", + "▁p eg", + "▁pe g", + "▁ peg", + "CON ST", + "cl usive", + "▁voy age", + "▁Sch l", + "▁Sc hl", + "Group Layout", + "oi se", + "ois e", + "o ise", + "сс е", + "с се", + "▁cr ush", + "▁cru sh", + "▁Die se", + "▁Di ese", + "▁Dies e", + "▁be kan", + "▁bek an", + "ci t", + "c it", + "▁Ein wohner", + "▁L an", + "▁La n", + "▁dress ing", + "▁s olved", + "▁sol ved", + "▁solve d", + "М а", + "▁C hel", + "▁Ch el", + "▁Che l", + "par ed", + "pa red", + "pare d", + "p ared", + "▁se aled", + "▁sea led", + "▁seal ed", + "}) )", + "} ))", + "anc ouver", + "se h", + "s eh", + "ta bles", + "table s", + "tab les", + "t ables", + "▁red dit", + "▁redd it", + "▁ reddit", + "▁m our", + "▁mo ur", + "▁mou r", + "▁clean up", + "▁ cleanup", + "ov ić", + "ovi ć", + "▁Ur ban", + "oc t", + "o ct", + "то ра", + "тор а", + "▁Le gal", + "▁Leg al", + "▁J ur", + "▁Ju r", + "▁N as", + "▁Na s", + "C ity", + "▁un fortunately", + "▁unfortunate ly", + "▁P ER", + "▁PE R", + "▁ PER", + "ma kers", + "make rs", + "maker s", + "m akers", + "▁sig lo", + "▁k in", + "▁ki n", + "▁ kin", + "co des", + "code s", + "cod es", + "c odes", + "ля р", + "NI NG", + "N ING", + "▁C ec", + "▁Ce c", + "▁C T", + "▁ CT", + "▁R acing", + "▁Ra cing", + "da n", + "d an", + "▁He rz", + "▁Her z", + "▁gen ius", + "▁e urop", + "▁eu rop", + "serv let", + "ow ego", + "owe go", + "▁Im agine", + "▁Imp erial", + "▁Imper ial", + "Re gex", + "Reg ex", + "c é", + "HE D", + "H ED", + "det ect", + "з ни", + "io c", + "i oc", + "Anal ysis", + "Analy sis", + "▁* =", + "▁f ever", + "▁fe ver", + "▁Ob viously", + "F oot", + "Line ar", + "Lin ear", + "▁p ró", + "▁pr ó", + "▁satell ite", + "▁B eng", + "▁Be ng", + "▁Ben g", + "bound s", + "b ounds", + "▁J azz", + "▁Ja zz", + "▁C urt", + "▁Cur t", + "▁Cu rt", + "▁поли ти", + "▁b ild", + "▁bi ld", + "▁bil d", + "▁ bild", + "▁\" \");", + "▁\"\" );", + "▁\"\") ;", + "▁document ary", + "▁gr asp", + "▁gra sp", + "▁gras p", + "▁d la", + "▁dl a", + "TR A", + "T RA", + "▁read ily", + "To r", + "T or", + "C ACHE", + "▁Const ruction", + "▁Construct ion", + "▁d ía", + "да т", + "д ат", + "▁G rey", + "▁Gr ey", + "▁Gre y", + "run ner", + "le ading", + "▁co oked", + "▁cook ed", + "ro log", + "rol og", + "r olog", + "▁annoy ing", + "DE LETE", + "amer ican", + "▁Niger ia", + "▁d ai", + "▁da i", + "▁ dai", + "▁sac rific", + "▁serv ant", + "▁s kb", + "▁sk b", + "▁ skb", + "▁b arg", + "▁bar g", + "▁ba rg", + "pix el", + "p ixel", + "In ject", + "ca ched", + "cache d", + "c ached", + "▁cou pled", + "▁couple d", + "▁coup led", + "un gle", + "ung le", + "pro b", + "pr ob", + "p rob", + ">{ @", + "ла го", + "default s", + "▁por trait", + "▁port rait", + "▁d ental", + "▁den tal", + "▁dent al", + "▁d estro", + "▁dest ro", + "▁r ue", + "▁ru e", + "▁hy brid", + "▁ й", + "▁CO MP", + "▁COM P", + "▁ COMP", + "▁B ent", + "▁Be nt", + "▁Ben t", + "Com pare", + "Comp are", + "Compar e", + "bo th", + "bot h", + "b oth", + "kl ahoma", + "ais er", + "ai ser", + "aise r", + "a iser", + "Su re", + "Sur e", + "S ure", + "▁s olving", + "▁sol ving", + "▁l ista", + "▁li sta", + "▁list a", + "▁ lista", + "▁у чи", + "▁Ev ans", + "▁Eva ns", + "▁f usion", + "▁fus ion", + "▁compl aint", + "▁complain t", + "H P", + "He ap", + "al ways", + "M gr", + "▁appro x", + "▁ approx", + "display style", + "lo rd", + "lor d", + "l ord", + "in sn", + "ins n", + "▁Fe ature", + "▁ Feature", + "RP C", + "R PC", + "▁v et", + "▁ve t", + "▁ vet", + "К а", + "▁kil omet", + "▁kilom et", + "▁deliver ing", + "▁const itution", + "sh ine", + "ле к", + "▁го род", + "▁горо д", + "▁prob able", + "▁run ner", + "▁ runner", + "hr en", + "hre n", + "h ren", + "▁N ep", + "▁Ne p", + "▁over night", + "pr ead", + "pre ad", + "p read", + "л та", + "фор ма", + "CL O", + "C LO", + "ie sa", + "ies a", + "i esa", + "▁object ives", + "▁objective s", + "con tract", + "cont ract", + "contr act", + "EX P", + "▁col ours", + "▁colour s", + "xi co", + "xic o", + "x ico", + "C lean", + "▁light ly", + "▁scen arios", + "▁scenario s", + "▁qu arters", + "▁quarter s", + "▁quart ers", + "▁quar ters", + "▁ quarters", + "▁D ear", + "▁De ar", + "▁l uc", + "▁lu c", + "▁app et", + "▁ap pet", + "▁appe t", + "▁de port", + "▁dep ort", + "Sa fe", + "▁me nos", + "▁men os", + "▁Paul o", + "▁Pa ulo", + "CI AL", + "C IAL", + "ці в", + "ц ів", + "▁R oc", + "▁Ro c", + "▁c aring", + "▁car ing", + "▁ca ring", + "▁elect ro", + "▁de cember", + "▁dec ember", + "▁dece mber", + "▁Phil osoph", + "▁col ored", + "▁color ed", + "▁ colored", + "it sch", + "its ch", + "ropol itan", + "os ti", + "ost i", + "▁N ut", + "▁Nu t", + "▁consecut ive", + "Pe er", + "ar ness", + "arn ess", + "▁ż e", + "▁ że", + "▁A round", + "▁Ar ound", + "af ka", + "▁d io", + "▁di o", + "ci p", + "c ip", + "▁to ys", + "▁toy s", + "cr o", + "c ro", + "▁m iser", + "▁mis er", + "▁mi ser", + "▁mise r", + "check box", + "▁F isher", + "▁Fish er", + "▁gover ned", + "▁govern ed", + "▁h á", + "▁En able", + "▁ Enable", + "▁t rivial", + "▁occup ation", + "ro rs", + "ror s", + "r ors", + "▁l av", + "▁la v", + "▁ lav", + "▁m ou", + "▁mo u", + "▁b ord", + "▁bo rd", + "▁bor d", + "ли ч", + "Ro om", + "R oom", + "') \r", + "' )\r", + "▁art ic", + "▁m ientras", + "ch air", + "cha ir", + "uation s", + "u ations", + "▁comm ented", + "▁comment ed", + "▁trigger ed", + "Can not", + "C annot", + "▁Marc us", + "▁p unct", + "▁pun ct", + "▁achie vement", + "▁achieve ment", + "е ди", + "ext ensions", + "extension s", + "ad ers", + "ade rs", + "ader s", + "a ders", + "jo urs", + "jour s", + "j ours", + "ir lines", + "irl ines", + "▁со стоя", + "V IEW", + "▁Nap ole", + "Conf irm", + "▁por que", + "........ ........", + "▁LI ABILITY", + "Wall et", + "W allet", + "Sub ject", + "al gorithm", + "▁tr iple", + "▁tri ple", + "▁trip le", + "ru b", + "r ub", + "▁se cur", + "▁sec ur", + "▁hand some", + "▁hands ome", + "▁d od", + "▁do d", + "r ès", + "ac ja", + "ch od", + "cho d", + "н ва", + "es ar", + "esa r", + "an chor", + "anc hor", + "anch or", + "▁Soph ie", + "▁Украї ни", + "Up per", + "am ous", + "amo us", + "Fe atures", + "Feature s", + "▁б ли", + "▁ бли", + "Supp ress", + "Sup press", + "▁kil om", + "▁Z u", + "▁belong ed", + "▁Red dit", + "▁pro ces", + "▁proc es", + "▁с тар", + "▁ста р", + "▁ст ар", + "▁F est", + "▁Fe st", + "/ %", + "▁P am", + "▁Pa m", + "st orm", + "sto rm", + "W W", + "P aul", + "▁t ales", + "▁tal es", + "▁ta les", + "▁tale s", + "▁рай она", + "▁райо на", + "▁район а", + "▁spread ing", + "▁s ched", + "▁sc hed", + "▁sch ed", + "▁sche d", + "▁ sched", + "le ased", + "lease d", + "Non Null", + "▁High way", + "▁Re serve", + "▁Res erve", + "▁c ater", + "▁cat er", + "▁ca ter", + "▁t ire", + "▁ti re", + "▁tir e", + "▁por ch", + "qu ier", + "US A", + "U SA", + "▁Sw iss", + "▁ È", + "▁br ave", + "▁bra ve", + "▁explos ion", + "l r", + "▁class ified", + "Ab out", + "▁P ict", + "▁Pic t", + "▁Pi ct", + "▁Dub lin", + "▁separ ately", + "▁separate ly", + "▁bank ing", + "▁ban king", + "▁Christian ity", + "mi gr", + "m igr", + "Ro b", + "R ob", + "се р", + "с ер", + "▁el f", + "▁ elf", + "▁employ ers", + "▁employer s", + "▁S low", + "▁Sl ow", + "▁j uli", + "▁ju li", + "▁jul i", + "west ern", + "w estern", + "▁anal yst", + "▁analy st", + "▁analys t", + "ob serv", + "obs erv", + "▁N ice", + "▁Nic e", + "▁Ni ce", + "▁G C", + "▁ GC", + "▁Let ter", + "▁ha rass", + "▁har ass", + "User name", + "▁A unt", + "▁Au nt", + "▁с ент", + "Su p", + "S up", + "IC ES", + "ICE S", + "RE NT", + "R ENT", + "rat io", + "r atio", + "▁Мо ск", + "▁an gles", + "▁ang les", + "▁angle s", + "▁angl es", + "▁ angles", + "▁l lev", + "▁ll ev", + "_ *", + "▁n it", + "▁ni t", + "▁ nit", + "▁w reck", + "▁pat rol", + "▁loyal ty", + "▁n ationale", + "▁nat ionale", + "▁national e", + "▁nation ale", + "go m", + "g om", + "}$ -", + "} $-", + "▁dis pute", + "▁disput e", + "▁disp ute", + "▁r us", + "▁ru s", + "▁ rus", + "▁П рез", + "▁Пре з", + "▁Indust rial", + "▁dem ocratic", + "▁democr atic", + "b w", + "li mp", + "lim p", + "l imp", + "ur bed", + "urb ed", + "▁mie jsce", + "▁miejsc e", + "ру д", + "▁t ex", + "▁te x", + "▁ tex", + "▁develop ments", + "▁development s", + "▁B right", + "▁Br ight", + "▁Brig ht", + "▁var ying", + "▁va rying", + "▁vary ing", + "fa ct", + "fac t", + "f act", + "▁Port al", + "▁Por tal", + "as is", + "asi s", + "a sis", + "▁горо да", + "▁город а", + "▁cre ativity", + "▁creat ivity", + ")) ))", + "))) )", + ") )))", + ".\" ;", + ". \";", + "ie ux", + "ieu x", + "▁prov isions", + "▁provision s", + "uv e", + "u ve", + "La ng", + "L ang", + "miss ing", + "ра т", + "р ат", + "ph ony", + "▁out line", + "pa s", + "p as", + "el m", + "e lm", + "mon itor", + "TC P", + "T CP", + "ka t", + "k at", + "uc ed", + "uce d", + "u ced", + "\\\" ,", + "\\ \",", + "yn a", + "y na", + "ра бо", + "раб о", + "oc ate", + "oca te", + "▁c ares", + "▁car es", + "▁care s", + "▁ca res", + "▁f ins", + "▁fin s", + "▁fi ns", + "▁he ap", + "▁ heap", + "▁small est", + "äch st", + "▁I X", + "▁ IX", + "re cv", + "rec v", + "key word", + "▁at tra", + "▁att ra", + "▁attr a", + "▁sel bst", + "Un expected", + "Une xpected", + "Sm all", + "▁насе ље", + "▁H us", + "▁Hu s", + "Enc oder", + "Encode r", + "▁un set", + "▁uns et", + "▁home less", + "▁hom eless", + "▁Johann es", + "▁U RI", + "▁ URI", + "ant age", + "anta ge", + "▁in hib", + "▁appreci ated", + "▁appreciate d", + "ie lte", + "iel te", + "ielt e", + "i elte", + "▁st ays", + "▁stay s", + "▁sta ys", + "▁alle ged", + "▁alleg ed", + "▁c oding", + "▁co ding", + "▁cod ing", + "▁tv å", + "pipe line", + "p ipeline", + "▁W or", + "▁Wo r", + "File Path", + "▁accept ing", + "▁Ex cell", + "▁L uther", + "▁Lu ther", + "▁Friend s", + "▁c urt", + "▁cur t", + "▁cu rt", + "▁' $", + "▁ '$", + "▁tight ly", + "▁cz ę", + "▁un necessary", + "▁F ed", + "▁Fe d", + "▁А нд", + "▁Ан д", + "▁H P", + "▁ HP", + "▁String Builder", + "en burg", + "' (", + "vm a", + "v ma", + "▁Ab raham", + "W L", + "▁Re ference", + "▁Refer ence", + "▁ Reference", + "J o", + "Bl ob", + "Blo b", + "▁H ugh", + "▁Hug h", + "▁Hu gh", + "▁Bul gar", + "MESS AGE", + "з во", + "▁avoid ed", + "▁po ems", + "▁poem s", + "▁с ы", + "▁ сы", + "▁O pp", + "▁Op p", + "av irus", + "avi rus", + "Pre view", + "Prev iew", + "P review", + "▁k er", + "▁ke r", + "▁ ker", + "ue va", + "u eva", + "fl ix", + "▁char ging", + "▁charg ing", + "▁motiv ated", + "▁O rd", + "▁Or d", + "▁ Ord", + "▁av eva", + "▁ave va", + "x l", + "▁flex ibility", + "ag na", + "agn a", + "▁rac ism", + "d h", + "▁b aking", + "▁ba king", + "F riend", + "ble r", + "bl er", + "b ler", + "▁Log ger", + "▁ Logger", + "Te n", + "T en", + "nav igation", + "▁att achment", + "▁attach ment", + "▁ attachment", + "▁b ajo", + "▁ba jo", + "▁pr icing", + "▁pri cing", + "▁T ip", + "▁Ti p", + "▁ Tip", + "da r", + "d ar", + "G G", + "To ols", + "Tool s", + "Too ls", + "T ools", + "vol ution", + "v olution", + "am as", + "ama s", + "a mas", + "▁b ibli", + "▁adapt ed", + "ox y", + "o xy", + "▁F reedom", + "▁Free dom", + "ri co", + "ric o", + "r ico", + "▁coll apsed", + "▁collapse d", + "z m", + "pl o", + "p lo", + "▁c ô", + "▁r t", + "▁ rt", + "än ger", + "äng er", + "änge r", + "▁D R", + "▁ DR", + "▁Bit coin", + "go w", + "g ow", + "▁ch ez", + "▁che z", + "▁ chez", + "▁ot ro", + "▁te il", + "▁ teil", + "ла га", + "▁St ars", + "▁Star s", + "▁Sta rs", + "▁invest ing", + "▁a board", + "▁ab oard", + "▁f lights", + "▁fl ights", + "▁flight s", + "▁genu inely", + "▁genuine ly", + "▁prom ising", + "Rot ation", + "O cc", + "▁su oi", + "▁suo i", + "string ify", + "ac ies", + "aci es", + "a cies", + "▁G round", + "▁Gr ound", + "▁Gro und", + "▁sequ ences", + "▁sequence s", + "▁c ure", + "▁cur e", + "▁cu re", + "out ine", + "▁! !", + "▁ !!", + "▁G ay", + "▁Ga y", + "▁garden s", + "▁gard ens", + "▁G las", + "▁Gl as", + "▁Tai wan", + "reg istry", + "▁# {", + "▁ #{", + "▁ins pection", + "▁insp ection", + "▁inspect ion", + "Te ll", + "T ell", + "▁` ${", + "p matrix", + "▁reg ulation", + "▁regul ation", + "fin ish", + "▁Ed ge", + "▁ Edge", + "Sp rite", + "S prite", + "▁Conf eder", + "▁immigr ants", + "▁elder ly", + "um ed", + "ume d", + "u med", + "▁Quest ion", + "▁ Question", + "Gate way", + "fo ny", + "fon y", + "f ony", + "ît re", + "î tre", + "▁co sm", + "▁cos m", + "Ro und", + "R ound", + "▁ign oring", + "▁ignor ing", + "▁K i", + "▁sens itivity", + "âte au", + "ât eau", + "▁engine ers", + "▁engineer s", + "▁cor rel", + "▁corre l", + "ir teen", + "irt een", + "▁Sw itzerland", + "▁inher it", + "▁ inherit", + "wo r", + "w or", + "▁mid night", + "▁P un", + "▁Pu n", + "ak te", + "akt e", + "a kte", + "Dis able", + "▁es per", + "▁esp er", + "▁not ation", + "▁ notation", + "▁Univers idad", + "so l", + "s ol", + "de rn", + "der n", + "d ern", + "in ge", + "ing e", + "▁inv itation", + ")} }", + ") }}", + "▁ â", + "▁ess ays", + "▁essay s", + "ar med", + "arm ed", + "ch sel", + "chs el", + "▁не го", + "▁ него", + "▁confirm ation", + "un ity", + "unit y", + "uni ty", + "▁Br other", + "▁Bro ther", + "▁ Є", + "ni ce", + "nic e", + "n ice", + "▁S ue", + "▁Su e", + "▁t ray", + "▁tr ay", + "▁tra y", + "ро и", + "C ookie", + "▁Feder ation", + "IC T", + "I CT", + "▁p éri", + "stud ent", + "▁V ent", + "▁Ven t", + "▁Ve nt", + "K K", + "ST EM", + "aw k", + "▁re un", + "▁pe oples", + "▁people s", + "io res", + "ior es", + "iore s", + "i ores", + "ou bt", + "▁St age", + "▁Sta ge", + "▁ Stage", + "▁c harm", + "▁ch arm", + "▁char m", + "▁cha rm", + "ie ur", + "ieu r", + "i eur", + "▁util ize", + "▁utiliz e", + "▁d istribute", + "▁dist ribute", + "▁distribut e", + "▁g otta", + "▁go tta", + "▁got ta", + "▁block ing", + "H ot", + "br ew", + "bre w", + "b rew", + "▁b onds", + "▁bon ds", + "▁bond s", + "le af", + "Pro te", + "Pr ote", + "P rote", + "▁d ice", + "▁di ce", + "▁dic e", + "▁Nor man", + "▁Norm an", + "▁о кт", + "▁ок т", + "▁in spir", + "▁insp ir", + "Pr iv", + "P riv", + "▁P uerto", + "▁то ва", + "RS T", + "R ST", + "▁s f", + "▁ sf", + "▁qu ale", + "▁qual e", + "ni ck", + "nic k", + "n ick", + "▁sup press", + "▁supp ress", + "ча т", + "ч ат", + "▁H ello", + "▁Hel lo", + "▁Hell o", + "▁ Hello", + "▁crow ded", + "▁crowd ed", + "hba r", + "h bar", + "▁lo ads", + "▁load s", + "▁ loads", + "▁cor rection", + "▁correct ion", + "▁corre ction", + "ad just", + "adj ust", + "▁E state", + "▁Est ate", + "▁Esta te", + "text sc", + "▁cool ing", + "iv eau", + "ive au", + "▁bet ting", + "==== ========", + "======== ====", + "re mark", + "rem ark", + "r emark", + "▁im plications", + "▁impl ications", + "▁p oz", + "▁po z", + "ün g", + "ü ng", + "▁reg ards", + "▁regard s", + "▁a mid", + "▁am id", + "▁habit antes", + "G I", + "▁F ou", + "▁Fo u", + "▁j ar", + "▁ja r", + "▁ jar", + "▁requ iring", + "▁D rupal", + "▁Dru pal", + "▁li ability", + "cz as", + "c zas", + "▁l yrics", + "▁ly rics", + "▁N ort", + "▁No rt", + "▁Nor t", + "si l", + "s il", + "▁M ey", + "▁Me y", + "UN IT", + "ва ния", + "f uture", + "hi r", + "h ir", + "CA L", + "C AL", + "LAB EL", + "▁S weet", + "▁stat ue", + "bor ne", + "born e", + "b orne", + "Not ify", + "▁her itage", + "▁d orm", + "▁do rm", + "▁l ever", + "▁le ver", + "▁lev er", + "▁mut tered", + "} &", + "▁inter mediate", + "▁Wat son", + "▁view ing", + "▁vie wing", + "kt or", + "k tor", + "enti eth", + "xx x", + "x xx", + "at u", + "a tu", + "▁Inst all", + "▁ Install", + "Cont in", + "▁t oute", + "▁to ute", + "▁tou te", + "▁tout e", + "▁P T", + "▁ PT", + "▁u ri", + "▁ur i", + "▁ uri", + "Call ed", + "Cal led", + "C alled", + "▁O FF", + "▁OF F", + "▁ OFF", + "ig lia", + "ic hi", + "ich i", + "i chi", + "с ни", + "V o", + "▁exhib it", + "▁asym pt", + "▁G ulf", + "л ли", + "do min", + "dom in", + "d omin", + "▁départ ement", + "mi l", + "m il", + "▁B ez", + "▁Be z", + "▁l ately", + "▁late ly", + "▁lat ely", + "▁def ining", + "▁defin ing", + "▁E L", + "▁ EL", + "omorph ic", + "▁f ebru", + "▁fe bru", + "▁febr u", + "IS TER", + "IST ER", + "I STER", + "res olved", + "resolve d", + "те й", + "т ей", + "▁S pect", + "▁Sp ect", + "▁Spec t", + "▁Spe ct", + "▁sem pre", + "▁Se pt", + "▁Sep t", + "▁cl earing", + "▁cle aring", + "▁clear ing", + "▁diam eter", + "in do", + "ind o", + "▁soc cer", + "▁D CHECK", + "▁DC HECK", + "vo te", + "v ote", + "▁n omin", + "▁no min", + "▁nom in", + "Type d", + "Ty ped", + "Typ ed", + "Miss ing", + "W as", + "▁Cent ury", + "▁direct ors", + "▁dire ctors", + "▁director s", + "▁mode rate", + "▁moder ate", + "▁Ill uminate", + "▁ Illuminate", + "▁челове к", + "▁B apt", + "▁Ba pt", + "▁Qu ant", + "▁ Quant", + "▁tre ating", + "▁treat ing", + "ag i", + "a gi", + "Si l", + "S il", + "ring e", + "rin ge", + "r inge", + "ł ą", + "el lan", + "ell an", + "ella n", + "▁f ino", + "▁fin o", + "▁fi no", + "Capt ure", + "C apture", + "▁S ic", + "▁Si c", + "▁st amp", + "▁sta mp", + "▁stam p", + "▁B uen", + "▁Bu en", + "▁seg undo", + "▁in verse", + "▁d up", + "▁du p", + "▁ dup", + "▁br oker", + "▁bro ker", + "▁broke r", + "▁search ed", + "▁sear ched", + "be ans", + "bean s", + "▁A BC", + "▁AB C", + "is ha", + "ish a", + "i sha", + "▁Lin ked", + "▁Link ed", + "▁ Linked", + "▁Nich olas", + "▁Sw edish", + "he mal", + "hem al", + "▁E M", + "▁ EM", + "▁j ego", + "▁je go", + "че ский", + "чески й", + "lo t", + "l ot", + "▁dis cret", + "▁disc ret", + "▁discre t", + "▁E g", + "pi ck", + "pic k", + "p ick", + "am on", + "amo n", + "a mon", + "▁Rail way", + "ка р", + "к ар", + "▁nav igate", + "▁navig ate", + "▁Comm ander", + "▁Command er", + "▁disappe ar", + "▁con gress", + "▁congr ess", + "▁graph ic", + "sp r", + "s pr", + "FLO AT", + "▁S erial", + "▁Se rial", + "▁Ser ial", + "▁ Serial", + "▁я нва", + "so cial", + "soc ial", + "s ocial", + "bu ch", + "b uch", + "▁se al", + "▁sea l", + "▁c ement", + "▁ce ment", + "▁Y e", + "ot ti", + "ott i", + "o tti", + "▁The od", + "remove Class", + "▁Jul ie", + "▁Ju lie", + "▁Juli e", + "▁gr öß", + "ST REAM", + "▁G B", + "▁ GB", + "▁Ben ef", + "▁Mat rix", + "▁ Matrix", + "▁ke ine", + "▁cont inent", + "▁contin ent", + "▁ja ar", + "DA I", + "D AI", + "▁S equ", + "▁Se qu", + "▁ Sequ", + "kre is", + "▁c rown", + "▁cr own", + "▁crow n", + "▁cro wn", + "Init ialize", + "Initial ize", + "ax y", + "a xy", + "▁C IA", + "▁int end", + "▁inte nd", + "▁b ub", + "▁bu b", + "▁mask s", + "▁mas ks", + "▁sit uated", + "▁situ ated", + "▁E du", + "▁Ed u", + "▁particip ating", + "ше й", + "ш ей", + "_{ -", + "_ {-", + "▁Tele vision", + "▁pre ferences", + "▁prefer ences", + "▁preference s", + "▁D rop", + "▁Dr op", + "▁ Drop", + "re view", + "rev iew", + "▁vi olation", + "▁viol ation", + "▁ch rist", + "▁chr ist", + "q q", + "▁M yst", + "▁My st", + "comm ands", + "command s", + "▁prim itive", + "ill ance", + "▁r anging", + "▁ran ging", + "▁rang ing", + "▁Adv anced", + ") &", + "▁О б", + "▁sub str", + "▁subst r", + "▁subs tr", + "▁ substr", + "▁clos ure", + "▁clo sure", + "▁ closure", + "tw itter", + "ne z", + "n ez", + "▁pr zed", + "▁prz ed", + "▁prze d", + "▁mer ged", + "▁merge d", + "ur os", + "uro s", + "u ros", + "▁j er", + "▁je r", + "▁ jer", + "▁_ (", + "▁ _(", + "ar an", + "ara n", + "a ran", + "▁P atri", + "▁Pat ri", + "▁Pa tri", + "▁T un", + "▁Tu n", + "U K", + "il iation", + "ili ation", + "▁Ke ith", + "Own Property", + "op sis", + "ops is", + "Ma d", + "M ad", + "▁def ence", + "A ir", + "=$ {", + "= ${", + "cript ors", + "criptor s", + "So m", + "S om", + "▁ ±", + "▁HA VE", + "~~~~ ~~~~", + "▁be aten", + "▁beat en", + "▁int imate", + "▁intim ate", + "op ic", + "o pic", + "▁p řed", + "▁př ed", + "Sh op", + "S hop", + "Table s", + "Tab les", + "T ables", + "▁S I", + "▁ SI", + "re name", + "ren ame", + "rena me", + "r ename", + "▁product ive", + "rib ly", + "r ibly", + "▁L uck", + "▁Lu ck", + "▁Luc k", + "▁kl ub", + "}} ^{", + "}}^ {", + "} }^{", + "▁F ish", + "▁Fi sh", + "PR I", + "P RI", + "en ario", + "ena rio", + "▁pse ud", + "Or d", + "O rd", + "▁quel ques", + "▁D od", + "▁Do d", + "▁p unto", + "▁pun to", + "▁punt o", + "se nal", + "sen al", + "▁Br others", + "▁Bro thers", + "▁Brother s", + "▁diab etes", + "P aint", + "▁person as", + "▁persona s", + "в ър", + "▁n ep", + "▁ne p", + "▁El len", + "▁Ell en", + "▁Elle n", + "▁h ä", + "cr tc", + "c rtc", + "▁frustr ation", + ". ^{[", + "▁s printf", + "▁sprint f", + "▁ sprintf", + "+ -", + "En code", + "Enc ode", + "▁насе лення", + "Draw able", + "▁b ore", + "▁bo re", + "▁bor e", + "▁E ld", + "▁El d", + "те т", + "т ет", + "T ick", + "ar ator", + "ara tor", + "▁Fin ance", + "▁agric ultural", + ")^ {-", + ")^{ -", + ") ^{-", + "may be", + "Sche dule", + "▁[ …]", + "et ection", + "ete ction", + "ль ного", + "льно го", + "▁he els", + "▁En joy", + "Sy s", + "S ys", + "orsz ág", + "CONT ROL", + "cc cc", + "▁D ictionary", + "▁ Dictionary", + "Ne ed", + "N eed", + "▁He aven", + "▁vess els", + "▁vessel s", + "ec ycle", + "e cycle", + "ti es", + "t ies", + "▁e nde", + "▁en de", + "▁end e", + "▁ ende", + "SI NG", + "S ING", + "De scribe", + "Desc ribe", + "▁Pub lished", + "▁Publish ed", + "▁win ds", + "▁wind s", + "neh men", + "▁D ES", + "▁DE S", + "Hor izontal", + "▁L ost", + "▁Los t", + "▁Lo st", + "-- -----------", + "---- ---------", + "-------- -----", + "--- ----------", + "------------ -", + "----- --------", + "---------- ---", + "------ -------", + "--------- ----", + "------- ------", + "----------- --", + "- ------------", + "▁p x", + "▁ px", + "}( {\\", + "} ({\\", + "▁Hein rich", + "oms nitt", + "ho s", + "h os", + "Ro ll", + "R oll", + "tor ch", + "▁equ ity", + "▁eq uity", + "▁collect ing", + "▁l ifting", + "▁lif ting", + "▁lift ing", + "sub figure", + "Ne ver", + "N ever", + "▁L ength", + "▁Le ngth", + "▁ Length", + "▁w inners", + "▁win ners", + "▁winner s", + "▁U SD", + "▁US D", + "▁st esso", + "▁а бо", + "▁al tri", + "▁alt ri", + "▁produ cers", + "▁produce rs", + "▁producer s", + "mon s", + "mo ns", + "m ons", + "▁Pop ular", + "Com b", + "Co mb", + "C omb", + "ab lo", + "abl o", + "a blo", + "RE SET", + "RES ET", + "т ва", + "Over lay", + "▁id iot", + "▁idi ot", + "ex ist", + "Be havior", + "UB LE", + "ier re", + "i erre", + "mine craft", + "▁f os", + "▁fo s", + "▁encuent ra", + "▁scream ed", + "▁polynom ial", + "▁c one", + "▁con e", + "▁co ne", + "▁c ited", + "▁cit ed", + "▁ci ted", + "▁president e", + "▁presid ente", + "▁re sign", + "▁res ign", + "▁y elled", + "▁i k", + "▁ ik", + "Pl us", + "▁Ми ха", + "▁The me", + "▁Th eme", + "▁ Theme", + "▁re li", + "▁r eli", + "▁rel i", + "ne m", + "n em", + "▁a men", + "▁am en", + "▁ amen", + "▁ Ј", + "Th anks", + "Thank s", + "Than ks", + "▁al umin", + "▁sh elf", + "▁shel f", + "!\" );", + "! \");", + "append Child", + "▁l ogs", + "▁lo gs", + "▁log s", + "▁ logs", + "▁re gex", + "▁reg ex", + "▁ regex", + "▁p unk", + "▁pun k", + "CO RE", + "▁b orders", + "▁border s", + "▁bord ers", + "▁bor ders", + "▁Requ ired", + "▁ Required", + "▁f law", + "▁fl aw", + "▁cin ema", + "▁v í", + "▁ ví", + "▁ab ortion", + "▁abort ion", + "jour nal", + "j ournal", + "in itions", + "init ions", + "inition s", + "state ment", + "stat ement", + "▁o urs", + "▁our s", + "▁ou rs", + "▁ ours", + "ó t", + "▁Tur ner", + "▁Turn er", + "in us", + "ev es", + "eve s", + "e ves", + "▁magazine s", + "▁magaz ines", + "… …", + "la ce", + "l ace", + "sl ider", + "slide r", + "▁l ocate", + "▁loc ate", + "▁des arroll", + "P an", + "To m", + "T om", + "▁Land es", + "▁Lan des", + "ol ia", + "oli a", + "o lia", + "▁u nm", + "▁un m", + "▁Sen ator", + "▁ad minister", + "▁admin ister", + "▁ко ји", + "▁' {", + "▁) {", + "▁ ){", + "▁G olf", + "▁Gol f", + "▁g ele", + "▁ge le", + "▁gel e", + "▁d rank", + "▁dr ank", + "pos ing", + "po sing", + "p osing", + "▁en semble", + "he ap", + "sign ature", + "то й", + "ци й", + "scri ber", + "scr iber", + "scribe r", + "scrib er", + "▁ch amp", + "▁cha mp", + "ni o", + "n io", + "la yers", + "lay ers", + "layer s", + "▁tr ump", + "▁mod al", + "▁mo dal", + "▁ modal", + "on ces", + "once s", + "че ння", + "чен ня", + "▁C ort", + "▁Co rt", + "▁Cor t", + "▁sun light", + "▁M use", + "▁Mus e", + "▁Mu se", + "ém ent", + "é ment", + "▁curios ity", + "▁v r", + "▁ vr", + "O ct", + "yl on", + "y lon", + "▁rel ativ", + "st y", + "s ty", + "] /", + "az u", + "a zu", + "▁U SS", + "▁US S", + "▁person a", + "▁pers ona", + "Me n", + "M en", + "▁w ides", + "▁wide s", + "▁wid es", + "▁K as", + "▁Ka s", + "ic ies", + "ici es", + "i cies", + "▁C off", + "▁Co ff", + "▁con solid", + "▁cons olid", + "▁inter active", + "▁interact ive", + "op ing", + "o ping", + "La nd", + "L and", + "▁energ ies", + "▁independ ently", + "▁independent ly", + "inner HTML", + "Requ ire", + "Re quire", + "▁abs urd", + "▁IN FO", + "▁ INFO", + "▁b und", + "▁bu nd", + "▁ bund", + "anz ös", + "▁G ent", + "▁Ge nt", + "▁Gen t", + "▁scholar s", + "▁schol ars", + "▁C reated", + "▁Create d", + "▁Creat ed", + "▁Cre ated", + "▁ Created", + "▁mar ine", + "▁mari ne", + ".. .'", + "... '", + "EN V", + "E NV", + "ach te", + "acht e", + "a chte", + "am ents", + "ament s", + "amen ts", + "a ments", + "▁tr ucks", + "▁truck s", + "▁re wards", + "▁reward s", + "og s", + "o gs", + "Gr een", + "Gre en", + "G reen", + "▁n ä", + "▁inher ited", + "▁inherit ed", + "im ated", + "imate d", + "ima ted", + "imat ed", + "▁F REE", + "▁FR EE", + "▁ FREE", + "▁ext ens", + "da g", + "d ag", + "▁g low", + "▁gl ow", + "▁glo w", + "ar di", + "ard i", + "N F", + "▁evalu ated", + "▁evaluate d", + "▁eval uated", + "▁o ps", + "▁op s", + "▁ ops", + "▁cle aned", + "▁clean ed", + "▁Prov ince", + "▁Provinc e", + "ha bil", + "hab il", + "h abil", + "гра фі", + "▁T CP", + "▁ TCP", + "▁я кі", + "▁як і", + "▁de ce", + "▁dec e", + "▁cont empl", + "▁acquis ition", + "}) $.", + "})$ .", + "} )$.", + "=\" -", + "▁se ctors", + "▁sector s", + "▁sect ors", + ":: <", + "u ß", + "▁trab aj", + "th an", + "tha n", + "t han", + "▁S ta", + "▁St a", + "Mem bers", + "Member s", + "▁r v", + "▁ rv", + ")^ {\\", + ")^{ \\", + ") ^{\\", + "mit t", + "mi tt", + "m itt", + "▁W ang", + "▁Wa ng", + "▁W end", + "▁We nd", + "▁G lass", + "▁Gl ass", + "▁Glas s", + "▁t xt", + "▁tx t", + "▁ txt", + "▁Cam eron", + "ie ls", + "iel s", + "i els", + "▁im mer", + "▁imm er", + "▁ immer", + "▁насе ления", + ".. . /", + "▁ро ди", + "▁ роди", + "▁sophistic ated", + "▁R he", + "▁Rh e", + "us sy", + "uss y", + "▁Sy ria", + "▁Car oline", + "▁Carol ine", + "riter ion", + "ér c", + "é rc", + "Lo ve", + "L ove", + "▁cy cles", + "▁cycle s", + "▁cycl es", + "▁Ter ms", + "▁Term s", + "▁med ieval", + "▁medi eval", + "ь я", + "▁m issions", + "▁miss ions", + "▁mission s", + "Har d", + "Ha rd", + "H ard", + "▁rég ion", + "▁Ph oenix", + "De ep", + "▁sam pling", + "▁dismiss ed", + "prop ri", + "p ropri", + "▁jud ges", + "▁judge s", + "▁judg es", + "ał a", + "a ła", + "ul os", + "ulo s", + "u los", + "▁L ion", + "▁Li on", + "▁loc als", + "▁local s", + "neg ative", + "ogen eous", + "ogene ous", + "▁A pi", + "▁Ap i", + "▁ Api", + "▁d ici", + "▁di ci", + "▁dic i", + "▁а пре", + "▁author ized", + "▁ authorized", + "ze rw", + "zer w", + "▁p g", + "▁ pg", + "▁A WS", + "▁key word", + "▁ keyword", + "▁entrepre neur", + "▁п рое", + "▁про е", + "▁V ancouver", + "it ating", + "ita ting", + "itat ing", + "F ast", + "▁acknowled ged", + "▁acknowledge d", + "▁tour ist", + "▁tou rist", + "▁G rid", + "▁Gr id", + "▁ Grid", + "▁En try", + "▁Ent ry", + "▁ Entry", + "▁g ebru", + "▁ge bru", + "▁geb ru", + "sa t", + "s at", + "ber ger", + "berg er", + "▁T F", + "▁ TF", + "▁m t", + "▁ mt", + "▁Mar cel", + "▁Marc el", + "▁Tw enty", + "▁ ”", + "{} {", + "{ }{", + "hi nt", + "hin t", + "h int", + "▁an onymous", + "Cam p", + "C amp", + "▁** _", + "By Comparator", + "U C", + "▁t ö", + "Event Handler", + "▁t ours", + "▁to urs", + "▁tour s", + "▁tou rs", + "▁lon ely", + "▁Sum mary", + "▁ Summary", + "st ick", + "s tick", + "All owed", + "Allow ed", + "лі в", + "л ів", + "▁B rew", + "▁Br ew", + "▁Bre w", + "AME TER", + "▁review ed", + "ir at", + "ira t", + "i rat", + "▁n erve", + "▁nerv e", + "▁ner ve", + "▁L inda", + "▁Lin da", + "▁Lind a", + "▁dec is", + "▁sp okes", + "▁spoke s", + "▁spo kes", + "▁qu ed", + "▁que d", + "▁q ued", + "▁F T", + "▁ FT", + "▁в ін", + "▁ві н", + "ou sing", + "ous ing", + "o using", + "▁L arge", + "▁Lar ge", + "▁ Large", + "▁op ponents", + "▁oppon ents", + "▁opponent s", + "▁D isc", + "▁Dis c", + "▁Di sc", + "Found ation", + "EQ UAL", + "og g", + "o gg", + "Re try", + "Ret ry", + "R etry", + "CHAN NEL", + "▁Е вро", + "▁% .", + "▁ %.", + "▁i i", + "▁ ii", + "de ad", + "d ead", + "▁M ale", + "▁Mal e", + "▁Ma le", + "Com pleted", + "Comp leted", + "Complete d", + "ty p", + "t yp", + "▁Ty ler", + "Dis k", + "Di sk", + "D isk", + "Hi de", + "H ide", + "iju ana", + "▁public ations", + "▁publication s", + "fo x", + "f ox", + "vis ed", + "vi sed", + "v ised", + "Fore ign", + "Write Line", + "де ра", + "дер а", + "▁remain der", + "Pi cker", + "P icker", + "we alth", + "▁G or", + "▁Go r", + "sequ ently", + "▁coll ision", + "▁Harr ison", + "▁Harris on", + "▁work place", + "▁N ormal", + "▁Nor mal", + "▁Norm al", + "▁ Normal", + "▁B irth", + "▁Bir th", + "▁cons ume", + "▁consum e", + "Sh ift", + "▁avoid ing", + "▁C ha", + "▁Ch a", + "▁An ti", + "▁Ant i", + "▁ch arts", + "▁char ts", + "▁chart s", + "▁P av", + "▁Pa v", + "ст вом", + "ство м", + "ual mente", + "an ed", + "ane d", + "a ned", + "▁A uch", + "▁Au ch", + "rd ev", + "r dev", + "▁she er", + "▁an gl", + "▁ang l", + "sub str", + "Gener ate", + "> =", + "▁B ev", + "▁Be v", + "▁ч ем", + "▁че м", + "▁camp o", + "▁cam po", + "▁lect ure", + "hy per", + "▁Balt imore", + "mi x", + "m ix", + "ke iten", + "keit en", + "▁ра ди", + "▁l asted", + "▁la sted", + "▁last ed", + "▁las ted", + "▁discrim ination", + "ig te", + "igt e", + "ok al", + "oka l", + "o kal", + "Ph ase", + "▁T itel", + "▁Tit el", + "▁Fif th", + "▁di agnostic", + "su ng", + "sun g", + "s ung", + "▁giorn ata", + "os ta", + "ost a", + "o sta", + "is co", + "isc o", + "▁S ara", + "▁Sa ra", + "▁Sar a", + "m v", + "▁el ő", + "▁R osen", + "▁Ro sen", + "▁Ros en", + "▁Rose n", + "▁E SP", + "▁ES P", + "ph er", + "p her", + "▁a j", + "▁ aj", + "Path s", + "Pat hs", + "▁R alph", + "▁ž e", + "▁ že", + "ре в", + "р ев", + "▁о коло", + "▁ок оло", + "▁Ag reement", + "▁Word Press", + "an try", + "ant ry", + "▁p icks", + "▁pick s", + "▁pi cks", + "▁pic ks", + "▁N ur", + "▁Nu r", + "chedul ed", + "ki e", + "k ie", + "▁represent ations", + "▁representation s", + "++ ){", + "++) {", + "ess ment", + "▁count less", + "Block s", + "Bl ocks", + "Blo cks", + "ym e", + "y me", + "▁c lo", + "▁cl o", + "▁B ened", + "▁Be ned", + "▁Ben ed", + "ch ars", + "char s", + "cha rs", + "▁A gent", + "▁Ag ent", + "▁Age nt", + "▁ Agent", + "▁hist oria", + "▁histor ia", + "▁F loor", + "▁Fl oor", + "▁Flo or", + "▁ten ía", + "▁long est", + "▁lon gest", + "fr ica", + "▁b ef", + "▁be f", + "▁mechan isms", + "▁mechanism s", + "ла зи", + "▁h eter", + "▁he ter", + "▁het er", + "▁athlet es", + "▁period ic", + "▁V otes", + "▁Vo tes", + "ри сти", + "▁n á", + "▁ ná", + "▁m aid", + "▁ma id", + "▁mai d", + "▁s wear", + "▁sw ear", + "▁swe ar", + "▁wip ed", + "▁graph s", + "▁grap hs", + "▁t hesis", + "▁the sis", + "▁th esis", + "▁sens ation", + "pers istence", + "▁V il", + "▁Vi l", + "ac s", + "a cs", + "▁de el", + "sc rib", + "scri b", + "scr ib", + "ie ro", + "ier o", + "i ero", + "▁dis cre", + "▁disc re", + "air y", + "ai ry", + "Data Source", + "q t", + "ic iones", + "ici ones", + "icio nes", + "icion es", + "▁res pected", + "▁respect ed", + "▁f ram", + "▁fr am", + "▁fra m", + "▁spec ialized", + "▁special ized", + "▁prés ent", + "▁pré sent", + "Tur n", + "T urn", + "▁compl aints", + "▁complain ts", + "▁complaint s", + "(\" ,", + "( \",", + "▁Rel ated", + "▁Set ting", + "▁ Setting", + "р ю", + "▁s ą", + "▁P le", + "▁Pl e", + "▁d isse", + "▁dis se", + "▁diss e", + "ca ps", + "cap s", + "c aps", + "▁C ash", + "▁Cas h", + "▁Ca sh", + "▁cons umed", + "▁consum ed", + "▁consume d", + "▁l b", + "▁ lb", + "Ad just", + "Ser ialize", + "Serial ize", + "S erialize", + "is y", + "i sy", + "▁pat ent", + "▁vis ibility", + "▁S ach", + "▁Sa ch", + "▁Sac h", + "ün st", + "▁cy ber", + "▁Bl ake", + "▁Bl oom", + "▁Blo om", + "▁Sh ah", + "▁Sha h", + "PO WER", + "▁in clusion", + "▁incl usion", + "se rie", + "ser ie", + "s erie", + "▁man era", + "sec onds", + "second s", + "is ches", + "isch es", + "ische s", + "isc hes", + "▁C andidate", + "W D", + "op ath", + "o path", + "▁про гра", + "▁efficient ly", + "ap ps", + "app s", + "tool bar", + "we nd", + "wen d", + "w end", + "▁Ne il", + "▁form ats", + "▁format s", + "▁forma ts", + "▁T emplate", + "▁Temp late", + "▁ Template", + "▁min istry", + "▁minist ry", + "▁Char acter", + "▁ Character", + "Un iform", + "▁fon ction", + "не м", + "н ем", + "Wh ile", + "к ва", + "рі я", + "▁D L", + "▁ DL", + "▁L ayout", + "▁La yout", + "▁Lay out", + "▁ Layout", + "не ние", + "▁c aval", + "▁ca val", + "▁cav al", + "▁H ob", + "▁Ho b", + "SP I", + "S PI", + "▁h ely", + "▁he ly", + "▁hel y", + "Dest ination", + "), \r", + ") ,\r", + "▁i OS", + "▁ad mission", + "▁adm ission", + "▁c ss", + "▁cs s", + "▁ css", + "user Id", + "um bling", + "umb ling", + "▁bo oking", + "▁book ing", + "▁COPY RIGHT", + "▁b land", + "▁bl and", + "output s", + "▁sub mission", + "▁subm ission", + "ti t", + "t it", + "fe ctions", + "fect ions", + "fection s", + "fr agment", + "frag ment", + "▁fa ç", + "▁Through out", + "▁distingu ished", + "▁distinguish ed", + "▁ar range", + "▁arr ange", + "▁arrang e", + "ume ric", + "umer ic", + "xf e", + "x fe", + "ip age", + "ipa ge", + "i page", + "ер жа", + "▁C ars", + "▁Car s", + "▁Ca rs", + "▁P AGE", + "▁PA GE", + "▁ PAGE", + "▁a unque", + "▁insert ed", + "smith y", + "AL LOC", + "ALL OC", + "RE C", + "R EC", + "▁B ak", + "▁Ba k", + "▁Str ong", + "ac hen", + "ach en", + "ache n", + "a chen", + "▁Spec ific", + "w q", + "▁Д у", + "MO VE", + "▁mús ica", + "▁C ris", + "▁Cr is", + "ea u", + "e au", + "▁F orum", + "▁For um", + "▁Fo rum", + "li sted", + "list ed", + "l isted", + ")\\ \\", + ") \\\\", + "▁X VI", + "▁XV I", + "▁м оло", + "▁мо ло", + "/ $", + "Be r", + "B er", + "▁tact ics", + "Form atter", + "Format ter", + "op ens", + "ope ns", + "open s", + "▁r h", + "▁ rh", + "▁t ram", + "▁tr am", + "▁tra m", + "V L", + "▁Pro file", + "▁Prof ile", + "▁ Profile", + "▁par ish", + "▁Ray mond", + "▁cont empor", + "▁Pl anning", + "▁Plan ning", + "▁Ч е", + "▁A RM", + "▁AR M", + "▁ ARM", + "▁des ires", + "▁desire s", + "k v", + "O s", + "▁m iner", + "▁min er", + "▁mi ner", + "▁mine r", + "▁qual ify", + "ik u", + "i ku", + "▁der ni", + "ol óg", + "▁K id", + "▁Ki d", + "ane an", + "▁Hol land", + "▁Holl and", + "Aut om", + "Auto m", + "▁Hamilton ian", + "St ation", + "Stat ion", + "js p", + "j sp", + "▁YO UR", + "▁YOU R", + "▁Th ailand", + "effect ive", + "п ло", + "▁relie ved", + "▁O klahoma", + "▁Jul ian", + "▁Juli an", + "▁Julia n", + "▁ind ent", + "▁inde nt", + "▁ indent", + "if r", + "i fr", + "пре де", + "▁fl ame", + "on io", + "oni o", + "o nio", + "As sign", + "Ass ign", + "▁sh ifts", + "▁shift s", + "▁car acter", + "▁caract er", + "if icates", + "ific ates", + "ificate s", + "ifica tes", + "X R", + "▁G FP", + "▁GF P", + "FE ATURE", + "▁M aine", + "▁Ma ine", + "▁Main e", + "▁Mai ne", + "▁f rank", + "▁fr ank", + "▁al igned", + "▁align ed", + "▁ aligned", + "▁p ří", + "▁př í", + "Code Attribute", + "▁M AC", + "▁MA C", + "▁ MAC", + "▁R oot", + "▁Ro ot", + "▁ Root", + "▁F M", + "▁ FM", + "erv ation", + "с лі", + "▁s hy", + "▁sh y", + "▁partic ul", + "▁parti cul", + "pl atz", + "▁hypothes is", + "at hol", + "ath ol", + "s With", + "J s", + "$ ^{-", + "▁#! /", + "▁l emon", + "▁le mon", + "▁a bol", + "▁ab ol", + "▁ abol", + "▁Mil an", + "▁Mi lan", + "an ten", + "ant en", + "ante n", + "a nten", + "▁s ia", + "▁si a", + "ri as", + "ria s", + "r ias", + "▁con sid", + "▁cons id", + "as so", + "ass o", + "ain ers", + "ai ners", + "ainer s", + "aine rs", + "▁cir ca", + "▁circ a", + "re try", + "ret ry", + "r etry", + "▁nue vo", + "const ants", + "constant s", + "▁Med iterr", + "▁Turk ish", + "ion en", + "io nen", + "ione n", + "i onen", + "c rypto", + "▁ev olved", + "▁\" ?", + "▁p úblic", + "▁comp rend", + "▁compre nd", + "▁compr end", + "al lo", + "all o", + "zo om", + "z oom", + "▁dat etime", + "▁date time", + "▁ datetime", + "▁mond iale", + "ма т", + "м ат", + "▁M ask", + "▁Ma sk", + "▁Mas k", + "▁ Mask", + "▁p row", + "▁pro w", + "▁pr ow", + "▁belong ing", + "+ '", + "OUT PUT", + "▁G rab", + "▁Gr ab", + "▁Gra b", + "M ir", + "▁accommod ate", + "▁$ ('#", + "▁ $('#", + "▁Lou ise", + "▁Louis e", + "▁da mit", + "▁dam it", + "}' ,", + "} ',", + "scri pts", + "script s", + "sn apshot", + "snap shot", + "▁sh itty", + "▁shit ty", + "▁y o", + "▁ yo", + "▁belie ving", + "▁inhabit ants", + "W P", + "▁Colomb ia", + "li sts", + "list s", + "l ists", + "▁Mur phy", + "Data set", + "Dat aset", + "▁(! $", + "▁tremend ous", + "▁se ñ", + "▁S ed", + "▁Se d", + "▁sw allowed", + "▁swallow ed", + "om p", + "o mp", + "▁L ate", + "▁La te", + "▁Lat e", + "▁an ys", + "▁any s", + "▁dead ly", + "fol low", + "f ollow", + "▁A nc", + "▁An c", + "▁h w", + "▁ hw", + "wik ipedia", + "ic ts", + "ict s", + "▁Al aska", + "▁sc ary", + "▁scar y", + "▁second o", + "▁sec ondo", + "▁her oes", + "▁hero es", + "▁veter an", + "▁behav iors", + "▁behavior s", + "▁behavi ors", + "- %", + "▁E z", + "▁с і", + "▁ сі", + "tik z", + "▁spect acular", + "▁Ch ron", + "▁( @", + "▁ (@", + "▁de mo", + "▁dem o", + "▁ demo", + "▁ser ialized", + "▁serial ized", + "▁In depend", + "▁Indep end", + "BU ILD", + "fail ure", + "▁P ORT", + "▁PO RT", + "▁ PORT", + "ю чи", + "▁med itation", + "sample s", + "sam ples", + "s amples", + "i ão", + "▁Ни кола", + "▁я зы", + "▁Tr uth", + "▁Tru th", + "▁co efficient", + "▁coeff icient", + "sl ug", + "▁XV III", + "▁XVI II", + "▁XVII I", + "ia o", + "i ao", + "de ck", + "dec k", + "▁раз ви", + "▁ad oles", + "ar ius", + "ari us", + "▁H az", + "▁Ha z", + "▁Pro test", + "▁Prote st", + "ra de", + "rad e", + "r ade", + "не ния", + "▁cl ause", + "conne ctor", + "connect or", + "conn ector", + "RA TE", + "R ATE", + "ц ю", + "▁Conne cticut", + "V S", + "abul ary", + "HO W", + "▁d elen", + "▁de len", + "▁del en", + "▁su ited", + "▁suit ed", + "▁suite d", + "▁Sur vey", + "ze c", + "z ec", + "ți i", + "ț ii", + "▁b acks", + "▁back s", + "▁ba cks", + "▁ backs", + "com merce", + "▁And rea", + "▁Andre a", + "▁Andr ea", + "▁propag anda", + "iz ioni", + "izi oni", + "izio ni", + "▁B il", + "▁Bi l", + "▁In nov", + "▁Inn ov", + "▁forg ive", + "▁oper ates", + "▁operate s", + "▁opera tes", + "ч ний", + "▁l ingu", + "▁lin gu", + "▁ling u", + "▁c ollar", + "▁col lar", + "▁coll ar", + "до л", + "сі й", + "zt en", + "zte n", + "z ten", + "im at", + "ima t", + "i mat", + "▁sh oe", + "ge nder", + "gen der", + "g ender", + "▁leg ally", + "▁legal ly", + "RO P", + "R OP", + "▁S leep", + "deleg ate", + "ID s", + "▁build s", + "▁qu er", + "▁que r", + "▁q uer", + "▁ quer", + "uls ion", + ". “", + "к ло", + "ri se", + "ris e", + "r ise", + "th ink", + "К о", + "▁bacter ia", + "▁magn ific", + "▁prison er", + "Cl ock", + "C lock", + "R B", + "ú t", + "▁L iz", + "▁Li z", + "gr a", + "g ra", + "▁And ré", + "▁Andr é", + "▁D ennis", + "▁Den nis", + "▁sur ge", + "▁surg e", + "ex isting", + "exist ing", + "▁W ald", + "▁Wal d", + "▁Wa ld", + "▁S chema", + "▁Sch ema", + "▁Sche ma", + "▁ Schema", + "▁war nings", + "▁warn ings", + "▁warning s", + "▁qu adr", + "▁quad r", + "at te", + "att e", + "▁E ins", + "▁Ein s", + "▁ad option", + "▁adopt ion", + "▁w anna", + "▁de rive", + "▁der ive", + "▁deriv e", + "▁ derive", + "▁a rena", + "▁are na", + "▁ar ena", + "▁aren a", + "▁Den ver", + "▁F i", + "▁ Fi", + "▁Jess ica", + "acy j", + "R atio", + "▁которы е", + "▁Act ivity", + "▁Activ ity", + "▁ Activity", + "em u", + "e mu", + "▁St alin", + "▁Sta lin", + "ag gi", + "agg i", + "a ggi", + "▁f ün", + "▁f ils", + "▁fil s", + "▁fi ls", + "aj u", + "a ju", + "card s", + "car ds", + "c ards", + "▁att raction", + "▁attract ion", + "▁attr action", + "▁attra ction", + "od ot", + "odo t", + "o dot", + "F at", + "▁H aven", + "▁Ha ven", + "▁Have n", + "▁Hav en", + "▁nine teenth", + "▁ninete enth", + "▁* *\"", + "▁** \"", + "▁m aggio", + "▁mag gio", + "ma ny", + "man y", + "m any", + "win ning", + "▁G A", + "▁ GA", + "▁d ummy", + "▁ dummy", + "Un able", + "en ci", + "enc i", + "ère nt", + "è rent", + "Im g", + "I mg", + "▁t ob", + "▁to b", + "DI P", + "D IP", + "S ince", + "▁Sa fe", + "▁Saf e", + "▁ Safe", + "Gu ard", + "is ure", + "i sure", + "port e", + "por te", + "p orte", + "▁stad ium", + "in di", + "ind i", + "▁App arently", + "ug no", + "▁w olf", + "▁ne ces", + "▁overse as", + "of s", + "o fs", + "ar el", + "are l", + "a rel", + "▁F ine", + "▁Fin e", + "▁Fi ne", + "▁cor rupt", + "▁n ovember", + "▁nov ember", + "▁nove mber", + "▁interpret ed", + "ib ile", + "ibil e", + "▁w ages", + "▁wa ges", + "▁wage s", + "▁Pre tty", + "▁Her bert", + "▁reg istr", + "вы м", + "an swer", + "ans wer", + "▁m orte", + "▁mor te", + "▁mort e", + "▁com posite", + "▁compos ite", + "Tool bar", + "▁iter ator", + "▁ iterator", + "ant ine", + "anti ne", + "▁init ialized", + "▁initial ized", + "▁initialize d", + "▁ initialized", + "▁poor ly", + "Access or", + "▁Han nah", + "▁Hann ah", + "▁то лько", + "ol an", + "ola n", + "o lan", + "▁o tto", + "▁ot to", + "▁ott o", + "▁ otto", + "▁str ikes", + "▁stri kes", + "▁strike s", + "▁conflict s", + "▁conflic ts", + "▁s urg", + "▁su rg", + "▁sur g", + "▁histor ian", + "▁historia n", + "wo man", + "w oman", + "▁l ibraries", + "be w", + "b ew", + ")- -(", + ")-- (", + "ga ther", + "g ather", + "▁L ip", + "▁Li p", + "▁f ict", + "▁fi ct", + "FIL TER", + "@ {", + "▁bl essed", + "▁bless ed", + "et ics", + "etic s", + "eti cs", + "▁f ork", + "▁for k", + "▁Me tal", + "▁Met al", + "▁Meta l", + "po lation", + "pol ation", + "p olation", + "▁negoti ations", + "▁gen us", + "▁genu s", + "▁cont rolling", + "▁control ling", + "VER T", + "VE RT", + "V ERT", + "▁P erry", + "▁Per ry", + "▁S PD", + "▁SP D", + "CA SE", + "C ASE", + "т вер", + "▁C rown", + "▁Cr own", + "▁Cro wn", + "▁Crow n", + "▁ind ul", + "▁indu l", + "▁e hemal", + "▁ampl itude", + "▁amplit ude", + "▁B ach", + "▁Ba ch", + "▁phot ographer", + "▁photograph er", + "n ý", + "▁inv ested", + "▁invest ed", + "▁P arte", + "▁Par te", + "▁Part e", + "▁pro long", + "C U", + "icht et", + "ichte t", + "res ume", + "▁c arb", + "▁car b", + "▁ca rb", + "ur st", + "urs t", + "▁N ixon", + "▁n eur", + "▁ne ur", + "▁neu r", + "▁ neur", + "▁corpor ations", + "▁corporation s", + "Op s", + "O ps", + "u u", + "l m", + "ap ple", + "app le", + "ch te", + "cht e", + "▁deliber ately", + "ber e", + "be re", + "b ere", + "▁fe br", + "▁provinc ia", + "▁provin cia", + "Over flow", + "▁E ight", + "▁ind ication", + "▁indic ation", + "▁pist ol", + "▁к ре", + "▁ кре", + "oc ial", + "oci al", + "o cial", + "▁r und", + "▁run d", + "▁ru nd", + "▁ rund", + "▁se hr", + "ok at", + "oka t", + "o kat", + "ül et", + "ü let", + "▁He at", + "Н а", + "▁о дин", + "▁од ин", + "IC S", + "I CS", + "ay e", + "a ye", + "▁eight een", + "▁t ug", + "▁tu g", + "LO T", + "L OT", + "▁L ar", + "▁La r", + "ning s", + "n ings", + "▁T odd", + "▁To dd", + "▁Tod d", + "▁organis ations", + "▁organisation s", + "▁g enes", + "▁gen es", + "▁ge nes", + "▁gene s", + "B ag", + "Ke ep", + "^{ +", + "Base d", + "Bas ed", + "B ased", + "sk in", + "ski n", + "s kin", + "▁to das", + "▁tod as", + "▁toda s", + "▁illustr ated", + "▁c f", + "▁ cf", + "▁ar riving", + "▁arriv ing", + "▁arr iving", + "▁excess ive", + "▁tra its", + "▁trait s", + "▁s ank", + "▁san k", + "▁Att ribute", + "▁ Attribute", + "▁G D", + "▁ GD", + "com par", + "comp ar", + "▁dent ro", + "br is", + "b ris", + "▁at oms", + "▁atom s", + "fr ed", + "fre d", + "f red", + "▁E val", + "▁Ev al", + "▁Eva l", + "▁ Eval", + "▁di stances", + "▁dist ances", + "▁distance s", + "st aw", + "sta w", + "краї н", + "vari ables", + "variable s", + "l c", + "на ли", + "нал и", + "н али", + "▁чемпи она", + "wi j", + "w ij", + "▁Sim ilar", + "je k", + "j ek", + "Pe t", + "P et", + "=\" $", + "ко то", + "▁R ang", + "▁Ra ng", + "▁Ran g", + "ion ato", + "iona to", + "▁bek annt", + "▁bekan nt", + "! *", + "Li m", + "L im", + "▁concl usions", + "▁conclusion s", + "ain te", + "ai nte", + "aint e", + "a inte", + "- ,", + "▁g ł", + "▁pass ive", + "▁Ga ussian", + "▁stag ione", + "ME DI", + "MED I", + "it ol", + "ito l", + "i tol", + "▁Jer emy", + "View s", + "class List", + "▁desper ately", + "▁desperate ly", + "▁ver l", + "▁ve rl", + "br ace", + "bra ce", + "N P", + "▁c ob", + "▁co b", + "▁A rist", + "▁Ar ist", + "▁Ari st", + "da p", + "d ap", + "Fil ters", + "Filter s", + "'=> '", + "ul tan", + "ult an", + "▁F actory", + "▁ Factory", + "è le", + "▁l asting", + "▁last ing", + "▁las ting", + "▁element ary", + "▁C M", + "▁ CM", + "▁Louis iana", + "▁p ov", + "▁po v", + "PC I", + "P CI", + "è de", + "▁P ink", + "▁Pin k", + "▁Br uno", + "▁Bru no", + "▁Brun o", + "▁Y ellow", + "▁ev angel", + "▁lik elihood", + "WID TH", + "▁$ -", + "▁ $-", + "ni co", + "nic o", + "n ico", + "hu i", + "h ui", + "ak ter", + "akt er", + "akte r", + "ne urs", + "neur s", + "n eurs", + "▁bre eze", + "▁bree ze", + "▁со ста", + "▁He ader", + "▁Head er", + "▁ Header", + "om rå", + "▁D ylan", + "▁Dy lan", + "▁Bi ographie", + "▁Univers ität", + "on so", + "ons o", + "HAND LE", + "J ournal", + "ea st", + "e ast", + "▁sup pliers", + "▁supplier s", + "▁table t", + "▁tab let", + "LI C", + "L IC", + "PER TY", + "ї в", + "▁z aw", + "▁za w", + "▁su bm", + "▁sub m", + "▁Fern ando", + "▁nou velle", + "▁nouve lle", + "▁Point s", + "▁ Points", + "▁str angers", + "▁strange rs", + "▁stranger s", + "▁strang ers", + "Component Model", + "ist ro", + "istr o", + "au rus", + "aur us", + "▁san ct", + "▁о дна", + "▁од на", + "▁В ы", + "▁о на", + "▁он а", + "▁ она", + "vert ical", + "Sp ring", + "▁Har old", + "▁Back ground", + "▁ Background", + "Bal ance", + "Key word", + "~$ \\", + "~ $\\", + "mal loc", + "m alloc", + "ORM AL", + "Sk ip", + "▁Mu ham", + "▁back wards", + "▁backward s", + "c ów", + "по зи", + "▁back end", + "▁ backend", + "▁de emed", + "▁accur ately", + "▁accurate ly", + "▁trans c", + "▁Broad way", + "▁g rud", + "▁gr ud", + "▁gru d", + "▁N amen", + "▁Name n", + "▁Na men", + "▁Nam en", + "▁sh ifting", + "▁shift ing", + "▁ment ally", + "▁mental ly", + "▁cal ories", + "▁cons ensus", + "Perm issions", + "Permission s", + "▁ob jet", + "▁obj et", + "▁elabor ate", + "at ts", + "att s", + "▁sn ake", + "▁ref res", + "▁refr es", + "ar u", + "a ru", + "▁reflect s", + "oun ge", + "o unge", + "R ank", + "▁K urt", + "▁Kur t", + "▁Ku rt", + "▁p ied", + "▁pie d", + "▁pi ed", + "▁exped ition", + "V el", + "▁O wen", + "Le ad", + "L ead", + "▁utter ly", + "▁Ar be", + "▁bre asts", + "▁breast s", + "IP S", + "I PS", + "▁hung er", + "▁hun ger", + "at em", + "ate m", + "a tem", + "▁vers chied", + "▁versch ied", + "▁Cam era", + "▁ Camera", + "▁Mün chen", + "iv als", + "ival s", + "iva ls", + "i vals", + "▁sp raw", + "▁spr aw", + "▁S ü", + "▁Was ser", + "▁mechan ics", + "Load ed", + "Lo aded", + "db c", + "d bc", + "▁re marks", + "▁rem arks", + "▁remark s", + "▁ remarks", + "▁} ).", + "▁}) .", + "▁ }).", + "▁pain ter", + "▁pa inter", + "▁paint er", + "▁h aut", + "▁ha ut", + "Mar shal", + "IS D", + "I SD", + "▁ve loc", + "▁vel oc", + "▁In cre", + "▁Inc re", + "W ar", + "▁ру с", + "▁com pte", + "▁comp te", + "▁compt e", + "ü g", + "▁Def inition", + "▁ Definition", + "▁G am", + "▁Ga m", + "▁H ir", + "▁Hi r", + "▁witness ed", + "▁g ren", + "▁gr en", + "▁gre n", + "▁ gren", + "▁hur ry", + "ch et", + "che t", + "c het", + "re verse", + "G F", + "▁Qu arter", + "п ла", + "▁s ar", + "▁sa r", + "sb urg", + "sbur g", + "s burg", + "▁D it", + "▁Di t", + "▁ Dit", + "▁Arn old", + "j k", + "▁l ambda", + "▁ lambda", + "è ge", + "▁o z", + "▁ oz", + "▁h ans", + "▁ha ns", + "▁han s", + "▁answ ering", + "▁answer ing", + "▁o live", + "▁ol ive", + "▁sp ont", + "▁spo nt", + "▁inter vals", + "▁interval s", + "> @", + "▁т ран", + "▁тра н", + "▁F ocus", + "▁ Focus", + "ч них", + "▁д ви", + "▁tri angle", + "▁r ally", + "▁P unk", + "▁Pun k", + "▁G and", + "▁Ga nd", + "se ctions", + "section s", + "sect ions", + "сси й", + "AC CESS", + "A CCESS", + "ha rm", + "har m", + "h arm", + "▁Sk ip", + "▁ Skip", + "▁D river", + "▁Dr iver", + "▁Drive r", + "▁ Driver", + "▁Sant iago", + "it ung", + "itu ng", + "▁B arr", + "▁Bar r", + "▁Ba rr", + "process or", + "▁real ised", + "▁realise d", + "ą z", + "le ave", + "▁C omo", + "▁Com o", + "▁Co mo", + "▁Re views", + "▁Review s", + "▁и зда", + "▁из да", + "▁earn ings", + "▁ear nings", + "▁earning s", + "▁S creen", + "▁Sc reen", + "▁Scre en", + "▁ Screen", + "gr and", + "gra nd", + "g rand", + "▁ap ril", + "▁apr il", + "▁sil ently", + "▁silent ly", + "ed o", + "e do", + "ue st", + "ues t", + "u est", + "oo oo", + "▁Исто рия", + "ра з", + "MAGE S", + "MAG ES", + "▁Sing h", + "▁Sin gh", + "▁Per fect", + "▁revolution ary", + "▁н і", + "▁ ні", + "▁Sch ools", + "▁School s", + "R ich", + "▁ch rom", + "▁chr om", + "▁an terior", + "▁ante rior", + "▁Indones ia", + "Con straints", + "Constraint s", + "▁\" __", + "▁\"_ _", + "▁six teen", + "▁sixt een", + "ér e", + "é re", + "мен та", + "мент а", + "N il", + "je l", + "j el", + "че ские", + "чески е", + "▁thr one", + "▁thro ne", + "▁aud iences", + "▁audience s", + "▁i hren", + "▁ih ren", + "▁ihr en", + "▁ihre n", + "ра б", + "Qu ick", + "in burgh", + "fi co", + "fic o", + "f ico", + "▁kid n", + "▁ki dn", + "irm ingham", + "is le", + "isl e", + "iz ación", + "iza ción", + "▁Ch ampions", + "▁Champion s", + "▁вы со", + "ol er", + "ole r", + "o ler", + "▁z ak", + "▁za k", + "▁p lat", + "▁pl at", + "▁V III", + "▁VI II", + "▁VII I", + "at ique", + "ati que", + "li ter", + "lit er", + "l iter", + "▁P rest", + "▁Pr est", + "▁Pres t", + "▁Pre st", + "in is", + "ini s", + "i nis", + "▁scient ist", + "▁m ån", + "▁må n", + "ke ley", + "kel ey", + "▁h yd", + "▁hy d", + "grad uate", + "of t", + "o ft", + "▁N GC", + "on gs", + "ong s", + "▁t ier", + "▁tie r", + "▁ti er", + "▁Sh aw", + "▁Sha w", + "un ächst", + "▁establish ing", + "▁ind icator", + "▁indic ator", + "▁Par ad", + "▁Pa rad", + "▁Para d", + "▁Tr ail", + "▁Tra il", + "UM N", + "▁sp ine", + "▁spin e", + "▁Vis ual", + "▁ Visual", + ":: $", + "▁t eles", + "▁te les", + "▁tele s", + "▁tel es", + "OP ER", + "O PER", + "▁pack aging", + "to ire", + "t oire", + "▁не ско", + "▁product ivity", + "A f", + "ні ї", + "▁de gener", + "▁deg ener", + "br it", + "b rit", + "U i", + "▁Y am", + "▁Ya m", + "▁d ough", + "▁do ugh", + "▁dou gh", + "os ph", + "osp h", + "▁cl ue", + "▁ре ги", + "▁me ille", + "▁tend ency", + "▁re lay", + "▁rel ay", + "▁design ers", + "▁designer s", + "▁Т у", + "Sh are", + "▁b icy", + "▁bi cy", + "▁M asters", + "▁Ma sters", + "▁Mas ters", + "▁Master s", + "▁м но", + "▁altern atives", + "▁alternative s", + "ет о", + "е то", + "▁coun tr", + "▁count r", + "▁W ow", + "▁Wo w", + "LO CAL", + "LOC AL", + "en ue", + "enu e", + "▁s lim", + "▁sl im", + "к ви", + "▁t ir", + "▁ti r", + "▁do it", + "lic a", + "li ca", + "l ica", + "ci pe", + "cip e", + "c ipe", + "iz ia", + "izi a", + "▁A ires", + "▁Air es", + "▁F alls", + "▁Fall s", + "▁Fal ls", + "▁concent rate", + "▁concentr ate", + "▁ne gl", + "▁neg l", + "▁Re in", + "? ,", + "▁G ott", + "▁Go tt", + "▁Got t", + "▁Ver ify", + "▁ Verify", + "▁Stud ios", + "▁Studio s", + "$ ('#", + "ow ym", + "owy m", + "я в", + "Prim itive", + "▁tax i", + "▁ta xi", + "▁Com mercial", + "▁Ч ер", + "▁Че р", + "place holder", + "se au", + "sea u", + "s eau", + "cor rect", + "he imer", + "heim er", + "▁H of", + "▁Ho f", + "▁d ia", + "▁di a", + "▁i rr", + "▁ir r", + "▁ur ged", + "▁urg ed", + "▁urge d", + "▁a nom", + "▁an om", + "▁ano m", + "▁t arde", + "▁tar de", + "▁tard e", + "ur m", + "u rm", + "▁se ized", + "▁sei zed", + "▁seiz ed", + "DO T", + "D OT", + "op acity", + "St rings", + "String s", + "Str ings", + "▁dec iding", + "▁decid ing", + "▁listen ers", + "▁listener s", + "ár a", + "á ra", + "▁pl anted", + "▁plan ted", + "▁plant ed", + "▁é taient", + "▁ét aient", + "Z oom", + "st ví", + "ng th", + "ä ude", + "▁C av", + "▁Ca v", + "▁v endor", + "▁vend or", + "▁ vendor", + "▁ ż", + "▁meas uring", + "▁necess ity", + "▁r ivers", + "▁ri vers", + "▁river s", + "▁riv ers", + "▁labor atory", + "▁E ff", + "▁reprodu ce", + "▁S ak", + "▁Sa k", + "▁not ebook", + "▁note book", + "▁reason ably", + "isecond s", + "i seconds", + "▁Part ial", + "▁ Partial", + "GUI D", + "GU ID", + "G UID", + "▁Per iod", + "▁ Period", + "▁reve aling", + "▁reveal ing", + "▁conv iction", + "▁ н", + "▁бу ли", + "▁altern ate", + "▁alter nate", + "cc iones", + "▁N AT", + "▁NA T", + "▁can onical", + "▁canon ical", + "mo z", + "m oz", + "▁Mé xico", + "M o", + "▁ш а", + "▁ ша", + "lim inary", + "f é", + "чно й", + "ч ной", + "▁Ham burg", + "▁Hamb urg", + "▁influ ential", + "▁b olt", + "▁bo lt", + "▁bol t", + "az zo", + "azz o", + "PH P", + "P HP", + "▁Sa udi", + "▁Saud i", + "▁Sau di", + "▁r m", + "▁ rm", + "▁cer ca", + "▁decor ated", + "▁st aat", + "▁sta at", + "Lo u", + "L ou", + "▁compet itors", + "во ї", + "▁diam ond", + "▁dia mond", + "▁m obil", + "▁mo bil", + "▁mob il", + "Click Listener", + "set State", + "▁s üd", + "; \"", + "œ ur", + "▁Lud wig", + "▁clin ic", + "▁e go", + "▁eg o", + "▁ ego", + "Thread ing", + "▁f ract", + "▁fr act", + "▁fra ct", + "Ref lection", + "oss ip", + "\"] [\"", + "▁L ov", + "▁Lo v", + "Ex press", + "Exp ress", + "Expr ess", + "д ри", + "if acts", + "ifact s", + "▁O ften", + "▁Of ten", + "▁ лу", + "▁p ets", + "▁pe ts", + "▁pet s", + "▁address ing", + "▁m ens", + "▁me ns", + "▁men s", + "▁ED IT", + "▁ EDIT", + "ud der", + "udd er", + "Vert ical", + "ка та", + "Cap t", + "C apt", + "verb ose", + "▁вой ны", + "UNK NOWN", + "un its", + "unit s", + "uni ts", + "per mission", + "perm ission", + "[ _", + "▁er sch", + "▁ers ch", + "▁comm unes", + "▁commun es", + "▁commune s", + "Un ityEngine", + "▁com mut", + "▁comm ut", + "kl ass", + "k lass", + "▁volt age", + "▁volta ge", + "re zent", + "rez ent", + "pe rf", + "per f", + "DR V", + "D RV", + "▁f ame", + "▁fam e", + "▁fa me", + "▁S pot", + "▁Sp ot", + "▁Л ю", + "▁c asting", + "▁cas ting", + "▁cast ing", + "hi m", + "h im", + "▁en gl", + "▁eng l", + "▁int ro", + "▁intr o", + "▁Г у", + "Comp any", + "some thing", + "som ething", + "▁cl icking", + "▁click ing", + "жи ва", + "▁fl ames", + "▁flame s", + "▁random ly", + "ex tr", + "ext r", + "Equal To", + "an ners", + "ann ers", + "anner s", + "anne rs", + "▁p arks", + "▁par ks", + "▁park s", + "▁murm ured", + "ми я", + "▁reason ing", + "сле д", + "▁n er", + "▁ne r", + "▁ ner", + "▁é c", + "▁ éc", + "ow ners", + "own ers", + "owner s", + "▁Д же", + "▁Дж е", + "▁me er", + "▁typ ing", + "▁ty ping", + "▁happ ily", + ".. ...", + "... ..", + ".... .", + ". ....", + "▁Ч а", + "be cca", + "bec ca", + "▁P apers", + "▁Pa pers", + "▁Pap ers", + "▁Paper s", + "▁Or acle", + "▁equ ilibrium", + "man agement", + "Li te", + "L ite", + "▁des ktop", + "▁desk top", + "ă r", + "▁G ill", + "▁Gi ll", + "▁Gil l", + "do rf", + "d orf", + "ig g", + "i gg", + "▁qu esta", + "▁que sta", + "▁quest a", + "▁ questa", + "Warning s", + "Warn ings", + "War nings", + "over flow", + "▁V T", + "▁ VT", + "▁cons isted", + "▁consist ed", + "▁A bu", + "▁Ab u", + "v scale", + "J O", + "ah o", + "a ho", + "▁T ensor", + "▁Ten sor", + "▁ Tensor", + "▁hes itated", + "▁w enn", + "▁we nn", + "▁wen n", + "map sto", + "maps to", + "▁controvers ial", + "M F", + "▁l ac", + "▁la c", + "▁an ch", + "▁anc h", + "▁ anch", + "▁A A", + "▁ AA", + "it ta", + "itt a", + "i tta", + "ul in", + "uli n", + "u lin", + "▁c ler", + "▁cl er", + "▁cle r", + "▁D iana", + "▁Di ana", + "▁Fre ud", + "▁challeng ed", + "▁challenge d", + "лё н", + "л ён", + "▁se ated", + "▁sea ted", + "▁seat ed", + "▁sm iles", + "▁smile s", + "▁cr acked", + "▁crack ed", + "▁а ктив", + "ско ј", + "dict ion", + "di ction", + "d iction", + "ex press", + "exp ress", + "expr ess", + "▁im posed", + "▁imp osed", + "▁pro tests", + "▁prote sts", + "▁protest s", + "▁prot ests", + "▁w ounds", + "▁wound s", + "C ulture", + "N Y", + "prevent Default", + "ad io", + "adi o", + "▁NE W", + "▁ NEW", + "B attle", + "▁se colo", + "▁sec olo", + "▁A x", + "▁found ing", + "(\" -", + "▁ret ro", + "▁retr o", + "▁pot atoes", + "import ant", + "ie me", + "iem e", + "i eme", + "ys ide", + "y side", + "d ummy", + "▁t ilt", + "▁til t", + "▁ti lt", + "▁R ules", + "▁Ru les", + "▁Rule s", + "▁ Rules", + "▁un ters", + "▁unt ers", + "▁unter s", + "A ud", + "V ENDOR", + "ud ge", + "un al", + "una l", + "u nal", + "▁Ad ult", + "▁im pat", + "▁imp at", + "▁rep airs", + "▁repair s", + "▁F erd", + "▁Fe rd", + "▁Fer d", + "▁Az ure", + "▁ Azure", + ")) :", + ") ):", + "▁pag ina", + "▁E pisode", + "File name", + "Fil ename", + "▁j á", + "▁oblig ation", + "ig hed", + "igh ed", + "▁pers istent", + "Mus ic", + "▁C ele", + "▁Ce le", + "▁Cel e", + "▁r y", + "▁ ry", + "▁cert ification", + "ul d", + "u ld", + "▁T L", + "▁ TL", + "▁sk irt", + "▁ski rt", + "▁M ini", + "▁Min i", + "▁Mi ni", + "▁B ring", + "▁Br ing", + ">< ?", + "> %", + "▁P and", + "▁Pan d", + "▁Pa nd", + "▁S UB", + "▁SU B", + "▁ SUB", + "▁compan ions", + "▁companion s", + "▁RE AD", + "▁ READ", + "▁S olutions", + "▁Solution s", + "▁acc essed", + "▁access ed", + "▁p osto", + "▁pos to", + "▁po sto", + "▁post o", + "▁pur suit", + "▁purs uit", + "ow i", + "o wi", + "▁gro cery", + "Sp e", + "S pe", + "haus en", + "▁normal ized", + "▁tra uma", + "gg i", + "g gi", + "ie nia", + "ien ia", + "▁aut umn", + "▁so vere", + "▁sov ere", + "▁Men schen", + "▁Mens chen", + "▁D AG", + "▁DA G", + "▁S ort", + "▁So rt", + "▁Sor t", + "▁ Sort", + "| ---", + "▁l iver", + "▁li ver", + "▁live r", + "▁liv er", + "▁ liver", + "env iron", + "DE CL", + "DEC L", + "▁ма й", + "▁N ak", + "▁Na k", + "bet ween", + "▁gentle man", + "in ging", + "ing ing", + "▁su bur", + "▁sub ur", + "ST O", + "S TO", + "ace ut", + "\\ !", + "▁Fuß ball", + "na r", + "n ar", + "▁b og", + "▁bo g", + "Token s", + "Tok ens", + "▁cer emon", + "▁cere mon", + "DA Y", + "D AY", + "▁out fit", + "▁agric ulture", + "ди и", + "▁N in", + "▁Ni n", + "▁Sp rings", + "▁Spring s", + "▁Spr ings", + "▁Co ach", + "▁d jango", + "▁ django", + "▁C rim", + "▁Cr im", + "▁te cn", + "Th ree", + "em os", + "e mos", + "▁be an", + "▁ bean", + "pi eler", + "pie ler", + "p ieler", + "ri tz", + "rit z", + "r itz", + "ta bs", + "tab s", + "t abs", + "▁Pro blem", + "in and", + "ina nd", + "oc on", + "oco n", + "o con", + "њ и", + "▁bu yer", + "▁buy er", + "us ement", + "use ment", + "▁b or", + "▁bo r", + "▁ bor", + "▁sett embre", + "pp e", + "p pe", + "▁D eg", + "▁De g", + "▁W a", + "▁w ives", + "▁fr anzös", + "▁mar ca", + "▁des cent", + "▁desc ent", + "▁S ha", + "▁Sh a", + "ver ts", + "vert s", + "v erts", + "▁Sh adow", + "▁ Shadow", + "▁Hug o", + "▁Hu go", + "▁A ppe", + "▁App e", + "▁Ap pe", + "▁ Appe", + "▁L ac", + "▁La c", + "al len", + "all en", + "alle n", + "os ity", + "osi ty", + "▁consult ation", + "▁T i", + "▁er ano", + "▁era no", + "▁eran o", + "▁lo vers", + "▁love rs", + "▁lov ers", + "▁lover s", + "▁уни версите", + "▁virt ue", + "▁view ers", + "M u", + "c ategories", + "▁о пера", + "▁over look", + "▁overl ook", + "▁тер рито", + "▁Oper ations", + "▁Operation s", + "▁ Operations", + "è ve", + "- (", + "▁ Ż", + "je v", + "j ev", + "▁c rist", + "▁cr ist", + "▁cris t", + "▁cri st", + "▁мар та", + "▁pro vin", + "▁prov in", + "product ion", + "produ ction", + "prod uction", + "p roduction", + "▁T all", + "▁Tal l", + "▁Ta ll", + "Requ ests", + "Request s", + "▁t iles", + "▁til es", + "▁tile s", + "▁ti les", + "ref lect", + "▁ar gc", + "▁arg c", + "▁ argc", + "▁t emplates", + "▁templ ates", + "▁template s", + "▁ templates", + "AR B", + "A RB", + "▁weiter e", + "▁weit ere", + ")? ;", + ") ?;", + "▁t oll", + "▁to ll", + "▁correspond ence", + "$ ;", + "L T", + "▁t am", + "▁ta m", + "de cess", + "dec ess", + "built in", + "da sh", + "das h", + "d ash", + "ze nie", + "zen ie", + "▁mole cular", + "▁chem icals", + "▁chemical s", + "▁rend ering", + "▁render ing", + "▁Sing les", + "▁Sin gles", + "▁Single s", + "Init ialized", + "Initial ized", + "Initialize d", + "▁Mar tha", + "▁Mart ha", + "ri ere", + "rie re", + "rier e", + "r iere", + "par agraph", + "para graph", + "as ters", + "ast ers", + "aster s", + "aste rs", + "a sters", + "▁dec ides", + "▁decide s", + "▁decid es", + "▁Flor ence", + "▁Flo rence", + "▁Floren ce", + "▁And ers", + "▁An ders", + "мо й", + "▁a pt", + "▁ap t", + "▁ apt", + "▁affili ate", + "ch el", + "che l", + "c hel", + "▁re vision", + "▁rev ision", + "Pat ch", + "P atch", + "▁fi scal", + "▁fis cal", + "wi ę", + "w ię", + "N ational", + "▁depend encies", + "TRAN S", + "TRA NS", + "▁r ack", + "▁rac k", + "▁ra ck", + "sel ling", + "s elling", + "na issance", + "c atalog", + "Sh ip", + "S hip", + "IM AGE", + "I MAGE", + "'] [", + "' ][", + "▁p rv", + "▁pr v", + "▁F en", + "▁Fe n", + "▁rad ar", + "▁ra dar", + "cond itions", + "condition s", + "▁Quest ions", + "▁Question s", + "▁v ivid", + "▁vi vid", + "▁viv id", + "op f", + "o pf", + "FA CE", + "F ACE", + "ry s", + "r ys", + "Ex tract", + "Ext ract", + "Extra ct", + "il ians", + "ili ans", + "ilia ns", + "pl ug", + "▁a té", + "▁at é", + "и л", + "▁like wise", + "▁L il", + "▁Li l", + "▁Cam peonato", + "AUT O", + "AU TO", + "▁M eta", + "▁Me ta", + "▁Met a", + "▁ Meta", + "re no", + "ren o", + "r eno", + "▁Trans fer", + "▁ Transfer", + "▁Mich elle", + "▁Michel le", + "▁Miche lle", + "bi s", + "b is", + "ń st", + "зо н", + "з он", + "▁C ultural", + "com pass", + "comp ass", + "▁my sql", + "▁ mysql", + "▁cancel led", + "▁cancell ed", + "▁ ’", + "to o", + "t oo", + "▁re bell", + "▁reb ell", + "▁rebel l", + "ég e", + "é ge", + "os z", + "o sz", + "▁com poser", + "▁comp oser", + "▁compos er", + "}\" )", + "} \")", + "▁des erves", + "▁deserve s", + "▁oh ne", + "▁J ed", + "▁Je d", + "K ernel", + "▁pract ition", + "▁in door", + "▁ind oor", + "▁config urations", + "▁configuration s", + "▁m eth", + "▁me th", + "▁met h", + "+ (", + "Quest ion", + "▁bl own", + "▁blo wn", + "▁blow n", + ") '", + "▁Ar gs", + "▁Arg s", + "▁ Args", + "F ake", + "▁d even", + "▁de ven", + "▁dev en", + "istrz ost", + "na io", + "▁\" {", + "▁L it", + "▁Li t", + "com ed", + "co med", + "come d", + "c omed", + "▁st am", + "▁sta m", + "▁pl ugins", + "▁plugin s", + "▁plug ins", + "▁ plugins", + "▁travel ling", + "▁trav elling", + "na ire", + "n aire", + "▁aut onom", + "▁auto nom", + "STRU CT", + "n h", + "né es", + "née s", + "n ées", + "▁consider ably", + "ко р", + "к ор", + "B G", + "▁lad der", + "▁h ast", + "▁has t", + "▁ha st", + "iz ado", + "iza do", + "▁s ele", + "▁se le", + "▁sel e", + "▁W ere", + "▁We re", + "▁Wer e", + "ar don", + "ard on", + "ardo n", + "B ank", + "bund le", + "b undle", + "▁anticip ated", + "▁C ot", + "▁Co t", + "▁else if", + "▁ elseif", + "▁Bl ues", + "▁Blue s", + "▁fil tered", + "▁filter ed", + "▁a uction", + "▁au ction", + "ed uc", + "edu c", + "e duc", + "▁Ex pression", + "▁Express ion", + "▁Exp ression", + "▁ Expression", + "in x", + "i nx", + "▁s ucks", + "▁su cks", + "▁suc ks", + "▁suck s", + "▁ма я", + "EL L", + "E LL", + "ющи й", + "▁Hud son", + "it ä", + "на ми", + "▁fem me", + "in ho", + "▁e vt", + "▁ev t", + "▁ evt", + "istribut ions", + "istribution s", + "▁r uss", + "▁ru ss", + "▁rus s", + "▁pet ition", + "▁petit ion", + "▁г ла", + "▁ гла", + "Si g", + "S ig", + "▁T ut", + "▁Tu t", + "Part ial", + "Ent ities", + "▁b ears", + "▁be ars", + "▁bear s", + "▁h ollow", + "▁hol low", + "__ [\"", + "▁R is", + "ț ă", + "dim s", + "di ms", + "d ims", + "▁compl ained", + "▁complain ed", + "▁m apped", + "▁map ped", + "▁ma pped", + "▁авгу ста", + "▁initi atives", + "▁initiative s", + "▁own s", + "ch ez", + "che z", + "▁dis pon", + "▁disp on", + "▁m ush", + "▁mus h", + "▁mu sh", + "q s", + "▁er folg", + "▁Nor weg", + "▁c et", + "▁ce t", + "im ag", + "ima g", + "i mag", + "▁исто ри", + "▁ни х", + "▁ них", + "Un til", + "U ntil", + "▁s talk", + "▁st alk", + "▁П ра", + "uv o", + "u vo", + "ie rz", + "ier z", + "ri eben", + "rie ben", + "rieb en", + "X T", + "ic als", + "ical s", + "ica ls", + "std out", + "▁extra cted", + "▁extract ed", + "▁Im ages", + "▁Image s", + "▁ Images", + "un def", + "und ef", + "unde f", + "u ndef", + "▁L é", + "▁accommod ation", + "▁T ouch", + "▁To uch", + "▁ Touch", + "▁intent ions", + "▁intention s", + "▁concent rated", + "▁concentr ated", + "▁concentrate d", + "▁Насе ление", + "▁ut ilis", + "▁util is", + "▁сле д", + "▁ след", + "li f", + "l if", + "▁comp ris", + "▁compr is", + "▁с бор", + "med ium", + "medi um", + "St ates", + "State s", + "Stat es", + "▁Би ография", + "▁Fa ith", + "U A", + "ADD RESS", + "▁r ated", + "▁rate d", + "▁rat ed", + "▁ra ted", + "▁ rated", + "▁R ena", + "▁Re na", + "▁Ren a", + "▁C ache", + "▁Ca che", + "▁ Cache", + "▁pe que", + "▁un used", + "▁unus ed", + "▁ unused", + "ni m", + "n im", + "ol ding", + "old ing", + "▁N r", + "R ay", + "ur ls", + "url s", + "▁em issions", + "▁emission s", + "I r", + "▁m å", + "be ar", + "b ear", + "▁L ub", + "▁Lu b", + "▁Out side", + "min ded", + "mind ed", + "▁PRO VID", + "▁s ó", + "▁civil ian", + "Find er", + "Fin der", + "Fi nder", + "F inder", + "▁achie ving", + "mod ified", + "la ne", + "lan e", + "l ane", + "Se nder", + "Send er", + "S ender", + "▁Cr ime", + "▁Crim e", + "REQ UI", + "▁open ly", + "▁Belg ium", + "ic ity", + "ici ty", + "icit y", + "i city", + "▁M az", + "▁Ma z", + "▁st agger", + "▁stag ger", + "}} $,", + "}}$ ,", + "} }$,", + "na te", + "nat e", + "n ate", + "'' '", + "' ''", + "▁Ge off", + "ll i", + "l li", + "Su ite", + "▁D istribution", + "▁я кий", + "Com bo", + "Comb o", + "ho oks", + "hook s", + "▁F ight", + "▁Fig ht", + "▁Fi ght", + "Set s", + "Se ts", + "S ets", + "▁m k", + "▁ mk", + "▁gu ides", + "▁guide s", + "▁guid es", + "▁princip ale", + "▁principal e", + "Pre ferences", + "ti ny", + "t iny", + "ap pen", + "app en", + "appe n", + "a ppen", + "▁ru ined", + "▁ruin ed", + "▁sl iding", + "▁slid ing", + "▁Z en", + "▁Ze n", + "▁oct ubre", + "pos er", + "po ser", + "pose r", + "p oser", + "▁F lag", + "▁Fl ag", + "▁ Flag", + "▁b oom", + "▁bo om", + "▁Det ect", + "▁activ ation", + "▁обра зова", + "▁entertain ing", + "▁entert aining", + "▁protect ive", + "ál l", + "á ll", + "▁Fl ash", + "▁mid st", + "▁mi dst", + "ствен ной", + "▁Ph D", + "ij ing", + "iji ng", + "cl ub", + "get C", + "▁tro uve", + "▁trou ve", + "am bers", + "amb ers", + "amber s", + "▁g reed", + "▁gr eed", + "▁gre ed", + "am arin", + "ama rin", + "amar in", + "▁suspic ious", + "▁susp icious", + "▁dep uty", + "▁deput y", + "as per", + "asp er", + "▁fun ded", + "▁fund ed", + "al one", + "alo ne", + "▁t ract", + "▁tr act", + "▁tra ct", + "▁ tract", + "▁R ating", + "▁Ra ting", + "▁Rat ing", + "ad ays", + "ada ys", + "a days", + "▁st att", + "▁stat t", + "▁sta tt", + "▁Priv acy", + "▁_ _(", + "▁__ (", + "▁ __(", + "▁f ights", + "▁fight s", + "á j", + "\\ ]", + "ag h", + "a gh", + "or na", + "orn a", + "▁Diam ond", + "▁pro totype", + "▁proto type", + "▁prot otype", + "▁ prototype", + "▁Str ateg", + "ha do", + "had o", + "h ado", + "▁l ungs", + "▁lung s", + "▁lun gs", + "Pro totype", + "Proto type", + "ließ lich", + "▁d ive", + "▁di ve", + "▁div e", + "co v", + "c ov", + "▁M ist", + "▁Mi st", + "▁Mis t", + "▁T ypes", + "▁Type s", + "▁Ty pes", + "▁Typ es", + "▁ Types", + "▁di agonal", + "▁p review", + "▁pre view", + "▁prev iew", + "▁ preview", + "▁Cont ainer", + "▁ Container", + "DESC RIP", + "▁brit ann", + "▁C ord", + "▁Co rd", + "▁Cor d", + "ak ov", + "ako v", + "a kov", + "▁far ming", + "▁farm ing", + "▁p ère", + "▁k ills", + "▁kill s", + "▁kil ls", + "▁Car ib", + "▁Ca rib", + "ћ и", + "▁А л", + "? ;", + "▁пи са", + "▁ писа", + "▁En sure", + "par sed", + "parse d", + "pars ed", + "än ge", + "äng e", + "▁D elta", + "▁Del ta", + "▁ Delta", + "▁g aining", + "▁gain ing", + "▁ga ining", + "▁n oting", + "▁not ing", + "▁no ting", + "▁B arb", + "▁Bar b", + "▁Ba rb", + "▁фев ра", + "▁фе вра", + "Em p", + "E mp", + "▁{ })", + "▁{} )", + "▁ {})", + "▁sy ntax", + "▁syn tax", + "▁synt ax", + "W alk", + "▁P ere", + "▁Per e", + "▁Pe re", + "Is Null", + "▁U V", + "▁ UV", + "▁ret val", + "▁ retval", + "▁sim plicity", + "▁simpl icity", + "▁rein force", + "Lin q", + "▁diff usion", + "▁dis orders", + "▁disorder s", + "ât re", + "â tre", + "ui ty", + "uit y", + "u ity", + "▁hel pless", + "▁help less", + "Me asure", + "▁com pression", + "▁comp ression", + "▁compr ession", + "▁compress ion", + "▁Co al", + "olut ely", + "olute ly", + "og ue", + "o gue", + "▁up ward", + "▁Block ly", + "▁b ride", + "▁br ide", + "parse Int", + "▁is olation", + "▁isol ation", + "▁regul atory", + "ș ti", + "ric ane", + "м б", + "▁с ло", + "▁ сло", + "▁sa lad", + "▁sal ad", + "we i", + "w ei", + "▁B asket", + "▁Bas ket", + "▁M ON", + "▁MO N", + "▁ MON", + "\"> &", + "\" >&", + "do ors", + "door s", + "▁K ill", + "▁Kil l", + "▁Ki ll", + "▁conspir acy", + "▁M iles", + "▁Mil es", + "▁Mi les", + "wa nt", + "wan t", + "w ant", + "Mod ifier", + "▁batter ies", + "▁batt eries", + "iv as", + "iva s", + "i vas", + "▁att endance", + "▁attend ance", + "▁AUT H", + "▁AU TH", + "▁ AUTH", + "▁с ві", + ".. .,", + "... ,", + "▁aggreg ate", + "▁de struct", + "▁dest ruct", + "▁four teen", + "▁м ет", + "▁ме т", + "▁ мет", + "▁both ered", + "▁bother ed", + "el te", + "elt e", + "e lte", + "▁m ism", + "▁mis m", + "▁mi sm", + "▁res ting", + "▁rest ing", + "▁P ars", + "▁Par s", + "▁Pa rs", + "▁ Pars", + "▁id le", + "▁ idle", + "▁d eren", + "▁de ren", + "▁der en", + "▁dere n", + "▁di ary", + "▁dia ry", + "▁v ague", + "▁va gue", + "▁vag ue", + "▁margin al", + "▁marg inal", + "Wr it", + "W rit", + "Bo t", + "B ot", + "▁Met ro", + "▁e arning", + "▁earn ing", + "▁ear ning", + "hist oire", + "his toire", + "▁end orse", + "▁be ard", + "▁bear d", + "▁Chair man", + "ie b", + "i eb", + "▁neut r", + "▁neu tr", + "▁am bit", + "▁amb it", + "▁Leon ard", + "ban ds", + "band s", + "b ands", + "▁D ale", + "▁Da le", + "▁Dal e", + "▁ver ified", + "Al gorithm", + "Enumer able", + "op code", + "cast le", + "cas tle", + "š e", + "▁Venez uela", + "▁de scriptions", + "▁des criptions", + "▁description s", + "▁value d", + "▁val ued", + "▁chapter s", + "▁chap ters", + "▁I ls", + "▁Il s", + "▁cl arity", + "▁clar ity", + "▁tour ists", + "▁tourist s", + "Da n", + "D an", + "▁t ribe", + "▁tr ibe", + "▁tri be", + "▁trib e", + "▁г и", + "▁ ги", + "fol k", + "f olk", + "ac cur", + "acc ur", + "▁St ack", + "▁Sta ck", + "▁ Stack", + "▁adv ocate", + "▁advoc ate", + "▁G ene", + "▁Ge ne", + "▁Gen e", + "Im ages", + "Image s", + "▁rig id", + "▁con greg", + "▁congr eg", + "▁start up", + "▁dead line", + "co uld", + "cou ld", + "c ould", + "▁beg ann", + "▁began n", + "▁cal ci", + "▁calc i", + "▁Cir cle", + "▁Circ le", + "▁in cons", + "▁inc ons", + "▁incon s", + "aaaa aaaa", + "▁rub bed", + "ape ut", + "ua rio", + "uar io", + "u ario", + "worth y", + "wor thy", + "wort hy", + "▁уча сти", + "▁участ и", + "▁fam ília", + "▁synchron ized", + "▁unf air", + "rs p", + "r sp", + "▁soc ieties", + "▁societ ies", + "bo at", + "gr o", + "g ro", + "▁k at", + "▁ka t", + "▁ kat", + "▁p oker", + "▁po ker", + "▁pok er", + "▁l ocks", + "▁loc ks", + "▁lo cks", + "▁lock s", + "▁G F", + "▁ GF", + "▁re conc", + "▁recon c", + "▁Maur ice", + "▁Mau rice", + "__( /*!", + "▁ble eding", + "äs ident", + "▁по след", + "▁после д", + "▁deriv ative", + "ша я", + "cc ió", + "c ció", + "▁cr ushed", + "▁crush ed", + "▁tempor arily", + "▁co aches", + "▁coach es", + "▁Mo vement", + "▁Move ment", + "▁Mov ement", + "}} $.", + "}}$ .", + "} }$.", + "▁K yle", + "▁Ky le", + "▁S ohn", + "▁So hn", + "▁cre ator", + "▁creat or", + "ind ust", + "▁E rik", + "▁Er ik", + "▁se iz", + "▁sei z", + "▁dim ensional", + "▁dimension al", + "▁ dimensional", + "▁I st", + "▁Is t", + "▁pre val", + "▁pr eval", + "▁prev al", + "he ads", + "head s", + "▁про ти", + "▁determ ines", + "▁determine s", + "▁determin es", + "eg y", + "e gy", + "▁U INT", + "▁UI NT", + "▁ UINT", + "▁V olk", + "▁Vol k", + "pa wn", + "p awn", + "Ph oto", + "▁C olin", + "▁Col in", + "▁Co lin", + "ap propri", + "app ropri", + "ort ion", + "st eller", + "stell er", + "É tat", + "▁im ply", + "▁imp ly", + "▁impl y", + "▁t outes", + "▁to utes", + "▁tou tes", + "▁tout es", + "▁toute s", + "VO L", + "V OL", + "an ing", + "ani ng", + "a ning", + "Tool tip", + "ig ious", + "igi ous", + "▁e ternal", + "▁etern al", + "▁P oz", + "▁Po z", + "▁bank rupt", + "▁fail ures", + "▁failure s", + "uer te", + "▁вре ме", + "zu ng", + "z ung", + "▁t cp", + "▁tc p", + "▁ tcp", + "▁cont ainers", + "▁contain ers", + "▁container s", + "ou sel", + "ous el", + "ouse l", + "▁H IV", + "▁con ced", + "▁conc ed", + "▁conce d", + "▁sept iembre", + "gi rl", + "g irl", + "▁C ho", + "▁Ch o", + "▁f az", + "▁fa z", + "▁Up per", + "▁ Upper", + "▁For ces", + "▁Force s", + "äh lt", + "in ject", + "Re ceived", + "MA T", + "M AT", + "ag lia", + "ów nie", + "ówn ie", + "/ '", + "▁p ip", + "▁pi p", + "▁G est", + "▁Ge st", + "▁Ges t", + "▁l ado", + "▁la do", + "▁lad o", + "▁compat ibility", + "▁m are", + "▁mar e", + "▁ma re", + "▁ mare", + "▁Cle arly", + "▁Clear ly", + "vers ation", + "Ver s", + "V ers", + "▁ch ick", + "▁chi ck", + "▁organ ize", + "▁organiz e", + "▁econom ics", + "▁economic s", + "▁ancest ors", + "ME D", + "M ED", + "▁sc rub", + "▁scr ub", + "▁label ed", + "▁lab eled", + "▁п р", + "▁S uz", + "▁Su z", + "▁A str", + "▁As tr", + "▁Ast r", + "allow een", + "allo ween", + "rh s", + "r hs", + "as ci", + "asc i", + "▁C ancer", + "▁Can cer", + "▁H unt", + "▁Hun t", + "▁Hu nt", + "▁switch ing", + "▁R idge", + "Se q", + "S eq", + "▁gi ugno", + "bus iness", + "▁char ming", + "▁charm ing", + "▁I o", + "▁ Io", + "▁prés ident", + "ek ing", + "e king", + "í l", + "en h", + "e nh", + "pr it", + "p rit", + "erc ise", + "án ak", + "á nak", + "▁х ра", + "▁ хра", + "▁b ugs", + "▁bu gs", + "▁bug s", + "▁жи во", + "▁light ning", + "▁never theless", + "▁length s", + "G U", + "H idden", + "Act or", + "Ac tor", + "A ctor", + "To pic", + "Top ic", + "T opic", + "▁H orse", + "▁Hor se", + "ћ е", + "el ines", + "eline s", + "eli nes", + "elin es", + "e lines", + "▁trag edy", + "▁traged y", + "int endo", + "▁abund ance", + "▁ev ac", + "it ably", + "+\\ _\\", + "▁rec ib", + "ua ted", + "uate d", + "u ated", + "рі ї", + "▁fool ish", + "▁foo lish", + "▁t m", + "▁ tm", + "▁des pair", + "▁desp air", + "TO KEN", + "▁comp romise", + "▁comprom ise", + "▁Person en", + "▁Pers onen", + "▁investig ated", + "▁investigate d", + "▁ex clude", + "▁excl ude", + "▁telev is", + "▁tele vis", + "▁pull s", + "▁pul ls", + "▁according ly", + "▁accord ingly", + "▁f ő", + "▁Le ave", + "▁ Leave", + "oper ations", + "operation s", + "cri m", + "cr im", + "c rim", + "▁r hs", + "▁rh s", + "▁ rhs", + "▁form ally", + "▁formal ly", + "▁L ily", + "▁Li ly", + "▁Lil y", + "▁Com ments", + "▁Comm ents", + "▁Comment s", + "▁se ptember", + "▁sept ember", + "ie fs", + "ief s", + "▁tre asure", + "Http Servlet", + "ді в", + "д ів", + "▁dis claimer", + "lu ss", + "l uss", + "▁ка о", + "ro gen", + "rog en", + "r ogen", + "▁Start ing", + "▁Star ting", + "▁d ém", + "▁dé m", + "▁select ing", + "▁ ↘", + "▁О н", + "▁Pract ice", + "▁p orte", + "▁por te", + "▁port e", + "▁ porte", + "▁as sure", + "▁ass ure", + "▁frustr ated", + "S ink", + "▁A ri", + "▁Ar i", + "▁esc ort", + "ais es", + "ai ses", + "aise s", + "a ises", + "▁b ush", + "▁bu sh", + "▁bus h", + "▁Se ine", + "▁F ill", + "▁Fil l", + "▁Fi ll", + "▁ Fill", + "▁S ull", + "▁Su ll", + "▁Sul l", + "Do t", + "D ot", + "vi l", + "v il", + "un ing", + "uni ng", + "u ning", + "Render ing", + "Rend ering", + "sh ake", + "sha ke", + "пи си", + "пис и", + "pt e", + "p te", + "▁b end", + "▁be nd", + "▁ben d", + "▁jewel ry", + "▁Stock holm", + "▁Hon estly", + "! [", + "▁array s", + "▁arr ays", + "▁War ner", + "▁sh aft", + "▁sha ft", + "▁C ann", + "▁Can n", + "▁Ca nn", + "▁Pitt sburgh", + "ir ical", + "iri cal", + "i rical", + "au tre", + "aut re", + "▁R ück", + "▁gen naio", + "▁Ш а", + "an nte", + "ann te", + "annt e", + "ps hire", + "p shire", + "но логи", + "н ологи", + "ét a", + "é ta", + "▁pr inter", + "▁print er", + "▁prin ter", + "▁dam ages", + "▁damage s", + "▁Isa ac", + "▁Famil ie", + "Code s", + "Co des", + "C odes", + "th rift", + "no b", + "n ob", + "▁c av", + "▁ca v", + "▁techn ically", + "▁technical ly", + "▁I mm", + "▁Im m", + "▁tr icks", + "▁tri cks", + "▁trick s", + "EA R", + "E AR", + "▁Sub ject", + "▁ Subject", + "▁ne eding", + "▁need ing", + "▁G ir", + "▁Gi r", + "Bo ard", + "B oard", + "▁re he", + "▁rem inder", + "▁remind er", + "▁sh iver", + "K it", + "▁strugg les", + "▁struggle s", + "▁gen om", + "▁ge nom", + "im il", + "imi l", + "i mil", + "Reg istration", + "▁gl oves", + "▁glo ves", + "▁Z ur", + "▁Zu r", + "▁B eg", + "▁Be g", + "▁in clusive", + "▁incl usive", + "/ ,", + "og an", + "oga n", + "o gan", + "po que", + "cont rib", + "contr ib", + "ши н", + "ш ин", + "▁M ama", + "▁Ma ma", + "▁Mam a", + "print s", + "▁re named", + "▁ren amed", + "ють ся", + "ю ться", + "net dev", + "▁comp ile", + "▁ compile", + "▁ §", + "M UL", + "▁dr aws", + "▁draw s", + "co ck", + "c ock", + "▁сво и", + "▁M um", + "▁Mu m", + "sp ieler", + "spi eler", + "s pieler", + "▁n ail", + "▁na il", + "▁ nail", + "▁trans it", + "▁S aw", + "▁Sa w", + "▁com press", + "▁comp ress", + "▁compre ss", + "▁compr ess", + "▁ compress", + "▁purch ases", + "▁purchase s", + "▁per forms", + "▁perform s", + "▁dem ol", + "▁demo l", + "▁comm ence", + "▁C B", + "▁ CB", + "▁A ber", + "▁Ab er", + "▁c ush", + "▁cu sh", + "▁ком п", + "▁ру ко", + "▁Muham mad", + "▁Net flix", + "▁Environment al", + "No rm", + "N orm", + "▁w ir", + "null ptr", + "▁refuge es", + "до н", + "д он", + "▁B irmingham", + "New s", + "Ne ws", + "▁В се", + "Or ient", + "O rient", + "As sembly", + "▁introdu cing", + "fin der", + "find er", + "fi nder", + "f inder", + "▁scholar ship", + "▁scholars hip", + "▁ос нова", + "▁основ а", + "if a", + "i fa", + "Si ng", + "S ing", + "ib lic", + "ibli c", + "i blic", + "istribut ed", + "istribute d", + "▁depart ments", + "▁department s", + "CR EF", + "CRE F", + "C REF", + "▁Malays ia", + "CO NF", + "CON F", + "▁Cl aud", + "▁Bu ilt", + "▁ Built", + "RAN GE", + "Re direct", + "Red irect", + "LE ASE", + "-- -------", + "---- -----", + "-------- -", + "--- ------", + "----- ----", + "------ ---", + "------- --", + "- --------", + "▁П у", + "▁n umpy", + "▁num py", + "▁project ed", + "▁remind s", + "▁- *-", + "ib ling", + "ibli ng", + "i bling", + "▁s lower", + "▁sl ower", + "▁slow er", + "op p", + "o pp", + "ro pic", + "rop ic", + "r opic", + "▁Mont real", + "▁detect ive", + "TH READ", + "▁qu é", + "▁R osa", + "▁Ro sa", + "▁Ros a", + "▁seven th", + "▁sevent h", + "Col ors", + "Color s", + "de mo", + "dem o", + "▁E sta", + "▁Est a", + "▁Es ta", + "ff f", + "f ff", + "ick ets", + "icket s", + "Gr e", + "G re", + "á b", + "bo ost", + "▁Go ing", + "▁Su ite", + "▁ Suite", + "▁adapt ation", + "▁j ours", + "▁jour s", + "▁jo urs", + "▁jou rs", + "▁ jours", + "▁Or th", + "▁Ort h", + "х і", + "Fig ure", + "▁su pers", + "▁sup ers", + "▁super s", + "▁access ories", + "we ak", + "▁dist ress", + "fr ied", + "f ried", + "▁go og", + "ка з", + "▁far mer", + "▁farm er", + "it ational", + "itation al", + "itat ional", + "Go ld", + "G old", + "▁ass hole", + "▁assh ole", + "▁Cont roller", + "▁Control ler", + "▁ Controller", + "▁ар хи", + "To o", + "T oo", + "▁mol to", + "▁p ropri", + "▁prop ri", + "▁ propri", + "▁al go", + "▁alg o", + "Af f", + "A ff", + "re sc", + "res c", + "r esc", + "▁D y", + "▁con gr", + "▁T es", + "▁Te s", + "▁W IN", + "▁ WIN", + "de serialize", + "des erialize", + "sy n", + "s yn", + "▁chem istry", + "m iddle", + "▁an imated", + "▁anim ated", + "▁K um", + "▁Ku m", + "file Name", + "Amer ica", + "▁dr ums", + "▁dru ms", + "▁drum s", + "▁program a", + "▁n ej", + "▁ne j", + "▁ nej", + "Read Only", + "▁Б ра", + "-- -----", + "---- ---", + "--- ----", + "----- --", + "------ -", + "- ------", + "Mut ex", + "Mu tex", + "un ned", + "unn ed", + "ynam ics", + "ynamic s", + "co system", + "cos ystem", + "▁R ect", + "▁Re ct", + "▁Rec t", + "▁ Rect", + "▁an ime", + "▁anim e", + "▁I BM", + "▁need le", + "es ser", + "ess er", + "esse r", + "▁incl u", + "▁inc lu", + "Le an", + "tr aining", + "tra ining", + "train ing", + "▁b our", + "▁bo ur", + "▁bou r", + "▁ bour", + "ab ases", + "abase s", + "aba ses", + "▁tak że", + "wa rz", + "war z", + "w arz", + "▁ste pping", + "▁step ping", + "▁T IME", + "▁ TIME", + "▁Ein stein", + "▁Log in", + "▁Lo gin", + "▁ Login", + "pon ential", + "ponent ial", + "De ad", + "D ead", + "in str", + "ins tr", + "inst r", + "▁ne ural", + "▁neu ral", + "▁neur al", + "▁ub ic", + "▁Init ialized", + "▁Initialize d", + "▁Initial ized", + "▁ Initialized", + "▁facil itate", + "G D", + "}{ (", + "} {(", + "D ark", + "▁n ag", + "▁na g", + "min ipage", + "Size s", + "Si zes", + "S izes", + "▁w orm", + "▁wor m", + "▁wo rm", + "bi as", + "bia s", + "b ias", + "Su ch", + "S uch", + "wick lung", + "▁sp ouse", + "▁spo use", + "▁surviv ors", + "er st", + "ers t", + "at ype", + "aty pe", + "a type", + "}) $,", + "})$ ,", + "} )$,", + "▁n l", + "▁ nl", + "▁cogn itive", + "▁o nde", + "▁on de", + "▁ onde", + "▁en abling", + "▁soc iet", + "▁soci et", + "▁c lan", + "▁cl an", + "▁ex cluded", + "▁excl uded", + "▁exclude d", + "▁th under", + "▁ent ropy", + "▁entr opy", + "▁fast est", + "RE EN", + "REE N", + "▁Vien na", + "▁fl owing", + "▁flo wing", + "▁flow ing", + "▁aff irm", + "al om", + "alo m", + "▁h ips", + "▁hi ps", + "▁hip s", + "▁can nab", + "▁st icks", + "▁stick s", + "▁cur riculum", + "▁ret ained", + "▁retain ed", + "▁ext ending", + "▁extend ing", + "ó z", + "he aded", + "head ed", + "ex c", + "e xc", + "▁je ho", + "▁for ests", + "▁fore sts", + "▁forest s", + "ma nia", + "man ia", + "m ania", + "▁C anal", + "▁Can al", + "▁Ca nal", + "▁S out", + "▁So ut", + "▁Sou t", + "▁B ahn", + "▁Ba hn", + "▁Bah n", + "▁T EXT", + "▁TE XT", + "▁ TEXT", + "▁др жа", + "▁User s", + "▁Us ers", + "▁Use rs", + "▁ Users", + "▁G EN", + "▁ GEN", + "sl ash", + "ben falls", + "Text Field", + "▁r av", + "▁ra v", + "▁ rav", + "▁continu ously", + "▁continuous ly", + "IT ER", + "ITE R", + "I TER", + "▁Jen ny", + "▁Jenn y", + "ch os", + "cho s", + "c hos", + "▁am big", + "▁amb ig", + "▁ж ур", + "Aut ow", + "Auto w", + "▁V eter", + "▁Ve ter", + "▁dest in", + "H om", + "au ge", + "aug e", + "a uge", + "▁com mod", + "▁comm od", + "▁gar lic", + "< =", + "▁dram atically", + "▁dramatic ally", + "CA N", + "C AN", + "an cers", + "ance rs", + "anc ers", + "ancer s", + "() }", + "( )}", + "gh ai", + "▁tw ee", + "▁twe e", + "▁сент ября", + "GP U", + "G PU", + "▁B omb", + "▁Bo mb", + "▁young est", + "▁c age", + "▁ca ge", + "ok s", + "o ks", + "ic hes", + "ich es", + "iche s", + "i ches", + "▁T ests", + "▁Te sts", + "▁Test s", + "▁Tes ts", + "▁ Tests", + "sk ý", + "cur y", + "cu ry", + "c ury", + "na ls", + "nal s", + "n als", + "ț a", + "▁V oice", + "▁Vo ice", + "Depend ency", + "v f", + "e ous", + "▁Z a", + "▁am ateur", + "▁G host", + "▁Gh ost", + "▁dis ability", + "▁Вла ди", + "▁rev enge", + "▁reven ge", + "Trans lation", + "▁cour tesy", + "ски я", + "▁bl ob", + "▁blo b", + "▁ blob", + "ä ß", + "ó j", + "▁print s", + "▁prin ts", + "▁ prints", + "▁pro ves", + "▁pr oves", + "▁prov es", + "▁prove s", + ">? [<", + "▁ut ils", + "▁util s", + "▁ utils", + "ty pen", + "type n", + "typ en", + "▁t erra", + "▁ter ra", + "▁terr a", + "▁ terra", + "▁min eral", + "▁mine ral", + "▁miner al", + "▁war rior", + "▁ме ст", + "▁D S", + "▁ DS", + "Em b", + "E mb", + "get Data", + "ли чи", + "лич и", + "▁sa fer", + "▁saf er", + "▁safe r", + "▁com une", + "▁comun e", + "▁hier archy", + "Cred entials", + "res se", + "ress e", + "r esse", + "gr av", + "gra v", + "g rav", + "lo gs", + "log s", + "l ogs", + "br os", + "bro s", + "b ros", + "BUT TON", + "lit eral", + "liter al", + "l iteral", + "▁S r", + "an tal", + "ant al", + "anta l", + "▁mer cy", + "▁merc y", + "DA P", + "D AP", + "▁Mag gie", + "▁sust ained", + "▁sustain ed", + "N M", + "Re view", + "Rev iew", + "▁Buen os", + "▁de aler", + "▁deal er", + "en es", + "ene s", + "e nes", + "▁file Name", + "▁ fileName", + "bb ra", + "b bra", + "ро ма", + "ром а", + "Inst all", + "▁Mor ning", + "LE T", + "L ET", + "ip a", + "i pa", + "G a", + "го в", + "г ов", + "▁Sche dule", + "▁ Schedule", + "▁rep orters", + "▁report ers", + "▁reporter s", + "▁pecul iar", + "▁sup plier", + ")$ -", + ") $-", + "ë l", + "▁roll s", + "▁né cess", + "▁p reg", + "▁pre g", + "▁pr eg", + "▁Re yn", + "▁sur render", + "▁contribut ing", + ")+ \\", + ") +\\", + "PRO P", + "PR OP", + "P ROP", + "▁dec imal", + "▁Town ship", + "gr p", + "g rp", + "▁terror ist", + "pt o", + "p to", + "on en", + "one n", + "o nen", + "▁Polit ics", + "▁Pe arl", + "▁Pear l", + "▁pil low", + "▁pill ow", + "▁gr ades", + "▁grad es", + "▁grade s", + "▁gra des", + "▁ grades", + "TH E", + "T HE", + "▁num ero", + "▁numer o", + "▁nu mero", + "i NdEx", + "M igration", + "PE ND", + "P END", + "ph oto", + "▁cent ered", + "▁center ed", + "▁r het", + "▁rh et", + "egr ünd", + "▁laund ry", + "get Node", + "▁est imation", + "▁estim ation", + "▁I v", + "▁wh oles", + "▁who les", + "▁whole s", + "ше ния", + "▁const itutional", + "▁constitution al", + "am ination", + "amin ation", + "▁Municip al", + "ad t", + "a dt", + "th y", + "t hy", + "▁pub li", + "▁di cembre", + "▁dic embre", + "▁dice mbre", + "` )", + "▁Ch rome", + "ef e", + "e fe", + "con g", + "co ng", + "c ong", + "bre aking", + "break ing", + "at ched", + "atch ed", + "es tr", + "est r", + "e str", + "▁i di", + "▁id i", + "▁ idi", + "VER Y", + "V ERY", + "▁app el", + "▁ap pel", + "▁appe l", + "▁Techn ical", + "tc x", + "t cx", + "DO UBLE", + "se k", + "s ek", + "hu ng", + "h ung", + "▁A ur", + "▁Au r", + "coll apse", + "▁adv ise", + "▁advis e", + "▁Pr imary", + "▁Pri mary", + "▁Prim ary", + "▁ Primary", + "ia z", + "i az", + "▁a nten", + "▁an ten", + "▁ant en", + "▁ante n", + "▁ anten", + "▁bro ader", + "▁broad er", + "▁ju nio", + "▁jun io", + "▁juni o", + "▁w ool", + "▁wo ol", + "▁hat red", + "▁ex agger", + "Con v", + "Co nv", + "kt ur", + "▁em peror", + "▁Pack age", + "▁ Package", + "TD M", + "T DM", + "\\{ \\", + "\\ {\\", + "whe el", + "▁fe as", + "▁js ou", + "", + "< ?>", + "INST ANCE", + "▁ch ant", + "▁cha nt", + "▁ chant", + "▁Re fer", + "▁Ref er", + "▁S hir", + "▁Sh ir", + "▁ве ка", + "▁Me eting", + "▁Meet ing", + "▁n v", + "▁ nv", + "▁associ ations", + "▁association s", + "it ations", + "itation s", + "itat ions", + "or um", + "o rum", + "▁t ires", + "▁ti res", + "▁tire s", + "▁tir es", + "▁d ash", + "▁da sh", + "▁das h", + "▁ dash", + "▁} ));", + "▁}) );", + "ar to", + "art o", + "▁Ed inburgh", + "W T", + "▁inv ented", + "▁invent ed", + "ve h", + "v eh", + "▁Hind u", + "▁Насе лення", + "▁ur gent", + "▁urg ent", + "▁urge nt", + "text color", + "we rp", + "wer p", + "▁det ector", + "▁detect or", + "▁al tered", + "▁alt ered", + "▁alter ed", + "▁t b", + "▁ tb", + "▁N aval", + "▁Na val", + "▁Nav al", + "▁mem br", + "style sheet", + "styles heet", + "un ts", + "unt s", + "▁nut rition", + "▁S ylv", + "▁Sy lv", + "▁e numer", + "▁en umer", + "▁enum er", + "▁m ines", + "▁min es", + "▁mi nes", + "▁mine s", + "▁l itter", + "▁lit ter", + "▁litt er", + "ž í", + "con current", + "▁sw allow", + "Si r", + "S ir", + "tal k", + "t alk", + "▁de utschen", + "▁deutsch en", + "re peat", + "▁dom ains", + "▁domain s", + "▁Mc Donald", + "▁cand le", + "▁pl ural", + "▁sharp ly", + "▁shar ply", + "orig ine", + "origin e", + "▁c andy", + "▁can dy", + "▁cand y", + "▁kilomet res", + "▁power ed", + "▁pow ered", + "▁ powered", + "▁s ep", + "▁se p", + "▁ sep", + "▁S oci", + "▁So ci", + "▁Soc i", + "▁Ber nie", + "▁Bern ie", + "GE NER", + "GEN ER", + "Ex per", + "Exp er", + "▁Al low", + "▁All ow", + "▁ Allow", + "▁Ern st", + "▁Re becca", + "▁Cont ribut", + "ro utes", + "rou tes", + "route s", + "r outes", + "▁s uffix", + "▁suff ix", + "▁ju lio", + "▁jul io", + "▁juli o", + "▁provinc ial", + "▁provincia l", + "▁provin cial", + "▁appreci ation", + "Us ing", + "U sing", + "abs olute", + "▁cr icket", + "W ould", + "▁Equip ment", + "▁tort ure", + "на х", + "ut ton", + "utt on", + "че ство", + "▁out break", + "▁prevent ing", + "▁mad re", + "▁ret ire", + "end region", + "▁f ais", + "▁fa is", + "▁remember ing", + "▁Al ban", + "▁Alb an", + "▁a rist", + "▁ar ist", + "▁work out", + "▁u z", + "▁ uz", + "as to", + "ast o", + "a sto", + "fort unate", + "fortun ate", + "▁p aste", + "▁past e", + "▁pas te", + "▁pa ste", + "▁M R", + "▁ MR", + "▁o tra", + "▁ot ra", + "S v", + "an gen", + "ang en", + "ange n", + "▁S ierra", + "▁Si erra", + "▁n au", + "▁na u", + "▁s era", + "▁se ra", + "▁ser a", + "$ ~", + "▁cos ì", + ")( (", + ") ((", + "▁propos als", + "▁proposal s", + "it te", + "itt e", + "▁P ero", + "▁Per o", + "▁Pe ro", + "▁te nant", + "▁ten ant", + "▁ tenant", + "Y P", + "▁Param eter", + "▁ Parameter", + "sp ell", + "spe ll", + "▁e merge", + "▁emer ge", + "▁g ek", + "▁ge k", + "ol ence", + "olen ce", + "ot os", + "oto s", + "o tos", + "▁witness es", + "▁watch es", + "▁wat ches", + "▁A ch", + "▁Ac h", + "Cr oss", + "C ross", + "▁янва ря", + "; }", + "▁O NE", + "▁ON E", + "▁ ONE", + "▁care ers", + "▁career s", + "▁faith ful", + "▁J our", + "▁Jo ur", + "▁Gener ate", + "▁Gene rate", + "▁ Generate", + "▁ию ля", + "▁recommend ation", + "w b", + "sk ich", + "ski ch", + "bold math", + "▁orig ins", + "▁origin s", + "▁spin ning", + "▁// \r", + "▁bomb s", + "▁bom bs", + "min ister", + "I o", + "öl ker", + "Autow ired", + "um per", + "ump er", + "ich ael", + "▁contribut ors", + "▁contributor s", + "▁n asty", + "▁na sty", + "▁nas ty", + "▁nast y", + "▁d rap", + "▁dr ap", + "▁Bud apest", + "ur ious", + "uri ous", + "hi d", + "h id", + "▁wel comed", + "▁welcome d", + "▁w agon", + "▁wa gon", + "▁Ва си", + "▁embarrass ed", + "▁Har vey", + "Lo s", + "L os", + "▁S ter", + "▁St er", + "▁Ste r", + "▁enjoy able", + "ör t", + "ö rt", + "Mill is", + "-- )", + "- -)", + "▁d ashed", + "▁das hed", + "▁dash ed", + "\"> < ?", + "\" >' ,", + "> ',", + "▁all iance", + "ic ism", + "ici sm", + "▁NAS A", + "▁NA SA", + "▁p ode", + "▁po de", + "▁pod e", + "č ní", + "▁respon ding", + "▁respond ing", + "▁bl owing", + "▁blo wing", + "▁blow ing", + "ic ké", + "ick é", + "ва но", + "ван о", + "▁H off", + "▁Ho ff", + "▁Hof f", + "MB ER", + "M BER", + "▁civil ization", + "ar ía", + "a ría", + "Un lock", + "ge ts", + "get s", + "g ets", + "no d", + "n od", + "▁S TE", + "▁ST E", + "▁con science", + "PE G", + "ch anging", + "chan ging", + "▁Rich mond", + "ling ton", + "l ington", + "ocr atic", + "▁trav és", + "▁ф ран", + "▁up dating", + "process ing", + "Al ex", + "A lex", + "▁mil itar", + "▁milit ar", + "▁pse udo", + "▁pseud o", + "str len", + "▁be have", + "▁beh ave", + "▁behav e", + "▁distinct ive", + "▁E c", + "▁c x", + "▁ cx", + "▁journal ists", + "▁journalist s", + "vo lt", + "vol t", + "v olt", + "▁sp un", + "▁d urable", + "▁dur able", + "▁pro position", + "▁propos ition", + "▁ proposition", + "thread s", + "▁tw entieth", + "▁ф і", + "▁ фі", + "en son", + "ens on", + "enso n", + "▁self ish", + "▁sel fish", + "ar ium", + "ari um", + "a rium", + "▁de cid", + "▁dec id", + "▁ха рак", + "▁psy chiat", + "▁psych iat", + "g d", + "Z Z", + "ug u", + "u gu", + "▁i ds", + "▁id s", + "▁ ids", + "Man aged", + "▁Leg isl", + "ancell ationToken", + "▁gr ants", + "▁gran ts", + "▁grant s", + "▁lie utenant", + "▁lieu tenant", + "▁Fle et", + "** /", + "* */", + "▁T ig", + "▁Ti g", + "▁accept s", + "▁system atic", + ", {\\", + "▁У кра", + "▁aus ge", + "▁dial ect", + "▁dia lect", + "st ri", + "str i", + "s tri", + "er me", + "erm e", + "▁B esch", + "▁Be sch", + "▁Bes ch", + "lo ve", + "lov e", + "l ove", + "S ensor", + "▁B IT", + "▁ BIT", + "▁т ру", + "▁mist aken", + "▁mistake n", + "p v", + "▁u tf", + "▁ut f", + "▁ utf", + "▁[ \\", + "▁ [\\", + "▁Geb iet", + "▁Mann schaft", + "PAR AMETER", + "▁u rb", + "▁ur b", + "▁ urb", + "▁R eed", + "▁Re ed", + "▁c ough", + "▁co ugh", + "▁cou gh", + "wa ld", + "wal d", + "w ald", + "▁L amb", + "▁La mb", + "▁Lam b", + "▁surv iving", + "▁surviv ing", + "▁s way", + "▁sw ay", + "▁с ве", + "WI SE", + "ä ger", + "f y", + "sk e", + "s ke", + "▁s og", + "▁so g", + "▁Im plement", + "▁Imp lement", + "▁ Implement", + "获 取", + "▁T ools", + "▁To ols", + "▁Tool s", + "▁Too ls", + "▁ Tools", + "▁ne wer", + "▁new er", + "▁exempl e", + "▁exem ple", + "▁l itt", + "▁li tt", + "▁lit t", + "▁вы пу", + "▁у прав", + "Em itter", + "Emit ter", + "IS ING", + "I SING", + "▁органи за", + "▁М і", + "▁Ex amples", + "▁Example s", + "▁I con", + "▁ Icon", + "Get ter", + "▁L ay", + "▁La y", + "▁Col lect", + "▁Coll ect", + "▁ Collect", + "Sa int", + "S aint", + "or able", + "ora ble", + "▁f ick", + "▁fi ck", + "ik h", + "i kh", + "sl ave", + "▁c lay", + "▁cl ay", + "▁W A", + "▁ WA", + "Re po", + "Rep o", + "▁Java Script", + "it r", + "i tr", + "pa id", + "p aid", + "▁home work", + "M iddleware", + "▁r éal", + "▁ré al", + "▁при зна", + "ê m", + "ès e", + "è se", + "▁W ells", + "▁Well s", + "▁Wel ls", + "▁e nero", + "▁en ero", + "▁ener o", + "emperature n", + "▁N aj", + "▁Na j", + "▁Re agan", + "▁comp elling", + "▁tri bes", + "▁trib es", + "▁tribe s", + "▁to String", + "▁ toString", + "pace s", + "pa ces", + "p aces", + "▁harm ful", + "▁Con se", + "▁Cons e", + "od io", + "odi o", + "▁m im", + "▁mi m", + "get Item", + "▁script s", + "▁ scripts", + "ra is", + "rai s", + "r ais", + "▁Ph ase", + "▁ Phase", + "▁An swer", + "▁$ |\\", + "▁$| \\", + "▁as sembled", + "el in", + "eli n", + "e lin", + "ph abet", + "pha bet", + "▁to ast", + "▁tut ti", + "▁tu tti", + "▁be zeichnet", + "Gre at", + "G reat", + "et tes", + "ett es", + "ette s", + "e ttes", + "▁дека бря", + "F ULL", + "▁re gener", + "▁reg ener", + "▁któ re", + "го р", + "г ор", + "is ce", + "isc e", + "▁t oda", + "▁to da", + "▁tod a", + "▁eth ical", + "i q", + "P t", + "ar in", + "ari n", + "a rin", + "ig os", + "igo s", + "i gos", + "▁work shops", + "▁workshop s", + "▁R oche", + "▁Ro che", + "▁Roc he", + "Get String", + "мини стратив", + "m ême", + "▁D aw", + "▁Da w", + "ar ians", + "ari ans", + "aria ns", + "arian s", + "▁imp acts", + "▁impact s", + "▁por table", + "▁port able", + ")- \\", + ") -\\", + "sh ots", + "shot s", + "▁re lev", + "▁rel ev", + "▁rele v", + "PR IV", + "PRI V", + "▁бу ла", + "ard less", + "ul ously", + "ulous ly", + "-- >", + "- ->", + "ol ent", + "ole nt", + "olen t", + "▁э того", + "▁это го", + "▁Gener ic", + "▁Gene ric", + "▁ Generic", + "▁* /,", + "▁*/ ,", + "▁comb inations", + "▁combination s", + "▁re jo", + "с публи", + "cap acity", + "▁tr aces", + "▁tra ces", + "▁trace s", + "▁op acity", + "▁ opacity", + "▁Off icial", + "ic ion", + "ici on", + "icio n", + "▁emotional ly", + "▁emotion ally", + "▁Jo el", + "▁Joe l", + "сько му", + "▁legend ary", + "▁p am", + "▁pa m", + "▁Tamb ién", + ". <", + "ib a", + "i ba", + "mi dt", + "mid t", + "бо м", + "▁en suite", + "Author ization", + "P ag", + "▁hel met", + "▁ter rito", + "▁terr ito", + "second ary", + "▁seg unda", + "▁W ire", + "▁Wi re", + "rec ated", + "▁inv oked", + "▁invoke d", + "▁Value Error", + "▁ф о", + "▁ фо", + "AL IGN", + "CUR RENT", + "\\ +\\_\\", + "▁comp ilation", + "æ r", + "▁Pal mar", + "▁Palm ar", + "▁influ ences", + "▁influence s", + "/ :", + "M ix", + "NO P", + "N OP", + "ec onom", + "e conom", + "▁t ucked", + "▁} );\r", + "▁}); \r", + "▁}) ;\r", + "▁ });\r", + "AN K", + "re ject", + "▁p ension", + "▁pens ion", + "▁gener ates", + "▁generate s", + "ч ё", + "▁in cap", + "▁inc ap", + "▁cl icked", + "▁click ed", + "▁f us", + "▁fu s", + "our ses", + "ours es", + "ourse s", + "▁E aster", + "▁East er", + "% ;", + "zi n", + "z in", + "▁oblig ations", + "▁obligation s", + "▁T ips", + "▁Tip s", + "▁Ti ps", + "}; \r", + "} ;\r", + ".\" _", + "▁B SD", + "▁BS D", + "át ica", + "▁ex pose", + "▁exp ose", + "▁expos e", + "Par s", + "P ars", + "▁Am anda", + "ку п", + "▁gu essed", + "▁guess ed", + "ds i", + "d si", + "▁Le ip", + "Br oad", + "Bro ad", + "B road", + "▁Hug hes", + "▁Hugh es", + "i é", + "▁W ahl", + "▁Wa hl", + "▁former ly", + "Rel ative", + "▁Y u", + "▁Mount ains", + "▁Mountain s", + "▁E num", + "▁En um", + "▁ Enum", + "▁str ang", + "▁stra ng", + "_ -", + "re cht", + "rec ht", + "vi v", + "v iv", + "pa use", + "p ause", + "▁Lond res", + "▁el bow", + "▁Hawai i", + "▁Cas ino", + "Th reshold", + "Un its", + "Unit s", + "In clude", + "ит о", + "и то", + "as ury", + "▁ste ht", + "▁dam ned", + "▁damn ed", + "▁pack ets", + "▁packet s", + "▁W erk", + "▁Wer k", + "▁elev ator", + "ied ad", + "go vern", + "gov ern", + "g overn", + "▁CONTR ACT", + "ma ls", + "mal s", + "m als", + "▁re mem", + "▁rem em", + "▁ent onces", + "▁v as", + "▁va s", + "▁ vas", + "▁sym pathy", + "▁befind et", + "in cing", + "inc ing", + "Data Set", + "▁add itionally", + "▁addition ally", + "▁additional ly", + "▁mus ician", + "▁music ian", + "ше го", + "▁li stop", + "▁list op", + ">\" )", + "> \")", + "Print f", + "▁Fel ix", + "▁car ved", + "▁nice ly", + "▁nic ely", + "го м", + "ch ap", + "cha p", + "▁N ieder", + "▁Ni eder", + "▁Nie der", + "▁L av", + "▁La v", + "▁mod ifications", + "▁modification s", + "mo ment", + "m oment", + "▁bal con", + "▁depend ency", + "CK ET", + "▁van ished", + "▁f ighters", + "▁fight ers", + "▁fighter s", + "▁z unächst", + "io ctl", + "ioc tl", + "▁def ens", + "▁defe ns", + "▁N em", + "▁Ne m", + "Util ity", + "Ut ility", + "▁cur v", + "▁cu rv", + "▁DA MAGES", + "▁Ro gers", + "▁Rog ers", + "▁Roger s", + "▁grat itude", + "▁Den mark", + "ра я", + "gr pc", + "grp c", + "g rpc", + "▁j uni", + "▁ju ni", + "▁jun i", + "▁окт ября", + "▁imm ense", + "▁prevent ed", + "▁prev ented", + "▁fo am", + "▁Ex tra", + "▁Ext ra", + "▁ Extra", + "ai med", + "aim ed", + "▁C riteria", + "▁Crit eria", + "▁ Criteria", + "▁Sim ply", + "box es", + "▁Leg end", + "▁P layers", + "▁Play ers", + "▁Player s", + "▁Mer cedes", + "▁Merc edes", + "▁Br anch", + "▁ Branch", + "TER N", + "T ERN", + "om ena", + "ome na", + "omen a", + "▁incorpor ate", + "con de", + "co nde", + "cond e", + "c onde", + "▁Est ado", + "▁Esta do", + "▁w asted", + "▁was ted", + "▁wa sted", + "▁waste d", + "▁compl aining", + "▁complain ing", + "▁war riors", + "▁warrior s", + "ot er", + "ote r", + "o ter", + "▁э том", + "▁это м", + "▁con ten", + "▁cont en", + "▁co nten", + "▁machine ry", + "▁mach inery", + "▁techn ological", + "▁T D", + "▁ TD", + "▁g ras", + "▁gr as", + "▁gra s", + "▁minim ize", + "▁D oor", + "▁Do or", + "▁b zw", + "▁p rac", + "▁pr ac", + "▁pra c", + "TR EE", + "T REE", + "▁W ing", + "▁Win g", + "▁Wi ng", + "▁Trans action", + "▁ Transaction", + "▁M VT", + "▁Kle in", + "com mons", + "comm ons", + "common s", + "▁} {", + "▁ }{", + "▁Her itage", + "▁f ade", + "▁fa de", + "ро к", + "set Value", + "▁Wal lace", + "▁Wall ace", + "M X", + "▁A CT", + "▁AC T", + "▁ ACT", + "▁foot age", + "▁ent stand", + "ar ga", + "arg a", + "▁n ails", + "▁na ils", + "▁nail s", + "▁capital ism", + "▁G arc", + "▁Gar c", + "▁Ga rc", + "▁susp ension", + "il is", + "ili s", + "▁M ov", + "▁Mo v", + "uff led", + "uffle d", + "Ar c", + "A rc", + "▁Beaut iful", + "WA Y", + "W AY", + "Par allel", + "XX XX", + "di ag", + "▁D T", + "▁ DT", + "m q", + "Text View", + "ML E", + "M LE", + "en nen", + "enn en", + "enne n", + "▁infect ed", + "▁therap ist", + "IN GS", + "ING S", + "▁c idade", + "ъ н", + "▁p df", + "▁pd f", + "▁ pdf", + "▁b ump", + "▁bu mp", + "CT X", + "C TX", + "▁IN CLUDING", + "▁ INCLUDING", + "▁G ef", + "▁Ge f", + "ENT IAL", + "▁h andy", + "▁hand y", + "▁han dy", + "▁tempor al", + "▁temp oral", + "▁tempo ral", + "At A", + "IS H", + "I SH", + "▁Pat tern", + "▁ Pattern", + "▁l an", + "▁la n", + "▁ lan", + "ep endant", + "▁sh ining", + "id y", + "i dy", + "▁N T", + "▁ NT", + "▁F ran", + "▁Fr an", + "▁Fra n", + "▁nur ses", + "▁nurs es", + "▁nurse s", + "▁bet ray", + "▁sens ible", + "▁апре ля", + "▁' [", + "▁th irteen", + ")} _{", + ") }_{", + "▁No ah", + "INS ERT", + "ist ically", + "istic ally", + "▁Append ix", + "▁re cher", + "▁rec her", + "Re ceiver", + "▁der nier", + "▁derni er", + "л ла", + "ли за", + "▁Part ido", + "▁max imal", + "▁maxim al", + "sn ap", + "▁ча сть", + "▁част ь", + "▁час ть", + "ST OP", + "STO P", + "S TOP", + "▁ult ra", + "▁ul tra", + "▁dévelop p", + "▁t egen", + "▁te gen", + "▁Ч и", + "LI B", + "L IB", + "▁bas eline", + "▁base line", + "re load", + "rel oad", + "▁Ar bitro", + "▁k all", + "▁ka ll", + "c apture", + "Ar m", + "A rm", + "qu in", + "im pse", + "imp se", + "za s", + "z as", + "▁C and", + "▁Can d", + "▁Ca nd", + "▁br ains", + "▁brain s", + "▁bra ins", + "▁host ile", + "▁mar ble", + "oo ns", + "oon s", + "o ons", + "▁L oss", + "▁Los s", + "▁Lo ss", + "Meta Data", + "▁Rep ública", + "▁and ra", + "▁ andra", + "od en", + "ode n", + "o den", + "▁document ed", + "▁M oses", + "▁Mo ses", + "▁Mos es", + "od d", + "o dd", + "▁w ax", + "▁wa x", + "us ch", + "usc h", + "u sch", + "▁diagn osed", + "in kle", + "ink le", + "▁X box", + "▁seven ty", + "▁sevent y", + "ci as", + "cia s", + "c ias", + "▁nov iembre", + "Com pute", + "Comp ute", + "Comput e", + "}) ;\r", + "}); \r", + "} );\r", + "▁Philip pe", + "▁Philipp e", + "▁F ör", + "Le ave", + "▁s age", + "▁sa ge", + "▁sag e", + "▁un pre", + "▁Fort unately", + "▁a post", + "▁ap ost", + "ent ities", + "enti ties", + "▁el los", + "▁ell os", + "author ized", + "GB T", + "G BT", + "▁ins ist", + "▁insp ire", + "▁inspir e", + "Ma ss", + "M ass", + "▁r ôle", + "fe e", + "f ee", + "ip art", + "ipa rt", + "i part", + "це р", + "ц ер", + "un ate", + "una te", + "u nate", + "▁C NN", + ": }", + "▁unh appy", + "▁import ed", + "▁imp orted", + "H IGH", + "ring s", + "rin gs", + "r ings", + "▁In stance", + "▁Inst ance", + "▁ Instance", + "B ay", + "ag les", + "agle s", + "a gles", + "me e", + "m ee", + "ber y", + "be ry", + "b ery", + "▁St ories", + "▁Sto ries", + "▁Ch ase", + "▁Cha se", + "▁car riage", + "▁mis under", + "▁imag in", + "p w", + "▁M eter", + "▁Me ter", + "▁Met er", + "▁crow ds", + "▁crowd s", + "▁F ame", + "▁Fa me", + "sk ill", + "ski ll", + "s kill", + "▁c omed", + "▁com ed", + "▁co med", + "▁come d", + "▁ comed", + "▁r anch", + "▁ran ch", + "▁l acking", + "▁lack ing", + "▁lac king", + "▁sub mar", + "▁subm ar", + "ia nte", + "ian te", + "iant e", + "i ante", + "▁l anz", + "▁lan z", + "▁слу ж", + "-- ---------", + "---- -------", + "-------- ---", + "--- --------", + "----- ------", + "---------- -", + "------ -----", + "--------- --", + "------- ----", + "- ----------", + "▁ob ten", + "▁obt en", + "▁down stairs", + "Y N", + "rot ation", + "▁J esse", + "▁Jes se", + "▁Jess e", + "$ (\"#", + "▁p uls", + "▁pu ls", + "▁pul s", + "ir ling", + "irl ing", + "▁Sch aus", + "▁Sc haus", + "▁de ployed", + "▁deploy ed", + "▁{ }\",", + "▁{} \",", + "▁Mar vel", + "EN UM", + "E NUM", + "▁Mat hemat", + "▁Math emat", + "▁n n", + "▁ nn", + "com pet", + "comp et", + "k ów", + "bi l", + "b il", + "Wh ich", + "is ine", + "isi ne", + "▁r ude", + "▁ru de", + "▁n iveau", + "▁á rea", + "▁p rès", + "▁pr ès", + "at is", + "ati s", + "▁[... ]", + "fu r", + "f ur", + "om m", + "o mm", + "pack ed", + "p acked", + "ме не", + "мен е", + "м ене", + "script style", + "▁A th", + "▁At h", + "▁d esp", + "▁de sp", + "▁des p", + "elt emperaturen", + "▁tal ents", + "▁talent s", + "oc y", + "o cy", + "▁r aises", + "▁rais es", + "▁raise s", + "▁ra ises", + "LI MIT", + "L IMIT", + "▁editor ial", + "▁edit orial", + "▁An imal", + "▁Anim al", + "dr ive", + "d rive", + "▁рабо та", + "bs s", + "b ss", + "▁S ev", + "▁Se v", + "ep och", + "e poch", + "▁R C", + "▁ RC", + "UN USED", + "▁mand atory", + "( ?:", + "▁B in", + "▁Bi n", + "▁ Bin", + "▁synt hetic", + "▁g own", + "▁go wn", + "▁D ob", + "▁Do b", + "ka p", + "k ap", + "▁har mon", + "▁harm on", + "▁liber ty", + "▁libert y", + "▁R ice", + "▁Ric e", + "▁pray ers", + "▁pra yers", + "▁prayer s", + "▁m ise", + "▁mis e", + "▁mi se", + "▁conf using", + "▁le ap", + "▁arriv es", + "▁arr ives", + "▁arrive s", + "ka mp", + "k amp", + "▁th ats", + "▁that s", + "AC C", + "A CC", + "▁Param eters", + "▁Parameter s", + "▁ Parameters", + "▁о дно", + "▁од но", + "▁B io", + "▁Bi o", + "d ensity", + "▁gl impse", + "FO RE", + "FOR E", + "▁L isten", + "▁List en", + "▁Li sten", + "▁Liste n", + "▁Lis ten", + "▁ Listen", + "Pr ev", + "Pre v", + "P rev", + "}\\ ,\\", + "}\\, \\", + "} \\,\\", + "ку ль", + "▁S EC", + "▁SE C", + "▁ SEC", + "▁expl ored", + "▁explore d", + "▁explo red", + "▁mean time", + "▁meant ime", + "AI L", + "A IL", + "▁W P", + "▁ WP", + "▁r aison", + "▁rais on", + "▁ra ison", + "▁ex iste", + "▁exist e", + "▁l esser", + "▁les ser", + "▁less er", + "▁Valid ate", + "▁ Validate", + "▁ca ution", + "▁caut ion", + "us ta", + "ust a", + "u sta", + "he ading", + "head ing", + "EF F", + "E FF", + ".' \"", + ". '\"", + "▁Gil bert", + "▁lim itation", + "▁limit ation", + "▁ret our", + "▁Common wealth", + "▁gew ann", + "▁miser able", + "▁net working", + "▁network ing", + "▁ott obre", + "▁otto bre", + "▁D ise", + "▁Dis e", + "▁Di se", + "ed ges", + "edge s", + "▁s ede", + "▁se de", + "▁sed e", + "ви ча", + "вич а", + "un iform", + "uni form", + "▁дея тель", + "ir os", + "iro s", + "i ros", + "▁d esen", + "▁de sen", + "▁des en", + "▁p arc", + "▁par c", + "▁pa rc", + "▁R ico", + "▁Ric o", + "N s", + "gu id", + "gui d", + "g uid", + "or io", + "ori o", + "o rio", + "ave length", + "avel ength", + "▁G le", + "▁Gl e", + "ince ton", + "inc eton", + "Am az", + "A maz", + "Con struct", + "Const ruct", + "▁m x", + "▁ mx", + "▁V ern", + "▁Ver n", + "▁Ve rn", + "▁Gener ation", + "▁ Generation", + "J ack", + "ro mag", + "rom ag", + "▁vi agra", + "▁via gra", + "▁P eg", + "▁Pe g", + "▁Up dated", + "▁Update d", + "▁ Updated", + "▁over lap", + "▁overl ap", + "Event Args", + "к ро", + "▁* «", + "▁quest ioned", + "▁question ed", + "So uth", + "S outh", + "not ice", + "▁perman ently", + "▁permanent ly", + "ls t", + "l st", + "fi cie", + "fic ie", + "▁qu ella", + "▁que lla", + "▁quel la", + "▁college s", + "▁colle ges", + "▁colleg es", + "▁disappoint ment", + "▁Lu ft", + "img ur", + "▁trans itions", + "▁transition s", + "▁transit ions", + "▁s eller", + "▁sell er", + "▁sel ler", + "▁ию ня", + "▁O g", + "▁A DD", + "▁AD D", + "▁ ADD", + "▁P ays", + "▁Pa ys", + "▁Pay s", + "COMM AND", + "gr ades", + "grad es", + "grade s", + "gra des", + "▁fe bbra", + "▁C yr", + "▁Cy r", + "▁febbra io", + "et i", + "e ti", + "▁a rom", + "▁ar om", + "▁Cl aude", + "▁Claud e", + "▁UE FA", + "▁жи ве", + "▁Victor ian", + "▁Victoria n", + "ke eping", + "keep ing", + "kee ping", + "ê n", + "▁FIX ME", + "it ime", + "iti me", + "i time", + "ch estr", + "che str", + "ches tr", + "▁Sam sung", + "▁do ctrine", + "▁p ear", + "▁pe ar", + "▁Mediterr anean", + "▁Y a", + "▁v ault", + "▁va ult", + "▁Hist oric", + "▁Histor ic", + "▁se dan", + "▁sed an", + "▁he ated", + "▁heat ed", + "▁polít ica", + "Pro of", + ": {", + "fe m", + "f em", + "▁Frank furt", + "pect ives", + "pective s", + "M G", + "▁E ye", + "da i", + "d ai", + "▁res erves", + "▁reserv es", + "▁reserve s", + "NE R", + "N ER", + "▁tob acco", + "▁frag ments", + "▁fragment s", + "ic c", + "i cc", + "▁b ooth", + "▁bo oth", + "▁boot h", + "▁cru ise", + "▁Test ament", + "co la", + "col a", + "c ola", + "▁Le op", + "▁Leo p", + "▁n oon", + "▁no on", + "▁ noon", + "▁terr ified", + "v b", + "int el", + "inte l", + "al ie", + "ali e", + "a lie", + "▁ver ification", + "yst er", + "ys ter", + "y ster", + "AD ER", + "A DER", + "ch ied", + "chie d", + "chi ed", + "▁data sets", + "▁dat asets", + "▁dataset s", + "▁з і", + "▁ зі", + "▁m iem", + "▁mi em", + "▁mie m", + "ul ates", + "ula tes", + "ulate s", + "▁u uid", + "▁ uuid", + "▁Pict ures", + "▁Picture s", + "▁B rend", + "▁Br end", + "▁Bre nd", + "▁Bren d", + "Bill board", + "▁s tern", + "▁st ern", + "▁ste rn", + "▁ster n", + "▁de nom", + "▁den om", + "▁acc idents", + "▁accident s", + "с ня", + "▁p acking", + "▁pack ing", + "▁pac king", + "ци ја", + "ibli cal", + "iblic al", + "▁Та к", + "▁wh isk", + "▁whis k", + "▁l uego", + "▁lu ego", + "▁rect angle", + "▁ho oks", + "▁hook s", + "▁ hooks", + "▁neg lect", + "▁negl ect", + "▁s ober", + "▁so ber", + "▁sob er", + "pro position", + "Mult iple", + "Multi ple", + ":\" ,", + ": \",", + "▁b apt", + "▁ba pt", + "Par ts", + "Part s", + "P arts", + "▁S election", + "▁Se lection", + "▁Sel ection", + "▁Select ion", + "▁ Selection", + "▁Al pha", + "▁ Alpha", + "we ights", + "weight s", + "ha ll", + "hal l", + "h all", + "со б", + "с об", + "▁l ur", + "▁lu r", + "▁ép oca", + "▁re sted", + "▁r ested", + "▁res ted", + "▁rest ed", + "▁reste d", + "amb igu", + "▁taste s", + "▁tast es", + "amazon aws", + "▁conf ess", + "▁dic iembre", + "▁dici embre", + "im plement", + "impl ement", + "imp lement", + "▁absor ption", + "Ha l", + "H al", + "LE AN", + "▁Z ach", + "▁Za ch", + "▁free ze", + "▁fre eze", + "L BL", + "ST M", + "S TM", + "▁cal c", + "▁ca lc", + "▁ calc", + "={ ()", + "= */", + "▁b t", + "▁ bt", + "Re b", + "R eb", + "▁W ien", + "▁Wi en", + "an ska", + "ans ka", + "ansk a", + "▁s urn", + "▁su rn", + "▁sur n", + "iat ive", + "i ative", + "▁inv ån", + "C Y", + "▁l à", + "am ba", + "amb a", + "le en", + "lee n", + "l een", + "wa hl", + "w ahl", + "▁function ing", + "ți a", + "ț ia", + "get Context", + "ga rt", + "gar t", + "g art", + "▁о бе", + "▁об е", + "Pe n", + "P en", + "vi k", + "v ik", + "Sl ider", + "▁Ac cept", + "▁ Accept", + "Ga p", + "G ap", + "▁J orge", + "SI G", + "S IG", + "▁во с", + "▁го ло", + "▁г оло", + "▁period o", + "ш та", + "▁pat ches", + "▁patch es", + "ко ї", + "är e", + "ä re", + "eng ono", + "li sta", + "list a", + "l ista", + "hor n", + "ho rn", + "h orn", + "▁Com plex", + "▁Comp lex", + "▁ Complex", + "Se nt", + "S ent", + "tr fs", + "▁conv ex", + "▁conve x", + "Gener ation", + "▁міс це", + "com press", + "comp ress", + "▁S ax", + "▁Sa x", + "▁u id", + "▁ui d", + "▁ uid", + "▁Leb ens", + "▁Leben s", + "Com pletion", + "\\| _{", + "\\ |_{", + "in sky", + "ins ky", + "▁sc hon", + "▁sch on", + "▁m asters", + "▁ma sters", + "▁master s", + "▁mas ters", + "▁mast ers", + "in depend", + "inde pend", + "ne ys", + "ney s", + "▁l ied", + "▁li ed", + "▁lie d", + "▁a spir", + "▁asp ir", + "ч ні", + "▁break down", + "▁H arm", + "▁Har m", + "▁Ha rm", + "▁design ing", + "h f", + "▁Ang ela", + "▁Angel a", + "▁con fer", + "▁conf er", + "▁part ido", + "▁parti do", + "▁inter ference", + "ma o", + "m ao", + "▁absor bed", + "▁absorb ed", + "▁V all", + "▁Val l", + "▁Va ll", + "Error Code", + "▁Publish ing", + "va no", + "van o", + "v ano", + "BIT S", + "BI TS", + "B ITS", + "▁de er", + "▁Camp aign", + "▁g raz", + "▁gr az", + "▁gra z", + "CHAN GE", + "▁f eder", + "▁fe der", + "▁fed er", + "if fe", + "iff e", + "hand ed", + "han ded", + "h anded", + "c q", + "um bing", + "umb ing", + "▁un re", + "▁s iendo", + "▁si endo", + "▁sim pler", + "▁simple r", + "▁simpl er", + "wh y", + "w hy", + "ar ettes", + "are ttes", + "aret tes", + "arette s", + "an st", + "ans t", + "▁h ass", + "▁has s", + "▁ha ss", + "▁Enter prise", + "▁m ois", + "▁mo is", + "▁F o", + "▁уча ст", + "ff en", + "f fen", + "▁MOD ULE", + "▁ MODULE", + "▁activ ated", + "▁activate d", + "▁intern acional", + "▁M ittel", + "deg ree", + "▁от кры", + "▁& (", + "get Property", + "is z", + "i sz", + "ced ure", + "▁en ters", + "▁ent ers", + "▁enter s", + "▁S ally", + "▁Sal ly", + "▁Tr ain", + "▁Tra in", + "▁lo gged", + "▁log ged", + "▁R av", + "▁Ra v", + "▁A void", + "▁Av oid", + "▁K aiser", + "▁Ka iser", + "▁ex pend", + "▁exp end", + "ap hor", + "aph or", + "▁b rass", + "▁br ass", + "▁bra ss", + "▁bras s", + "▁mel od", + "▁att itudes", + "▁attitude s", + "* \"", + "W all", + "▁o we", + "▁ owe", + "▁b amb", + "▁ba mb", + "sh ader", + "sha der", + "ce ster", + "ces ter", + "c ester", + "▁P P", + "▁ PP", + "▁migr ations", + "▁migration s", + "ent ric", + "entr ic", + "▁Set up", + "▁ Setup", + "▁Art ist", + "hr e", + "h re", + "▁pol ite", + "▁polit e", + "ah an", + "aha n", + "a han", + "▁lug lio", + "▁pre decess", + "▁S IG", + "▁SI G", + "▁ SIG", + "ті в", + "т ів", + "▁R F", + "▁ RF", + "▁D ry", + "▁Dr y", + "▁m aker", + "▁make r", + "▁ma ker", + "▁ maker", + "ши м", + "ш им", + "▁S ounds", + "▁Sound s", + "▁implement ing", + "▁a h", + "▁ ah", + "▁g ev", + "▁ge v", + "▁du plicate", + "▁L ogan", + "▁Log an", + "▁Lo gan", + "▁G rade", + "▁Gr ade", + "▁Grad e", + "▁Gra de", + "DU CT", + "ís es", + "í ses", + "ér t", + "é rt", + "▁nons ense", + "back up", + "Att achment", + "▁e cc", + "▁ec c", + "▁Squad ron", + "le arn", + "lear n", + "de precated", + "dep recated", + "▁A ub", + "▁Au b", + "▁G ol", + "▁Go l", + "▁over l", + "SER VICE", + "▁beautiful ly", + "RE L", + "R EL", + "▁G ian", + "▁Gi an", + "▁P apa", + "▁Pa pa", + "▁Pap a", + "res pond", + "respon d", + "resp ond", + "▁Carib bean", + "r n", + "▁худо ж", + "C fg", + "ra i", + "r ai", + "▁sn iff", + "tt o", + "t to", + "оло ги", + "о логи", + "▁r b", + "▁ rb", + "▁inc idents", + "▁incident s", + "▁d uck", + "▁du ck", + "▁PROVID ED", + "Source s", + "S ources", + "▁Chel sea", + "▁t ek", + "▁te k", + "▁ tek", + "▁на лази", + "▁pil ots", + "▁pilot s", + "т ки", + "▁tr aded", + "▁trad ed", + "▁tra ded", + "▁trade d", + "▁Be ijing", + "▁Greg ory", + "scal ar", + "▁incl ined", + "▁inc lined", + "▁K amp", + "▁Kam p", + "▁Ka mp", + "▁M arian", + "▁Mar ian", + "▁Ma rian", + "▁Maria n", + "▁fier ce", + "▁the ft", + "▁th eft", + "ющи х", + "▁In to", + "▁Int o", + "▁ Into", + "con straint", + "parent Node", + "id ental", + "ident al", + "iden tal", + "▁gouver nement", + "▁S ND", + "▁SN D", + "▁Rub y", + "▁Ru by", + "▁mon aster", + "Rec ords", + "Record s", + "▁K ab", + "▁Ka b", + "▁Un iverse", + "▁Univers e", + "▁approxim ate", + "▁approx imate", + "W ater", + "▁Phys ical", + "ap pers", + "app ers", + "appe rs", + "oubt edly", + "ло жен", + "ложе н", + "▁tow el", + "▁sib lings", + "ep h", + "e ph", + "ic ios", + "ici os", + "icio s", + "ра ми", + "▁out rage", + "▁tamb é", + "SR C", + "S RC", + "те лем", + "тел ем", + "V i", + ".' );", + ". ');", + "L M", + "▁m itt", + "▁mit t", + "▁mi tt", + "▁ mitt", + "▁w eed", + "▁we ed", + "▁cr ops", + "▁cro ps", + "▁crop s", + "im an", + "ima n", + "i man", + "Cl aim", + "ins ula", + "▁( “", + "▁Ch anges", + "▁Change s", + "▁ Changes", + "▁invån are", + "ag ain", + "aga in", + "a gain", + "▁c nt", + "▁ cnt", + "▁G az", + "▁Ga z", + "▁a ustral", + "over lay", + "▁Me chan", + "▁sl ammed", + "▁tr ailing", + "▁tra iling", + "▁trail ing", + "▁Bi ography", + "▁appe aling", + "▁appeal ing", + "IV ER", + "IVE R", + "I VER", + "▁A ve", + "▁Av e", + "▁P lot", + "▁Pl ot", + "vo j", + "v oj", + "▁s ung", + "▁su ng", + "▁sun g", + "▁ sung", + "▁u nos", + "▁un os", + "▁uno s", + "Effect s", + "v v", + "co ok", + "c ook", + "But tons", + "Button s", + "▁trans m", + "ier to", + "iert o", + "CON TEXT", + "CONT EXT", + "▁dign ity", + "air ed", + "ai red", + "aire d", + "a ired", + "java x", + "jav ax", + "j avax", + "▁Albert o", + "▁Alber to", + "▁Rec ently", + "▁Recent ly", + "▁fac ial", + "▁fa cial", + "math op", + "mat hop", + "ał o", + "a ło", + "ви д", + "co tt", + "c ott", + "Vari ables", + "Variable s", + "▁R an", + "▁Ra n", + "▁b unk", + "am iliar", + "amil iar", + "CA ST", + "C AST", + "▁fr ü", + "VE D", + "V ED", + "▁NOT ICE", + "▁turn o", + "▁tur no", + "valid ator", + "▁Portug uese", + "▁question ing", + "}} )", + "} })", + "▁l ear", + "▁le ar", + "▁ lear", + "X amarin", + "▁dis adv", + "enc oded", + "encode d", + "▁K ot", + "▁Ko t", + "ra ted", + "rat ed", + "rate d", + "r ated", + "▁The ory", + "ci us", + "c ius", + "▁Dar win", + "ђ е", + "▁dé cl", + "▁déc l", + "▁обла сть", + "ро вич", + "▁mob ility", + "▁mobil ity", + "V F", + "▁х и", + "▁ хи", + "un til", + "unt il", + "u ntil", + "▁bar riers", + "▁barrier s", + "▁barr iers", + "gi f", + "g if", + "▁R oh", + "▁Ro h", + "▁a ging", + "▁ag ing", + "▁ aging", + "▁W idget", + "▁ Widget", + "ol k", + "▁f arms", + "▁far ms", + "▁farm s", + "Check er", + "Che cker", + "Int roduction", + "с мо", + "▁Russ ians", + "▁Russian s", + "▁Russia ns", + "na ments", + "nam ents", + "nament s", + "n aments", + "▁In sert", + "▁Ins ert", + "▁ Insert", + "▁When ever", + "▁Whe never", + "er set", + "ers et", + "it ori", + "itor i", + "ito ri", + "▁D ort", + "▁Do rt", + "▁Dor t", + "▁cost ume", + "▁mathemat ical", + "▁B ast", + "▁Bas t", + "▁Ba st", + "▁nom inated", + "▁nomin ated", + "▁rest oration", + "pos al", + "po sal", + "▁un fortunate", + "P s", + "LI N", + "L IN", + "▁int act", + "▁prov oc", + "▁situ ée", + "▁но ября", + "er mo", + "erm o", + "▁f isher", + "▁fish er", + "▁fis her", + "г ля", + "▁con ting", + "▁cont ing", + "▁contin g", + "▁Do ug", + "▁Dou g", + "\" ?", + "▁E va", + "▁Ev a", + "▁t ops", + "▁to ps", + "▁top s", + "▁Rem ote", + "▁ Remote", + "▁art work", + "▁art illery", + "qu ick", + "▁Arab ia", + "▁SD Value", + "▁Dak ota", + "ia ted", + "iat ed", + "iate d", + "i ated", + "▁Op tim", + "▁Opt im", + "but tons", + "button s", + "▁c ottage", + "▁where in", + "▁tut orial", + "▁S cre", + "▁Sc re", + "▁swe ep", + "▁Coff ee", + "}) }", + "} )}", + "▁му зы", + "host name", + "▁T emp", + "▁Te mp", + "▁Tem p", + "▁ Temp", + "▁F ut", + "▁Fu t", + "re spect", + "res pect", + "resp ect", + "oc z", + "o cz", + "▁pre domin", + "▁pred omin", + "Ind icator", + "en cial", + "enc ial", + "encia l", + "enci al", + "UM ENT", + "U MENT", + "▁SH ALL", + "▁SHA LL", + "▁comm anded", + "▁command ed", + "▁withdraw al", + "io ur", + "i our", + "REG ION", + "s printf", + "▁в ме", + "▁Pay ment", + "▁ Payment", + "▁A nim", + "▁An im", + "▁ Anim", + "pub lish", + "▁se eks", + "▁see ks", + "▁seek s", + "ou w", + "o uw", + "▁G M", + "▁ GM", + "ru gu", + "rug u", + "r ugu", + "us tain", + "ust ain", + "usta in", + "▁) )", + "▁ ))", + "▁consult ing", + "▁D ialog", + "▁ Dialog", + "▁L ars", + "▁La rs", + "▁Lar s", + "▁crit ique", + "▁circ ulation", + "▁circul ation", + "▁land sc", + "▁lands c", + "man aged", + "▁C raft", + "▁Cr aft", + "▁Cra ft", + "▁h erman", + "▁her man", + "af i", + "a fi", + "am y", + "a my", + "▁disc our", + "▁disco ur", + "<> (", + "< >(", + "▁St eph", + "▁Ste ph", + "▁Step h", + "▁toler ance", + "type name", + "typ ename", + "typen ame", + "vent ions", + "vention s", + "zi ał", + "z iał", + "ст ов", + "сто в", + "с тов", + "▁st icking", + "▁stick ing", + "AS C", + "A SC", + "IS O", + "I SO", + "▁Sp encer", + "▁Di dn", + "▁Did n", + "gom ery", + "im iter", + "imit er", + "imi ter", + "dr u", + "d ru", + "Cl ause", + "▁sl ides", + "▁slide s", + "▁slid es", + "## #", + "# ##", + "▁S ugar", + "▁Su gar", + "H Y", + "▁э ти", + "▁Ed wards", + "▁Edward s", + "▁c ents", + "▁cent s", + "oy a", + "o ya", + "ser ts", + "sert s", + "s erts", + "▁H ass", + "▁Ha ss", + "▁Has s", + "▁in gen", + "▁ing en", + "▁ ingen", + "ст ри", + "с три", + "▁s addle", + "sol id", + "s olid", + "▁ch ampions", + "▁champion s", + "▁champ ions", + "- )", + "▁S lov", + "▁Sl ov", + "▁sh iny", + "▁* )&", + "▁*) &", + "▁Def ine", + "č e", + "▁scr ut", + "on den", + "ond en", + "onde n", + "'\" ,", + "' \",", + "uf fs", + "uff s", + "▁o lymp", + "id ential", + "ident ial", + "wa nd", + "wan d", + "w and", + "▁ann ually", + "▁annual ly", + "▁Ark ansas", + "▁s aint", + "▁sa int", + "▁gle ich", + "▁per fection", + "▁perfect ion", + "▁perf ection", + ") >", + "▁sh orts", + "▁short s", + "▁just ified", + "pe ated", + "peat ed", + "pack ages", + "package s", + "dr iven", + "drive n", + "d riven", + "▁Liber ty", + "▁str ipped", + "▁stri pped", + "▁strip ped", + "ше ние", + "▁fün f", + "▁e cosystem", + "ix a", + "i xa", + "▁F resh", + "▁Fr esh", + "▁Fre sh", + "var t", + "va rt", + "v art", + "▁tre ats", + "▁treat s", + "▁st ance", + "▁stan ce", + "▁ stance", + "чё т", + "ч ёт", + "▁p ity", + "▁pi ty", + "▁pit y", + "ad ém", + "▁о кон", + "▁ок он", + "▁C hand", + "▁Ch and", + "▁Cha nd", + "ra b", + "r ab", + "вши й", + "в ший", + "in ski", + "ins ki", + "▁contin ually", + "▁continu ally", + "▁D addy", + "▁Dad dy", + "▁night mare", + "ic ional", + "ici onal", + "icio nal", + "icion al", + "▁e fect", + "ue blo", + "▁l anç", + "▁lan ç", + "▁Col lections", + "▁Collection s", + "▁Collect ions", + "▁ Collections", + "du e", + "d ue", + "am pton", + "amp ton", + "▁mem cpy", + "▁ memcpy", + "▁* *(", + "▁** (", + "is sent", + "iss ent", + "isse nt", + "issen t", + "▁In sp", + "▁Ins p", + "▁Glas gow", + "▁fur ono", + "▁kind ness", + "B i", + "▁comp eted", + "▁compet ed", + "▁compete d", + "▁o ak", + "L arge", + "▁dis gu", + "▁disg u", + "▁k ings", + "▁king s", + "▁kin gs", + "та ми", + "▁st uffed", + "▁stuff ed", + "▁h ilar", + "▁hi lar", + "pub lished", + "publish ed", + "▁st ressed", + "▁str essed", + "▁stress ed", + "▁Pe ak", + "▁lo ader", + "▁load er", + "▁ loader", + "Key board", + "▁re construction", + "▁v od", + "▁vo d", + "▁ vod", + "▁d un", + "▁du n", + "▁understand s", + "te nant", + "ten ant", + "▁ch aque", + "▁cha que", + "▁pre jud", + "ut at", + "uta t", + "u tat", + "▁u so", + "▁us o", + "▁ uso", + "▁He avy", + "▁cu atro", + "▁side walk", + "▁B ug", + "▁Bu g", + "▁mån aden", + "ge o", + "▁un ited", + "▁unit ed", + "▁F iles", + "▁Fil es", + "▁File s", + "▁Fi les", + "▁ Files", + "▁А ль", + "▁Ал ь", + "▁rug by", + "▁fin ancing", + "▁financ ing", + "▁com ply", + "▁comp ly", + "▁compl y", + "& #", + "▁r ushing", + "▁rush ing", + "▁rus hing", + "▁f en", + "▁fe n", + "▁ fen", + "mon g", + "mo ng", + "m ong", + "▁sp é", + "▁present ing", + "IN CLUDING", + "ě l", + "zeich nung", + "Back up", + "▁pe tit", + "▁pet it", + "▁all erg", + "▁alle rg", + "▁aller g", + "ну т", + "н ут", + "▁wor rying", + "▁worry ing", + "▁m amm", + "▁ma mm", + "▁oper and", + "▁opera nd", + ":%.* ]]", + "▁real ise", + "Comm ands", + "Command s", + "▁B ew", + "▁Be w", + "▁ass umes", + "▁assum es", + "▁assume s", + "▁Co vid", + "▁Cov id", + "▁qu and", + "ty ard", + "t yard", + "▁M ono", + "▁Mon o", + "▁Mo no", + "lin ked", + "link ed", + "M ARK", + "Es p", + "E sp", + "▁bless ing", + "▁eyeb rows", + "▁N V", + "▁ NV", + "▁ст ру", + "▁ стру", + "▁mod eling", + "▁model ing", + "▁mode ling", + "▁gre eted", + "Work space", + "▁pe dest", + "▁ped est", + "▁не за", + "lem agne", + "Stat istics", + "▁a ument", + "▁au ment", + "▁spe eds", + "▁speed s", + "▁synd rome", + "CONNE CT", + "za hl", + "z ahl", + "ver so", + "vers o", + "érc ito", + "▁astr onom", + "▁ap rile", + "▁apr ile", + "▁april e", + "že n", + "ž en", + "ве ро", + "вер о", + "dr aft", + "d raft", + "▁g ioc", + "▁gi oc", + "▁com port", + "▁comp ort", + "▁var iance", + "▁vari ance", + "▁real izing", + "▁realiz ing", + "ED IT", + "оло ві", + "▁e star", + "▁est ar", + "▁es tar", + "▁esta r", + "▁s ost", + "▁so st", + "N ORMAL", + "▁ ó", + "▁And r", + "▁An dr", + "ATTR IB", + "▁re de", + "▁r ede", + "▁red e", + "▁t oes", + "▁to es", + "▁toe s", + "▁adv ances", + "▁advance s", + "▁Again st", + "TO M", + "T OM", + "rs s", + "r ss", + "MM MM", + "▁ne west", + "▁new est", + "▁V ER", + "▁ VER", + "▁phrase s", + "▁phr ases", + "an ter", + "ant er", + "ante r", + "La unch", + "▁c hr", + "▁ch r", + "▁ chr", + "▁manufact ured", + "$) ,", + "$ ),", + "roll ment", + "es ton", + "est on", + "esto n", + "e ston", + "▁pe int", + "” )", + "en det", + "end et", + "ende t", + "▁H air", + "▁Ha ir", + "ival ent", + "▁up right", + "gr en", + "gre n", + "g ren", + "an ked", + "ank ed", + "wr ight", + "w right", + "▁m ast", + "▁ma st", + "▁mas t", + "▁on Change", + "▁de bris", + "▁deb ris", + "▁g rap", + "▁gr ap", + "▁gra p", + "et ry", + "etr y", + "e try", + "▁( __", + "▁(_ _", + "▁ (__", + "▁Com merce", + "BO X", + "T ax", + "▁о три", + "▁от ри", + "▁pre vention", + "▁prevent ion", + "▁prev ention", + "▁Fe el", + "▁ex otic", + "▁B ark", + "▁Bar k", + "▁S team", + "▁Ste am", + "fo n", + "f on", + "ol in", + "oli n", + "o lin", + "▁elim inated", + "▁eliminate d", + "▁b c", + "▁ bc", + "▁C ycl", + "▁Cy cl", + "▁$ (\"#", + "▁ $(\"#", + "▁P arl", + "▁Par l", + "▁Pa rl", + "man uel", + "os pher", + "osp her", + "osph er", + "W F", + "An aly", + "Anal y", + "▁nav ig", + "▁re nown", + "▁ren own", + "R x", + "▁W alt", + "▁Wal t", + "▁Wa lt", + "uf fed", + "uff ed", + "▁f oster", + "▁fo ster", + "▁fost er", + "▁fos ter", + "$ :", + "sh ore", + "Conne ctor", + "Conn ector", + "Connect or", + "фи ка", + "▁real ization", + "▁realiz ation", + "L i", + "ct xt", + "ctx t", + "c txt", + "ah oo", + "aho o", + "▁mir acle", + "▁E T", + "▁ ET", + "▁G PS", + "▁GP S", + "▁Observ able", + "▁h f", + "▁ hf", + "▁magnific ent", + "не го", + "BI N", + "B IN", + "▁D orf", + "▁Do rf", + "▁Dor f", + "ie ck", + "ve e", + "v ee", + "▁C raw", + "▁Cr aw", + "▁Cra w", + "/ #", + "▁p ci", + "▁pc i", + "▁ pci", + "ip pet", + "ipp et", + "▁Hill ary", + "▁g ir", + "▁gi r", + "▁r and", + "▁ran d", + "▁ra nd", + "▁ rand", + "▁la ying", + "▁lay ing", + "▁D ifferent", + "bo ys", + "boy s", + "vi rt", + "vir t", + "v irt", + "▁enc ryption", + "ás z", + "á sz", + "по р", + "п ор", + "▁sm elled", + "▁smell ed", + "▁sus cept", + "cl uded", + "clude d", + "▁C arn", + "▁Car n", + "▁Ca rn", + "ig ten", + "igt en", + "igte n", + "▁Ch uck", + "▁Prov inc", + "▁per í", + "▁Mar shal", + "▁Mars hal", + "▁ Marshal", + "мо ж", + "g fx", + "os hi", + "osh i", + "▁W HE", + "▁WH E", + "▁relax ation", + ", .", + "we re", + "wer e", + "w ere", + "▁var ieties", + "▁W on", + "▁Wo n", + "▁g aps", + "▁gap s", + "▁ga ps", + "▁st ole", + "▁sto le", + "ig ua", + "igu a", + "ющи е", + "▁Ham pshire", + "ph rase", + "▁pel ícula", + "Process ing", + "▁initial ization", + "oust ic", + "▁Jose f", + "▁Jos ef", + "ic ating", + "ica ting", + "▁good ness", + "TE S", + "T ES", + "▁c ope", + "▁co pe", + "▁cop e", + "▁ cope", + "▁ignor ance", + "▁B rist", + "▁Br ist", + "▁par as", + "▁para s", + "▁pa ras", + "▁accident ally", + "▁t and", + "▁tan d", + "▁ta nd", + "it test", + "itt est", + "itte st", + "▁у ли", + "▁sh ipped", + "▁ship ped", + "▁о ст", + "▁ос т", + "else if", + "▁u size", + "▁us ize", + "hor izontal", + "▁C arr", + "▁Car r", + "▁Ca rr", + "▁pre cip", + "▁prec ip", + "ro z", + "r oz", + "path etic", + "pat hetic", + "ri ved", + "riv ed", + "rive d", + "r ived", + "ro k", + "r ok", + "▁dig ging", + "мо м", + "▁M ull", + "▁Mu ll", + "▁Mul l", + "▁X III", + "▁XII I", + "▁XI II", + "▁pe as", + "▁f oul", + "▁fo ul", + "▁fou l", + "▁travel s", + "▁trav els", + "▁N g", + "▁состав е", + "▁соста ве", + "Mon t", + "Mo nt", + "M ont", + "ar de", + "ard e", + "▁Ste fan", + "^^ ^^", + "▁K iss", + "▁Ki ss", + "▁E k", + "▁ok tober", + "▁mem orable", + "▁memor able", + "') ).", + "')) .", + "' )).", + "▁V ision", + "▁Vis ion", + "▁N ina", + "▁Ni na", + "▁Nin a", + "▁S olar", + "▁So lar", + "▁Sol ar", + "▁highlight ed", + "▁me mo", + "▁mem o", + "me isterschaft", + "side bar", + "SE E", + "S EE", + "▁Nev ada", + "D a", + "▁draw er", + "ast ically", + "astic ally", + "el de", + "eld e", + "sc ribed", + "scri bed", + "scribe d", + "scrib ed", + "▁pri ests", + "▁priest s", + "▁hom mes", + "▁homme s", + "▁in structor", + "▁instruct or", + "кла д", + "▁sp ett", + "▁spe tt", + "\\ -", + "▁ми ра", + "▁ мира", + "▁Look s", + "▁Lo oks", + "▁sle eve", + "▁strong est", + "▁t ête", + "▁Nic ole", + "▁Ni cole", + "▁Nicol e", + "im per", + "imp er", + "на ча", + "ip per", + "ipp er", + "▁in won", + "il ers", + "ile rs", + "iler s", + "i lers", + "▁Dep uty", + "og e", + "o ge", + "▁de pressed", + "▁dep ressed", + "▁depress ed", + "▁ar te", + "▁art e", + "▁ arte", + "▁comb ining", + "LA ST", + "L AST", + "in ted", + "int ed", + "inte d", + "▁A verage", + "▁Ave rage", + "▁poll ution", + "▁Phill ips", + "▁W M", + "▁ WM", + "}} }\\", + "}}} \\", + "} }}\\", + "Add ed", + "Ad ded", + "▁per ipher", + "Creat ion", + "C reation", + "▁ital ien", + "▁Ch oice", + "▁Cho ice", + "▁ Choice", + "▁EX PRESS", + "▁St ruct", + "▁Str uct", + "▁ Struct", + "ys z", + "y sz", + "Res ize", + "Re size", + "AR GS", + "ARG S", + "▁re po", + "▁rep o", + "▁ repo", + "▁что бы", + "▁p ref", + "▁pre f", + "▁pr ef", + "▁ pref", + "▁earth qu", + "▁Ме кси", + "▁F inale", + "▁Fin ale", + "▁Final e", + "▁h echo", + "▁he cho", + "requ ests", + "request s", + "C ut", + "▁des erved", + "▁deserve d", + "го во", + "гов о", + "▁Re cent", + "▁Rec ent", + "▁ди визи", + "▁support ive", + "пра ви", + "прав и", + "▁irre levant", + "' \r", + "▁c trl", + "▁ ctrl", + "▁De al", + "iz ada", + "iza da", + "u o", + "▁n ort", + "▁no rt", + "▁nor t", + "ge ometry", + "geo metry", + "▁Individ ual", + "er eg", + "ere g", + "e reg", + "▁при ня", + "cre f", + "cr ef", + "c ref", + "═ ═", + "▁com erc", + "▁come rc", + "= _", + "bu nd", + "b und", + "та х", + "il en", + "ile n", + "i len", + "чи та", + "▁corpor ation", + "es z", + "e sz", + "▁= =>", + "▁== >", + "ab lish", + "abl ish", + "Ap r", + "A pr", + "▁r ipped", + "▁ri pped", + "▁rip ped", + "Var s", + "V ars", + "st ret", + "str et", + "stre t", + "▁Frances co", + "Na N", + "▁any time", + "▁autom ated", + "ost ream", + "o stream", + "▁draw ings", + "▁drawing s", + "▁enhance ment", + "ok rat", + "▁Iss ue", + "в ра", + "Cur rency", + "▁w yn", + "▁wy n", + "izar re", + "ét ico", + "mult iple", + "multi ple", + "multip le", + "▁R ate", + "▁Ra te", + "▁Rat e", + "▁ Rate", + "▁I ch", + "▁A uss", + "▁Aus s", + "▁Au ss", + "▁For mer", + "▁Form er", + "Cur ve", + "▁mar vel", + "att ro", + "attr o", + "▁с п", + "BO OL", + "си я", + "go ld", + "g old", + "▁N intendo", + "▁Salv ador", + "▁S olution", + "▁Sol ution", + "AD C", + "A DC", + "бо ра", + "бор а", + "▁Ben nett", + "▁F R", + "▁ FR", + "▁pu eden", + "▁pued en", + "▁puede n", + "pat ient", + "▁P G", + "▁ PG", + "▁J in", + "▁Ji n", + "▁cr ashed", + "▁crash ed", + "▁d enen", + "▁de nen", + "▁den en", + "▁S ample", + "▁Sam ple", + "▁ Sample", + "▁Que bec", + "it ories", + "itor ies", + "ito ries", + "itori es", + "▁b linked", + "▁blink ed", + "▁l ion", + "▁li on", + "▁vo ce", + "▁voc e", + "▁Imp act", + "▁M au", + "▁Ma u", + "▁N ie", + "▁Ni e", + "▁l ob", + "▁lo b", + "▁д ве", + "or neys", + "orney s", + "orne ys", + "▁coast al", + "▁s ensors", + "▁sens ors", + "▁sensor s", + "▁X II", + "▁XI I", + "▁ill usion", + "oj i", + "o ji", + "▁I NC", + "▁IN C", + "▁Dun can", + "y k", + "▁affect ing", + "pu l", + "p ul", + "▁Napole on", + "▁а каде", + "▁com pt", + "▁comp t", + "▁prof itable", + "▁profit able", + "lo e", + "l oe", + "▁deux ième", + "▁W C", + "▁ WC", + "▁v iable", + "▁vi able", + "▁via ble", + "▁D rug", + "▁Dr ug", + "▁Dru g", + "Text Box", + "▁lum inos", + "au té", + "aut é", + "y c", + "št ě", + "▁affili ates", + "▁affiliate s", + "il da", + "ild a", + "con duct", + "cond uct", + "▁e benfalls", + "▁A MD", + "▁AM D", + "▁Mon itor", + "▁ Monitor", + "▁Compan ies", + "▁correct ed", + "▁corre cted", + "ä ck", + "SY STEM", + "other apy", + "▁п еред", + "▁пере д", + "▁пе ред", + "▁bl ues", + "▁blue s", + "at isf", + "ati sf", + "atis f", + "al though", + "alth ough", + "ro st", + "ros t", + "r ost", + "SC AN", + "S CAN", + "▁R AM", + "ці ональ", + "▁vend ors", + "▁vendor s", + "▁custom s", + "▁cust oms", + "▁activ ate", + "▁ activate", + "▁b logs", + "▁bl ogs", + "▁blo gs", + "▁blog s", + "▁br ace", + "▁bra ce", + "▁ brace", + "▁st rat", + "▁str at", + "▁stra t", + "an je", + "anj e", + "щ ё", + "▁t ide", + "▁tid e", + "▁ti de", + "▁Brig ade", + "get Operand", + "▁al iment", + "▁ali ment", + "▁achieve ments", + "▁achievement s", + "▁suspic ion", + "▁susp icion", + "▁touch down", + "br oad", + "bro ad", + "b road", + "io re", + "ior e", + "i ore", + "Compar ison", + "▁m um", + "▁mu m", + "Eng lish", + "▁P icture", + "▁Pict ure", + "▁M ouse", + "▁Mo use", + "▁ Mouse", + "am d", + "a md", + "▁[ `", + "▁den omin", + "▁denom in", + "▁Al eks", + "▁Ale ks", + "▁pr events", + "▁prevent s", + "▁prev ents", + "ó b", + "fe d", + "f ed", + "▁P ray", + "▁Pr ay", + "▁Pra y", + "▁sh ine", + "▁ shine", + "▁cl utch", + "mu x", + "m ux", + "App ro", + "Ap pro", + "▁not ably", + "ch io", + "chi o", + "na ge", + "n age", + "HA S", + "H AS", + "▁' )", + "▁ ')", + "▁M iche", + "▁Mich e", + "▁Mic he", + "▁Mi che", + "t g", + ":: ~", + "▁am ely", + "▁ro dz", + "▁rod z", + "z s", + "tr ait", + "tra it", + "t rait", + "▁k lass", + "▁kl ass", + "▁ klass", + "f ö", + "▁dest ac", + "▁Cl ara", + "▁Clar a", + "f requency", + "▁G it", + "▁Gi t", + "▁по ль", + "▁пол ь", + "▁frequ encies", + "▁febr ero", + "▁st umbled", + "ко ю", + "▁N ames", + "▁Name s", + "▁Na mes", + "▁Nam es", + "▁ Names", + "▁F light", + "▁Fl ight", + "▁p rey", + "▁pre y", + "▁pr ey", + "▁med io", + "▁medi o", + "▁V AR", + "▁VA R", + "▁ VAR", + "▁F loat", + "▁Flo at", + "▁ Float", + "▁Ern est", + "▁Marc atori", + "op ort", + "o port", + "▁cancel lation", + "▁cancell ation", + "▁Br yan", + "▁Bry an", + "—— ——", + "Lu c", + "L uc", + "▁li bre", + "▁lib re", + "▁t ítulo", + "* >", + "▁S andy", + "▁San dy", + "▁Sand y", + "▁Mar ina", + "Be en", + "B een", + "▁w al", + "▁wa l", + "▁ wal", + "▁K ultur", + "▁expl ode", + "▁explo de", + "▁lim iting", + "▁limit ing", + "▁presum ably", + "▁p b", + "▁ pb", + "▁M erc", + "▁Me rc", + "▁Mer c", + "▁ре ки", + "le arning", + "lear ning", + "learn ing", + "C atalog", + "▁C ensus", + "lt e", + "l te", + "▁N ET", + "▁NE T", + "▁ NET", + "ra ising", + "rais ing", + "rai sing", + "сь ке", + "st aff", + "sta ff", + "▁Qu inn", + "▁mem orial", + "▁memor ial", + "▁memo rial", + "п ня", + "▁cu enta", + "▁X I", + "lb l", + "l bl", + "▁v aries", + "▁var ies", + "▁vari es", + "▁va ries", + "▁fluct uations", + "▁дол ж", + "▁осо би", + "▁ware house", + "How ever", + "▁correct ions", + "▁corre ctions", + "▁correction s", + "dh d", + "d hd", + "▁f als", + "▁fa ls", + "▁fal s", + "▁controvers y", + "▁cur se", + "▁t élé", + "▁té lé", + "ře d", + "ř ed", + "▁A U", + "▁ AU", + "▁т ор", + "▁то р", + "▁ тор", + "▁cr ít", + "id an", + "ida n", + "i dan", + "ili ary", + "iliar y", + "ilia ry", + "▁P anel", + "▁Pan el", + "▁Pa nel", + "▁ Panel", + "cul e", + "cu le", + "c ule", + "▁P oor", + "▁Po or", + "▁B A", + "▁ BA", + "▁ignor ant", + "ème s", + "è mes", + "▁aest hetic", + "Link ed", + "Lin ked", + "get Int", + "Un icode", + "[ @", + "▁Z ent", + "▁Ze nt", + "▁Zen t", + "Man ifest", + "▁v ars", + "▁var s", + "▁va rs", + "▁ vars", + "P B", + "▁в у", + "▁ ву", + "▁De scribe", + "▁Desc ribe", + "▁ Describe", + "▁Any thing", + "oi rs", + "oir s", + "o irs", + "▁s ocks", + "▁so cks", + "▁soc ks", + "▁sock s", + "▁im ped", + "▁imp ed", + "▁ne ue", + "▁neu e", + "▁dis pers", + "▁disp ers", + "Col lect", + "Coll ect", + "file r", + "fil er", + "fi ler", + "f iler", + "▁Fr au", + "▁Fra u", + "▁H ockey", + "▁te ens", + "▁teen s", + "▁Rober to", + "▁Robert o", + "la uf", + "l auf", + "ва ть", + "ват ь", + "▁с ко", + "▁ ско", + "is Array", + "▁teen ager", + "Bu ilt", + "▁loud ly", + "Cap acity", + "▁advent ures", + "▁adventure s", + "▁M olly", + "▁Mol ly", + "rec ogn", + "bar s", + "ba rs", + "b ars", + "▁L or", + "▁Lo r", + "▁pu ò", + "▁m ong", + "▁mon g", + "▁mo ng", + "▁ mong", + "in ement", + "ine ment", + "i nement", + "Ass ignment", + "Assign ment", + "▁d iz", + "▁di z", + "less ness", + "▁H alloween", + "▁bit map", + "▁ bitmap", + "Ro m", + "R om", + "на р", + "н ар", + "▁re bel", + "▁reb el", + "▁rad ial", + "▁radi al", + "me asure", + "ni t", + "n it", + "▁Ass ume", + "▁assign ments", + "▁assignment s", + "▁I sn", + "▁Is n", + "▁al tre", + "▁alt re", + "ße r", + "ß er", + "на ль", + "нал ь", + "н аль", + "▁fl ies", + "▁d roit", + "▁dro it", + "▁thick ness", + "▁en jo", + "▁d well", + "▁dw ell", + "▁hom osexual", + "▁e val", + "▁ev al", + "▁ eval", + "$_ {", + "$ _{", + "as ia", + "asi a", + "▁phil os", + "get Current", + "▁veter ans", + "▁veteran s", + "▁Ber keley", + "▁wild life", + "Co p", + "C op", + "ve rn", + "ver n", + "v ern", + "▁ Ú", + "to s", + "t os", + "▁L ed", + "▁Le d", + "▁key words", + "▁keyword s", + "▁med ications", + "▁medic ations", + "▁medication s", + "ne um", + "▁jam ais", + "▁B uc", + "▁Bu c", + "▁P D", + "▁ PD", + "▁State ment", + "▁Stat ement", + "▁ Statement", + "▁P I", + "▁ PI", + "▁Jack ie", + "▁Jac kie", + "▁ord in", + "▁k ör", + "▁kö r", + "en ze", + "enz e", + "▁util ized", + "▁utiliz ed", + "▁utilize d", + "á ct", + "az ed", + "aze d", + "a zed", + "▁sever ely", + "▁severe ly", + "▁ä ven", + "▁li bro", + "▁lib ro", + "▁E u", + "äs t", + "ä st", + "PAR T", + "PA RT", + "P ART", + "▁But ler", + "▁puzz le", + "F all", + "Count ry", + "C ountry", + "pf n", + "p fn", + "▁у країн", + "▁Or chestra", + "▁al to", + "▁alt o", + "▁anc ora", + "▁decom position", + "▁ م", + "▁appet ite", + "ad u", + "a du", + "▁TH AT", + "▁com enz", + "min a", + "mi na", + "m ina", + "▁init iated", + "▁initi ated", + "▁T at", + "▁Ta t", + "▁some time", + "▁som etime", + "▁somet ime", + "re k", + "r ek", + "br ead", + "bre ad", + "b read", + "▁Stat istics", + "▁ Statistics", + "▁C ob", + "▁Co b", + "F ollow", + "▁ge ometric", + "ш ла", + "▁proceed ings", + "D lg", + "se ven", + "s even", + "▁[ -", + "▁ [-", + "▁Buff alo", + "▁bl acks", + "▁black s", + "▁s ov", + "▁so v", + "▁cust ody", + "▁r as", + "▁ra s", + "▁ ras", + "▁tatto o", + "öffent licht", + "Bl o", + "B lo", + "A ustral", + "▁rec uper", + "ле в", + "л ев", + "▁b em", + "▁be m", + "▁t hou", + "▁th ou", + "ori ented", + "orient ed", + "vi r", + "v ir", + "▁col ony", + "▁colon y", + "▁Stan ford", + "Abs olute", + "ad rat", + "adr at", + "▁S itu", + "▁Si tu", + "▁sou vent", + "EX EC", + "▁m ű", + "▁apart ments", + "▁apartment s", + "▁слу ча", + "▁a no", + "▁an o", + "▁ ano", + "WIN DO", + "ac ci", + "acc i", + "▁L au", + "▁La u", + "co urt", + "cou rt", + "c ourt", + "▁manif old", + "▁coal ition", + "▁X IV", + "▁XI V", + "Att rib", + "Attr ib", + "asc ade", + "▁whe at", + "▁strength s", + "FR EE", + "F REE", + "EMP TY", + "▁h ey", + "▁he y", + "as cular", + "asc ular", + "▁pl asma", + "▁b ob", + "▁bo b", + "Sep arator", + "=\" ${", + "=\"$ {", + "▁Z ag", + "▁Za g", + "▁pro jet", + "▁smooth ly", + "SE QU", + "an aly", + "ana ly", + "anal y", + "att achment", + "attach ment", + "▁E S", + "▁ ES", + "▁po pped", + "▁pop ped", + "ő s", + "to m", + "t om", + "▁s ón", + "▁só n", + "▁r ott", + "▁ro tt", + "▁rot t", + "▁ rott", + "Util ities", + "Ut ilities", + "had oop", + "hado op", + "▁s otto", + "▁so tto", + "au tor", + "aut or", + "auto r", + "▁George s", + "▁Georg es", + "▁kter ý", + "▁gru ppo", + "▁ко гда", + "▁ме да", + "▁instrument al", + "▁W riter", + "▁Write r", + "▁Writ er", + "▁Wr iter", + "▁ Writer", + "▁set Timeout", + "ik k", + "i kk", + "▁Do po", + "▁Dop o", + "]) ;\r", + "]); \r", + "] );\r", + "▁pract icing", + "▁Ron ald", + "▁у би", + "▁ag rees", + "▁agree s", + "▁agre es", + "▁den oted", + "▁denote d", + "is miss", + "ism iss", + "▁interview ed", + "template s", + "t emplates", + "ř i", + "ad ministr", + "admin istr", + "▁B utter", + "▁But ter", + "▁XV II", + "▁XVI I", + "▁position ed", + "▁posit ioned", + "▁Four th", + "▁overwhel med", + "▁Reg ular", + "▁rep rezent", + "коно ми", + "▁expect s", + "Ind ices", + "▁mar ijuana", + "▁z aj", + "▁za j", + "▁B ren", + "▁Br en", + "▁Bre n", + "▁be gg", + "▁beg g", + "▁na hm", + "▁nah m", + "▁inter rog", + "ти е", + "▁B un", + "▁Bu n", + "▁с еред", + "▁се ред", + "▁shel ves", + "▁которы х", + "▁Fra uen", + "▁Frau en", + "▁Serge ant", + "▁у спе", + "mat ched", + "match ed", + "m atched", + "▁d onne", + "▁don ne", + "▁touch es", + "▁tou ches", + "ab ort", + "abor t", + "▁v ale", + "▁val e", + "▁va le", + "▁inst itutional", + "▁institut ional", + "▁institution al", + "▁M ons", + "▁Mon s", + "▁Mo ns", + "▁ambit ious", + "▁non etheless", + "▁none theless", + "j d", + "пе й", + "п ей", + "▁back pack", + "da o", + "d ao", + "ви я", + "▁surround ings", + "▁surrounding s", + "| _{", + "▁g egründ", + "dis p", + "di sp", + "d isp", + "▁moist ure", + "▁w yd", + "▁wy d", + "▁tr aders", + "▁trad ers", + "▁tra ders", + "▁trade rs", + "▁Er st", + "▁Gal axy", + "▁в оло", + "▁во ло", + "▁Per u", + "▁Pe ru", + "▁prior ities", + "▁pron ounced", + "▁C BS", + "▁CB S", + "▁Pal m", + "▁Pa lm", + "▁exp ans", + "▁ener get", + "▁energ et", + "▁Cond ition", + "▁ Condition", + "▁S ver", + "▁Sv er", + "ne sted", + "nes ted", + "n ested", + "▁февра ля", + "he ro", + "her o", + "h ero", + "▁ко ло", + "▁к оло", + "▁ коло", + "▁Fil ms", + "▁Film s", + "Bo n", + "B on", + "é al", + "ploy ed", + "tr ained", + "tra ined", + "train ed", + "▁els ő", + "▁l ust", + "▁lu st", + "ati num", + "atin um", + "oy le", + "o yle", + "▁J et", + "▁Je t", + "жде ния", + "▁survey s", + "▁surve ys", + "be e", + "b ee", + "work ers", + "worker s", + "wor kers", + "rec ords", + "record s", + "cal endar", + "bb ing", + "b bing", + "reg ation", + "dash board", + "d ashboard", + "K ing", + "▁v ista", + "▁vis ta", + "▁vi sta", + "▁dep icted", + "▁occur ring", + "▁о фи", + "▁sand wich", + "rc u", + "r cu", + "ke rn", + "ker n", + "k ern", + "▁min ut", + "▁mi nut", + "▁с мер", + "▁t d", + "▁ td", + "so lete", + "sole te", + "sol ete", + "Com plex", + "Comp lex", + "▁t unn", + "▁tu nn", + "▁tun n", + "▁sc arc", + "▁scar c", + "st ead", + "ste ad", + "▁F ail", + "▁Fa il", + "▁ Fail", + "▁R s", + "▁tr ails", + "▁tra ils", + "▁trail s", + "ke m", + "k em", + "▁Rom ans", + "▁Ro mans", + "▁Roman s", + "▁Roma ns", + "at ivity", + "ativ ity", + "Pre vious", + "Prev ious", + "▁de press", + "▁dep ress", + "▁re signed", + "▁res igned", + "▁resign ed", + "get Default", + "▁Tib et", + "▁Ti bet", + "▁Fr anco", + "▁Franc o", + "▁Fran co", + "\") ));", + "\")) );", + "\" )));", + "▁in jection", + "▁inj ection", + "▁inject ion", + "rem oved", + "remove d", + "▁pra ised", + "▁praise d", + "▁A sc", + "▁As c", + "er ase", + "era se", + "eras e", + "e rase", + "▁commission ed", + "MA IL", + "M AIL", + "▁B oh", + "▁Bo h", + "Pol y", + "Po ly", + "P oly", + "▁cin q", + "▁Ab ove", + "▁Josh ua", + "ZE RO", + "Z ERO", + "▁sum mit", + "▁U rs", + "▁Ur s", + "▁c url", + "▁cur l", + "▁cu rl", + "▁v isa", + "▁vis a", + "▁vi sa", + "▁re sur", + "▁res ur", + "={ '", + "= {'", + "fe at", + "▁abs orb", + "▁absor b", + "▁plan ets", + "▁plane ts", + "▁planet s", + "▁prin cess", + "▁prince ss", + "▁Jahrhund erts", + "▁Jahrhundert s", + "x p", + "▁N BC", + "▁ко ми", + "▁ком и", + "▁F UN", + "▁ FUN", + "▁ne uen", + "▁neu en", + "▁neue n", + "▁dé jà", + "▁O z", + "bb en", + "b ben", + "VID EO", + "▁ej empl", + "▁cons iders", + "▁consider s", + "▁consid ers", + "at ri", + "atr i", + "a tri", + "▁ar rog", + "▁arr og", + "io so", + "ios o", + "i oso", + "▁h ace", + "▁ha ce", + "▁contact ed", + "▁un ple", + "▁spons ored", + "▁tr ainer", + "▁tra iner", + "▁train er", + "sb i", + "s bi", + "▁за нима", + "C riterion", + "но то", + "sch eme", + "sche me", + "enn ial", + "per form", + "perf orm", + "▁fix ing", + "▁по стро", + "▁пос тро", + "ar b", + "a rb", + "EX IT", + "▁ca fé", + "▁caf é", + "itut ed", + "itute d", + "itu ted", + "ri ages", + "ria ges", + "riage s", + "T ur", + "▁hab er", + "▁ha ber", + "el asticsearch", + "▁а л", + "▁ ал", + "r h", + "▁v oll", + "▁vo ll", + "▁vol l", + "CL U", + "M il", + "▁mem bres", + "▁membr es", + "▁membre s", + "▁remark ed", + "ва на", + "ван а", + "в ана", + "=\" _", + "Le ss", + "Les s", + "L ess", + "(\" \");", + "▁Y ale", + "▁Ya le", + "ber ries", + "▁rele asing", + "▁im ports", + "▁import s", + "▁imp orts", + "id ea", + "ide a", + "▁( +", + "▁ar qu", + "ific ación", + "ifica ción", + "▁па ра", + "▁пар а", + "▁R angers", + "▁Range rs", + "▁Rang ers", + "▁Ran gers", + "M ic", + "▁n ederbörd", + "▁imag inary", + "▁imagin ary", + "▁special ists", + "▁specialist s", + "▁ho of", + "Mod ules", + "Module s", + "▁sad ly", + "ce il", + "Tab Index", + "at ionale", + "ation ale", + "ational e", + "▁Part ner", + "tb ody", + "t body", + "▁le verage", + "▁lever age", + "D N", + "▁P rec", + "▁Pr ec", + "▁Pre c", + "▁S é", + "▁M am", + "▁Ma m", + "▁a fin", + "▁af in", + "is Valid", + "Ps e", + "P se", + "▁сто ро", + "▁cho pped", + "▁chop ped", + "▁Min or", + "▁Mi nor", + "▁d abei", + "Da vid", + "D avid", + "uss ia", + "▁дере вня", + "▁Id entity", + "▁Ident ity", + "▁ Identity", + "▁L GBT", + "ци је", + "▁Or ts", + "▁Ort s", + "▁part i", + "▁par ti", + "▁B achelor", + "ug a", + "u ga", + "▁O PT", + "▁OP T", + "▁ OPT", + "▁S eth", + "▁Se th", + "▁Set h", + "▁LI ABLE", + "▁inaug ur", + "▁Shan ghai", + "▁relax ing", + "ци она", + "цион а", + "\" %", + "▁o bey", + "▁ob ey", + "▁A irlines", + "▁Air lines", + "Link s", + "Lin ks", + "L inks", + "▁C elt", + "▁Ce lt", + "▁Cel t", + "▁Ad min", + "▁Adm in", + "▁ Admin", + "ag ation", + "▁wor ries", + "IN TE", + "INT E", + "ar ith", + "ari th", + "Fat alf", + "]] )", + "] ])", + "co lm", + "col m", + "▁arch ae", + "▁br ushed", + "▁brush ed", + "▁t ät", + "▁struct ured", + "▁structure d", + "ти и", + "▁home m", + "▁hom em", + "▁ho mem", + "[: ,", + "▁n avy", + "▁na vy", + "▁nav y", + "get Key", + "power ed", + "pow ered", + "▁s ucked", + "▁suc ked", + "▁suck ed", + "▁z omb", + "▁zo mb", + "iss ant", + "issa nt", + "▁M ight", + "▁Mi ght", + "▁Mig ht", + "▁P ull", + "▁Pu ll", + "▁Pul l", + "ri r", + "r ir", + "▁п і", + "▁ пі", + "▁se as", + "▁sea s", + "▁W rest", + "▁Wr est", + "▁t ense", + "▁ten se", + "▁tens e", + "▁a tm", + "▁at m", + "▁have t", + "▁ha vet", + "▁hav et", + "▁pier ws", + "▁trag ic", + "▁D iff", + "▁Di ff", + "▁ Diff", + "▁conf idential", + "▁confident ial", + "success ful", + "ę ż", + "▁Ch ain", + "▁Cha in", + "▁ Chain", + "▁Ken ya", + "Ch oice", + "oc ur", + "o cur", + "an iu", + "ani u", + "▁consult ant", + "▁Ad vis", + "▁Adv is", + "Li f", + "L if", + "▁L ors", + "▁Lo rs", + "▁Lor s", + "avor ite", + "avo rite", + "▁util izing", + "▁utiliz ing", + "▁v intage", + "Mat cher", + "Match er", + "▁m embre", + "▁me mbre", + "▁mem bre", + "▁membr e", + "▁Ex pect", + "▁Exp ect", + "▁ Expect", + "▁tr acing", + "▁tra cing", + "no g", + "n og", + "▁d ej", + "▁de j", + "▁у че", + "▁lo ops", + "▁loop s", + "▁on click", + "▁G PU", + "▁GP U", + "▁ GPU", + "▁Album s", + "▁Alb ums", + "▁Arch ives", + "ва та", + "ват а", + "▁st ove", + "▁sto ve", + "ш ли", + "an cies", + "anc ies", + "▁geme ente", + "mo b", + "m ob", + "PD F", + "P DF", + "es o", + "e so", + "▁v ég", + "▁vé g", + "Res olve", + "▁te aches", + "▁teach es", + "▁tea ches", + "ло же", + "▁с тво", + "▁ст во", + "▁ ство", + "▁О дна", + "▁f id", + "▁fi d", + "Some thing", + "Som ething", + "▁ne bo", + "▁Valent ine", + "row ning", + "rown ing", + "▁а ле", + "▁ал е", + "aw i", + "a wi", + "is hi", + "ish i", + "▁S PI", + "▁SP I", + "▁ SPI", + "▁s pel", + "▁sp el", + "▁spe l", + "▁б іль", + "▁бі ль", + "▁particip ant", + "▁N ed", + "▁Ne d", + "▁G ast", + "▁Ga st", + "▁Gas t", + "▁bl ond", + "▁blo nd", + "▁s aves", + "▁sa ves", + "▁save s", + "▁sav es", + "col ored", + "color ed", + "colo red", + "▁A CTION", + "▁AC TION", + "▁ACT ION", + "▁ ACTION", + "▁Polit iker", + "}$ )", + "} $)", + "▁D um", + "▁Du m", + "den try", + "d entry", + "Stud ent", + "▁~ =", + "lo ads", + "load s", + "▁F oster", + "▁Fo ster", + "一 个", + "▁P K", + "▁ PK", + "▁S B", + "▁ SB", + "▁H ern", + "▁He rn", + "▁Her n", + "▁Ex hib", + "Listener s", + "Listen ers", + "Su n", + "S un", + "pl ac", + "▁B ever", + "▁Be ver", + "▁Bev er", + "▁incl uy", + "▁inclu y", + "▁d c", + "▁ dc", + "ar gc", + "arg c", + "▁g ed", + "▁ge d", + "▁ ged", + "с па", + "▁Form ula", + "▁с ем", + "▁се м", + "▁em pt", + "▁emp t", + "▁ empt", + "un register", + "▁Queens land", + "ánd ez", + "ot ive", + "oti ve", + "▁al ley", + "▁all ey", + "▁alle y", + "▁Democr at", + "▁trav ail", + "▁$ ,", + "▁ $,", + "R P", + "ро е", + "pers onal", + "person al", + "▁péri ode", + "HO ME", + "om es", + "ome s", + "o mes", + "▁recogn ised", + "he ng", + "hen g", + "h eng", + "▁J ung", + "▁Jun g", + "▁Ju ng", + "▁Ro land", + "▁Rol and", + "▁conv icted", + "Loc ked", + "Lock ed", + "L ocked", + "▁m ari", + "▁mar i", + "▁ma ri", + "▁Lux em", + "refer to", + "De leted", + "Dele ted", + "Delete d", + "Del eted", + "int ent", + "inte nt", + "▁St aats", + "▁Sta ats", + "▁обла сті", + "и т", + "▁са ве", + "▁Pro tocol", + "▁ Protocol", + "ają c", + "ch k", + "Type Info", + "▁p kt", + "▁ pkt", + "▁sc andal", + "▁scan dal", + "▁individ ually", + "▁individual ly", + "FM T", + "F MT", + "▁n j", + "ab ile", + "abil e", + "abi le", + "▁R ivers", + "▁River s", + "PRO PERTY", + "V B", + "wo rt", + "wor t", + "w ort", + "▁split ting", + "▁spl itting", + "ach ten", + "acht en", + "achte n", + "a chten", + "▁AR ISING", + "▁s ip", + "▁si p", + "▁f res", + "▁fr es", + "▁fre s", + "▁g room", + "▁gr oom", + "▁gro om", + "H ol", + "▁c anon", + "▁can on", + "▁ca non", + "▁abrupt ly", + "▁after ward", + "▁R unning", + "▁Run ning", + "▁ Running", + "▁j i", + "▁ ji", + "▁% ,", + "▁ %,", + "▁Palest inian", + "R W", + "pgf scope", + "▁country side", + "▁countr yside", + "▁fort unate", + "▁ fortunate", + "▁c él", + "▁Po inter", + "▁Point er", + "▁ Pointer", + "ens ors", + "ensor s", + "enso rs", + "ra ting", + "rat ing", + "r ating", + "▁buff ers", + "▁buffer s", + "▁buf fers", + "▁re mot", + "▁rem ot", + "▁Prop Types", + "▁N ah", + "▁Na h", + "al tern", + "alt ern", + "alter n", + "▁eas iest", + "▁in vas", + "▁inv as", + "▁cl k", + "▁ clk", + "copy right", + "c opyright", + "▁bl anc", + "SA MP", + "S AMP", + "▁Co hen", + "▁S hell", + "▁She ll", + "▁Sh ell", + "▁Shel l", + "▁ Shell", + "▁destroy ing", + "▁destro ying", + "▁Z el", + "▁Ze l", + "date r", + "da ter", + "dat er", + "d ater", + "če n", + "č en", + "▁f iling", + "▁fil ing", + "▁fi ling", + "▁integr ate", + "xi t", + "x it", + "▁R ET", + "▁RE T", + "▁ RET", + "le ne", + "len e", + "l ene", + "cal ls", + "call s", + "c alls", + "▁sl aughter", + "init ialized", + "initial ized", + "initialize d", + "un ches", + "unch es", + "unc hes", + "▁Tr ace", + "▁Tra ce", + "▁ Trace", + "eff icient", + "▁Wood s", + "▁long itud", + "G N", + "▁K ont", + "▁Kon t", + "▁Ko nt", + "▁chunk s", + "á ch", + "▁unem ployment", + "ac om", + "aco m", + "a com", + "▁sl owed", + "▁slow ed", + "▁out lined", + "▁outline d", + "xff ff", + "xf fff", + "x ffff", + "▁ik ke", + "▁work space", + "▁works pace", + "M c", + "▁k icking", + "▁kick ing", + "▁embed ding", + "ch nitt", + "chn itt", + "er ten", + "ert en", + "▁In terior", + "▁Inter ior", + "▁S ongs", + "▁Son gs", + "▁Song s", + "mm c", + "m mc", + "▁analy zed", + "▁analyze d", + "▁Cou pe", + "▁favor ites", + "▁favorite s", + "▁t t", + "▁ tt", + "▁то й", + "▁ той", + "R outing", + "▁Sil va", + "▁andere m", + "▁ander em", + "▁h onom", + "▁hon om", + "▁ho nom", + "▁исполь зова", + ".\" ]", + ". \"]", + "▁W u", + "le gt", + "leg t", + "▁s poon", + "▁sp oon", + "▁spo on", + "▁j ap", + "▁ja p", + "▁Ext ension", + "▁ Extension", + "er ne", + "ern e", + "▁v agy", + "▁va gy", + "▁vag y", + "▁се ла", + "▁ф унк", + "▁anal ytics", + "▁analyt ics", + "▁s ug", + "▁su g", + "▁A sync", + "▁As ync", + "▁ Async", + "▁pe aks", + "▁peak s", + "▁G ym", + "▁Gy m", + "▁law suit", + "▁laws uit", + "< >", + "ial is", + "i alis", + "et ric", + "etr ic", + "face d", + "fa ced", + "fac ed", + "f aced", + "▁dis rupt", + "▁f å", + "Input s", + "`) ;", + "` );", + "▁M end", + "▁Me nd", + "▁Men d", + "go n", + "g on", + "▁\" ,\"", + "▁\", \"", + "▁ \",\"", + "▁n erves", + "▁nerv es", + "▁nerve s", + "▁ner ves", + "▁doubt s", + "▁doub ts", + "sa p", + "s ap", + "▁s ow", + "▁so w", + ",\\ ,\\", + ",\\, \\", + ", \\,\\", + "▁B S", + "▁ BS", + "▁G lad", + "▁Gl ad", + "▁a ster", + "▁as ter", + "▁ast er", + "▁ aster", + "œuv re", + "▁Bang l", + "▁Ban gl", + "▁i Pad", + "use ppe", + "▁conduct ing", + "▁( {\\", + "▁({ \\", + "▁ ({\\", + "▁Har bor", + "ps z", + "p sz", + "▁FI FA", + "_* *", + "_ **", + "em or", + "e mor", + "▁ ▁", + "▁▁ ▁▁", + "▁▁▁ ▁", + "▁ ▁▁▁", + "▁▁ ▁▁▁▁▁▁", + "▁▁▁▁ ▁▁▁▁", + "▁▁▁▁▁ ▁▁▁", + "▁▁▁▁▁▁ ▁▁", + "▁▁▁ ▁▁▁▁▁", + "▁▁▁▁▁▁▁ ▁", + "▁ ▁▁▁▁▁▁▁", + "▁▁ ▁▁▁", + "▁▁▁▁ ▁", + "▁▁▁ ▁▁", + "▁ ▁▁▁▁", + "▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁", + "▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁", + "▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁", + "▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁", + "▁▁ ▁▁▁▁", + "▁▁▁▁ ▁▁", + "▁▁▁▁▁ ▁", + "▁▁▁ ▁▁▁", + "▁ ▁▁▁▁▁", + "▁▁ ▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁ ▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁ ▁▁▁▁", + "▁▁▁▁▁ ▁▁▁▁▁▁▁", + "▁▁▁▁▁▁ ▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁ ▁▁", + "▁▁▁ ▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁ ▁▁▁", + "▁▁▁▁▁▁▁ ▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁ ▁", + "▁ ▁▁▁▁▁▁▁▁▁▁▁", + "▁▁ ▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁ ▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁ ▁▁▁▁▁", + "▁▁▁▁▁ ▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁ ▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁ ▁", + "▁▁▁▁▁▁▁▁▁▁ ▁▁▁", + "▁▁▁ ▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁ ▁▁▁▁", + "▁▁▁▁▁▁▁ ▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁ ▁▁", + "▁ ▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁ ▁▁▁▁▁▁▁▁", + "▁▁▁▁ ▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁ ▁▁", + "▁▁▁▁▁ ▁▁▁▁▁", + "▁▁▁▁▁▁ ▁▁▁▁", + "▁▁▁ ▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁ ▁", + "▁▁▁▁▁▁▁ ▁▁▁", + "▁ ▁▁▁▁▁▁▁▁▁", + "▁▁ ▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁", + "▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁ ▁▁", + "▁▁▁▁▁▁▁▁▁▁▁▁▁ ▁", + "▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁", + "▁▁▁ ▁▁▁▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁", + "▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁▁ ▁▁▁", + "▁ ▁▁▁▁▁▁▁▁▁▁▁▁▁", + "▁▁ ▁", + "▁ ▁▁", + "▁▁ ▁▁▁▁▁▁▁", + "▁▁▁▁ ▁▁▁▁▁", + "▁▁▁▁▁▁▁▁ ▁", + "▁▁▁▁▁ ▁▁▁▁", + "▁▁▁▁▁▁ ▁▁▁", + "▁▁▁ ▁▁▁▁▁▁", + "▁▁▁▁▁▁▁ ▁▁", + "▁ ▁▁▁▁▁▁▁▁", + "▁▁ ▁▁▁▁▁", + "▁▁▁▁ ▁▁▁", + "▁▁▁▁▁ ▁▁", + "▁▁▁▁▁▁ ▁", + "▁▁▁ ▁▁▁▁", + "▁ ▁▁▁▁▁▁", + "▁▁ ▁▁▁▁▁▁▁▁▁", + "▁▁▁▁ ▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁ ▁▁▁", + "▁▁▁▁▁ ▁▁▁▁▁▁", + "▁▁▁▁▁▁ ▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁▁ ▁", + "▁▁▁ ▁▁▁▁▁▁▁▁", + "▁▁▁▁▁▁▁▁▁ ▁▁", + "▁▁▁▁▁▁▁ ▁▁▁▁", + "▁ ▁▁▁▁▁▁▁▁▁▁" + ] + } +} \ No newline at end of file diff --git a/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/tokenizer.model b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/tokenizer.model new file mode 100644 index 0000000000000000000000000000000000000000..8b443ef19c2a19acc3ac64fb9c3db4a72921dff6 --- /dev/null +++ b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/tokenizer.model @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dadfd56d766715c61d2ef780a525ab43b8e6da4de6865bda3d95fdef5e134055 +size 493443 diff --git a/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/tokenizer_config.json b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/tokenizer_config.json new file mode 100644 index 0000000000000000000000000000000000000000..c33317c5ed2b093ce58875c3a51a5488a5ddb37d --- /dev/null +++ b/models/TheBloke_Toppy-M-7B-GPTQ_gptq-4bit-32g-actorder_True/tokenizer_config.json @@ -0,0 +1,40 @@ +{ + "added_tokens_decoder": { + "0": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "1": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "2": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + } + }, + "additional_special_tokens": [], + "bos_token": "", + "clean_up_tokenization_spaces": false, + "eos_token": "", + "legacy": true, + "model_max_length": 1000000000000000019884624838656, + "pad_token": null, + "sp_model_kwargs": {}, + "spaces_between_special_tokens": false, + "tokenizer_class": "LlamaTokenizer", + "unk_token": "", + "use_default_system_prompt": true +} diff --git a/models/config.yaml b/models/config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5cebb71357909958d3e7742ad1bf6070287b5f10 --- /dev/null +++ b/models/config.yaml @@ -0,0 +1,190 @@ +.*(llama|alpac|vicuna|guanaco|koala|llava|wizardlm|metharme|pygmalion-7b|pygmalion-2|mythalion|wizard-mega|openbuddy|vigogne|h2ogpt-research|manticore): + model_type: 'llama' +.*(opt-|opt_|opt1|opt3|optfor|galactica|galpaca|pygmalion-350m): + model_type: 'opt' +.*(gpt-j|gptj|gpt4all-j|malion-6b|pygway|pygmalion-6b|dolly-v1): + model_type: 'gptj' +.*(gpt-neox|koalpaca-polyglot|polyglot.*koalpaca|polyglot-ko|polyglot_ko|pythia|stablelm|incite|dolly-v2|polycoder|h2ogpt-oig|h2ogpt-oasst1|h2ogpt-gm): + model_type: 'gptneox' +.*bloom: + model_type: 'bloom' +.*gpt2: + model_type: 'gpt2' +.*falcon: + model_type: 'falcon' +.*mpt: + model_type: 'mpt' +.*(starcoder|starchat): + model_type: 'starcoder' +.*dolly-v2: + model_type: 'dollyv2' +.*replit: + model_type: 'replit' +.*(oasst|openassistant-|stablelm-7b-sft-v7-epoch-3): + instruction_template: 'Open Assistant' + skip_special_tokens: false +(?!.*galactica)(?!.*reward).*openassistant: + instruction_template: 'Open Assistant' + skip_special_tokens: false +.*galactica: + skip_special_tokens: false +.*dolly-v[0-9]-[0-9]*b: + instruction_template: 'Alpaca' + skip_special_tokens: false +.*alpaca-native-4bit: + instruction_template: 'Alpaca' + custom_stopping_strings: '"### End"' +.*llava: + instruction_template: 'LLaVA' + custom_stopping_strings: '"\n###"' +.*llava.*1.5: + instruction_template: 'Vicuna-v1.1' +.*wizard.*mega: + instruction_template: 'Wizard-Mega' + custom_stopping_strings: '""' +.*starchat-beta: + instruction_template: 'Starchat-Beta' + custom_stopping_strings: '"<|end|>"' +(?!.*v0)(?!.*1.1)(?!.*1_1)(?!.*stable)(?!.*chinese).*vicuna: + instruction_template: 'Vicuna-v0' +.*vicuna.*v0: + instruction_template: 'Vicuna-v0' +.*vicuna.*(1.1|1_1|1.3|1_3): + instruction_template: 'Vicuna-v1.1' +.*vicuna.*(1.5|1_5): + instruction_template: 'Vicuna-v1.1' +.*stable.*vicuna: + instruction_template: 'StableVicuna' +(?!.*chat).*chinese-vicuna: + instruction_template: 'Alpaca' +.*chinese-vicuna.*chat: + instruction_template: 'Chinese-Vicuna-Chat' +.*alpaca: + instruction_template: 'Alpaca' +.*koala: + instruction_template: 'Koala' +.*chatglm: + instruction_template: 'ChatGLM' +.*(metharme|pygmalion|mythalion): + instruction_template: 'Metharme' +.*raven: + instruction_template: 'RWKV-Raven' +.*moss-moon.*sft: + instruction_template: 'MOSS' +.*stablelm-tuned: + instruction_template: 'StableLM' +.*galactica.*finetuned: + instruction_template: 'Galactica Finetuned' +.*galactica.*-v2: + instruction_template: 'Galactica v2' +(?!.*finetuned)(?!.*-v2).*galactica: + instruction_template: 'Galactica' +.*guanaco: + instruction_template: 'Guanaco non-chat' +.*baize: + instruction_template: 'Baize' +.*mpt-.*instruct: + instruction_template: 'Alpaca' +.*mpt-.*chat: + instruction_template: 'ChatML' +(?!.*-flan-)(?!.*-t5-).*lamini-: + instruction_template: 'Alpaca' +.*incite.*chat: + instruction_template: 'INCITE-Chat' +.*incite.*instruct: + instruction_template: 'INCITE-Instruct' +.*ziya-: + instruction_template: 'Ziya' +.*koalpaca: + instruction_template: 'KoAlpaca' +.*openbuddy: + instruction_template: 'OpenBuddy' +(?!.*chat).*vigogne: + instruction_template: 'Vigogne-Instruct' +.*vigogne.*chat: + instruction_template: 'Vigogne-Chat' +.*(llama-deus|supercot|llama-natural-instructions|open-llama-0.3t-7b-instruct-dolly-hhrlhf|open-llama-0.3t-7b-open-instruct): + instruction_template: 'Alpaca' +.*bactrian: + instruction_template: 'Bactrian' +.*(h2ogpt-oig-|h2ogpt-oasst1-|h2ogpt-research-oasst1-): + instruction_template: 'INCITE-Chat' +.*h2ogpt-gm-: + instruction_template: 'H2O-prompt_answer' +.*manticore: + instruction_template: 'Manticore Chat' +.*bluemoonrp-(30|13)b: + instruction_template: 'Bluemoon' +.*Nous-Hermes-13b: + instruction_template: 'Alpaca' +.*airoboros: + instruction_template: 'Vicuna-v1.1' +.*airoboros.*1.2: + instruction_template: 'Airoboros-v1.2' +.*alpa(cino|sta): + instruction_template: 'Alpaca' +.*hippogriff: + instruction_template: 'Hippogriff' +.*lazarus: + instruction_template: 'Alpaca' +.*guanaco-.*(7|13|33|65)b: + instruction_template: 'Vicuna-v0' +.*hypermantis: + instruction_template: 'Alpaca' +.*open-llama-.*-open-instruct: + instruction_template: 'Alpaca' +.*starcoder-gpteacher-code-instruct: + instruction_template: 'Alpaca' +.*tulu: + instruction_template: 'Tulu' +.*chronos: + instruction_template: 'Alpaca' +.*samantha: + instruction_template: 'Samantha' +.*wizardcoder: + instruction_template: 'Alpaca' +.*minotaur: + instruction_template: 'Manticore Chat' +.*orca_mini: + instruction_template: 'Orca Mini' +.*(platypus|gplatty|superplatty): + instruction_template: 'Alpaca' +.*(openorca-platypus2): + instruction_template: 'OpenOrca-Platypus2' + custom_stopping_strings: '"### Instruction:", "### Response:"' +.*longchat: + instruction_template: 'Vicuna-v1.1' +.*vicuna-33b: + instruction_template: 'Vicuna-v1.1' +.*redmond-hermes-coder: + instruction_template: 'Alpaca' +.*wizardcoder-15b: + instruction_template: 'Alpaca' +.*wizardlm: + instruction_template: 'Vicuna-v1.1' +.*godzilla: + instruction_template: 'Alpaca' +.*llama(-?)(2|v2).*chat: + instruction_template: 'Llama-v2' +.*newhope: + instruction_template: 'NewHope' +.*stablebeluga2: + instruction_template: 'StableBeluga2' +.*openchat: + instruction_template: 'OpenChat' +.*codellama.*instruct: + instruction_template: 'Llama-v2' +.*(mistral|mixtral).*instruct: + instruction_template: 'Mistral' +.*mistral.*openorca: + instruction_template: 'ChatML' +.*(WizardCoder-Python-34B-V1.0|Phind-CodeLlama-34B-v2|CodeBooga-34B-v0.1): + instruction_template: 'Alpaca' +.*orca-2-(13|7)b: + instruction_template: 'ChatML' +.*openhermes.*mistral: + instruction_template: 'ChatML' +.*Yi-34B-Chat: + instruction_template: 'ChatML' +(dolphin).*: + instruction_template: 'ChatML' diff --git a/models/place-your-models-here.txt b/models/place-your-models-here.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/modules/AutoGPTQ_loader.py b/modules/AutoGPTQ_loader.py new file mode 100644 index 0000000000000000000000000000000000000000..514a6ee5145fbc67f57df69be14955bfa0c0b7ea --- /dev/null +++ b/modules/AutoGPTQ_loader.py @@ -0,0 +1,74 @@ +from pathlib import Path + +from accelerate.utils import is_xpu_available +from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig + +import modules.shared as shared +from modules.logging_colors import logger +from modules.models import get_max_memory_dict + + +def load_quantized(model_name): + path_to_model = Path(f'{shared.args.model_dir}/{model_name}') + pt_path = None + + # Find the model checkpoint + if shared.args.checkpoint: + pt_path = Path(shared.args.checkpoint) + else: + for ext in ['.safetensors', '.pt', '.bin']: + found = list(path_to_model.glob(f"*{ext}")) + if len(found) > 0: + if len(found) > 1: + logger.warning(f'More than one {ext} model has been found. The last one will be selected. It could be wrong.') + + pt_path = found[-1] + break + + if pt_path is None: + logger.error("The model could not be loaded because its checkpoint file in .bin/.pt/.safetensors format could not be located.") + return + + use_safetensors = pt_path.suffix == '.safetensors' + if not (path_to_model / "quantize_config.json").exists(): + quantize_config = BaseQuantizeConfig( + bits=bits if (bits := shared.args.wbits) > 0 else 4, + group_size=gs if (gs := shared.args.groupsize) > 0 else -1, + desc_act=shared.args.desc_act + ) + else: + quantize_config = None + + # Define the params for AutoGPTQForCausalLM.from_quantized + params = { + 'model_basename': pt_path.stem, + 'device': "xpu:0" if is_xpu_available() else "cuda:0" if not shared.args.cpu else "cpu", + 'use_triton': shared.args.triton, + 'inject_fused_attention': not shared.args.no_inject_fused_attention, + 'inject_fused_mlp': not shared.args.no_inject_fused_mlp, + 'use_safetensors': use_safetensors, + 'trust_remote_code': shared.args.trust_remote_code, + 'max_memory': get_max_memory_dict(), + 'quantize_config': quantize_config, + 'use_cuda_fp16': not shared.args.no_use_cuda_fp16, + 'disable_exllama': shared.args.disable_exllama, + 'disable_exllamav2': shared.args.disable_exllamav2, + } + + logger.info(f"The AutoGPTQ params are: {params}") + model = AutoGPTQForCausalLM.from_quantized(path_to_model, **params) + + # These lines fix the multimodal extension when used with AutoGPTQ + if hasattr(model, 'model'): + if not hasattr(model, 'dtype'): + if hasattr(model.model, 'dtype'): + model.dtype = model.model.dtype + + if hasattr(model.model, 'model') and hasattr(model.model.model, 'embed_tokens'): + if not hasattr(model, 'embed_tokens'): + model.embed_tokens = model.model.model.embed_tokens + + if not hasattr(model.model, 'embed_tokens'): + model.model.embed_tokens = model.model.model.embed_tokens + + return model diff --git a/modules/GPTQ_loader.py b/modules/GPTQ_loader.py new file mode 100644 index 0000000000000000000000000000000000000000..601c58f30a754fc01812f301d85fd3fc890e3765 --- /dev/null +++ b/modules/GPTQ_loader.py @@ -0,0 +1,171 @@ +import inspect +import re +from pathlib import Path + +import accelerate +import torch +import transformers +from accelerate.utils import is_xpu_available +from gptq_for_llama import llama_inference_offload +from gptq_for_llama.modelutils import find_layers +from gptq_for_llama.quant import make_quant +from transformers import AutoConfig, AutoModelForCausalLM + +import modules.shared as shared +from modules.logging_colors import logger + + +# This function is a replacement for the load_quant function in the +# GPTQ-for_LLaMa repository. It supports more models and branches. +def _load_quant(model, checkpoint, wbits, groupsize=-1, faster_kernel=False, exclude_layers=None, kernel_switch_threshold=128, eval=True): + exclude_layers = exclude_layers or ['lm_head'] + + def noop(*args, **kwargs): + pass + + config = AutoConfig.from_pretrained(model, trust_remote_code=shared.args.trust_remote_code) + torch.nn.init.kaiming_uniform_ = noop + torch.nn.init.uniform_ = noop + torch.nn.init.normal_ = noop + + torch.set_default_dtype(torch.half) + transformers.modeling_utils._init_weights = False + torch.set_default_dtype(torch.half) + model = AutoModelForCausalLM.from_config(config, trust_remote_code=shared.args.trust_remote_code) + torch.set_default_dtype(torch.float) + if eval: + model = model.eval() + + layers = find_layers(model) + for name in exclude_layers: + if name in layers: + del layers[name] + + gptq_args = inspect.getfullargspec(make_quant).args + + make_quant_kwargs = { + 'module': model, + 'names': layers, + 'bits': wbits, + } + if 'groupsize' in gptq_args: + make_quant_kwargs['groupsize'] = groupsize + if 'faster' in gptq_args: + make_quant_kwargs['faster'] = faster_kernel + if 'kernel_switch_threshold' in gptq_args: + make_quant_kwargs['kernel_switch_threshold'] = kernel_switch_threshold + + make_quant(**make_quant_kwargs) + + del layers + if checkpoint.endswith('.safetensors'): + from safetensors.torch import load_file as safe_load + model.load_state_dict(safe_load(checkpoint), strict=False) + else: + model.load_state_dict(torch.load(checkpoint, weights_only=True), strict=False) + + model.seqlen = 2048 + return model + + +# Used to locate the .pt/.safetensors quantized file +def find_quantized_model_file(model_name): + if shared.args.checkpoint: + return Path(shared.args.checkpoint) + + path_to_model = Path(f'{shared.args.model_dir}/{model_name}') + pt_path = None + priority_name_list = [ + Path(f'{shared.args.model_dir}/{model_name}{hyphen}{shared.args.wbits}bit{group}{ext}') + for group in ([f'-{shared.args.groupsize}g', ''] if shared.args.groupsize > 0 else ['']) + for ext in ['.safetensors', '.pt'] + for hyphen in ['-', f'/{model_name}-', '/'] + ] + + for path in priority_name_list: + if path.exists(): + pt_path = path + break + + # If the model hasn't been found with a well-behaved name, pick the last .pt + # or the last .safetensors found in its folder as a last resort + if not pt_path: + for ext in ['.pt', '.safetensors']: + found = list(path_to_model.glob(f"*{ext}")) + if len(found) > 0: + if len(found) > 1: + logger.warning(f'More than one {ext} model has been found. The last one will be selected. It could be wrong.') + + pt_path = found[-1] + break + + return pt_path + + +# The function that loads the model in modules/models.py +def load_quantized(model_name): + if shared.args.model_type is None: + logger.error("The model could not be loaded because its type could not be inferred from its name.") + logger.error("Please specify the type manually using the --model_type argument.") + return None + + # Select the appropriate load_quant function + model_type = shared.args.model_type.lower() + if shared.args.pre_layer and model_type == 'llama': + load_quant = llama_inference_offload.load_quant + elif model_type in ('llama', 'opt', 'gptj'): + if shared.args.pre_layer: + logger.warning("Ignoring --pre_layer because it only works for llama model type.") + + load_quant = _load_quant + else: + logger.error("Unknown pre-quantized model type specified. Only 'llama', 'opt' and 'gptj' are supported") + exit() + + # Find the quantized model weights file (.pt/.safetensors) + path_to_model = Path(f'{shared.args.model_dir}/{model_name}') + pt_path = find_quantized_model_file(model_name) + if not pt_path: + logger.error("Could not find the quantized model in .pt or .safetensors format. Exiting.") + exit() + else: + logger.info(f"Found the following quantized model: {pt_path}") + + # qwopqwop200's offload + if model_type == 'llama' and shared.args.pre_layer: + if len(shared.args.pre_layer) == 1: + pre_layer = shared.args.pre_layer[0] + else: + pre_layer = shared.args.pre_layer + + model = load_quant(str(path_to_model), str(pt_path), shared.args.wbits, shared.args.groupsize, pre_layer) + else: + threshold = False if model_type == 'gptj' else 128 + model = load_quant(str(path_to_model), str(pt_path), shared.args.wbits, shared.args.groupsize, kernel_switch_threshold=threshold) + + # accelerate offload (doesn't work properly) + if shared.args.gpu_memory or torch.cuda.device_count() > 1 or (is_xpu_available() and torch.xpu.device_count() > 1): + if shared.args.gpu_memory: + memory_map = list(map(lambda x: x.strip(), shared.args.gpu_memory)) + max_cpu_memory = shared.args.cpu_memory.strip() if shared.args.cpu_memory is not None else '99GiB' + max_memory = {} + for i in range(len(memory_map)): + max_memory[i] = f'{memory_map[i]}GiB' if not re.match('.*ib$', memory_map[i].lower()) else memory_map[i] + + max_memory['cpu'] = f'{max_cpu_memory}GiB' if not re.match('.*ib$', max_cpu_memory.lower()) else max_cpu_memory + else: + max_memory = accelerate.utils.get_balanced_memory(model) + + device_map = accelerate.infer_auto_device_map(model, max_memory=max_memory, no_split_module_classes=["LlamaDecoderLayer"]) + logger.info("Using the following device map for the quantized model:", device_map) + # https://huggingface.co/docs/accelerate/package_reference/big_modeling#accelerate.dispatch_model + model = accelerate.dispatch_model(model, device_map=device_map, offload_buffers=True) + + # No offload + elif not shared.args.cpu: + if is_xpu_available(): + model = model.to(torch.device("xpu:0")) + else: + model = model.to(torch.device('cuda:0')) + + return model diff --git a/modules/LoRA.py b/modules/LoRA.py new file mode 100644 index 0000000000000000000000000000000000000000..be2a7c75f87bdf68208ea88a79c0d9327776ddd0 --- /dev/null +++ b/modules/LoRA.py @@ -0,0 +1,197 @@ +from pathlib import Path + +import torch +from peft import PeftModel +from transformers import is_torch_xpu_available + +import modules.shared as shared +from modules.logging_colors import logger +from modules.models import reload_model + + +def add_lora_to_model(lora_names): + if 'GPTQForCausalLM' in shared.model.__class__.__name__ or shared.args.loader == 'AutoGPTQ': + add_lora_autogptq(lora_names) + elif shared.model.__class__.__name__ in ['ExllamaModel', 'ExllamaHF'] or shared.args.loader == 'ExLlama': + add_lora_exllama(lora_names) + elif shared.model.__class__.__name__ in ['Exllamav2Model', 'Exllamav2HF'] or shared.args.loader == ['ExLlamav2', 'ExLlamav2_HF']: + add_lora_exllamav2(lora_names) + else: + add_lora_transformers(lora_names) + + +def get_lora_path(lora_name): + p = Path(lora_name) + if p.exists(): + lora_name = p.parts[-1] + + return Path(f"{shared.args.lora_dir}/{lora_name}") + + +def add_lora_exllama(lora_names): + + try: + from exllama.lora import ExLlamaLora + except: + try: + from repositories.exllama.lora import ExLlamaLora + except: + logger.error("Could not find the file repositories/exllama/lora.py. Make sure that exllama is cloned inside repositories/ and is up to date.") + return + + if len(lora_names) == 0: + if shared.model.__class__.__name__ == 'ExllamaModel': + shared.model.generator.lora = None + else: + shared.model.lora = None + + shared.lora_names = [] + return + else: + if len(lora_names) > 1: + logger.warning('ExLlama can only work with 1 LoRA at the moment. Only the first one in the list will be loaded.') + + lora_path = get_lora_path(lora_names[0]) + lora_config_path = lora_path / "adapter_config.json" + for file_name in ["adapter_model.safetensors", "adapter_model.bin"]: + file_path = lora_path / file_name + if file_path.is_file(): + lora_adapter_path = file_path + + logger.info("Applying the following LoRAs to {}: {}".format(shared.model_name, ', '.join([lora_names[0]]))) + if shared.model.__class__.__name__ == 'ExllamaModel': + lora = ExLlamaLora(shared.model.model, str(lora_config_path), str(lora_adapter_path)) + shared.model.generator.lora = lora + else: + lora = ExLlamaLora(shared.model.ex_model, str(lora_config_path), str(lora_adapter_path)) + shared.model.lora = lora + + shared.lora_names = [lora_names[0]] + return + + +def add_lora_exllamav2(lora_names): + + from exllamav2 import ExLlamaV2Lora + + if isinstance(shared.model.loras, list): + for lora in shared.model.loras: + lora.unload() + + if len(lora_names) > 0: + logger.info("Applying the following LoRAs to {}: {}".format(shared.model_name, ', '.join(lora_names))) + shared.model.loras = [] + for lora_name in lora_names: + lora_path = get_lora_path(lora_name) + if shared.model.__class__.__name__ == 'Exllamav2Model': + lora = ExLlamaV2Lora.from_directory(shared.model.model, str(lora_path)) + else: + lora = ExLlamaV2Lora.from_directory(shared.model.ex_model, str(lora_path)) + + shared.model.loras.append(lora) + + shared.lora_names = lora_names + else: + shared.lora_names = [] + shared.model.loras = None + + +def add_lora_autogptq(lora_names): + ''' + Adapted from https://github.com/Ph0rk0z/text-generation-webui-testing + ''' + + try: + from auto_gptq import get_gptq_peft_model + from auto_gptq.utils.peft_utils import GPTQLoraConfig + except: + logger.error("This version of AutoGPTQ does not support LoRA. You need to install from source or wait for a new release.") + return + + if len(lora_names) == 0: + reload_model() + + shared.lora_names = [] + return + else: + if len(lora_names) > 1: + logger.warning('AutoGPTQ can only work with 1 LoRA at the moment. Only the first one in the list will be loaded.') + if not shared.args.no_inject_fused_attention: + logger.warning('Fused Atttention + AutoGPTQ may break Lora loading. Disable it.') + + peft_config = GPTQLoraConfig( + inference_mode=True, + ) + + lora_path = get_lora_path(lora_names[0]) + logger.info("Applying the following LoRAs to {}: {}".format(shared.model_name, ', '.join([lora_names[0]]))) + shared.model = get_gptq_peft_model(shared.model, peft_config, lora_path) + shared.lora_names = [lora_names[0]] + return + + +def add_lora_transformers(lora_names): + prior_set = set(shared.lora_names) + added_set = set(lora_names) - prior_set + removed_set = prior_set - set(lora_names) + + # If no LoRA needs to be added or removed, exit + if len(added_set) == 0 and len(removed_set) == 0: + return + + # Add a LoRA when another LoRA is already present + if len(removed_set) == 0 and len(prior_set) > 0 and "__merged" not in shared.model.peft_config.keys(): + logger.info(f"Adding the LoRA(s) named {added_set} to the model") + for lora in added_set: + shared.model.load_adapter(get_lora_path(lora), lora) + + if len(lora_names) > 1: + merge_loras() + + shared.lora_names = lora_names + return + + # If any LoRA needs to be removed, start over + if len(removed_set) > 0: + shared.model = shared.model.unload() + + if len(lora_names) > 0: + params = {} + if not shared.args.cpu: + if shared.args.load_in_4bit or shared.args.load_in_8bit: + params['peft_type'] = shared.model.dtype + else: + params['dtype'] = shared.model.dtype + if hasattr(shared.model, "hf_device_map"): + params['device_map'] = {"base_model.model." + k: v for k, v in shared.model.hf_device_map.items()} + + logger.info("Applying the following LoRAs to {}: {}".format(shared.model_name, ', '.join(lora_names))) + shared.model = PeftModel.from_pretrained(shared.model, get_lora_path(lora_names[0]), adapter_name=lora_names[0], **params) + for lora in lora_names[1:]: + shared.model.load_adapter(get_lora_path(lora), lora) + + if len(lora_names) > 1: + merge_loras() + + if not shared.args.load_in_8bit and not shared.args.cpu: + shared.model.half() + if not hasattr(shared.model, "hf_device_map"): + if torch.backends.mps.is_available(): + device = torch.device('mps') + shared.model = shared.model.to(device) + elif is_torch_xpu_available(): + device = torch.device("xpu:0") + shared.model = shared.model.to(device) + else: + shared.model = shared.model.cuda() + + shared.lora_names = lora_names + + +def merge_loras(): + if len(list({shared.model.peft_config[adapter].r for adapter in shared.model.peft_config.keys()})) > 1: + logger.warning("The loaded LoRAs cannot be merged, as they have dissimilar ranks. Only the first one will be active.") + return + + shared.model.add_weighted_adapter(shared.lora_names, [1] * len(shared.lora_names), "__merged") + shared.model.set_adapter("__merged") diff --git a/modules/RWKV.py b/modules/RWKV.py new file mode 100644 index 0000000000000000000000000000000000000000..8a15e5406f84b2f2c0ee9838b41dfed2c8c6b966 --- /dev/null +++ b/modules/RWKV.py @@ -0,0 +1,154 @@ +''' +This loader is not currently maintained as RWKV can now be loaded +through the transformers library. +''' + +import copy +import os +from pathlib import Path + +import numpy as np +from tokenizers import Tokenizer +from transformers import is_torch_xpu_available + +import modules.shared as shared +from modules.callbacks import Iteratorize + +np.set_printoptions(precision=4, suppress=True, linewidth=200) + +os.environ['RWKV_JIT_ON'] = '1' +os.environ["RWKV_CUDA_ON"] = '1' if shared.args.rwkv_cuda_on else '0' # use CUDA kernel for seq mode (much faster) + +from rwkv.model import RWKV +from rwkv.utils import PIPELINE, PIPELINE_ARGS + + +class RWKVModel: + def __init__(self): + pass + + @classmethod + def from_pretrained(self, path, dtype="bf16" if is_torch_xpu_available() else "fp16", device="xpu" if is_torch_xpu_available() else "cuda"): + tokenizer_path = Path(f"{path.parent}/20B_tokenizer.json") + if shared.args.rwkv_strategy is None: + model = RWKV(model=str(path), strategy=f'{device} {dtype}') + else: + model = RWKV(model=str(path), strategy=shared.args.rwkv_strategy) + + pipeline = PIPELINE(model, str(tokenizer_path)) + result = self() + result.pipeline = pipeline + result.model = model + result.cached_context = "" + result.cached_model_state = None + result.cached_output_logits = None + return result + + def generate(self, prompt, state, callback=None): + args = PIPELINE_ARGS( + temperature=state['temperature'], + top_p=state['top_p'], + top_k=state['top_k'], + alpha_frequency=0.1, # Frequency Penalty (as in GPT-3) + alpha_presence=0.1, # Presence Penalty (as in GPT-3) + token_ban=[0], # ban the generation of some tokens + token_stop=[] + ) + + if self.cached_context != "": + if prompt.startswith(self.cached_context): + prompt = prompt[len(self.cached_context):] + else: + self.cached_context = "" + self.cached_model_state = None + self.cached_output_logits = None + + # out = self.pipeline.generate(prompt, token_count=state['max_new_tokens'], args=args, callback=callback) + out = self.generate_from_cached_state(prompt, token_count=state['max_new_tokens'], args=args, callback=callback) + return out + + def generate_with_streaming(self, *args, **kwargs): + with Iteratorize(self.generate, args, kwargs, callback=None) as generator: + reply = '' + for token in generator: + reply += token + yield reply + + # Similar to the PIPELINE.generate, but lets us maintain the cached_model_state + def generate_from_cached_state(self, ctx="", token_count=20, args=None, callback=None): + all_tokens = [] + out_str = '' + occurrence = {} + state = copy.deepcopy(self.cached_model_state) if self.cached_model_state is not None else None + + # if we ended up with an empty context, just reuse the cached logits + # this can happen if a user undoes a message and then sends the exact message again + # in that case the full context ends up being the same as the cached_context, so the remaining context is empty. + if ctx == "": + out = self.cached_output_logits + + token = None + for i in range(token_count): + # forward + tokens = self.pipeline.encode(ctx) if i == 0 else [token] + while len(tokens) > 0: + out, state = self.model.forward(tokens[:args.chunk_len], state) + tokens = tokens[args.chunk_len:] + if i == 0: + begin_token = len(all_tokens) + last_token_posi = begin_token + # cache the model state after scanning the context + # we don't cache the state after processing our own generated tokens because + # the output string might be post-processed arbitrarily. Therefore, what's fed into the model + # on the next round of chat might be slightly different what what it output on the previous round + if i == 0: + self.cached_context += ctx + self.cached_model_state = copy.deepcopy(state) + self.cached_output_logits = copy.deepcopy(out) + + # adjust probabilities + for n in args.token_ban: + out[n] = -float('inf') + + for n in occurrence: + out[n] -= (args.alpha_presence + occurrence[n] * args.alpha_frequency) + + # sampler + token = self.pipeline.sample_logits(out, temperature=args.temperature, top_p=args.top_p, top_k=args.top_k) + if token in args.token_stop: + break + + all_tokens += [token] + if token not in occurrence: + occurrence[token] = 1 + else: + occurrence[token] += 1 + + # output + tmp = self.pipeline.decode(all_tokens[last_token_posi:]) + if '\ufffd' not in tmp: # is valid utf-8 string? + if callback: + callback(tmp) + + out_str += tmp + last_token_posi = begin_token + i + 1 + return out_str + + +class RWKVTokenizer: + def __init__(self): + pass + + @classmethod + def from_pretrained(self, path): + tokenizer_path = path / "20B_tokenizer.json" + tokenizer = Tokenizer.from_file(str(tokenizer_path)) + result = self() + result.tokenizer = tokenizer + return result + + def encode(self, prompt): + return self.tokenizer.encode(prompt).ids + + def decode(self, ids): + return self.tokenizer.decode(ids) diff --git a/modules/RoPE.py b/modules/RoPE.py new file mode 100644 index 0000000000000000000000000000000000000000..c15616c672b6ea304212d6771207e05805007ae8 --- /dev/null +++ b/modules/RoPE.py @@ -0,0 +1,18 @@ +def get_alpha_value(alpha, base): + ''' + Gets alpha_value from alpha_value and rope_freq_base + ''' + if base > 0: + return (base/10000.) ** (63/64.) + else: + return alpha + + +def get_rope_freq_base(alpha, base): + ''' + Gets rope_freq_base from alpha_value and rope_freq_base + ''' + if base > 0: + return base + else: + return 10000 * alpha ** (64/63.) diff --git a/modules/__pycache__/LoRA.cpython-310.pyc b/modules/__pycache__/LoRA.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..426621227af3433e3c420f4e201b4a7e6fe612c6 Binary files /dev/null and b/modules/__pycache__/LoRA.cpython-310.pyc differ diff --git a/modules/__pycache__/RoPE.cpython-310.pyc b/modules/__pycache__/RoPE.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..29681cd07e7be7009f2f35f4bc06cf7d42465702 Binary files /dev/null and b/modules/__pycache__/RoPE.cpython-310.pyc differ diff --git a/modules/__pycache__/block_requests.cpython-310.pyc b/modules/__pycache__/block_requests.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c3f93635c5a5c6a2888799acc602118e3a30457 Binary files /dev/null and b/modules/__pycache__/block_requests.cpython-310.pyc differ diff --git a/modules/__pycache__/callbacks.cpython-310.pyc b/modules/__pycache__/callbacks.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..023a93a4edf6b97e296526d66a99595785496313 Binary files /dev/null and b/modules/__pycache__/callbacks.cpython-310.pyc differ diff --git a/modules/__pycache__/chat.cpython-310.pyc b/modules/__pycache__/chat.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d34ca26dc3c9808ecf465e18b83a5e4d3d8f7de5 Binary files /dev/null and b/modules/__pycache__/chat.cpython-310.pyc differ diff --git a/modules/__pycache__/evaluate.cpython-310.pyc b/modules/__pycache__/evaluate.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d7bee004ce40528277d17795632f03810b566ba Binary files /dev/null and b/modules/__pycache__/evaluate.cpython-310.pyc differ diff --git a/modules/__pycache__/exllama_hf.cpython-310.pyc b/modules/__pycache__/exllama_hf.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54dbe56e2979b4c01b0dd78b06a5e6be5d245335 Binary files /dev/null and b/modules/__pycache__/exllama_hf.cpython-310.pyc differ diff --git a/modules/__pycache__/extensions.cpython-310.pyc b/modules/__pycache__/extensions.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b1ab9ffc42b35a0096d4fdd716979e75e96914e Binary files /dev/null and b/modules/__pycache__/extensions.cpython-310.pyc differ diff --git a/modules/__pycache__/github.cpython-310.pyc b/modules/__pycache__/github.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..711b28c4b2bbe2efcad50685c525d193c810141f Binary files /dev/null and b/modules/__pycache__/github.cpython-310.pyc differ diff --git a/modules/__pycache__/html_generator.cpython-310.pyc b/modules/__pycache__/html_generator.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3cb3c461e86ed7ea6c5ed4fece375d3f5ff6b36f Binary files /dev/null and b/modules/__pycache__/html_generator.cpython-310.pyc differ diff --git a/modules/__pycache__/llama_attn_hijack.cpython-310.pyc b/modules/__pycache__/llama_attn_hijack.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c9e8488264aa4a900dec28d8aa1c8b07e22f013 Binary files /dev/null and b/modules/__pycache__/llama_attn_hijack.cpython-310.pyc differ diff --git a/modules/__pycache__/loaders.cpython-310.pyc b/modules/__pycache__/loaders.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01bcce1ddf1f2f45151509c4314d00eb29050df6 Binary files /dev/null and b/modules/__pycache__/loaders.cpython-310.pyc differ diff --git a/modules/__pycache__/logging_colors.cpython-310.pyc b/modules/__pycache__/logging_colors.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eabcb5566fa4f7b1c38e191b7e1d77b5eb3e2833 Binary files /dev/null and b/modules/__pycache__/logging_colors.cpython-310.pyc differ diff --git a/modules/__pycache__/logits.cpython-310.pyc b/modules/__pycache__/logits.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dbc9edb70bb4bfab0b5415bbbd2d4cdc25b60857 Binary files /dev/null and b/modules/__pycache__/logits.cpython-310.pyc differ diff --git a/modules/__pycache__/metadata_gguf.cpython-310.pyc b/modules/__pycache__/metadata_gguf.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a3df279745a202b276ad5cc1c3e3c6e7bf8d1705 Binary files /dev/null and b/modules/__pycache__/metadata_gguf.cpython-310.pyc differ diff --git a/modules/__pycache__/models.cpython-310.pyc b/modules/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dcd8b8a0eb4dcb8b62c028fd5cdf94335a78cf00 Binary files /dev/null and b/modules/__pycache__/models.cpython-310.pyc differ diff --git a/modules/__pycache__/models_settings.cpython-310.pyc b/modules/__pycache__/models_settings.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b69017f774f517b6348df04d18d4a393a0d5dfac Binary files /dev/null and b/modules/__pycache__/models_settings.cpython-310.pyc differ diff --git a/modules/__pycache__/one_click_installer_check.cpython-310.pyc b/modules/__pycache__/one_click_installer_check.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..840c737c4024228b54ecfeec1c022d4af3151d28 Binary files /dev/null and b/modules/__pycache__/one_click_installer_check.cpython-310.pyc differ diff --git a/modules/__pycache__/presets.cpython-310.pyc b/modules/__pycache__/presets.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9d65da04e62e2736ab11313656112fccff009c3 Binary files /dev/null and b/modules/__pycache__/presets.cpython-310.pyc differ diff --git a/modules/__pycache__/prompts.cpython-310.pyc b/modules/__pycache__/prompts.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed2ddccdfd70644e9446170ae9cf61e672968fbb Binary files /dev/null and b/modules/__pycache__/prompts.cpython-310.pyc differ diff --git a/modules/__pycache__/relative_imports.cpython-310.pyc b/modules/__pycache__/relative_imports.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff6c1de80bb7b28919b37d7a046a8a383bf3ee1d Binary files /dev/null and b/modules/__pycache__/relative_imports.cpython-310.pyc differ diff --git a/modules/__pycache__/sampler_hijack.cpython-310.pyc b/modules/__pycache__/sampler_hijack.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84f66d6b3a655fe41f467de37c8802e53d8aacae Binary files /dev/null and b/modules/__pycache__/sampler_hijack.cpython-310.pyc differ diff --git a/modules/__pycache__/shared.cpython-310.pyc b/modules/__pycache__/shared.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f187a4ec131ce8a867679d935e71f4a75873f33c Binary files /dev/null and b/modules/__pycache__/shared.cpython-310.pyc differ diff --git a/modules/__pycache__/text_generation.cpython-310.pyc b/modules/__pycache__/text_generation.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e457720b58392a259f7fb241e4b6cfb462eb0af1 Binary files /dev/null and b/modules/__pycache__/text_generation.cpython-310.pyc differ diff --git a/modules/__pycache__/training.cpython-310.pyc b/modules/__pycache__/training.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b8b4bbdd5fead36c16887793ed9e1ac6d81437c Binary files /dev/null and b/modules/__pycache__/training.cpython-310.pyc differ diff --git a/modules/__pycache__/ui.cpython-310.pyc b/modules/__pycache__/ui.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad5097b1fc7c0e66ecd3896e8abca1ce4d316690 Binary files /dev/null and b/modules/__pycache__/ui.cpython-310.pyc differ diff --git a/modules/__pycache__/ui_chat.cpython-310.pyc b/modules/__pycache__/ui_chat.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e3ec6e00224d5bde062a074a4eead283c55d34d7 Binary files /dev/null and b/modules/__pycache__/ui_chat.cpython-310.pyc differ diff --git a/modules/__pycache__/ui_default.cpython-310.pyc b/modules/__pycache__/ui_default.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a57a71cd41647f9f36d046435f7b0270591c1dd Binary files /dev/null and b/modules/__pycache__/ui_default.cpython-310.pyc differ diff --git a/modules/__pycache__/ui_file_saving.cpython-310.pyc b/modules/__pycache__/ui_file_saving.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87023735859f07825788043bafeba37b085ec088 Binary files /dev/null and b/modules/__pycache__/ui_file_saving.cpython-310.pyc differ diff --git a/modules/__pycache__/ui_model_menu.cpython-310.pyc b/modules/__pycache__/ui_model_menu.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c98df783032cc8692e14b8d2402024e8812dcd57 Binary files /dev/null and b/modules/__pycache__/ui_model_menu.cpython-310.pyc differ diff --git a/modules/__pycache__/ui_notebook.cpython-310.pyc b/modules/__pycache__/ui_notebook.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69682e3d09ac8e3c450f2191c87226b007743e7a Binary files /dev/null and b/modules/__pycache__/ui_notebook.cpython-310.pyc differ diff --git a/modules/__pycache__/ui_parameters.cpython-310.pyc b/modules/__pycache__/ui_parameters.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10f5308dda7e3ca60020325939ec0b64bf395d09 Binary files /dev/null and b/modules/__pycache__/ui_parameters.cpython-310.pyc differ diff --git a/modules/__pycache__/ui_session.cpython-310.pyc b/modules/__pycache__/ui_session.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a58db9e2f4d515f71e3f2517d0ecceeae4f3ed88 Binary files /dev/null and b/modules/__pycache__/ui_session.cpython-310.pyc differ diff --git a/modules/__pycache__/utils.cpython-310.pyc b/modules/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b0d148bd09d2e711a1580b50d75e4c502fb0d9d Binary files /dev/null and b/modules/__pycache__/utils.cpython-310.pyc differ diff --git a/modules/block_requests.py b/modules/block_requests.py new file mode 100644 index 0000000000000000000000000000000000000000..38f1a17fe227682cff5d7f27e4914dfaa12ebf5a --- /dev/null +++ b/modules/block_requests.py @@ -0,0 +1,47 @@ +import builtins +import io + +import requests + +from modules.logging_colors import logger + +original_open = open +original_get = requests.get + + +class RequestBlocker: + + def __enter__(self): + requests.get = my_get + + def __exit__(self, exc_type, exc_value, traceback): + requests.get = original_get + + +class OpenMonkeyPatch: + + def __enter__(self): + builtins.open = my_open + + def __exit__(self, exc_type, exc_value, traceback): + builtins.open = original_open + + +def my_get(url, **kwargs): + logger.info('Unwanted HTTP request redirected to localhost :)') + kwargs.setdefault('allow_redirects', True) + return requests.api.request('get', 'http://127.0.0.1/', **kwargs) + + +# Kindly provided by our friend WizardLM-30B +def my_open(*args, **kwargs): + filename = str(args[0]) + if filename.endswith('index.html'): + with original_open(*args, **kwargs) as f: + file_contents = f.read() + + file_contents = file_contents.replace(b'\t\t', b'') + file_contents = file_contents.replace(b'cdnjs.cloudflare.com', b'127.0.0.1') + return io.BytesIO(file_contents) + else: + return original_open(*args, **kwargs) diff --git a/modules/callbacks.py b/modules/callbacks.py new file mode 100644 index 0000000000000000000000000000000000000000..bb979a6c944965bf60592b1341d3aa6084110ade --- /dev/null +++ b/modules/callbacks.py @@ -0,0 +1,99 @@ +import gc +import traceback +from queue import Queue +from threading import Thread + +import torch +import transformers +from transformers import is_torch_xpu_available + +import modules.shared as shared + + +class _StopEverythingStoppingCriteria(transformers.StoppingCriteria): + def __init__(self): + transformers.StoppingCriteria.__init__(self) + + def __call__(self, input_ids: torch.LongTensor, _scores: torch.FloatTensor) -> bool: + return shared.stop_everything + + +class Stream(transformers.StoppingCriteria): + def __init__(self, callback_func=None): + self.callback_func = callback_func + + def __call__(self, input_ids, scores) -> bool: + if self.callback_func is not None: + self.callback_func(input_ids[0]) + + return False + + +class Iteratorize: + + """ + Transforms a function that takes a callback + into a lazy iterator (generator). + + Adapted from: https://stackoverflow.com/a/9969000 + """ + + def __init__(self, func, args=None, kwargs=None, callback=None): + self.mfunc = func + self.c_callback = callback + self.q = Queue() + self.sentinel = object() + self.args = args or [] + self.kwargs = kwargs or {} + self.stop_now = False + + def _callback(val): + if self.stop_now or shared.stop_everything: + raise ValueError + self.q.put(val) + + def gentask(): + try: + ret = self.mfunc(callback=_callback, *args, **self.kwargs) + except ValueError: + pass + except: + traceback.print_exc() + pass + + clear_torch_cache() + self.q.put(self.sentinel) + if self.c_callback: + self.c_callback(ret) + + self.thread = Thread(target=gentask) + self.thread.start() + + def __iter__(self): + return self + + def __next__(self): + obj = self.q.get(True, None) + if obj is self.sentinel: + raise StopIteration + else: + return obj + + def __del__(self): + clear_torch_cache() + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.stop_now = True + clear_torch_cache() + + +def clear_torch_cache(): + gc.collect() + if not shared.args.cpu: + if is_torch_xpu_available(): + torch.xpu.empty_cache() + else: + torch.cuda.empty_cache() diff --git a/modules/chat.py b/modules/chat.py new file mode 100644 index 0000000000000000000000000000000000000000..8ddb753114dd12a624e6128c60b6bfc764055581 --- /dev/null +++ b/modules/chat.py @@ -0,0 +1,862 @@ +import base64 +import copy +import functools +import html +import json +import re +from datetime import datetime +from functools import partial +from pathlib import Path + +import gradio as gr +import yaml +from jinja2.sandbox import ImmutableSandboxedEnvironment +from PIL import Image + +import modules.shared as shared +from modules.extensions import apply_extensions +from modules.html_generator import chat_html_wrapper, make_thumbnail +from modules.logging_colors import logger +from modules.text_generation import ( + generate_reply, + get_encoded_length, + get_max_prompt_length +) +from modules.utils import delete_file, get_available_characters, save_file + +# Copied from the Transformers library +jinja_env = ImmutableSandboxedEnvironment(trim_blocks=True, lstrip_blocks=True) + + +def str_presenter(dumper, data): + """ + Copied from https://github.com/yaml/pyyaml/issues/240 + Makes pyyaml output prettier multiline strings. + """ + + if data.count('\n') > 0: + return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|') + + return dumper.represent_scalar('tag:yaml.org,2002:str', data) + + +yaml.add_representer(str, str_presenter) +yaml.representer.SafeRepresenter.add_representer(str, str_presenter) + + +def get_generation_prompt(renderer, impersonate=False, strip_trailing_spaces=True): + ''' + Given a Jinja template, reverse-engineers the prefix and the suffix for + an assistant message (if impersonate=False) or an user message + (if impersonate=True) + ''' + + if impersonate: + messages = [ + {"role": "user", "content": "<<|user-message-1|>>"}, + {"role": "user", "content": "<<|user-message-2|>>"}, + ] + else: + messages = [ + {"role": "assistant", "content": "<<|user-message-1|>>"}, + {"role": "assistant", "content": "<<|user-message-2|>>"}, + ] + + prompt = renderer(messages=messages) + + suffix_plus_prefix = prompt.split("<<|user-message-1|>>")[1].split("<<|user-message-2|>>")[0] + suffix = prompt.split("<<|user-message-2|>>")[1] + prefix = suffix_plus_prefix[len(suffix):] + + if strip_trailing_spaces: + prefix = prefix.rstrip(' ') + + return prefix, suffix + + +def generate_chat_prompt(user_input, state, **kwargs): + impersonate = kwargs.get('impersonate', False) + _continue = kwargs.get('_continue', False) + also_return_rows = kwargs.get('also_return_rows', False) + history = kwargs.get('history', state['history'])['internal'] + + # Templates + chat_template = jinja_env.from_string(state['chat_template_str']) + instruction_template = jinja_env.from_string(state['instruction_template_str']) + chat_renderer = partial(chat_template.render, add_generation_prompt=False, name1=state['name1'], name2=state['name2']) + instruct_renderer = partial(instruction_template.render, add_generation_prompt=False) + + messages = [] + + if state['mode'] == 'instruct': + renderer = instruct_renderer + if state['custom_system_message'].strip() != '': + messages.append({"role": "system", "content": state['custom_system_message']}) + else: + renderer = chat_renderer + if state['context'].strip() != '': + context = replace_character_names(state['context'], state['name1'], state['name2']) + messages.append({"role": "system", "content": context}) + + insert_pos = len(messages) + for user_msg, assistant_msg in reversed(history): + user_msg = user_msg.strip() + assistant_msg = assistant_msg.strip() + + if assistant_msg: + messages.insert(insert_pos, {"role": "assistant", "content": assistant_msg}) + + if user_msg not in ['', '<|BEGIN-VISIBLE-CHAT|>']: + messages.insert(insert_pos, {"role": "user", "content": user_msg}) + + user_input = user_input.strip() + if user_input and not impersonate and not _continue: + messages.append({"role": "user", "content": user_input}) + + def remove_extra_bos(prompt): + for bos_token in ['', '<|startoftext|>']: + while prompt.startswith(bos_token): + prompt = prompt[len(bos_token):] + + return prompt + + def make_prompt(messages): + if state['mode'] == 'chat-instruct' and _continue: + prompt = renderer(messages=messages[:-1]) + else: + prompt = renderer(messages=messages) + + if state['mode'] == 'chat-instruct': + outer_messages = [] + if state['custom_system_message'].strip() != '': + outer_messages.append({"role": "system", "content": state['custom_system_message']}) + + prompt = remove_extra_bos(prompt) + command = state['chat-instruct_command'] + command = command.replace('<|character|>', state['name2'] if not impersonate else state['name1']) + command = command.replace('<|prompt|>', prompt) + + if _continue: + prefix = get_generation_prompt(renderer, impersonate=impersonate, strip_trailing_spaces=False)[0] + prefix += messages[-1]["content"] + else: + prefix = get_generation_prompt(renderer, impersonate=impersonate)[0] + if not impersonate: + prefix = apply_extensions('bot_prefix', prefix, state) + + outer_messages.append({"role": "user", "content": command}) + outer_messages.append({"role": "assistant", "content": prefix}) + + prompt = instruction_template.render(messages=outer_messages) + suffix = get_generation_prompt(instruct_renderer, impersonate=False)[1] + prompt = prompt[:-len(suffix)] + + else: + if _continue: + suffix = get_generation_prompt(renderer, impersonate=impersonate)[1] + prompt = prompt[:-len(suffix)] + else: + prefix = get_generation_prompt(renderer, impersonate=impersonate)[0] + if state['mode'] == 'chat' and not impersonate: + prefix = apply_extensions('bot_prefix', prefix, state) + + prompt += prefix + + prompt = remove_extra_bos(prompt) + return prompt + + prompt = make_prompt(messages) + + # Handle truncation + max_length = get_max_prompt_length(state) + while len(messages) > 0 and get_encoded_length(prompt) > max_length: + # Try to save the system message + if len(messages) > 1 and messages[0]['role'] == 'system': + messages.pop(1) + else: + messages.pop(0) + + prompt = make_prompt(messages) + + if also_return_rows: + return prompt, [message['content'] for message in messages] + else: + return prompt + + +def get_stopping_strings(state): + stopping_strings = [] + renderers = [] + + if state['mode'] in ['instruct', 'chat-instruct']: + template = jinja_env.from_string(state['instruction_template_str']) + renderer = partial(template.render, add_generation_prompt=False) + renderers.append(renderer) + + if state['mode'] in ['chat', 'chat-instruct']: + template = jinja_env.from_string(state['chat_template_str']) + renderer = partial(template.render, add_generation_prompt=False, name1=state['name1'], name2=state['name2']) + renderers.append(renderer) + + for renderer in renderers: + prefix_bot, suffix_bot = get_generation_prompt(renderer, impersonate=False) + prefix_user, suffix_user = get_generation_prompt(renderer, impersonate=True) + + stopping_strings += [ + suffix_user + prefix_bot, + suffix_user + prefix_user, + suffix_bot + prefix_bot, + suffix_bot + prefix_user, + ] + + if 'stopping_strings' in state and isinstance(state['stopping_strings'], list): + stopping_strings += state.pop('stopping_strings') + + return list(set(stopping_strings)) + + +def chatbot_wrapper(text, state, regenerate=False, _continue=False, loading_message=True, for_ui=False): + history = state['history'] + output = copy.deepcopy(history) + output = apply_extensions('history', output) + state = apply_extensions('state', state) + + visible_text = None + stopping_strings = get_stopping_strings(state) + is_stream = state['stream'] + + # Prepare the input + if not (regenerate or _continue): + visible_text = html.escape(text) + + # Apply extensions + text, visible_text = apply_extensions('chat_input', text, visible_text, state) + text = apply_extensions('input', text, state, is_chat=True) + + output['internal'].append([text, '']) + output['visible'].append([visible_text, '']) + + # *Is typing...* + if loading_message: + yield { + 'visible': output['visible'][:-1] + [[output['visible'][-1][0], shared.processing_message]], + 'internal': output['internal'] + } + else: + text, visible_text = output['internal'][-1][0], output['visible'][-1][0] + if regenerate: + if loading_message: + yield { + 'visible': output['visible'][:-1] + [[visible_text, shared.processing_message]], + 'internal': output['internal'][:-1] + [[text, '']] + } + elif _continue: + last_reply = [output['internal'][-1][1], output['visible'][-1][1]] + if loading_message: + yield { + 'visible': output['visible'][:-1] + [[visible_text, last_reply[1] + '...']], + 'internal': output['internal'] + } + + if shared.model_name == 'None' or shared.model is None: + raise ValueError("No model is loaded! Select one in the Model tab.") + + # Generate the prompt + kwargs = { + '_continue': _continue, + 'history': output if _continue else {k: v[:-1] for k, v in output.items()} + } + prompt = apply_extensions('custom_generate_chat_prompt', text, state, **kwargs) + if prompt is None: + prompt = generate_chat_prompt(text, state, **kwargs) + + # Generate + reply = None + for j, reply in enumerate(generate_reply(prompt, state, stopping_strings=stopping_strings, is_chat=True, for_ui=for_ui)): + + # Extract the reply + visible_reply = reply + if state['mode'] in ['chat', 'chat-instruct']: + visible_reply = re.sub("(||{{user}})", state['name1'], reply) + + visible_reply = html.escape(visible_reply) + + if shared.stop_everything: + output['visible'][-1][1] = apply_extensions('output', output['visible'][-1][1], state, is_chat=True) + yield output + return + + if _continue: + output['internal'][-1] = [text, last_reply[0] + reply] + output['visible'][-1] = [visible_text, last_reply[1] + visible_reply] + if is_stream: + yield output + elif not (j == 0 and visible_reply.strip() == ''): + output['internal'][-1] = [text, reply.lstrip(' ')] + output['visible'][-1] = [visible_text, visible_reply.lstrip(' ')] + if is_stream: + yield output + + output['visible'][-1][1] = apply_extensions('output', output['visible'][-1][1], state, is_chat=True) + yield output + + +def impersonate_wrapper(text, state): + + static_output = chat_html_wrapper(state['history'], state['name1'], state['name2'], state['mode'], state['chat_style'], state['character_menu']) + + if shared.model_name == 'None' or shared.model is None: + logger.error("No model is loaded! Select one in the Model tab.") + yield '', static_output + return + + prompt = generate_chat_prompt('', state, impersonate=True) + stopping_strings = get_stopping_strings(state) + + yield text + '...', static_output + reply = None + for reply in generate_reply(prompt + text, state, stopping_strings=stopping_strings, is_chat=True): + yield (text + reply).lstrip(' '), static_output + if shared.stop_everything: + return + + +def generate_chat_reply(text, state, regenerate=False, _continue=False, loading_message=True, for_ui=False): + history = state['history'] + if regenerate or _continue: + text = '' + if (len(history['visible']) == 1 and not history['visible'][0][0]) or len(history['internal']) == 0: + yield history + return + + for history in chatbot_wrapper(text, state, regenerate=regenerate, _continue=_continue, loading_message=loading_message, for_ui=for_ui): + yield history + + +def character_is_loaded(state, raise_exception=False): + if state['mode'] in ['chat', 'chat-instruct'] and state['name2'] == '': + logger.error('It looks like no character is loaded. Please load one under Parameters > Character.') + if raise_exception: + raise ValueError + + return False + else: + return True + + +def generate_chat_reply_wrapper(text, state, regenerate=False, _continue=False): + ''' + Same as above but returns HTML for the UI + ''' + + if not character_is_loaded(state): + return + + if state['start_with'] != '' and not _continue: + if regenerate: + text, state['history'] = remove_last_message(state['history']) + regenerate = False + + _continue = True + send_dummy_message(text, state) + send_dummy_reply(state['start_with'], state) + + for i, history in enumerate(generate_chat_reply(text, state, regenerate, _continue, loading_message=True, for_ui=True)): + yield chat_html_wrapper(history, state['name1'], state['name2'], state['mode'], state['chat_style'], state['character_menu']), history + + +def remove_last_message(history): + if len(history['visible']) > 0 and history['internal'][-1][0] != '<|BEGIN-VISIBLE-CHAT|>': + last = history['visible'].pop() + history['internal'].pop() + else: + last = ['', ''] + + return html.unescape(last[0]), history + + +def send_last_reply_to_input(history): + if len(history['visible']) > 0: + return html.unescape(history['visible'][-1][1]) + else: + return '' + + +def replace_last_reply(text, state): + history = state['history'] + + if len(text.strip()) == 0: + return history + elif len(history['visible']) > 0: + history['visible'][-1][1] = html.escape(text) + history['internal'][-1][1] = apply_extensions('input', text, state, is_chat=True) + + return history + + +def send_dummy_message(text, state): + history = state['history'] + history['visible'].append([html.escape(text), '']) + history['internal'].append([apply_extensions('input', text, state, is_chat=True), '']) + return history + + +def send_dummy_reply(text, state): + history = state['history'] + if len(history['visible']) > 0 and not history['visible'][-1][1] == '': + history['visible'].append(['', '']) + history['internal'].append(['', '']) + + history['visible'][-1][1] = html.escape(text) + history['internal'][-1][1] = apply_extensions('input', text, state, is_chat=True) + return history + + +def redraw_html(history, name1, name2, mode, style, character, reset_cache=False): + return chat_html_wrapper(history, name1, name2, mode, style, character, reset_cache=reset_cache) + + +def start_new_chat(state): + mode = state['mode'] + history = {'internal': [], 'visible': []} + + if mode != 'instruct': + greeting = replace_character_names(state['greeting'], state['name1'], state['name2']) + if greeting != '': + history['internal'] += [['<|BEGIN-VISIBLE-CHAT|>', greeting]] + history['visible'] += [['', apply_extensions('output', greeting, state, is_chat=True)]] + + unique_id = datetime.now().strftime('%Y%m%d-%H-%M-%S') + save_history(history, unique_id, state['character_menu'], state['mode']) + + return history + + +def get_history_file_path(unique_id, character, mode): + if mode == 'instruct': + p = Path(f'logs/instruct/{unique_id}.json') + else: + p = Path(f'logs/chat/{character}/{unique_id}.json') + + return p + + +def save_history(history, unique_id, character, mode): + if shared.args.multi_user: + return + + p = get_history_file_path(unique_id, character, mode) + if not p.parent.is_dir(): + p.parent.mkdir(parents=True) + + with open(p, 'w', encoding='utf-8') as f: + f.write(json.dumps(history, indent=4)) + + +def rename_history(old_id, new_id, character, mode): + if shared.args.multi_user: + return + + old_p = get_history_file_path(old_id, character, mode) + new_p = get_history_file_path(new_id, character, mode) + if new_p.parent != old_p.parent: + logger.error(f"The following path is not allowed: {new_p}.") + elif new_p == old_p: + logger.info("The provided path is identical to the old one.") + else: + logger.info(f"Renaming {old_p} to {new_p}") + old_p.rename(new_p) + + +def find_all_histories(state): + if shared.args.multi_user: + return [''] + + if state['mode'] == 'instruct': + paths = Path('logs/instruct').glob('*.json') + else: + character = state['character_menu'] + + # Handle obsolete filenames and paths + old_p = Path(f'logs/{character}_persistent.json') + new_p = Path(f'logs/persistent_{character}.json') + if old_p.exists(): + logger.warning(f"Renaming {old_p} to {new_p}") + old_p.rename(new_p) + if new_p.exists(): + unique_id = datetime.now().strftime('%Y%m%d-%H-%M-%S') + p = get_history_file_path(unique_id, character, state['mode']) + logger.warning(f"Moving {new_p} to {p}") + p.parent.mkdir(exist_ok=True) + new_p.rename(p) + + paths = Path(f'logs/chat/{character}').glob('*.json') + + histories = sorted(paths, key=lambda x: x.stat().st_mtime, reverse=True) + histories = [path.stem for path in histories] + + return histories + + +def load_latest_history(state): + ''' + Loads the latest history for the given character in chat or chat-instruct + mode, or the latest instruct history for instruct mode. + ''' + + if shared.args.multi_user: + return start_new_chat(state) + + histories = find_all_histories(state) + + if len(histories) > 0: + unique_id = Path(histories[0]).stem + history = load_history(unique_id, state['character_menu'], state['mode']) + else: + history = start_new_chat(state) + + return history + + +def load_history(unique_id, character, mode): + p = get_history_file_path(unique_id, character, mode) + + f = json.loads(open(p, 'rb').read()) + if 'internal' in f and 'visible' in f: + history = f + else: + history = { + 'internal': f['data'], + 'visible': f['data_visible'] + } + + return history + + +def load_history_json(file, history): + try: + file = file.decode('utf-8') + f = json.loads(file) + if 'internal' in f and 'visible' in f: + history = f + else: + history = { + 'internal': f['data'], + 'visible': f['data_visible'] + } + + return history + except: + return history + + +def delete_history(unique_id, character, mode): + p = get_history_file_path(unique_id, character, mode) + delete_file(p) + + +def replace_character_names(text, name1, name2): + text = text.replace('{{user}}', name1).replace('{{char}}', name2) + return text.replace('', name1).replace('', name2) + + +def generate_pfp_cache(character): + cache_folder = Path("cache") + if not cache_folder.exists(): + cache_folder.mkdir() + + for path in [Path(f"characters/{character}.{extension}") for extension in ['png', 'jpg', 'jpeg']]: + if path.exists(): + original_img = Image.open(path) + original_img.save(Path('cache/pfp_character.png'), format='PNG') + + thumb = make_thumbnail(original_img) + thumb.save(Path('cache/pfp_character_thumb.png'), format='PNG') + + return thumb + + return None + + +def load_character(character, name1, name2): + context = greeting = "" + greeting_field = 'greeting' + picture = None + + filepath = None + for extension in ["yml", "yaml", "json"]: + filepath = Path(f'characters/{character}.{extension}') + if filepath.exists(): + break + + if filepath is None or not filepath.exists(): + logger.error(f"Could not find the character \"{character}\" inside characters/. No character has been loaded.") + raise ValueError + + file_contents = open(filepath, 'r', encoding='utf-8').read() + data = json.loads(file_contents) if extension == "json" else yaml.safe_load(file_contents) + + for path in [Path("cache/pfp_character.png"), Path("cache/pfp_character_thumb.png")]: + if path.exists(): + path.unlink() + + picture = generate_pfp_cache(character) + + # Finding the bot's name + for k in ['name', 'bot', '<|bot|>', 'char_name']: + if k in data and data[k] != '': + name2 = data[k] + break + + # Find the user name (if any) + for k in ['your_name', 'user', '<|user|>']: + if k in data and data[k] != '': + name1 = data[k] + break + + if 'context' in data: + context = data['context'].strip() + elif "char_persona" in data: + context = build_pygmalion_style_context(data) + greeting_field = 'char_greeting' + + greeting = data.get(greeting_field, greeting) + return name1, name2, picture, greeting, context + + +def load_instruction_template(template): + for filepath in [Path(f'instruction-templates/{template}.yaml'), Path('instruction-templates/Alpaca.yaml')]: + if filepath.exists(): + break + else: + return '' + + file_contents = open(filepath, 'r', encoding='utf-8').read() + data = yaml.safe_load(file_contents) + if 'instruction_template' in data: + return data['instruction_template'] + else: + return jinja_template_from_old_format(data) + + +@functools.cache +def load_character_memoized(character, name1, name2): + return load_character(character, name1, name2) + + +@functools.cache +def load_instruction_template_memoized(template): + return load_instruction_template(template) + + +def upload_character(file, img, tavern=False): + decoded_file = file if isinstance(file, str) else file.decode('utf-8') + try: + data = json.loads(decoded_file) + except: + data = yaml.safe_load(decoded_file) + + if 'char_name' in data: + name = data['char_name'] + greeting = data['char_greeting'] + context = build_pygmalion_style_context(data) + yaml_data = generate_character_yaml(name, greeting, context) + else: + name = data['name'] + yaml_data = generate_character_yaml(data['name'], data['greeting'], data['context']) + + outfile_name = name + i = 1 + while Path(f'characters/{outfile_name}.yaml').exists(): + outfile_name = f'{name}_{i:03d}' + i += 1 + + with open(Path(f'characters/{outfile_name}.yaml'), 'w', encoding='utf-8') as f: + f.write(yaml_data) + + if img is not None: + img.save(Path(f'characters/{outfile_name}.png')) + + logger.info(f'New character saved to "characters/{outfile_name}.yaml".') + return gr.update(value=outfile_name, choices=get_available_characters()) + + +def build_pygmalion_style_context(data): + context = "" + if 'char_persona' in data and data['char_persona'] != '': + context += f"{data['char_name']}'s Persona: {data['char_persona']}\n" + + if 'world_scenario' in data and data['world_scenario'] != '': + context += f"Scenario: {data['world_scenario']}\n" + + if 'example_dialogue' in data and data['example_dialogue'] != '': + context += f"{data['example_dialogue'].strip()}\n" + + context = f"{context.strip()}\n" + return context + + +def upload_tavern_character(img, _json): + _json = {'char_name': _json['name'], 'char_persona': _json['description'], 'char_greeting': _json['first_mes'], 'example_dialogue': _json['mes_example'], 'world_scenario': _json['scenario']} + return upload_character(json.dumps(_json), img, tavern=True) + + +def check_tavern_character(img): + if "chara" not in img.info: + return "Not a TavernAI card", None, None, gr.update(interactive=False) + + decoded_string = base64.b64decode(img.info['chara']).replace(b'\\r\\n', b'\\n') + _json = json.loads(decoded_string) + if "data" in _json: + _json = _json["data"] + + return _json['name'], _json['description'], _json, gr.update(interactive=True) + + +def upload_your_profile_picture(img): + cache_folder = Path("cache") + if not cache_folder.exists(): + cache_folder.mkdir() + + if img is None: + if Path("cache/pfp_me.png").exists(): + Path("cache/pfp_me.png").unlink() + else: + img = make_thumbnail(img) + img.save(Path('cache/pfp_me.png')) + logger.info('Profile picture saved to "cache/pfp_me.png"') + + +def generate_character_yaml(name, greeting, context): + data = { + 'name': name, + 'greeting': greeting, + 'context': context, + } + + data = {k: v for k, v in data.items() if v} # Strip falsy + return yaml.dump(data, sort_keys=False, width=float("inf")) + + +def generate_instruction_template_yaml(instruction_template): + data = { + 'instruction_template': instruction_template + } + + return my_yaml_output(data) + + +def save_character(name, greeting, context, picture, filename): + if filename == "": + logger.error("The filename is empty, so the character will not be saved.") + return + + data = generate_character_yaml(name, greeting, context) + filepath = Path(f'characters/{filename}.yaml') + save_file(filepath, data) + path_to_img = Path(f'characters/{filename}.png') + if picture is not None: + picture.save(path_to_img) + logger.info(f'Saved {path_to_img}.') + + +def delete_character(name, instruct=False): + for extension in ["yml", "yaml", "json"]: + delete_file(Path(f'characters/{name}.{extension}')) + + delete_file(Path(f'characters/{name}.png')) + + +def jinja_template_from_old_format(params, verbose=False): + MASTER_TEMPLATE = """ +{%- set ns = namespace(found=false) -%} +{%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} +{%- endfor -%} +{%- if not ns.found -%} + {{- '<|PRE-SYSTEM|>' + '<|SYSTEM-MESSAGE|>' + '<|POST-SYSTEM|>' -}} +{%- endif %} +{%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '<|PRE-SYSTEM|>' + message['content'] + '<|POST-SYSTEM|>' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'<|PRE-USER|>' + message['content'] + '<|POST-USER|>'-}} + {%- else -%} + {{-'<|PRE-ASSISTANT|>' + message['content'] + '<|POST-ASSISTANT|>' -}} + {%- endif -%} + {%- endif -%} +{%- endfor -%} +{%- if add_generation_prompt -%} + {{-'<|PRE-ASSISTANT-GENERATE|>'-}} +{%- endif -%} +""" + + if 'context' in params and '<|system-message|>' in params['context']: + pre_system = params['context'].split('<|system-message|>')[0] + post_system = params['context'].split('<|system-message|>')[1] + else: + pre_system = '' + post_system = '' + + pre_user = params['turn_template'].split('<|user-message|>')[0].replace('<|user|>', params['user']) + post_user = params['turn_template'].split('<|user-message|>')[1].split('<|bot|>')[0] + + pre_assistant = '<|bot|>' + params['turn_template'].split('<|bot-message|>')[0].split('<|bot|>')[1] + pre_assistant = pre_assistant.replace('<|bot|>', params['bot']) + post_assistant = params['turn_template'].split('<|bot-message|>')[1] + + def preprocess(string): + return string.replace('\n', '\\n').replace('\'', '\\\'') + + pre_system = preprocess(pre_system) + post_system = preprocess(post_system) + pre_user = preprocess(pre_user) + post_user = preprocess(post_user) + pre_assistant = preprocess(pre_assistant) + post_assistant = preprocess(post_assistant) + + if verbose: + print( + '\n', + repr(pre_system) + '\n', + repr(post_system) + '\n', + repr(pre_user) + '\n', + repr(post_user) + '\n', + repr(pre_assistant) + '\n', + repr(post_assistant) + '\n', + ) + + result = MASTER_TEMPLATE + if 'system_message' in params: + result = result.replace('<|SYSTEM-MESSAGE|>', preprocess(params['system_message'])) + else: + result = result.replace('<|SYSTEM-MESSAGE|>', '') + + result = result.replace('<|PRE-SYSTEM|>', pre_system) + result = result.replace('<|POST-SYSTEM|>', post_system) + result = result.replace('<|PRE-USER|>', pre_user) + result = result.replace('<|POST-USER|>', post_user) + result = result.replace('<|PRE-ASSISTANT|>', pre_assistant) + result = result.replace('<|PRE-ASSISTANT-GENERATE|>', pre_assistant.rstrip(' ')) + result = result.replace('<|POST-ASSISTANT|>', post_assistant) + + result = result.strip() + + return result + + +def my_yaml_output(data): + ''' + pyyaml is very inconsistent with multiline strings. + for simple instruction template outputs, this is enough. + ''' + result = "" + for k in data: + result += k + ": |-\n" + for line in data[k].splitlines(): + result += " " + line.rstrip(' ') + "\n" + + return result diff --git a/modules/ctransformers_model.py b/modules/ctransformers_model.py new file mode 100644 index 0000000000000000000000000000000000000000..70ce92f54bdb6704ce58f013fd28b0014a5f3b28 --- /dev/null +++ b/modules/ctransformers_model.py @@ -0,0 +1,79 @@ +from ctransformers import AutoConfig, AutoModelForCausalLM + +from modules import shared +from modules.callbacks import Iteratorize +from modules.logging_colors import logger + + +class CtransformersModel: + def __init__(self): + pass + + @classmethod + def from_pretrained(cls, path): + result = cls() + + config = AutoConfig.from_pretrained( + str(path), + threads=shared.args.threads if shared.args.threads != 0 else -1, + gpu_layers=shared.args.n_gpu_layers, + batch_size=shared.args.n_batch, + context_length=shared.args.n_ctx, + stream=True, + mmap=not shared.args.no_mmap, + mlock=shared.args.mlock + ) + + result.model = AutoModelForCausalLM.from_pretrained( + str(result.model_dir(path) if result.model_type_is_auto() else path), + model_type=(None if result.model_type_is_auto() else shared.args.model_type), + config=config + ) + + logger.info(f'Using ctransformers model_type: {result.model.model_type} for {result.model.model_path}') + return result, result + + def model_type_is_auto(self): + return shared.args.model_type is None or shared.args.model_type == "Auto" or shared.args.model_type == "None" + + def model_dir(self, path): + if path.is_file(): + return path.parent + + return path + + def encode(self, string, **kwargs): + return self.model.tokenize(string) + + def decode(self, ids): + return self.model.detokenize(ids) + + def generate(self, prompt, state, callback=None): + prompt = prompt if type(prompt) is str else prompt.decode() + # ctransformers uses -1 for random seed + generator = self.model( + prompt=prompt, + max_new_tokens=state['max_new_tokens'], + temperature=state['temperature'], + top_p=state['top_p'], + top_k=state['top_k'], + repetition_penalty=state['repetition_penalty'], + last_n_tokens=state['repetition_penalty_range'], + seed=int(state['seed']) + ) + + output = "" + for token in generator: + if callback: + callback(token) + + output += token + + return output + + def generate_with_streaming(self, *args, **kwargs): + with Iteratorize(self.generate, args, kwargs, callback=None) as generator: + reply = '' + for token in generator: + reply += token + yield reply diff --git a/modules/deepspeed_parameters.py b/modules/deepspeed_parameters.py new file mode 100644 index 0000000000000000000000000000000000000000..f170a385cfc3dfb954fc6f5595cf8706e42aed30 --- /dev/null +++ b/modules/deepspeed_parameters.py @@ -0,0 +1,74 @@ +def generate_ds_config(ds_bf16, train_batch_size, nvme_offload_dir): + ''' + DeepSpeed configuration + https://huggingface.co/docs/transformers/main_classes/deepspeed + ''' + + if nvme_offload_dir: + ds_config = { + "fp16": { + "enabled": not ds_bf16, + }, + "bf16": { + "enabled": ds_bf16, + }, + "zero_optimization": { + "stage": 3, + "offload_param": { + "device": "nvme", + "nvme_path": nvme_offload_dir, + "pin_memory": True, + "buffer_count": 5, + "buffer_size": 1e9, + "max_in_cpu": 1e9 + }, + "overlap_comm": True, + "reduce_bucket_size": "auto", + "contiguous_gradients": True, + "sub_group_size": 1e8, + "stage3_prefetch_bucket_size": "auto", + "stage3_param_persistence_threshold": "auto", + "stage3_max_live_parameters": "auto", + "stage3_max_reuse_distance": "auto", + }, + "aio": { + "block_size": 262144, + "queue_depth": 32, + "thread_count": 1, + "single_submit": False, + "overlap_events": True + }, + "steps_per_print": 2000, + "train_batch_size": train_batch_size, + "train_micro_batch_size_per_gpu": 1, + "wall_clock_breakdown": False + } + else: + ds_config = { + "fp16": { + "enabled": not ds_bf16, + }, + "bf16": { + "enabled": ds_bf16, + }, + "zero_optimization": { + "stage": 3, + "offload_param": { + "device": "cpu", + "pin_memory": True + }, + "overlap_comm": True, + "contiguous_gradients": True, + "reduce_bucket_size": "auto", + "stage3_prefetch_bucket_size": "auto", + "stage3_param_persistence_threshold": "auto", + "stage3_max_live_parameters": "auto", + "stage3_max_reuse_distance": "auto", + }, + "steps_per_print": 2000, + "train_batch_size": train_batch_size, + "train_micro_batch_size_per_gpu": 1, + "wall_clock_breakdown": False + } + + return ds_config diff --git a/modules/evaluate.py b/modules/evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..bedafeb649cee788c657047c1ad377e91f39b1ab --- /dev/null +++ b/modules/evaluate.py @@ -0,0 +1,153 @@ +import datetime +from pathlib import Path + +import pandas as pd +import torch +from datasets import load_dataset +from tqdm import tqdm + +from modules import shared +from modules.logging_colors import logger +from modules.models import clear_torch_cache, load_model, unload_model +from modules.models_settings import get_model_metadata, update_model_parameters +from modules.text_generation import encode + + +def load_past_evaluations(): + if Path('logs/evaluations.csv').exists(): + df = pd.read_csv(Path('logs/evaluations.csv'), dtype=str) + df['Perplexity'] = pd.to_numeric(df['Perplexity']) + return df + else: + return pd.DataFrame(columns=['Model', 'LoRAs', 'Dataset', 'Perplexity', 'stride', 'max_length', 'Date', 'Comment']) + + +past_evaluations = load_past_evaluations() + + +def save_past_evaluations(df): + global past_evaluations + past_evaluations = df + filepath = Path('logs/evaluations.csv') + filepath.parent.mkdir(parents=True, exist_ok=True) + df.to_csv(filepath, index=False) + + +def calculate_perplexity(models, input_dataset, stride, _max_length): + ''' + Based on: + https://huggingface.co/docs/transformers/perplexity#calculating-ppl-with-fixedlength-models + ''' + + if not shared.args.no_use_fast: + logger.warning("--no_use_fast is not being used. If tokenizing the input dataset takes a long time, consider loading the model with that option checked.") + + global past_evaluations + cumulative_log = '' + cumulative_log += "Loading the input dataset...\n\n" + yield cumulative_log + + # Copied from https://github.com/qwopqwop200/GPTQ-for-LLaMa/blob/triton/utils/datautils.py + if input_dataset == 'wikitext': + data = load_dataset('wikitext', 'wikitext-2-raw-v1', split='test') + text = "\n\n".join(data['text']) + elif input_dataset == 'ptb': + data = load_dataset('ptb_text_only', 'penn_treebank', split='validation') + text = "\n\n".join(data['sentence']) + elif input_dataset == 'ptb_new': + data = load_dataset('ptb_text_only', 'penn_treebank', split='test') + text = " ".join(data['sentence']) + else: + with open(Path(f'training/datasets/{input_dataset}.txt'), 'r', encoding='utf-8') as f: + text = f.read() + + for model in models: + if is_in_past_evaluations(model, input_dataset, stride, _max_length): + cumulative_log += f"`{model}` has already been tested. Ignoring.\n\n" + yield cumulative_log + continue + + if model != 'current model': + try: + yield cumulative_log + f"Loading `{model}`...\n\n" + model_settings = get_model_metadata(model) + shared.settings.update({k: v for k, v in model_settings.items() if k in shared.settings}) # hijacking the interface defaults + update_model_parameters(model_settings) # hijacking the command-line arguments + unload_model() + shared.model, shared.tokenizer = load_model(model) + except: + cumulative_log += f"Failed to load `{model}`. Moving on.\n\n" + yield cumulative_log + continue + + cumulative_log += f"Processing `{shared.model_name}`...\n\n" + yield cumulative_log + "Tokenizing the input dataset...\n\n" + encodings = encode(text, add_special_tokens=False) + seq_len = encodings.shape[1] + if _max_length: + max_length = _max_length + elif hasattr(shared.model.config, 'max_position_embeddings'): + max_length = shared.model.config.max_position_embeddings + else: + max_length = 2048 + + nlls = [] + prev_end_loc = 0 + for begin_loc in tqdm(range(0, seq_len, stride)): + yield cumulative_log + f"Evaluating... {100*begin_loc/seq_len:.2f}%" + end_loc = min(begin_loc + max_length, seq_len) + trg_len = end_loc - prev_end_loc # may be different from stride on last loop + input_ids = encodings[:, begin_loc:end_loc] + target_ids = input_ids.clone() + target_ids[:, :-trg_len] = -100 + clear_torch_cache() + with torch.no_grad(): + outputs = shared.model(input_ids=input_ids, labels=target_ids) + + # loss is calculated using CrossEntropyLoss which averages over valid labels + # N.B. the model only calculates loss over trg_len - 1 labels, because it internally shifts the labels + # to the left by 1. + neg_log_likelihood = outputs.loss + + nlls.append(neg_log_likelihood) + prev_end_loc = end_loc + if end_loc == seq_len: + break + + ppl = torch.exp(torch.stack(nlls).mean()) + add_entry_to_past_evaluations(float(ppl), shared.model_name, input_dataset, stride, _max_length) + save_past_evaluations(past_evaluations) + cumulative_log += f"The perplexity for `{shared.model_name}` is: {float(ppl)}\n\n" + yield cumulative_log + + +def add_entry_to_past_evaluations(perplexity, model, dataset, stride, max_length): + global past_evaluations + entry = { + 'Model': model, + 'LoRAs': ', '.join(shared.lora_names) or '-', + 'Dataset': dataset, + 'Perplexity': perplexity, + 'stride': str(stride), + 'max_length': str(max_length), + 'Date': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), + 'Comment': '' + } + past_evaluations = pd.concat([past_evaluations, pd.DataFrame([entry])], ignore_index=True) + + +def is_in_past_evaluations(model, dataset, stride, max_length): + entries = past_evaluations[(past_evaluations['Model'] == model) & + (past_evaluations['Dataset'] == dataset) & + (past_evaluations['max_length'] == str(max_length)) & + (past_evaluations['stride'] == str(stride))] + + if entries.shape[0] > 0: + return True + else: + return False + + +def generate_markdown_table(): + sorted_df = past_evaluations.sort_values(by=['Dataset', 'stride', 'Perplexity', 'Date']) + return sorted_df diff --git a/modules/exllama.py b/modules/exllama.py new file mode 100644 index 0000000000000000000000000000000000000000..25c4c99d671e54db1b689457efeeb3dfc1ea3dcd --- /dev/null +++ b/modules/exllama.py @@ -0,0 +1,237 @@ +from pathlib import Path + +import torch +import torch.nn.functional as F +from torch import version as torch_version + +from modules import shared +from modules.logging_colors import logger +from modules.models import clear_torch_cache +from modules.text_generation import get_max_prompt_length + +try: + from exllama.generator import ExLlamaGenerator + from exllama.model import ExLlama, ExLlamaCache, ExLlamaConfig + from exllama.tokenizer import ExLlamaTokenizer +except: + logger.warning('exllama module failed to import. Will attempt to import from repositories/.') + try: + from modules.relative_imports import RelativeImport + + with RelativeImport("repositories/exllama"): + from generator import ExLlamaGenerator + from model import ExLlama, ExLlamaCache, ExLlamaConfig + from tokenizer import ExLlamaTokenizer + except: + logger.error( + "Could not find repositories/exllama. Please ensure that exllama" + " (https://github.com/turboderp/exllama) is cloned inside repositories/ and is up to date." + ) + raise + + +class ExllamaModel: + def __init__(self): + pass + + @classmethod + def from_pretrained(self, path_to_model): + + path_to_model = Path(f'{shared.args.model_dir}') / Path(path_to_model) + tokenizer_model_path = path_to_model / "tokenizer.model" + model_config_path = path_to_model / "config.json" + + # Find the model checkpoint + model_path = None + for ext in ['.safetensors', '.pt', '.bin']: + found = list(path_to_model.glob(f"*{ext}")) + if len(found) > 0: + if len(found) > 1: + logger.warning(f'More than one {ext} model has been found. The last one will be selected. It could be wrong.') + + model_path = found[-1] + break + + config = ExLlamaConfig(str(model_config_path)) + config.model_path = str(model_path) + config.max_seq_len = shared.args.max_seq_len + config.compress_pos_emb = shared.args.compress_pos_emb + if shared.args.gpu_split: + config.set_auto_map(shared.args.gpu_split) + config.gpu_peer_fix = True + + if shared.args.alpha_value > 1 and shared.args.rope_freq_base == 0: + config.alpha_value = shared.args.alpha_value + config.calculate_rotary_embedding_base() + elif shared.args.rope_freq_base > 0: + config.rotary_embedding_base = shared.args.rope_freq_base + + if torch_version.hip: + config.rmsnorm_no_half2 = True + config.rope_no_half2 = True + config.matmul_no_half2 = True + config.silu_no_half2 = True + + model = ExLlama(config) + tokenizer = ExLlamaTokenizer(str(tokenizer_model_path)) + cache = ExLlamaCache(model) + generator = ExLlamaGenerator(model, tokenizer, cache) + + result = self() + result.config = config + result.model = model + result.cache = cache + result.tokenizer = tokenizer + result.generator = generator + return result, result + + def encode(self, string, **kwargs): + return self.tokenizer.encode(string, max_seq_len=self.model.config.max_seq_len, add_bos=True) + + def decode(self, ids, **kwargs): + if isinstance(ids, list): + ids = torch.tensor([ids]) + elif isinstance(ids, torch.Tensor) and ids.numel() == 1: + ids = ids.view(1, -1) + + return self.tokenizer.decode(ids)[0] + + def get_logits(self, token_ids, **kwargs): + self.cache.current_seq_len = 0 + if token_ids.shape[-1] > 1: + self.model.forward(token_ids[:, :-1], self.cache, input_mask=None, preprocess_only=True) + + return self.model.forward(token_ids[:, -1:], self.cache, **kwargs).float().cpu() + + def generate_with_streaming(self, prompt, state): + + # The cache batch size must be 2 for CFG and 1 otherwise + if state['guidance_scale'] == 1: + if self.cache.batch_size == 2: + del self.cache + clear_torch_cache() + self.cache = ExLlamaCache(self.model) + self.generator = ExLlamaGenerator(self.model, self.tokenizer, self.cache) + else: + if self.cache.batch_size == 1: + del self.cache + clear_torch_cache() + self.cache = ExLlamaCache(self.model, batch_size=2) + self.generator = ExLlamaGenerator(self.model, self.tokenizer, self.cache) + + self.generator.settings.temperature = state['temperature'] + self.generator.settings.top_p = state['top_p'] + self.generator.settings.top_k = state['top_k'] + self.generator.settings.typical = state['typical_p'] + self.generator.settings.token_repetition_penalty_max = state['repetition_penalty'] + self.generator.settings.token_repetition_penalty_sustain = -1 if state['repetition_penalty_range'] <= 0 else state['repetition_penalty_range'] + if state['ban_eos_token']: + self.generator.disallow_tokens([self.tokenizer.eos_token_id]) + else: + self.generator.disallow_tokens(None) + + if state['custom_token_bans']: + to_ban = [int(x) for x in state['custom_token_bans'].split(',')] + if len(to_ban) > 0: + self.generator.disallow_tokens(to_ban) + + # Case 1: no CFG + if state['guidance_scale'] == 1: + self.generator.end_beam_search() + + # Tokenizing the input + ids = self.generator.tokenizer.encode(prompt, max_seq_len=self.model.config.max_seq_len) + if state['add_bos_token']: + ids = torch.cat( + [torch.tensor([[self.tokenizer.bos_token_id]]).to(ids.device), + ids], dim=1 + ).to(torch.int64) + ids = ids[:, -get_max_prompt_length(state):] + if state['auto_max_new_tokens']: + max_new_tokens = state['truncation_length'] - ids.shape[-1] + else: + max_new_tokens = state['max_new_tokens'] + + self.generator.gen_begin_reuse(ids) + initial_len = self.generator.sequence[0].shape[0] + has_leading_space = False + + for i in range(max_new_tokens): + token = self.generator.gen_single_token() + if i == 0 and self.generator.tokenizer.tokenizer.IdToPiece(int(token)).startswith('▁'): + has_leading_space = True + + decoded_text = self.generator.tokenizer.decode(self.generator.sequence[0][initial_len:]) + if has_leading_space: + decoded_text = ' ' + decoded_text + + # Check the partial unicode character + if chr(0xfffd) in decoded_text: + is_last = i == max_new_tokens - 1 + is_stopping = token.item() == self.generator.tokenizer.eos_token_id or shared.stop_everything + # If we are not at the end of the generation, we skip this token + if not (is_last or is_stopping): + continue + + if token.item() == self.generator.tokenizer.eos_token_id or shared.stop_everything: + break + + yield decoded_text + + # Case 2: CFG + # Copied from https://github.com/turboderp/exllama/blob/master/example_cfg.py + else: + alpha = state['guidance_scale'] + prompts = [prompt, state['negative_prompt'] or ''] + + ids, mask = self.tokenizer.encode( + prompts, + return_mask=True, + max_seq_len=self.model.config.max_seq_len, + add_bos=state['add_bos_token'] + ) + if state['auto_max_new_tokens']: + max_new_tokens = state['truncation_length'] - ids[0].shape[-1] + else: + max_new_tokens = state['max_new_tokens'] + + self.generator.gen_begin(ids, mask=mask) + initial_len = self.generator.sequence[0].shape[0] + has_leading_space = False + + for i in range(max_new_tokens): + logits = self.model.forward(self.generator.sequence[:, -1:], self.cache, input_mask=mask) + self.generator.apply_rep_penalty(logits) + + logits = F.log_softmax(logits, dim=-1) + logits_mixed = alpha * logits[0] + (1 - alpha) * logits[1] + + token, _ = self.generator.sample_current(logits_mixed) + if i == 0 and self.generator.tokenizer.tokenizer.IdToPiece(int(token)).startswith('▁'): + has_leading_space = True + + decoded_text = self.generator.tokenizer.decode(self.generator.sequence[0][initial_len:]) + if has_leading_space: + decoded_text = ' ' + decoded_text + + # Check the partial unicode character + if chr(0xfffd) in decoded_text: + is_last = i == max_new_tokens - 1 + is_stopping = token.item() == self.tokenizer.eos_token_id or shared.stop_everything + # If we are not at the end of the generation, we skip this token + if not (is_last or is_stopping): + continue + + yield decoded_text + if token.item() == self.tokenizer.eos_token_id or shared.stop_everything: + break + + batch_token = token.repeat(2, 1) + self.generator.gen_accept_token(batch_token) + + def generate(self, prompt, state): + output = '' + for output in self.generate_with_streaming(prompt, state): + pass + + return output diff --git a/modules/exllama_hf.py b/modules/exllama_hf.py new file mode 100644 index 0000000000000000000000000000000000000000..3ba1f3c3867b14de885d54d516418a81135d45bc --- /dev/null +++ b/modules/exllama_hf.py @@ -0,0 +1,174 @@ +import os +from pathlib import Path +from typing import Any, Dict, Optional, Union + +import torch +from torch.nn import CrossEntropyLoss +from transformers import GenerationConfig, PretrainedConfig, PreTrainedModel +from transformers.modeling_outputs import CausalLMOutputWithPast + +from modules import shared +from modules.logging_colors import logger + +try: + from exllama.model import ExLlama, ExLlamaCache, ExLlamaConfig +except: + logger.warning('Exllama module failed to load. Will attempt to load from repositories.') + try: + from modules.relative_imports import RelativeImport + + with RelativeImport("repositories/exllama"): + from model import ExLlama, ExLlamaCache, ExLlamaConfig + except: + logger.error("Could not find repositories/exllama/. Make sure that exllama is cloned inside repositories/ and is up to date.") + raise + + +class ExllamaHF(PreTrainedModel): + def __init__(self, config: ExLlamaConfig): + super().__init__(PretrainedConfig()) + self.ex_config = config + self.ex_model = ExLlama(self.ex_config) + self.generation_config = GenerationConfig() + self.lora = None + + self.ex_cache = ExLlamaCache(self.ex_model) + self.past_seq = None + + if shared.args.cfg_cache: + self.ex_cache_negative = ExLlamaCache(self.ex_model) + self.past_seq_negative = None + + def _validate_model_class(self): + pass + + def _validate_model_kwargs(self, model_kwargs: Dict[str, Any]): + pass + + def prepare_inputs_for_generation(self, input_ids, **kwargs): + return {'input_ids': input_ids, **kwargs} + + @property + def device(self) -> torch.device: + return torch.device(0) + + def __call__(self, *args, **kwargs): + use_cache = kwargs.get('use_cache', True) + labels = kwargs.get('labels', None) + past_key_values = kwargs.get('past_key_values', None) + + if len(args) > 0: + if not shared.args.cfg_cache: + logger.error("Please enable the cfg-cache option to use CFG with ExLlama_HF.") + return + + input_ids = args[0] + is_negative = True + past_seq = self.past_seq_negative + ex_cache = self.ex_cache_negative + else: + input_ids = kwargs['input_ids'] + is_negative = False + past_seq = self.past_seq + ex_cache = self.ex_cache + + seq = input_ids[0].tolist() + if is_negative and past_key_values is not None: + seq = past_key_values + seq + + seq_tensor = torch.tensor(seq) + reset = True + + # Make the forward call + if labels is None: + if past_seq is not None: + min_length = min(past_seq.shape[0], seq_tensor.shape[0]) + indices = torch.nonzero(~torch.eq(past_seq[:min_length], seq_tensor[:min_length])) + if len(indices) > 0: + longest_prefix = indices[0].item() + else: + longest_prefix = min_length + + if longest_prefix > 0: + reset = False + ex_cache.current_seq_len = longest_prefix + if len(seq_tensor) - longest_prefix > 1: + self.ex_model.forward(seq_tensor[longest_prefix:-1].view(1, -1), ex_cache, preprocess_only=True, lora=self.lora) + elif len(seq_tensor) == longest_prefix: + # Very tricky: if the prefix we are reusing *is* the input_ids, then we have to back up the cache pointer by one, + # because we feed input_ids[-1] to forward() below, but that last token is already in the cache! + ex_cache.current_seq_len -= 1 + + if reset: + ex_cache.current_seq_len = 0 + if len(seq_tensor) > 1: + self.ex_model.forward(seq_tensor[:-1].view(1, -1), ex_cache, preprocess_only=True, lora=self.lora) + + logits = self.ex_model.forward(seq_tensor[-1:].view(1, -1), ex_cache, lora=self.lora).to(input_ids.device) + else: + ex_cache.current_seq_len = 0 + logits = self.ex_model.forward(seq_tensor.view(1, -1), ex_cache, last_id_only=False, lora=self.lora) + + if is_negative: + self.past_seq_negative = seq_tensor + else: + self.past_seq = seq_tensor + + loss = None + if labels is not None: + # Shift so that tokens < n predict n + shift_logits = logits[..., :-1, :].contiguous() + shift_labels = labels[..., 1:].contiguous() + # Flatten the tokens + loss_fct = CrossEntropyLoss() + shift_logits = shift_logits.view(-1, logits.shape[-1]) + shift_labels = shift_labels.view(-1) + # Enable model parallelism + shift_labels = shift_labels.to(shift_logits.device) + loss = loss_fct(shift_logits, shift_labels) + + return CausalLMOutputWithPast(logits=logits, past_key_values=seq if use_cache else None, loss=loss) + + @classmethod + def from_pretrained(cls, pretrained_model_name_or_path: Optional[Union[str, os.PathLike]], *model_args, **kwargs): + assert len(model_args) == 0 and len(kwargs) == 0, "extra args is currently not supported" + if isinstance(pretrained_model_name_or_path, str): + pretrained_model_name_or_path = Path(pretrained_model_name_or_path) + + pretrained_model_name_or_path = Path(f'{shared.args.model_dir}') / Path(pretrained_model_name_or_path) + config = ExLlamaConfig(pretrained_model_name_or_path / 'config.json') + + # from 'oobabooga/text-generation-webui/modules/exllama.py' + weight_path = None + for ext in ['.safetensors', '.pt', '.bin']: + found = list(pretrained_model_name_or_path.glob(f"*{ext}")) + if len(found) > 0: + weight_path = found[-1] + break + assert weight_path is not None, f'could not find weight in "{pretrained_model_name_or_path}"' + + config.model_path = str(weight_path) + config.max_seq_len = shared.args.max_seq_len + config.compress_pos_emb = shared.args.compress_pos_emb + if shared.args.gpu_split: + config.set_auto_map(shared.args.gpu_split) + config.gpu_peer_fix = True + + if shared.args.alpha_value > 1 and shared.args.rope_freq_base == 0: + config.alpha_value = shared.args.alpha_value + config.calculate_rotary_embedding_base() + elif shared.args.rope_freq_base > 0: + config.rotary_embedding_base = shared.args.rope_freq_base + + if torch.version.hip: + config.rmsnorm_no_half2 = True + config.rope_no_half2 = True + config.matmul_no_half2 = True + config.silu_no_half2 = True + + # This slowes down a bit but align better with autogptq generation. + # TODO: Should give user choice to tune the exllama config + # config.fused_attn = False + # config.fused_mlp_thd = 0 + + return ExllamaHF(config) diff --git a/modules/exllamav2.py b/modules/exllamav2.py new file mode 100644 index 0000000000000000000000000000000000000000..2730d9f5212c2ebed0c2b135eb98fdc2eaaa7670 --- /dev/null +++ b/modules/exllamav2.py @@ -0,0 +1,139 @@ +import traceback +from pathlib import Path + +import torch +from exllamav2 import ( + ExLlamaV2, + ExLlamaV2Cache, + ExLlamaV2Cache_8bit, + ExLlamaV2Config, + ExLlamaV2Tokenizer +) +from exllamav2.generator import ExLlamaV2Sampler, ExLlamaV2StreamingGenerator + +from modules import shared +from modules.logging_colors import logger +from modules.text_generation import get_max_prompt_length + +try: + import flash_attn +except ModuleNotFoundError: + logger.warning( + 'You are running ExLlamaV2 without flash-attention. This will cause the VRAM usage ' + 'to be a lot higher than it could be.\n' + 'Try installing flash-attention following the instructions here: ' + 'https://github.com/Dao-AILab/flash-attention#installation-and-features' + ) + pass +except Exception: + logger.warning('Failed to load flash-attention due to the following error:\n') + traceback.print_exc() + + +class Exllamav2Model: + def __init__(self): + pass + + @classmethod + def from_pretrained(self, path_to_model): + + path_to_model = Path(f'{shared.args.model_dir}') / Path(path_to_model) + + config = ExLlamaV2Config() + config.model_dir = str(path_to_model) + config.prepare() + + config.max_seq_len = shared.args.max_seq_len + config.scale_pos_emb = shared.args.compress_pos_emb + config.scale_alpha_value = shared.args.alpha_value + config.no_flash_attn = shared.args.no_flash_attn + config.num_experts_per_token = int(shared.args.num_experts_per_token) + + model = ExLlamaV2(config) + + split = None + if shared.args.gpu_split: + split = [float(alloc) for alloc in shared.args.gpu_split.split(",")] + + model.load(split) + + tokenizer = ExLlamaV2Tokenizer(config) + if shared.args.cache_8bit: + cache = ExLlamaV2Cache_8bit(model) + else: + cache = ExLlamaV2Cache(model) + + generator = ExLlamaV2StreamingGenerator(model, cache, tokenizer) + + result = self() + result.model = model + result.cache = cache + result.tokenizer = tokenizer + result.generator = generator + result.loras = None + return result, result + + def encode(self, string, **kwargs): + return self.tokenizer.encode(string, add_bos=True, encode_special_tokens=True) + + def decode(self, ids, **kwargs): + if isinstance(ids, list): + ids = torch.tensor([ids]) + elif isinstance(ids, torch.Tensor) and ids.numel() == 1: + ids = ids.view(1, -1) + + return self.tokenizer.decode(ids, decode_special_tokens=True)[0] + + def get_logits(self, token_ids, **kwargs): + self.cache.current_seq_len = 0 + if token_ids.shape[-1] > 1: + self.model.forward(token_ids[:, :-1], self.cache, input_mask=None, preprocess_only=True, loras=self.loras) + + return self.model.forward(token_ids[:, -1:], self.cache, input_mask=None, loras=self.loras, **kwargs).float().cpu() + + def generate_with_streaming(self, prompt, state): + settings = ExLlamaV2Sampler.Settings() + settings.temperature = state['temperature'] + settings.top_k = state['top_k'] + settings.top_p = state['top_p'] + settings.min_p = state['min_p'] + settings.tfs = state['tfs'] + settings.typical = state['typical_p'] + settings.mirostat = state['mirostat_mode'] == 2 + settings.mirostat_tau = state['mirostat_tau'] + settings.mirostat_eta = state['mirostat_eta'] + settings.token_repetition_penalty = state['repetition_penalty'] + settings.token_repetition_range = -1 if state['repetition_penalty_range'] <= 0 else state['repetition_penalty_range'] + if state['ban_eos_token']: + settings.disallow_tokens(self.tokenizer, [self.tokenizer.eos_token_id]) + + if state['custom_token_bans']: + to_ban = [int(x) for x in state['custom_token_bans'].split(',')] + if len(to_ban) > 0: + settings.disallow_tokens(self.tokenizer, to_ban) + + ids = self.tokenizer.encode(prompt, add_bos=state['add_bos_token'], encode_special_tokens=True) + ids = ids[:, -get_max_prompt_length(state):] + + if state['auto_max_new_tokens']: + max_new_tokens = state['truncation_length'] - ids.shape[-1] + else: + max_new_tokens = state['max_new_tokens'] + + self.generator.begin_stream(ids, settings, loras=self.loras) + + decoded_text = '' + for i in range(max_new_tokens): + chunk, eos, _ = self.generator.stream() + if eos or shared.stop_everything: + break + + decoded_text += chunk + yield decoded_text + + def generate(self, prompt, state): + output = '' + for output in self.generate_with_streaming(prompt, state): + pass + + return output diff --git a/modules/exllamav2_hf.py b/modules/exllamav2_hf.py new file mode 100644 index 0000000000000000000000000000000000000000..944c39dd29557f8304c628c67be18182a829912f --- /dev/null +++ b/modules/exllamav2_hf.py @@ -0,0 +1,170 @@ +import os +import traceback +from pathlib import Path +from typing import Any, Dict, Optional, Union + +import torch +from exllamav2 import ( + ExLlamaV2, + ExLlamaV2Cache, + ExLlamaV2Cache_8bit, + ExLlamaV2Config +) +from torch.nn import CrossEntropyLoss +from transformers import GenerationConfig, PretrainedConfig, PreTrainedModel +from transformers.modeling_outputs import CausalLMOutputWithPast + +from modules import shared +from modules.logging_colors import logger + +try: + import flash_attn +except ModuleNotFoundError: + logger.warning( + 'You are running ExLlamaV2 without flash-attention. This will cause the VRAM usage ' + 'to be a lot higher than it could be.\n' + 'Try installing flash-attention following the instructions here: ' + 'https://github.com/Dao-AILab/flash-attention#installation-and-features' + ) + pass +except Exception: + logger.warning('Failed to load flash-attention due to the following error:\n') + traceback.print_exc() + + +class Exllamav2HF(PreTrainedModel): + def __init__(self, config: ExLlamaV2Config): + super().__init__(PretrainedConfig()) + self.ex_config = config + self.ex_model = ExLlamaV2(config) + split = None + if shared.args.gpu_split: + split = [float(alloc) for alloc in shared.args.gpu_split.split(",")] + + self.ex_model.load(split) + self.generation_config = GenerationConfig() + self.loras = None + + if shared.args.cache_8bit: + self.ex_cache = ExLlamaV2Cache_8bit(self.ex_model) + else: + self.ex_cache = ExLlamaV2Cache(self.ex_model) + + self.past_seq = None + if shared.args.cfg_cache: + if shared.args.cache_8bit: + self.ex_cache_negative = ExLlamaV2Cache_8bit(self.ex_model) + else: + self.ex_cache_negative = ExLlamaV2Cache(self.ex_model) + + self.past_seq_negative = None + + def _validate_model_class(self): + pass + + def _validate_model_kwargs(self, model_kwargs: Dict[str, Any]): + pass + + def prepare_inputs_for_generation(self, input_ids, **kwargs): + return {'input_ids': input_ids, **kwargs} + + @property + def device(self) -> torch.device: + return torch.device(0) + + def __call__(self, *args, **kwargs): + use_cache = kwargs.get('use_cache', True) + labels = kwargs.get('labels', None) + past_key_values = kwargs.get('past_key_values', None) + + if len(args) > 0: + if not shared.args.cfg_cache: + logger.error("Please enable the cfg-cache option to use CFG with ExLlamav2_HF.") + return + + input_ids = args[0] + is_negative = True + past_seq = self.past_seq_negative + ex_cache = self.ex_cache_negative + else: + input_ids = kwargs['input_ids'] + is_negative = False + past_seq = self.past_seq + ex_cache = self.ex_cache + + seq = input_ids[0].tolist() + if is_negative and past_key_values is not None: + seq = past_key_values + seq + + seq_tensor = torch.tensor(seq) + reset = True + + # Make the forward call + if labels is None: + if past_seq is not None: + min_length = min(past_seq.shape[0], seq_tensor.shape[0]) + indices = torch.nonzero(~torch.eq(past_seq[:min_length], seq_tensor[:min_length])) + if len(indices) > 0: + longest_prefix = indices[0].item() + else: + longest_prefix = min_length + + if longest_prefix > 0: + reset = False + ex_cache.current_seq_len = longest_prefix + if len(seq_tensor) - longest_prefix > 1: + self.ex_model.forward(seq_tensor[longest_prefix:-1].view(1, -1), ex_cache, preprocess_only=True, loras=self.loras) + elif len(seq_tensor) == longest_prefix: + # Very tricky: if the prefix we are reusing *is* the input_ids, then we have to back up the cache pointer by one, + # because we feed input_ids[-1] to forward() below, but that last token is already in the cache! + ex_cache.current_seq_len -= 1 + + if reset: + ex_cache.current_seq_len = 0 + if len(seq_tensor) > 1: + self.ex_model.forward(seq_tensor[:-1].view(1, -1), ex_cache, preprocess_only=True, loras=self.loras) + + logits = self.ex_model.forward(seq_tensor[-1:].view(1, -1), ex_cache, loras=self.loras).to(input_ids.device).float() + else: + ex_cache.current_seq_len = 0 + logits = self.ex_model.forward(seq_tensor.view(1, -1), ex_cache, last_id_only=False, loras=self.loras).float() + + if is_negative: + self.past_seq_negative = seq_tensor + else: + self.past_seq = seq_tensor + + loss = None + if labels is not None: + # Shift so that tokens < n predict n + shift_logits = logits[..., :-1, :].contiguous() + shift_labels = labels[..., 1:].contiguous() + # Flatten the tokens + loss_fct = CrossEntropyLoss() + shift_logits = shift_logits.view(-1, logits.shape[-1]) + shift_labels = shift_labels.view(-1) + # Enable model parallelism + shift_labels = shift_labels.to(shift_logits.device) + loss = loss_fct(shift_logits, shift_labels) + + return CausalLMOutputWithPast(logits=logits, past_key_values=seq if use_cache else None, loss=loss) + + @classmethod + def from_pretrained(cls, pretrained_model_name_or_path: Optional[Union[str, os.PathLike]], *model_args, **kwargs): + assert len(model_args) == 0 and len(kwargs) == 0, "extra args is currently not supported" + if isinstance(pretrained_model_name_or_path, str): + pretrained_model_name_or_path = Path(pretrained_model_name_or_path) + + pretrained_model_name_or_path = Path(f'{shared.args.model_dir}') / Path(pretrained_model_name_or_path) + + config = ExLlamaV2Config() + config.model_dir = str(pretrained_model_name_or_path) + config.prepare() + + config.max_seq_len = shared.args.max_seq_len + config.scale_pos_emb = shared.args.compress_pos_emb + config.scale_alpha_value = shared.args.alpha_value + config.no_flash_attn = shared.args.no_flash_attn + config.num_experts_per_token = int(shared.args.num_experts_per_token) + + return Exllamav2HF(config) diff --git a/modules/extensions.py b/modules/extensions.py new file mode 100644 index 0000000000000000000000000000000000000000..2a3b0bb1d4fb0cc7f5681df57e32c3c9bacaede4 --- /dev/null +++ b/modules/extensions.py @@ -0,0 +1,229 @@ +import traceback +from functools import partial +from inspect import signature + +import gradio as gr + +import extensions +import modules.shared as shared +from modules.logging_colors import logger + +state = {} +available_extensions = [] +setup_called = set() + + +def apply_settings(extension, name): + if not hasattr(extension, 'params'): + return + + for param in extension.params: + _id = f"{name}-{param}" + if _id not in shared.settings: + continue + + extension.params[param] = shared.settings[_id] + + +def load_extensions(): + global state, setup_called + state = {} + for i, name in enumerate(shared.args.extensions): + if name in available_extensions: + if name != 'api': + logger.info(f'Loading the extension "{name}"') + try: + try: + exec(f"import extensions.{name}.script") + except ModuleNotFoundError: + logger.error(f"Could not import the requirements for '{name}'. Make sure to install the requirements for the extension.\n\nLinux / Mac:\n\npip install -r extensions/{name}/requirements.txt --upgrade\n\nWindows:\n\npip install -r extensions\\{name}\\requirements.txt --upgrade\n\nIf you used the one-click installer, paste the command above in the terminal window opened after launching the cmd script for your OS.") + raise + + extension = getattr(extensions, name).script + apply_settings(extension, name) + if extension not in setup_called and hasattr(extension, "setup"): + setup_called.add(extension) + extension.setup() + + state[name] = [True, i] + except: + logger.error(f'Failed to load the extension "{name}".') + traceback.print_exc() + + +# This iterator returns the extensions in the order specified in the command-line +def iterator(): + for name in sorted(state, key=lambda x: state[x][1]): + if state[name][0]: + yield getattr(extensions, name).script, name + + +# Extension functions that map string -> string +def _apply_string_extensions(function_name, text, state, is_chat=False): + for extension, _ in iterator(): + if hasattr(extension, function_name): + func = getattr(extension, function_name) + + # Handle old extensions without the 'state' arg or + # the 'is_chat' kwarg + count = 0 + has_chat = False + for k in signature(func).parameters: + if k == 'is_chat': + has_chat = True + else: + count += 1 + + if count == 2: + args = [text, state] + else: + args = [text] + + if has_chat: + kwargs = {'is_chat': is_chat} + else: + kwargs = {} + + text = func(*args, **kwargs) + + return text + + +# Extension functions that map string -> string +def _apply_chat_input_extensions(text, visible_text, state): + for extension, _ in iterator(): + if hasattr(extension, 'chat_input_modifier'): + text, visible_text = extension.chat_input_modifier(text, visible_text, state) + + return text, visible_text + + +# custom_generate_chat_prompt handling - currently only the first one will work +def _apply_custom_generate_chat_prompt(text, state, **kwargs): + for extension, _ in iterator(): + if hasattr(extension, 'custom_generate_chat_prompt'): + return extension.custom_generate_chat_prompt(text, state, **kwargs) + + return None + + +# Extension that modifies the input parameters before they are used +def _apply_state_modifier_extensions(state): + for extension, _ in iterator(): + if hasattr(extension, "state_modifier"): + state = getattr(extension, "state_modifier")(state) + + return state + + +# Extension that modifies the chat history before it is used +def _apply_history_modifier_extensions(history): + for extension, _ in iterator(): + if hasattr(extension, "history_modifier"): + history = getattr(extension, "history_modifier")(history) + + return history + + +# Extension functions that override the default tokenizer output - The order of execution is not defined +def _apply_tokenizer_extensions(function_name, state, prompt, input_ids, input_embeds): + for extension, _ in iterator(): + if hasattr(extension, function_name): + prompt, input_ids, input_embeds = getattr(extension, function_name)(state, prompt, input_ids, input_embeds) + + return prompt, input_ids, input_embeds + + +# Allow extensions to add their own logits processors to the stack being run. +# Each extension would call `processor_list.append({their LogitsProcessor}())`. +def _apply_logits_processor_extensions(function_name, processor_list, input_ids): + for extension, _ in iterator(): + if hasattr(extension, function_name): + result = getattr(extension, function_name)(processor_list, input_ids) + if type(result) is list: + processor_list = result + + return processor_list + + +# Get prompt length in tokens after applying extension functions which override the default tokenizer output +# currently only the first one will work +def _apply_custom_tokenized_length(prompt): + for extension, _ in iterator(): + if hasattr(extension, 'custom_tokenized_length'): + return getattr(extension, 'custom_tokenized_length')(prompt) + + return None + + +# Custom generate reply handling - currently only the first one will work +def _apply_custom_generate_reply(): + for extension, _ in iterator(): + if hasattr(extension, 'custom_generate_reply'): + return getattr(extension, 'custom_generate_reply') + + return None + + +def _apply_custom_css(): + all_css = '' + for extension, _ in iterator(): + if hasattr(extension, 'custom_css'): + all_css += getattr(extension, 'custom_css')() + + return all_css + + +def _apply_custom_js(): + all_js = '' + for extension, _ in iterator(): + if hasattr(extension, 'custom_js'): + all_js += getattr(extension, 'custom_js')() + + return all_js + + +def create_extensions_block(): + to_display = [] + for extension, name in iterator(): + if hasattr(extension, "ui") and not (hasattr(extension, 'params') and extension.params.get('is_tab', False)): + to_display.append((extension, name)) + + # Creating the extension ui elements + if len(to_display) > 0: + with gr.Column(elem_id="extensions"): + for row in to_display: + extension, _ = row + extension.ui() + + +def create_extensions_tabs(): + for extension, name in iterator(): + if hasattr(extension, "ui") and (hasattr(extension, 'params') and extension.params.get('is_tab', False)): + display_name = getattr(extension, 'params', {}).get('display_name', name) + with gr.Tab(display_name, elem_classes="extension-tab"): + extension.ui() + + +EXTENSION_MAP = { + "input": partial(_apply_string_extensions, "input_modifier"), + "output": partial(_apply_string_extensions, "output_modifier"), + "chat_input": _apply_chat_input_extensions, + "state": _apply_state_modifier_extensions, + "history": _apply_history_modifier_extensions, + "bot_prefix": partial(_apply_string_extensions, "bot_prefix_modifier"), + "tokenizer": partial(_apply_tokenizer_extensions, "tokenizer_modifier"), + 'logits_processor': partial(_apply_logits_processor_extensions, 'logits_processor_modifier'), + "custom_generate_chat_prompt": _apply_custom_generate_chat_prompt, + "custom_generate_reply": _apply_custom_generate_reply, + "tokenized_length": _apply_custom_tokenized_length, + "css": _apply_custom_css, + "js": _apply_custom_js +} + + +def apply_extensions(typ, *args, **kwargs): + if typ not in EXTENSION_MAP: + raise ValueError(f"Invalid extension type {typ}") + + return EXTENSION_MAP[typ](*args, **kwargs) diff --git a/modules/github.py b/modules/github.py new file mode 100644 index 0000000000000000000000000000000000000000..282267b6be7f3b0371a3fd332f98e38611c9fb9a --- /dev/null +++ b/modules/github.py @@ -0,0 +1,38 @@ +import subprocess +from pathlib import Path + +new_extensions = set() + + +def clone_or_pull_repository(github_url): + global new_extensions + + repository_folder = Path("extensions") + repo_name = github_url.rstrip("/").split("/")[-1].split(".")[0] + + # Check if the repository folder exists + if not repository_folder.exists(): + repository_folder.mkdir(parents=True) + + repo_path = repository_folder / repo_name + + # Check if the repository is already cloned + if repo_path.exists(): + yield f"Updating {github_url}..." + # Perform a 'git pull' to update the repository + try: + pull_output = subprocess.check_output(["git", "-C", repo_path, "pull"], stderr=subprocess.STDOUT) + yield "Done." + return pull_output.decode() + except subprocess.CalledProcessError as e: + return str(e) + + # Clone the repository + try: + yield f"Cloning {github_url}..." + clone_output = subprocess.check_output(["git", "clone", github_url, repo_path], stderr=subprocess.STDOUT) + new_extensions.add(repo_name) + yield f"The extension `{repo_name}` has been downloaded.\n\nPlease close the the web UI completely and launch it again to be able to load it." + return clone_output.decode() + except subprocess.CalledProcessError as e: + return str(e) diff --git a/modules/grammar/__pycache__/grammar_utils.cpython-310.pyc b/modules/grammar/__pycache__/grammar_utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c2c6fdad86fd8b498f30df12f1f7dcb6dba3f535 Binary files /dev/null and b/modules/grammar/__pycache__/grammar_utils.cpython-310.pyc differ diff --git a/modules/grammar/__pycache__/logits_process.cpython-310.pyc b/modules/grammar/__pycache__/logits_process.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..93f5c7602910d63e31cc83eabd98421b1b8fc963 Binary files /dev/null and b/modules/grammar/__pycache__/logits_process.cpython-310.pyc differ diff --git a/modules/grammar/grammar_utils.py b/modules/grammar/grammar_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..4b37c24a7ac1e3b41a91585c956b17b6e07c6328 --- /dev/null +++ b/modules/grammar/grammar_utils.py @@ -0,0 +1,687 @@ +''' +This file has been 100% copied from this PR to the Transformers library: +https://github.com/huggingface/transformers/pull/27557 + +Author: Saibo-creator +Author GitHub: https://github.com/Saibo-creator + +All credits go to the author. +''' + +import logging +import re +import time +from abc import ABC +from functools import lru_cache +from typing import Dict, List + +import torch + +from modules import shared + +logger = logging.getLogger(__name__) + + +######################## +# EBNF Grammar Parsing # +######################## + +END_OF_ALTERNATE_MARKER = 0 +END_OF_RULE_MARKER = 0 +TO_BE_FILLED_MARKER = 0 +REF_RULE_MARKER = 1 +LITERAL_MARKER = 2 + + +class ParseState: + def __init__(self): + self.symbol_ids = {} + self.grammar_encoding = [] # old name: out_grammar + + +def get_symbol_id(state, src): + if src not in state.symbol_ids: + state.symbol_ids[src] = len(state.symbol_ids) + return state.symbol_ids[src] + + +def generate_symbol_id(state, base_name): + next_id = len(state.symbol_ids) + state.symbol_ids[base_name + "_" + str(next_id)] = next_id + return next_id + + +def is_word_char(c): + return c.isalnum() or c == "-" or c == "_" + + +def hex_to_int(c): + if c.isdigit(): + return int(c) + elif "a" <= c.lower() <= "f": + return ord(c.lower()) - ord("a") + 10 + return -1 + + +def remove_leading_white_space(src, newline_ok): + """ + Skips over whitespace and comments in the input string. + This function processes the input string, skipping over any spaces, tabs, + and content following a '#' character, which denotes a comment. The parsing + of a comment continues until the end of the line (denoted by newline characters + '\r' or '\n'). If the 'newline_ok' parameter is set to False, the function + will stop processing and return the remaining string upon encountering a + newline character, otherwise it will skip over newline characters as well. + Parameters: + src (str): The input string to be processed. + newline_ok (bool): A flag indicating whether encountering a newline character + should stop the parsing (False) or if it should be skipped (True). + Returns: + str: The remaining portion of the input string after skipping whitespace and comments. + """ + pos = 0 + while pos < len(src) and (src[pos].isspace() or src[pos] == "#"): + if src[pos] == "#": + while pos < len(src) and src[pos] not in ("\r", "\n"): + pos += 1 + else: + if not newline_ok and src[pos] in ("\r", "\n"): + break + pos += 1 + return src[pos:] + + +def parse_name(src): + pos = 0 + while pos < len(src) and is_word_char(src[pos]): + pos += 1 + if pos == 0: + raise RuntimeError("expecting name at " + src) + return src[:pos], src[pos:] + + +def parse_char(src): + """ + parse the leading char from the input string + :param src: + :return: char, remaining_src + """ + + # if we have a backslash, it's maybe an escape + if src[0] == "\\": + esc = src[1] + if esc == "x": + first = hex_to_int(src[2]) + if first > -1: + second = hex_to_int(src[3]) + if second > -1: + return (first << 4) + second, src[4:] + raise RuntimeError("expecting \\xNN at " + src) + elif esc in ('"', "[", "]"): + return esc, src[2:] + elif esc == "r": + return "\r", src[2:] + elif esc == "n": + return "\n", src[2:] + elif esc == "t": + return "\t", src[2:] + raise RuntimeError("unknown escape at " + src) + elif src: + return src[0], src[1:] + raise RuntimeError("unexpected end of input") + + +def parse_sequence(state, src, rule_name, outbuf, is_nested): + out_start_pos = len(outbuf) + + # sequence size, will be replaced at end when known + outbuf.append(TO_BE_FILLED_MARKER) + + last_sym_start = len(outbuf) + remaining_src = src + while remaining_src: + if remaining_src[0] == '"': # literal string + remaining_src = remaining_src[1:] + last_sym_start = len(outbuf) + while remaining_src[0] != '"': + char, remaining_src = parse_char(remaining_src) + + # each char of a literal is encoded as a "range" of char - char + outbuf.append(LITERAL_MARKER) + outbuf.append(ord(char)) + outbuf.append(ord(char)) + remaining_src = remove_leading_white_space(remaining_src[1:], is_nested) + elif remaining_src[0] == "[": # char range(s) + remaining_src = remaining_src[1:] + last_sym_start = len(outbuf) + # num chars in range - replaced at end of loop + outbuf.append(TO_BE_FILLED_MARKER) + while remaining_src[0] != "]": + char, remaining_src = parse_char(remaining_src) + + outbuf.append(ord(char)) + if remaining_src[0] == "-" and remaining_src[1] != "]": + endchar_pair, remaining_src = parse_char(remaining_src[1:]) + outbuf.append(ord(endchar_pair)) + else: + # chars that aren't part of a c1-c2 range are just doubled (i.e., c-c) + outbuf.append(ord(char)) + # replace num chars with actual + outbuf[last_sym_start] = len(outbuf) - last_sym_start - 1 + remaining_src = remove_leading_white_space(remaining_src[1:], is_nested) + elif is_word_char(remaining_src[0]): # rule reference + name, remaining_src = parse_name(remaining_src) + ref_rule_id = get_symbol_id(state, name) + remaining_src = remove_leading_white_space(remaining_src, is_nested) + last_sym_start = len(outbuf) + outbuf.append(REF_RULE_MARKER) + outbuf.append(ref_rule_id) + elif remaining_src[0] == "(": # grouping + # parse nested alternates into synthesized rule + remaining_src = remove_leading_white_space(remaining_src[1:], True) + sub_rule_id = generate_symbol_id(state, rule_name) + remaining_src = parse_alternates(state, remaining_src, rule_name, sub_rule_id, True) + last_sym_start = len(outbuf) + # output reference to synthesized rule + outbuf.append(REF_RULE_MARKER) + outbuf.append(sub_rule_id) + if remaining_src[0] != ")": + raise RuntimeError("expecting ')' at " + remaining_src) + remaining_src = remove_leading_white_space(remaining_src[1:], is_nested) + elif remaining_src[0] in ("*", "+", "?"): # repetition operator + if len(outbuf) - out_start_pos - 1 == 0: + raise RuntimeError("expecting preceeding item to */+/? at " + remaining_src) + out_grammar = state.grammar_encoding + + # apply transformation to previous symbol (last_sym_start - + # end) according to rewrite rules: + # S* --> S' ::= S S' | + # S+ --> S' ::= S S' | S + # S? --> S' ::= S | + sub_rule_id = generate_symbol_id(state, rule_name) + out_grammar.append(sub_rule_id) + sub_rule_start = len(out_grammar) + # placeholder for size of 1st alternate + out_grammar.append(TO_BE_FILLED_MARKER) + # add preceding symbol to generated rule + out_grammar.extend(outbuf[last_sym_start:]) + if remaining_src[0] in ("*", "+"): + # cause generated rule to recurse + out_grammar.append(REF_RULE_MARKER) + out_grammar.append(sub_rule_id) + # apply actual size + out_grammar[sub_rule_start] = len(out_grammar) - sub_rule_start + # mark end of 1st alternate + out_grammar.append(END_OF_ALTERNATE_MARKER) + sub_rule_start = len(out_grammar) + # placeholder for size of 2nd alternate + out_grammar.append(TO_BE_FILLED_MARKER) + if remaining_src[0] == "+": + # add preceding symbol as alternate only for '+' + out_grammar.extend(outbuf[last_sym_start:]) + # apply actual size of 2nd alternate + out_grammar[sub_rule_start] = len(out_grammar) - sub_rule_start + # mark end of 2nd alternate, then end of rule + out_grammar.append(END_OF_ALTERNATE_MARKER) + out_grammar.append(END_OF_RULE_MARKER) + + # in original rule, replace previous symbol with reference to generated rule + outbuf[last_sym_start:] = [1, sub_rule_id] + + remaining_src = remove_leading_white_space(remaining_src[1:], is_nested) + else: + break + # apply actual size of this alternate sequence + outbuf[out_start_pos] = len(outbuf) - out_start_pos + # mark end of alternate + outbuf.append(END_OF_ALTERNATE_MARKER) + return remaining_src + + +def parse_alternates(state, src, rule_name, rule_id, is_nested): + outbuf = [] + remaining_src = parse_sequence(state, src, rule_name, outbuf, is_nested) + while remaining_src and remaining_src[0] == "|": + remaining_src = remove_leading_white_space(remaining_src[1:], True) + remaining_src = parse_sequence(state, remaining_src, rule_name, outbuf, is_nested) + + state.grammar_encoding.append(rule_id) + state.grammar_encoding.extend(outbuf) + state.grammar_encoding.append(0) + return remaining_src + + +def parse_rule(state, src): + name, remaining_src = parse_name(src) + remaining_src = remove_leading_white_space(remaining_src, False) + rule_id = get_symbol_id(state, name) + + if remaining_src[:3] != "::=": + raise RuntimeError("expecting ::= at " + remaining_src) + remaining_src = remove_leading_white_space(remaining_src[3:], True) + + remaining_src = parse_alternates(state, remaining_src, name, rule_id, False) + + if remaining_src and remaining_src[0] == "\r": + remaining_src = remaining_src[2:] if remaining_src[1] == "\n" else remaining_src[1:] + elif remaining_src and remaining_src[0] == "\n": + remaining_src = remaining_src[1:] + elif remaining_src: + raise RuntimeError("expecting newline or end at " + remaining_src) + return remove_leading_white_space(remaining_src, True) + + +def parse_ebnf(src): + try: + state = ParseState() + grammar_repr = remove_leading_white_space(src, True) + last_grammar_repr = "" + while grammar_repr: + if last_grammar_repr: + last_parsed_rule_len = len(last_grammar_repr) - len(grammar_repr) + logger.debug(f"last_parsed_rule: {last_grammar_repr[:last_parsed_rule_len]}") + last_grammar_repr = grammar_repr + grammar_repr = parse_rule(state, grammar_repr) + state.grammar_encoding.append(0xFFFF) + return state + except RuntimeError as err: + logger.warning("error parsing grammar:", err) + return ParseState() + + +def print_rule(file, grammar_encoding, index, symbol_id_names): + rule_id = grammar_encoding[index] + print(f"<{index}>{symbol_id_names[rule_id]} ::=", end=" ", file=file) + pos = index + 1 + while grammar_encoding[pos]: + if pos - 1 > index: + print("|", end=" ", file=file) + pos += 1 # sequence size, not needed here + while grammar_encoding[pos]: + if grammar_encoding[pos] == REF_RULE_MARKER: + ref_rule_id = grammar_encoding[pos + 1] + print( + f"<{pos}>{symbol_id_names[ref_rule_id]}", + end=" ", + file=file, + ) + pos += 2 + else: + print("<{}>[".format(pos), end="", file=file) + num_chars = grammar_encoding[pos] + pos += 1 + + for i in range(0, num_chars, 2): + print("{}-".format(chr(grammar_encoding[pos + i])), end="", file=file) + if i + 1 < num_chars: + print("{}".format(chr(grammar_encoding[pos + i + 1])), end="", file=file) + print("]", end=" ", file=file) + pos += num_chars + pos += 1 + print(file=file) + return pos + 1 + + +def print_grammar(file, state): + pos = 0 + symbol_id_names = {v: k for k, v in state.symbol_ids.items()} + print("Grammar Rules:", file=file) + + while state.grammar_encoding[pos] != 0xFFFF: + pos = print_rule(file, state.grammar_encoding, pos, symbol_id_names) + pos = 0 + print("\nBinary representation:", file=file) + while state.grammar_encoding[pos] != 0xFFFF: + print(f"{state.grammar_encoding[pos]:04x}", end=" ", file=file) + pos += 1 + print("ffff\n") + + +################################### +# EBNF Grammar Parsing ends here # +################################### + + +class GrammarConstraint(ABC): + def __init__(self, grammar_str, start_rule_name, tokenizer): + self.tt = 0 + self.nt = 0 + state = parse_ebnf(grammar_str) + grammar_encoding = state.grammar_encoding + self.start_rule_id = state.symbol_ids.get(start_rule_name) + + self.eos_token_id = tokenizer.eos_token_id + self.token_trie = TokenTrie(tokenizer) + self.tokenizer = tokenizer + self.grammar_encoding = grammar_encoding + + pos = 0 + rules: Dict[int, int] = {} + + while grammar_encoding[pos] != 0xFFFF: + rule_id = grammar_encoding[pos] + + # Store the current position in the 'rules' list at the index corresponding to rule_id. + # This effectively maps each rule_id to its position in the grammar encoding. + rules[rule_id] = pos + pos += 1 + + # Continue to the next rule in the encoding. + # The loop advances by the size indicated at the current position (grammar_encoding[pos]) + # plus one for the size field itself. + while grammar_encoding[pos]: + pos += 1 + grammar_encoding[pos] + # Now we're at the end of the rule, + # so advance to the next rule by skipping the 0, which means 'end of rule'. + pos += 1 + + self.start_rule_pos = rules[self.start_rule_id] + self.rules_pos_dict: Dict[int, int] = rules + + def init_stacks(self): + # suppose the start rule position is 0, then grammar_encoding[0] = rule_id + # grammar_encoding[1] = rule_size + # grammar_encoding[2] = rule_type + # this is why we need to add 2 to the start rule position + stack = [self.start_rule_pos + 2] + # convert to tuple for caching(immutable) + return self.advance_stack(tuple(stack)) + + # For each stack, resolve rules to find the actual characters that are + # accepted by this stack (not the set of sub-rules). + # This is where the parsing happens. + # The parsing is a top-down, left-to-right, depth-first traversal of the + # grammar. + @lru_cache(maxsize=32768) + def advance_stack(self, stack): + stack = list(stack) + # If the stack is empty, we're done. Because no more tokens should be accepted. + if len(stack) == 0: + return [stack] + + # Get the top of the stack. + pos = stack[-1] + + # If the stack head is a terminal(literal), we can resolve it immediately. + # literal is marked with 2 in the grammar encoding. + if self.grammar_encoding[pos] > 1: + return [stack] + + # The stack head is a nonterminal (a rule reference, 1 in the grammar encoding). + # Resolving this rule gives a set of one or more possible positions + # (e.g. two in `a ::= b | c`) + # We pop the current rule off the stack and, for each option, push: + # - the symbol following this symbol in the current rule; then + # - the first symbol of the resolved rule. + referenced_rule_id = self.grammar_encoding[pos + 1] + + # subpos should points to the size of the subrule + subpos = self.rules_pos_dict[referenced_rule_id] + 1 + stacks: List[List[int]] = [] + + # do depth-first search to find all possible rules and check the next terminal + # When this value is non-zero, it indicates that subpos is not yet at the end of the rule, so we can continue. + # here subpos is a pointer, and the value in the rule encoding can never be 0 except for the end of the rule. + while self.grammar_encoding[subpos]: + new_stack = stack[:-1] + if self.grammar_encoding[pos + 2]: + # check if there is a next symbol in the current rule, e.g. `a ::= b c | d` + # if yes, push the pos to rule_size to the stack + new_stack.append(pos + 2) + + # if the type of the next symbol is not "empty", push the first symbol of the resolved rule to the stack + if self.grammar_encoding[subpos + 1]: + new_stack.append(subpos + 1) + stacks.extend(self.advance_stack(tuple(new_stack))) + # The increment subpos += self.grammar_encoding[subpos] + 1 + # moves subpos forward in the grammar encoding array to the next alternative in the current rule. + subpos += self.grammar_encoding[subpos] + 1 + return stacks + + def accept_char(self, *args, **kwargs): + """Process a byte according to the grammar rules.""" + raise NotImplementedError + + def accept_token_id(self, *args, **kwargs): + """Process a token according to the grammar rules.""" + raise NotImplementedError + + def filter_vocab(self, *args, **kwargs): + raise NotImplementedError + + +class IncrementalGrammarConstraint(GrammarConstraint): + def __init__(self, grammar_str, start_rule_name, tokenizer): + super().__init__(grammar_str, start_rule_name, tokenizer) + + def accept_char(self, byte, stacks): + new_stacks = [] + for stack in stacks: + # stack is empty + if not stack: + continue + + pos = stack[-1] + num_chars = self.grammar_encoding[pos] + + # to make pos point to the size of the char range rule + pos += 1 + found = False + for i in range(0, num_chars, 2): + if self.grammar_encoding[pos + i] <= byte and byte <= self.grammar_encoding[pos + i + 1]: + found = True + break + if not found: + continue + + pos += num_chars + new_stack = stack[:-1] + if self.grammar_encoding[pos]: + new_stack.append(pos) + new_stacks.extend(self.advance_stack(tuple(new_stack))) + + return new_stacks + + def accept_string(self, string: str, stacks: List[List[int]]): + _bytes = bytes(string, "utf-8") + for byte in _bytes: + stacks = self.accept_char(byte, stacks) + return stacks + + def accept_token_id(self, token_id: int, stacks: List[List[int]]): + if token_id == self.eos_token_id: + if stacks and all(len(stack) != 0 for stack in stacks): + raise Exception( + f"At least one of the stack should be empty when EOS is reached. However, " + f"the stacks are {stacks}" + ) + return [] + + for byte in self.token_trie.id2str(token_id): + stacks = self.accept_char(byte, stacks) + # check updated stacks + # TODO, I commented this out because it will fail when the stack is empty + # empty stack means the end of the grammar + # assert stacks != [] + + return stacks + + def accept_token_ids(self, token_ids: List[int], stacks: List[List[int]], as_string=True): + if as_string: + string = self.tokenizer.decode(token_ids) + stacks = self.accept_string(string, stacks) + else: + for token_id in token_ids: + stacks = self.accept_token_id(token_id, stacks) + return stacks + + def batch_filter_vocab(self, batch_stacks, device): + batch_acceptance = [] + for stacks in batch_stacks: + batch_acceptance.append(self.filter_vocab(stacks, device)) + return torch.stack(batch_acceptance) + + def filter_vocab(self, stacks, device): + if not stacks: # Check if stacks is empty + # Handle the empty case: for example, return a tensor of False + # The size of the tensor should match the size of your vocabulary + vocab_size = len(self.token_trie) + logger.debug(f"sum of acceptance: {0}") + return torch.zeros(vocab_size, dtype=torch.bool, device=device) + + acceptance_matrix = torch.cat([self.token_acceptance_for_stack(tuple(stack), device) for stack in stacks]) + # Merge stacks: any True => True + acceptance = acceptance_matrix.reshape(len(stacks), -1).any(dim=0) + logger.debug(f"sum of acceptance: {acceptance.sum()}") + return acceptance + + # For each sub-rule in the grammar, cache whether each byte is accepted. + @lru_cache(maxsize=None) + def pos_char_acceptance(self, pos): + acceptance = [False] * 256 + num_chars = self.grammar_encoding[pos] + pos += 1 + for i in range(0, num_chars, 2): + start = self.grammar_encoding[pos + i] + end = self.grammar_encoding[pos + i + 1] + for j in range(start, end + 1): + acceptance[j] = True + return acceptance + + # Probably this should be configurable. If the grammar has an exceedingly + # large number of states, the correct setting is a tradeoff between GPU + # RAM usage and recomputation time. + # + # The main variable that pushes usage up here is number of states in the + # grammar. + @lru_cache(maxsize=32768) + def token_acceptance_for_stack(self, stack, device): + st = time.time() + stack = list(stack) # needs to come in as a tuple for lru_cache + + accepts = [False] * len(self.token_trie) + accepts[self.eos_token_id] = len(stack) == 0 + if len(stack) == 0: + logger.debug("empty stack") + + def traverse_trie(trie, stacks): + for byte, next_trie in trie.items(): + if byte == LEAF: + token_id = next_trie + if token_id != self.eos_token_id: + accepts[token_id] = bool(stacks) + continue + + new_stacks = [] + for stk in stacks: + if not stk: + continue + + pos = stk[-1] + num_chars = self.grammar_encoding[pos] + + if not self.pos_char_acceptance(pos)[byte]: + continue + + pos += num_chars + 1 + new_stack = stk[:-1] + if self.grammar_encoding[pos]: + new_stack.append(pos) + new_stacks.extend(self.advance_stack(tuple(new_stack))) + + if new_stacks: + traverse_trie(next_trie, new_stacks) + + traverse_trie(self.token_trie.trie, [stack]) + + et = time.time() - st + x = torch.tensor(accepts, dtype=torch.bool, device=device) + self.tt += et + self.nt += 1 + return x + + +class StaticGrammarConstraint(GrammarConstraint): + def __init__(self, grammar_str, start_rule_name, tokenizer): + super().__init__(grammar_str, start_rule_name, tokenizer) + + def accept_char(self): + raise NotImplementedError + + +################# +# DATA STRUCTURES +################# + + +LEAF = -1 + + +class TokenTrie: + def __init__(self, tokenizer): + self.eos_token_id = tokenizer.eos_token_id + self.tokens = [] + self.trie = {} + self.load_tokens(tokenizer) + + def id2str(self, token_id): + return self.tokens[token_id] + + def __len__(self): + return len(self.tokens) + + def load_tokens(self, tokenizer): + def replace_hex(match): + hex_value = match.group(1) + return chr(int(hex_value, 16)) + + if "gpt2" in tokenizer.__class__.__name__.lower(): + special = tokenizer.additional_special_tokens_ids + + # Here, the decoder does a string replace on a bunch of sequences + # like ' .' for '.'. This interferes with our assumptions, where a + # token should always have exactly one representation. + # Fortunately(?) text-generation-inference doesn't seem to run this + # cleanup, so we get extraneous spaces. So, in order to generate + # the right token set for TGI, we have to skip the space trimming. + # See: + # https://github.com/huggingface/transformers/blob/main/src/transformers/tokenization_utils_base.py#L3588-L3600 + def fmt_token(id): + if id in special: + return None + return bytes(tokenizer.decode([id], clean_up_tokenization_spaces=False), "utf-8") + + elif "llama" in tokenizer.__class__.__name__.lower(): + + def fmt_token(id): + token = tokenizer.convert_ids_to_tokens(id) + token = re.sub(r"<0x([0-9a-fA-F]{2})>", replace_hex, token) + token = token.replace("▁", " ") + return bytes(token, "utf-8") + + else: + print("Warning: unrecognized tokenizer: using default token formatting") + + def fmt_token(id): + token = tokenizer.convert_ids_to_tokens(id) + return bytes(token, "utf-8") + + # note: vocab_size doesn't work here because there are also + # get_added_vocab() tokens + self.tokens = [fmt_token(i) for i in range(len(tokenizer.get_vocab()))] + for token_id, token_bytes in enumerate(self.tokens): + if token_bytes is not None: + self.insert_into_trie(self.trie, token_bytes, token_id) + + def insert_into_trie(self, trie, token_bytes, token_id): + current = trie + for byte in token_bytes: + if byte not in current: + current[byte] = {} + current = current[byte] + current[LEAF] = token_id + + +@lru_cache(maxsize=5) +def initialize_grammar(grammar_string): + return IncrementalGrammarConstraint(grammar_string.strip(), start_rule_name="root", tokenizer=shared.tokenizer) diff --git a/modules/grammar/logits_process.py b/modules/grammar/logits_process.py new file mode 100644 index 0000000000000000000000000000000000000000..85e8df687b0f1c1d4bb911dd04349f55b3a354a5 --- /dev/null +++ b/modules/grammar/logits_process.py @@ -0,0 +1,104 @@ +''' +This file has been 100% copied from this PR to the Transformers library: +https://github.com/huggingface/transformers/pull/27557 + +Author: Saibo-creator +Author GitHub: https://github.com/Saibo-creator + +All credits go to the author. +''' + +import math + +import torch +from transformers.generation.logits_process import LogitsProcessor +from transformers.utils import add_start_docstrings + +LOGITS_PROCESSOR_INPUTS_DOCSTRING = r""" + Args: + input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`): + Indices of input sequence tokens in the vocabulary. [What are input IDs?](../glossary#input-ids) + scores (`torch.FloatTensor` of shape `(batch_size, config.vocab_size)`): + Prediction scores of a language modeling head. These can be logits for each vocabulary when not using beam + search or log softmax for each vocabulary token when using beam search + + Return: + `torch.FloatTensor` of shape `(batch_size, config.vocab_size)`: The processed prediction scores. + +""" + + +class GrammarConstrainedLogitsProcessor(LogitsProcessor): + def __init__(self, grammar_constraint): + self.last_size = None + self.grammar_constraint = grammar_constraint + self.batch_stacks = None + + def filter_logits(self, logits, device): + # resolve each stack to a tensor of True/False for each token + # indicating acceptance + # acceptance = self.grammar_acceptor.filter_vocab(self.stacks, device) + acceptance = self.grammar_constraint.batch_filter_vocab(self.batch_stacks, device) + # logger.debug(acceptance) + # Logits to -inf where False + logits[~acceptance] = -math.inf + + # TODO: batching + def process_logits(self, input_ids, scores, parse_start_index=None): + """ + :param input_ids: + :param scores: + :param parse_start_index: default None, which means generate from scratch. Set to 0 to parse all input_ids + :return: + """ + # we dynamically create stacks at the first call, so that we know the batch size and beam size + if self.batch_stacks is None: + self.batch_stacks = [self.grammar_constraint.init_stacks() for _ in range(len(input_ids))] + + # if self.last_size is not set (which would be the case when processing the first token). + # In this case, do nothing. + if self.last_size is None: + prefix_to_parse = [ + single_input_ids[parse_start_index:] if parse_start_index is not None else [] + for single_input_ids in input_ids + ] + # self.grammar_acceptor.accept_token_ids(prefix_to_parse, self.stacks) + self.batch_stacks = [ + self.grammar_constraint.accept_token_ids(prefix, stack) + for prefix, stack in zip(prefix_to_parse, self.batch_stacks) + ] + # if the length of the current input IDs (input_ids[0]) is exactly one more than self.last_size. + # This is expected in a scenario where inputs are processed incrementally, one token at a time. + elif len(input_ids[0]) == self.last_size + 1: + # self.stacks = self.grammar_acceptor.accept_token_id(input_ids[0][-1], self.stacks) + self.batch_stacks = [ + self.grammar_constraint.accept_token_id(single_input_ids[-1], stack) + for single_input_ids, stack in zip(input_ids, self.batch_stacks) + ] + # ensure that the input size is consistent with the expected incremental processing + # (i.e., one token at a time). + else: + # here we check if the input_ids are one token longer than the last time we processed + # but we don't check if input_ids are actually valid. + # Imagine a scenario where we generate 10 tokens, then we replace the 10 generated tokens with 10 new tokens. + # In this case, the input_ids will be consistent with the last_size, but the input_ids are not valid. + # However, should we really check if the input_ids are valid here? + # If we do, then we need to reparse the whole input_ids at each call, which is not efficient. + # Maybe we should just trust the user to provide valid input_ids? + # The conclusion is that, we assume the input_ids are valid, and our generation will be correct. + # If the input_ids are not valid, then the generation result will be wrong and we don't take responsibility for that. + raise RuntimeError( + "Input ID's length is inconsistent with the current state of " + "the GrammarConstrainedLogitsProcessor. If you want to process " + "another input sequence, please instantiate a new " + "GrammarConstrainedLogitsProcessor." + ) + + self.filter_logits(scores, scores.device) + + self.last_size = len(input_ids[0]) + return scores + + @add_start_docstrings(LOGITS_PROCESSOR_INPUTS_DOCSTRING) + def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor) -> torch.FloatTensor: + return self.process_logits(input_ids, scores) diff --git a/modules/html_generator.py b/modules/html_generator.py new file mode 100644 index 0000000000000000000000000000000000000000..789cf63934985a852f996304b74a19b268fb7f7d --- /dev/null +++ b/modules/html_generator.py @@ -0,0 +1,308 @@ +import html +import os +import re +import time +from pathlib import Path + +import markdown +from PIL import Image, ImageOps + +from modules.utils import get_available_chat_styles + +# This is to store the paths to the thumbnails of the profile pictures +image_cache = {} + +with open(Path(__file__).resolve().parent / '../css/html_readable_style.css', 'r') as f: + readable_css = f.read() +with open(Path(__file__).resolve().parent / '../css/html_4chan_style.css', 'r') as css_f: + _4chan_css = css_f.read() +with open(Path(__file__).resolve().parent / '../css/html_instruct_style.css', 'r') as f: + instruct_css = f.read() + +# Custom chat styles +chat_styles = {} +for k in get_available_chat_styles(): + chat_styles[k] = open(Path(f'css/chat_style-{k}.css'), 'r').read() + +# Handle styles that derive from other styles +for k in chat_styles: + lines = chat_styles[k].split('\n') + input_string = lines[0] + match = re.search(r'chat_style-([a-z\-]*)\.css', input_string) + + if match: + style = match.group(1) + chat_styles[k] = chat_styles.get(style, '') + '\n\n' + '\n'.join(lines[1:]) + + +def fix_newlines(string): + string = string.replace('\n', '\n\n') + string = re.sub(r"\n{3,}", "\n\n", string) + string = string.strip() + return string + + +def replace_blockquote(m): + return m.group().replace('\n', '\n> ').replace('\\begin{blockquote}', '').replace('\\end{blockquote}', '') + + +def convert_to_markdown(string): + + # Blockquote + string = re.sub(r'(^|[\n])>', r'\1>', string) + pattern = re.compile(r'\\begin{blockquote}(.*?)\\end{blockquote}', re.DOTALL) + string = pattern.sub(replace_blockquote, string) + + # Code + string = string.replace('\\begin{code}', '```') + string = string.replace('\\end{code}', '```') + string = re.sub(r"(.)```", r"\1\n```", string) + + result = '' + is_code = False + for line in string.split('\n'): + if line.lstrip(' ').startswith('```'): + is_code = not is_code + + result += line + if is_code or line.startswith('|'): # Don't add an extra \n for tables or code + result += '\n' + else: + result += '\n\n' + + result = result.strip() + if is_code: + result += '\n```' # Unfinished code block + + # Unfinished list, like "\n1.". A |delete| string is added and then + # removed to force a
    or
      to be generated instead of a

      . + if re.search(r'(\n\d+\.?|\n\*\s*)$', result): + delete_str = '|delete|' + + if re.search(r'(\d+\.?)$', result) and not result.endswith('.'): + result += '.' + + result = re.sub(r'(\n\d+\.?|\n\*\s*)$', r'\g<1> ' + delete_str, result) + + html_output = markdown.markdown(result, extensions=['fenced_code', 'tables']) + pos = html_output.rfind(delete_str) + if pos > -1: + html_output = html_output[:pos] + html_output[pos + len(delete_str):] + else: + html_output = markdown.markdown(result, extensions=['fenced_code', 'tables']) + + # Unescape code blocks + pattern = re.compile(r']*>(.*?)', re.DOTALL) + html_output = pattern.sub(lambda x: html.unescape(x.group()), html_output) + + return html_output + + +def generate_basic_html(string): + string = convert_to_markdown(string) + string = f'

      {string}
      ' + return string + + +def process_post(post, c): + t = post.split('\n') + number = t[0].split(' ')[1] + if len(t) > 1: + src = '\n'.join(t[1:]) + else: + src = '' + src = re.sub('>', '>', src) + src = re.sub('(>>[0-9]*)', '\\1', src) + src = re.sub('\n', '
      \n', src) + src = f'
      {src}\n' + src = f'Anonymous No.{number}\n{src}' + return src + + +def generate_4chan_html(f): + posts = [] + post = '' + c = -2 + for line in f.splitlines(): + line += "\n" + if line == '-----\n': + continue + elif line.startswith('--- '): + c += 1 + if post != '': + src = process_post(post, c) + posts.append(src) + post = line + else: + post += line + + if post != '': + src = process_post(post, c) + posts.append(src) + + for i in range(len(posts)): + if i == 0: + posts[i] = f'
      {posts[i]}
      \n' + else: + posts[i] = f'
      {posts[i]}
      \n' + + output = '' + output += f'
      ' + for post in posts: + output += post + + output += '
      ' + output = output.split('\n') + for i in range(len(output)): + output[i] = re.sub(r'^(>(.*?)(
      |))', r'\1', output[i]) + output[i] = re.sub(r'^
      (>(.*?)(
      |))', r'
      \1', output[i]) + + output = '\n'.join(output) + return output + + +def make_thumbnail(image): + image = image.resize((350, round(image.size[1] / image.size[0] * 350)), Image.Resampling.LANCZOS) + if image.size[1] > 470: + image = ImageOps.fit(image, (350, 470), Image.LANCZOS) + + return image + + +def get_image_cache(path): + cache_folder = Path("cache") + if not cache_folder.exists(): + cache_folder.mkdir() + + mtime = os.stat(path).st_mtime + if (path in image_cache and mtime != image_cache[path][0]) or (path not in image_cache): + img = make_thumbnail(Image.open(path)) + + old_p = Path(f'cache/{path.name}_cache.png') + p = Path(f'cache/cache_{path.name}.png') + if old_p.exists(): + old_p.rename(p) + + output_file = p + img.convert('RGB').save(output_file, format='PNG') + image_cache[path] = [mtime, output_file.as_posix()] + + return image_cache[path][1] + + +def generate_instruct_html(history): + output = f'
      ' + for i, _row in enumerate(history): + row = [convert_to_markdown(entry) for entry in _row] + + if row[0]: # don't display empty user messages + output += f""" +
      +
      +
      + {row[0]} +
      +
      +
      + """ + + output += f""" +
      +
      +
      + {row[1]} +
      +
      +
      + """ + + output += "
      " + + return output + + +def generate_cai_chat_html(history, name1, name2, style, character, reset_cache=False): + output = f'
      ' + + # We use ?character and ?time.time() to force the browser to reset caches + img_bot = f'' if Path("cache/pfp_character_thumb.png").exists() else '' + img_me = f'' if Path("cache/pfp_me.png").exists() else '' + + for i, _row in enumerate(history): + row = [convert_to_markdown(entry) for entry in _row] + + if row[0]: # don't display empty user messages + output += f""" +
      +
      + {img_me} +
      +
      +
      + {name1} +
      +
      + {row[0]} +
      +
      +
      + """ + + output += f""" +
      +
      + {img_bot} +
      +
      +
      + {name2} +
      +
      + {row[1]} +
      +
      +
      + """ + + output += "
      " + return output + + +def generate_chat_html(history, name1, name2, reset_cache=False): + output = f'
      ' + + for i, _row in enumerate(history): + row = [convert_to_markdown(entry) for entry in _row] + + if row[0]: # don't display empty user messages + output += f""" +
      +
      +
      + {row[0]} +
      +
      +
      + """ + + output += f""" +
      +
      +
      + {row[1]} +
      +
      +
      + """ + + output += "
      " + return output + + +def chat_html_wrapper(history, name1, name2, mode, style, character, reset_cache=False): + if mode == 'instruct': + return generate_instruct_html(history['visible']) + elif style == 'wpp': + return generate_chat_html(history['visible'], name1, name2) + else: + return generate_cai_chat_html(history['visible'], name1, name2, style, character, reset_cache) diff --git a/modules/llama_attn_hijack.py b/modules/llama_attn_hijack.py new file mode 100644 index 0000000000000000000000000000000000000000..00436fb2ed52e8497001a9296fde97dddd8e42e1 --- /dev/null +++ b/modules/llama_attn_hijack.py @@ -0,0 +1,171 @@ +import math +import sys +from typing import Optional, Tuple + +import torch +import torch.nn as nn + +import modules.shared as shared +from modules.logging_colors import logger + +if shared.args.xformers: + try: + import xformers.ops + except Exception: + logger.error("xformers not found! Please install it before trying to use it.", file=sys.stderr) + + +def hijack_llama_attention(): + import transformers.models.llama.modeling_llama + if shared.args.xformers: + transformers.models.llama.modeling_llama.LlamaAttention.forward = xformers_forward + logger.info("Replaced attention with xformers_attention") + elif shared.args.sdp_attention: + transformers.models.llama.modeling_llama.LlamaAttention.forward = sdp_attention_forward + logger.info("Replaced attention with sdp_attention") + + +def xformers_forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Tuple[torch.Tensor]] = None, + output_attentions: bool = False, + use_cache: bool = False, +) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]: + bsz, q_len, _ = hidden_states.size() + + query_states = self.q_proj(hidden_states).view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + key_states = self.k_proj(hidden_states).view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + value_states = self.v_proj(hidden_states).view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + + kv_seq_len = key_states.shape[-2] + if past_key_value is not None: + kv_seq_len += past_key_value[0].shape[-2] + cos, sin = self.rotary_emb(value_states, seq_len=kv_seq_len) + query_states, key_states = transformers.models.llama.modeling_llama.apply_rotary_pos_emb(query_states, key_states, cos, sin, position_ids) + # [bsz, nh, t, hd] + + if past_key_value is not None: + # reuse k, v, self_attention + key_states = torch.cat([past_key_value[0], key_states], dim=2) + value_states = torch.cat([past_key_value[1], value_states], dim=2) + + past_key_value = (key_states, value_states) if use_cache else None + + # We only apply xformers optimizations if we don't need to output the whole attention matrix + if not output_attentions: + query_states = query_states.transpose(1, 2) + key_states = key_states.transpose(1, 2) + value_states = value_states.transpose(1, 2) + + # This is a nasty hack. We know attention_mask in transformers is either LowerTriangular or all Zeros. + # We therefore check if one element in the upper triangular portion is zero. If it is, then the mask is all zeros. + if attention_mask is None or attention_mask[0, 0, 0, 1] == 0: + # input and output should be of form (bsz, q_len, num_heads, head_dim) + attn_output = xformers.ops.memory_efficient_attention(query_states, key_states, value_states, attn_bias=None) + else: + # input and output should be of form (bsz, q_len, num_heads, head_dim) + attn_output = xformers.ops.memory_efficient_attention(query_states, key_states, value_states, attn_bias=xformers.ops.LowerTriangularMask()) + attn_weights = None + else: + attn_weights = torch.matmul(query_states, key_states.transpose(2, 3)) / math.sqrt(self.head_dim) + + if attn_weights.size() != (bsz, self.num_heads, q_len, kv_seq_len): + raise ValueError( + f"Attention weights should be of size {(bsz * self.num_heads, q_len, kv_seq_len)}, but is" + f" {attn_weights.size()}" + ) + + if attention_mask is not None: + if attention_mask.size() != (bsz, 1, q_len, kv_seq_len): + raise ValueError( + f"Attention mask should be of size {(bsz, 1, q_len, kv_seq_len)}, but is {attention_mask.size()}" + ) + attn_weights = attn_weights + attention_mask + attn_weights = torch.max(attn_weights, torch.tensor(torch.finfo(attn_weights.dtype).min)) + + # upcast attention to fp32 + attn_weights = nn.functional.softmax(attn_weights, dim=-1, dtype=torch.float32).to(query_states.dtype) + attn_output = torch.matmul(attn_weights, value_states) + + if attn_output.size() != (bsz, self.num_heads, q_len, self.head_dim): + raise ValueError( + f"`attn_output` should be of size {(bsz, self.num_heads, q_len, self.head_dim)}, but is" + f" {attn_output.size()}" + ) + + attn_output = attn_output.transpose(1, 2) + + attn_output = attn_output.reshape(bsz, q_len, self.hidden_size) + attn_output = self.o_proj(attn_output) + return attn_output, attn_weights, past_key_value + + +def sdp_attention_forward( + self, + hidden_states: torch.Tensor, + attention_mask: Optional[torch.Tensor] = None, + position_ids: Optional[torch.LongTensor] = None, + past_key_value: Optional[Tuple[torch.Tensor]] = None, + output_attentions: bool = False, + use_cache: bool = False, +) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]: + bsz, q_len, _ = hidden_states.size() + + query_states = self.q_proj(hidden_states).view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + key_states = self.k_proj(hidden_states).view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + value_states = self.v_proj(hidden_states).view(bsz, q_len, self.num_heads, self.head_dim).transpose(1, 2) + + kv_seq_len = key_states.shape[-2] + if past_key_value is not None: + kv_seq_len += past_key_value[0].shape[-2] + cos, sin = self.rotary_emb(value_states, seq_len=kv_seq_len) + query_states, key_states = transformers.models.llama.modeling_llama.apply_rotary_pos_emb(query_states, key_states, cos, sin, position_ids) + # [bsz, nh, t, hd] + + if past_key_value is not None: + # reuse k, v, self_attention + key_states = torch.cat([past_key_value[0], key_states], dim=2) + value_states = torch.cat([past_key_value[1], value_states], dim=2) + + past_key_value = (key_states, value_states) if use_cache else None + + # We only apply sdp attention if we don't need to output the whole attention matrix + if not output_attentions: + attn_output = torch.nn.functional.scaled_dot_product_attention(query_states, key_states, value_states, attn_mask=attention_mask, is_causal=False) + attn_weights = None + else: + attn_weights = torch.matmul(query_states, key_states.transpose(2, 3)) / math.sqrt(self.head_dim) + + if attn_weights.size() != (bsz, self.num_heads, q_len, kv_seq_len): + raise ValueError( + f"Attention weights should be of size {(bsz * self.num_heads, q_len, kv_seq_len)}, but is" + f" {attn_weights.size()}" + ) + + if attention_mask is not None: + if attention_mask.size() != (bsz, 1, q_len, kv_seq_len): + raise ValueError( + f"Attention mask should be of size {(bsz, 1, q_len, kv_seq_len)}, but is {attention_mask.size()}" + ) + attn_weights = attn_weights + attention_mask + attn_weights = torch.max(attn_weights, torch.tensor(torch.finfo(attn_weights.dtype).min)) + + # upcast attention to fp32 + attn_weights = nn.functional.softmax(attn_weights, dim=-1, dtype=torch.float32).to(query_states.dtype) + attn_output = torch.matmul(attn_weights, value_states) + + if attn_output.size() != (bsz, self.num_heads, q_len, self.head_dim): + raise ValueError( + f"`attn_output` should be of size {(bsz, self.num_heads, q_len, self.head_dim)}, but is" + f" {attn_output.size()}" + ) + + attn_output = attn_output.transpose(1, 2) + attn_output = attn_output.reshape(bsz, q_len, self.hidden_size) + + attn_output = self.o_proj(attn_output) + + return attn_output, attn_weights, past_key_value diff --git a/modules/llamacpp_hf.py b/modules/llamacpp_hf.py new file mode 100644 index 0000000000000000000000000000000000000000..b8fde4d4df09df253f1d64bbfe2e68a01a9386d7 --- /dev/null +++ b/modules/llamacpp_hf.py @@ -0,0 +1,222 @@ +import os +from pathlib import Path +from typing import Any, Dict, Optional, Union + +import torch +from torch.nn import CrossEntropyLoss +from transformers import GenerationConfig, PretrainedConfig, PreTrainedModel +from transformers.modeling_outputs import CausalLMOutputWithPast + +from modules import RoPE, shared +from modules.logging_colors import logger + +try: + import llama_cpp +except: + llama_cpp = None + +try: + import llama_cpp_cuda +except: + llama_cpp_cuda = None + +try: + import llama_cpp_cuda_tensorcores +except: + llama_cpp_cuda_tensorcores = None + + +def llama_cpp_lib(): + if shared.args.cpu and llama_cpp is not None: + return llama_cpp + elif shared.args.tensorcores and llama_cpp_cuda_tensorcores is not None: + return llama_cpp_cuda_tensorcores + elif llama_cpp_cuda is not None: + return llama_cpp_cuda + else: + return llama_cpp + + +class LlamacppHF(PreTrainedModel): + def __init__(self, model, path): + super().__init__(PretrainedConfig()) + self.model = model + self.generation_config = GenerationConfig() + + self.past_seq = None + self.llamacpp_cache = { + 'n_tokens': self.model.n_tokens, + 'input_ids': self.model.input_ids, + 'scores': self.model.scores, + 'ctx': self.model._ctx + } + + if shared.args.cfg_cache: + self.past_seq_negative = None + self.llamacpp_cache_negative = { + 'n_tokens': self.model.n_tokens, + 'input_ids': self.model.input_ids.copy(), + 'scores': self.model.scores.copy(), + 'ctx': llama_cpp_lib().llama_new_context_with_model(model.model, model.context_params) + } + + def _validate_model_class(self): + pass + + def _validate_model_kwargs(self, model_kwargs: Dict[str, Any]): + pass + + def prepare_inputs_for_generation(self, input_ids, **kwargs): + return {'input_ids': input_ids, **kwargs} + + def save_cache(self): + self.llamacpp_cache.update({ + 'n_tokens': self.model.n_tokens, + 'input_ids': self.model.input_ids, + 'scores': self.model.scores, + 'ctx': self.model._ctx + }) + + def save_negative_cache(self): + self.llamacpp_cache_negative.update({ + 'n_tokens': self.model.n_tokens, + 'input_ids': self.model.input_ids, + 'scores': self.model.scores, + 'ctx': self.model._ctx + }) + + def load_cache(self): + self.model.n_tokens = self.llamacpp_cache['n_tokens'] + self.model.input_ids = self.llamacpp_cache['input_ids'] + self.model.scores = self.llamacpp_cache['scores'] + self.model._ctx = self.llamacpp_cache['ctx'] + + def load_negative_cache(self): + self.model.n_tokens = self.llamacpp_cache_negative['n_tokens'] + self.model.input_ids = self.llamacpp_cache_negative['input_ids'] + self.model.scores = self.llamacpp_cache_negative['scores'] + self.model._ctx = self.llamacpp_cache_negative['ctx'] + + @property + def device(self) -> torch.device: + return torch.device(0) + + def __call__(self, *args, **kwargs): + use_cache = kwargs.get('use_cache', True) + labels = kwargs.get('labels', None) + past_key_values = kwargs.get('past_key_values', None) + + if len(args) > 0: + if not shared.args.cfg_cache: + logger.error("Please enable the cfg-cache option to use CFG with llamacpp_HF.") + return + + input_ids = args[0] + is_negative = True + past_seq = self.past_seq_negative + self.load_negative_cache() + else: + input_ids = kwargs['input_ids'] + is_negative = False + past_seq = self.past_seq + self.load_cache() + + seq = input_ids[0].tolist() + if is_negative and past_key_values is not None: + seq = past_key_values + seq + + seq_tensor = torch.tensor(seq) + reset = True + + # Make the forward call. The prefix-match code has been adapted from + # https://github.com/abetlen/llama-cpp-python/commit/f4090a0bb2a2a25acfe28d31c82cc1aa273bedee + if labels is None: + if past_seq is not None: + min_length = min(past_seq.shape[0], seq_tensor.shape[0]) + indices = torch.nonzero(~torch.eq(past_seq[:min_length], seq_tensor[:min_length])) + if len(indices) > 0: + longest_prefix = indices[0].item() + else: + longest_prefix = min_length + + if longest_prefix > 0: + reset = False + self.model.n_tokens = longest_prefix + if len(seq_tensor) - longest_prefix > 0: + self.model.eval(seq[longest_prefix:]) + + if reset: + self.model.reset() + self.model.eval(seq) + + logits = torch.tensor(self.model.scores[self.model.n_tokens - 1, :]).view(1, 1, -1).to(input_ids.device) + else: + self.model.reset() + self.model.eval(seq) + logits = torch.tensor(self.model.eval_logits) + logits = logits.view(1, logits.shape[0], logits.shape[1]).to(input_ids.device) + + if is_negative: + self.save_negative_cache() + self.past_seq_negative = seq_tensor + else: + self.save_cache() + self.past_seq = seq_tensor + + loss = None + if labels is not None: + # Shift so that tokens < n predict n + shift_logits = logits[..., :-1, :].contiguous() + shift_labels = labels[..., 1:].contiguous() + # Flatten the tokens + loss_fct = CrossEntropyLoss() + shift_logits = shift_logits.view(-1, logits.shape[-1]) + shift_labels = shift_labels.view(-1) + # Enable model parallelism + shift_labels = shift_labels.to(shift_logits.device) + loss = loss_fct(shift_logits, shift_labels) + + return CausalLMOutputWithPast(logits=logits, past_key_values=seq if use_cache else None, loss=loss) + + @classmethod + def from_pretrained(cls, pretrained_model_name_or_path: Optional[Union[str, os.PathLike]], *model_args, **kwargs): + assert len(model_args) == 0 and len(kwargs) == 0, "extra args is currently not supported" + + if isinstance(pretrained_model_name_or_path, str): + pretrained_model_name_or_path = Path(pretrained_model_name_or_path) + + path = Path(f'{shared.args.model_dir}') / Path(pretrained_model_name_or_path) + if path.is_file(): + model_file = path + else: + model_file = list(path.glob('*.gguf'))[0] + + logger.info(f"llama.cpp weights detected: {model_file}\n") + + if shared.args.tensor_split is None or shared.args.tensor_split.strip() == '': + tensor_split_list = None + else: + tensor_split_list = [float(x) for x in shared.args.tensor_split.strip().split(",")] + + params = { + 'model_path': str(model_file), + 'n_ctx': shared.args.n_ctx, + 'n_threads': shared.args.threads or None, + 'n_threads_batch': shared.args.threads_batch or None, + 'n_batch': shared.args.n_batch, + 'use_mmap': not shared.args.no_mmap, + 'use_mlock': shared.args.mlock, + 'mul_mat_q': not shared.args.no_mul_mat_q, + 'numa': shared.args.numa, + 'n_gpu_layers': shared.args.n_gpu_layers, + 'rope_freq_base': RoPE.get_rope_freq_base(shared.args.alpha_value, shared.args.rope_freq_base), + 'tensor_split': tensor_split_list, + 'rope_freq_scale': 1.0 / shared.args.compress_pos_emb, + 'logits_all': shared.args.logits_all, + 'offload_kqv': not shared.args.no_offload_kqv + } + + Llama = llama_cpp_lib().Llama + model = Llama(**params) + + return LlamacppHF(model, model_file) diff --git a/modules/llamacpp_model.py b/modules/llamacpp_model.py new file mode 100644 index 0000000000000000000000000000000000000000..96ea98e901dab3d70df490f9f8d1ec488898700d --- /dev/null +++ b/modules/llamacpp_model.py @@ -0,0 +1,189 @@ +import re +from functools import partial + +import numpy as np +import torch + +from modules import RoPE, shared +from modules.callbacks import Iteratorize +from modules.logging_colors import logger +from modules.text_generation import get_max_prompt_length + +try: + import llama_cpp +except: + llama_cpp = None + +try: + import llama_cpp_cuda +except: + llama_cpp_cuda = None + +try: + import llama_cpp_cuda_tensorcores +except: + llama_cpp_cuda_tensorcores = None + + +def llama_cpp_lib(): + if shared.args.cpu and llama_cpp is not None: + return llama_cpp + elif shared.args.tensorcores and llama_cpp_cuda_tensorcores is not None: + return llama_cpp_cuda_tensorcores + elif llama_cpp_cuda is not None: + return llama_cpp_cuda + else: + return llama_cpp + + +def ban_eos_logits_processor(eos_token, input_ids, logits): + logits[eos_token] = -float('inf') + return logits + + +def custom_token_ban_logits_processor(token_ids, input_ids, logits): + for token_id in token_ids: + logits[token_id] = -float('inf') + + return logits + + +class LlamaCppModel: + def __init__(self): + self.initialized = False + self.grammar_string = '' + self.grammar = None + + def __del__(self): + del self.model + + @classmethod + def from_pretrained(self, path): + + Llama = llama_cpp_lib().Llama + LlamaCache = llama_cpp_lib().LlamaCache + + result = self() + cache_capacity = 0 + if shared.args.cache_capacity is not None: + if 'GiB' in shared.args.cache_capacity: + cache_capacity = int(re.sub('[a-zA-Z]', '', shared.args.cache_capacity)) * 1000 * 1000 * 1000 + elif 'MiB' in shared.args.cache_capacity: + cache_capacity = int(re.sub('[a-zA-Z]', '', shared.args.cache_capacity)) * 1000 * 1000 + else: + cache_capacity = int(shared.args.cache_capacity) + + if cache_capacity > 0: + logger.info("Cache capacity is " + str(cache_capacity) + " bytes") + + if shared.args.tensor_split is None or shared.args.tensor_split.strip() == '': + tensor_split_list = None + else: + tensor_split_list = [float(x) for x in shared.args.tensor_split.strip().split(",")] + + params = { + 'model_path': str(path), + 'n_ctx': shared.args.n_ctx, + 'n_threads': shared.args.threads or None, + 'n_threads_batch': shared.args.threads_batch or None, + 'n_batch': shared.args.n_batch, + 'use_mmap': not shared.args.no_mmap, + 'use_mlock': shared.args.mlock, + 'mul_mat_q': not shared.args.no_mul_mat_q, + 'numa': shared.args.numa, + 'n_gpu_layers': shared.args.n_gpu_layers, + 'rope_freq_base': RoPE.get_rope_freq_base(shared.args.alpha_value, shared.args.rope_freq_base), + 'tensor_split': tensor_split_list, + 'rope_freq_scale': 1.0 / shared.args.compress_pos_emb, + 'offload_kqv': not shared.args.no_offload_kqv + } + + result.model = Llama(**params) + if cache_capacity > 0: + result.model.set_cache(LlamaCache(capacity_bytes=cache_capacity)) + + # This is ugly, but the model and the tokenizer are the same object in this library. + return result, result + + def encode(self, string): + if type(string) is str: + string = string.encode() + + return self.model.tokenize(string) + + def decode(self, ids, **kwargs): + return self.model.detokenize(ids).decode('utf-8') + + def get_logits(self, tokens): + self.model.reset() + self.model.eval(tokens) + logits = self.model._scores + logits = np.expand_dims(logits, 0) # batch dim is expected + return torch.tensor(logits, dtype=torch.float32) + + def load_grammar(self, string): + if string != self.grammar_string: + self.grammar_string = string + if string.strip() != '': + self.grammar = llama_cpp_lib().LlamaGrammar.from_string(string) + else: + self.grammar = None + + def generate(self, prompt, state, callback=None): + LogitsProcessorList = llama_cpp_lib().LogitsProcessorList + prompt = prompt if type(prompt) is str else prompt.decode() + + # Handle truncation + prompt = self.encode(prompt) + prompt = prompt[-get_max_prompt_length(state):] + prompt = self.decode(prompt) + + self.load_grammar(state['grammar_string']) + logit_processors = LogitsProcessorList() + if state['ban_eos_token']: + logit_processors.append(partial(ban_eos_logits_processor, self.model.token_eos())) + + if state['custom_token_bans']: + to_ban = [int(x) for x in state['custom_token_bans'].split(',')] + if len(to_ban) > 0: + logit_processors.append(partial(custom_token_ban_logits_processor, to_ban)) + + completion_chunks = self.model.create_completion( + prompt=prompt, + max_tokens=state['max_new_tokens'], + temperature=state['temperature'], + top_p=state['top_p'], + min_p=state['min_p'], + typical_p=state['typical_p'], + frequency_penalty=state['frequency_penalty'], + presence_penalty=state['presence_penalty'], + repeat_penalty=state['repetition_penalty'], + top_k=state['top_k'], + stream=True, + seed=int(state['seed']) if state['seed'] != -1 else None, + tfs_z=state['tfs'], + mirostat_mode=int(state['mirostat_mode']), + mirostat_tau=state['mirostat_tau'], + mirostat_eta=state['mirostat_eta'], + logits_processor=logit_processors, + grammar=self.grammar + ) + + output = "" + for completion_chunk in completion_chunks: + if shared.stop_everything: + break + + text = completion_chunk['choices'][0]['text'] + output += text + if callback: + callback(text) + + return output + + def generate_with_streaming(self, *args, **kwargs): + with Iteratorize(self.generate, args, kwargs, callback=None) as generator: + reply = '' + for token in generator: + reply += token + yield reply diff --git a/modules/loaders.py b/modules/loaders.py new file mode 100644 index 0000000000000000000000000000000000000000..d8e268e9d817d11f339c5c393b85fff15eec7894 --- /dev/null +++ b/modules/loaders.py @@ -0,0 +1,457 @@ +import functools +from collections import OrderedDict + +import gradio as gr + +from modules import shared + +loaders_and_params = OrderedDict({ + 'Transformers': [ + 'cpu_memory', + 'gpu_memory', + 'load_in_8bit', + 'bf16', + 'cpu', + 'disk', + 'auto_devices', + 'load_in_4bit', + 'use_double_quant', + 'quant_type', + 'compute_dtype', + 'trust_remote_code', + 'no_use_fast', + 'use_flash_attention_2', + 'alpha_value', + 'rope_freq_base', + 'compress_pos_emb', + 'disable_exllama', + 'disable_exllamav2', + 'transformers_info' + ], + 'llama.cpp': [ + 'n_ctx', + 'n_gpu_layers', + 'tensor_split', + 'n_batch', + 'threads', + 'threads_batch', + 'no_mmap', + 'mlock', + 'no_mul_mat_q', + 'alpha_value', + 'rope_freq_base', + 'compress_pos_emb', + 'cpu', + 'numa', + 'no_offload_kqv', + 'tensorcores', + ], + 'llamacpp_HF': [ + 'n_ctx', + 'n_gpu_layers', + 'tensor_split', + 'n_batch', + 'threads', + 'threads_batch', + 'no_mmap', + 'mlock', + 'no_mul_mat_q', + 'alpha_value', + 'rope_freq_base', + 'compress_pos_emb', + 'cpu', + 'numa', + 'cfg_cache', + 'trust_remote_code', + 'no_use_fast', + 'logits_all', + 'no_offload_kqv', + 'tensorcores', + 'llamacpp_HF_info', + ], + 'ExLlamav2_HF': [ + 'gpu_split', + 'max_seq_len', + 'cfg_cache', + 'no_flash_attn', + 'num_experts_per_token', + 'cache_8bit', + 'alpha_value', + 'compress_pos_emb', + 'trust_remote_code', + 'no_use_fast', + ], + 'ExLlama_HF': [ + 'gpu_split', + 'max_seq_len', + 'alpha_value', + 'rope_freq_base', + 'compress_pos_emb', + 'cfg_cache', + 'trust_remote_code', + 'no_use_fast', + ], + 'AutoGPTQ': [ + 'triton', + 'no_inject_fused_attention', + 'no_inject_fused_mlp', + 'no_use_cuda_fp16', + 'wbits', + 'groupsize', + 'desc_act', + 'disable_exllama', + 'disable_exllamav2', + 'gpu_memory', + 'cpu_memory', + 'cpu', + 'disk', + 'auto_devices', + 'trust_remote_code', + 'no_use_fast', + 'autogptq_info', + ], + 'AutoAWQ': [ + 'cpu_memory', + 'gpu_memory', + 'auto_devices', + 'max_seq_len', + 'no_inject_fused_attention', + 'trust_remote_code', + 'no_use_fast', + ], + 'GPTQ-for-LLaMa': [ + 'wbits', + 'groupsize', + 'model_type', + 'pre_layer', + 'trust_remote_code', + 'no_use_fast', + 'gptq_for_llama_info', + ], + 'ExLlamav2': [ + 'gpu_split', + 'max_seq_len', + 'no_flash_attn', + 'num_experts_per_token', + 'cache_8bit', + 'alpha_value', + 'compress_pos_emb', + 'exllamav2_info', + ], + 'ExLlama': [ + 'gpu_split', + 'max_seq_len', + 'alpha_value', + 'rope_freq_base', + 'compress_pos_emb', + 'exllama_info', + ], + 'ctransformers': [ + 'n_ctx', + 'n_gpu_layers', + 'n_batch', + 'threads', + 'model_type', + 'no_mmap', + 'mlock' + ], + 'QuIP#': [ + 'trust_remote_code', + 'no_use_fast', + 'no_flash_attn', + 'quipsharp_info', + ], + 'HQQ': [ + 'hqq_backend', + 'trust_remote_code', + 'no_use_fast', + ] +}) + + +def transformers_samplers(): + return { + 'temperature', + 'temperature_last', + 'top_p', + 'min_p', + 'top_k', + 'typical_p', + 'epsilon_cutoff', + 'eta_cutoff', + 'tfs', + 'top_a', + 'repetition_penalty', + 'presence_penalty', + 'frequency_penalty', + 'repetition_penalty_range', + 'encoder_repetition_penalty', + 'no_repeat_ngram_size', + 'min_length', + 'seed', + 'do_sample', + 'penalty_alpha', + 'num_beams', + 'length_penalty', + 'early_stopping', + 'mirostat_mode', + 'mirostat_tau', + 'mirostat_eta', + 'grammar_file_row', + 'grammar_string', + 'guidance_scale', + 'negative_prompt', + 'ban_eos_token', + 'custom_token_bans', + 'add_bos_token', + 'skip_special_tokens', + 'auto_max_new_tokens', + } + + +loaders_samplers = { + 'Transformers': transformers_samplers(), + 'AutoGPTQ': transformers_samplers(), + 'GPTQ-for-LLaMa': transformers_samplers(), + 'AutoAWQ': transformers_samplers(), + 'QuIP#': transformers_samplers(), + 'HQQ': transformers_samplers(), + 'ExLlama_HF': { + 'temperature', + 'temperature_last', + 'top_p', + 'min_p', + 'top_k', + 'typical_p', + 'epsilon_cutoff', + 'eta_cutoff', + 'tfs', + 'top_a', + 'repetition_penalty', + 'presence_penalty', + 'frequency_penalty', + 'repetition_penalty_range', + 'encoder_repetition_penalty', + 'no_repeat_ngram_size', + 'min_length', + 'seed', + 'do_sample', + 'mirostat_mode', + 'mirostat_tau', + 'mirostat_eta', + 'grammar_file_row', + 'grammar_string', + 'guidance_scale', + 'negative_prompt', + 'ban_eos_token', + 'custom_token_bans', + 'add_bos_token', + 'skip_special_tokens', + 'auto_max_new_tokens', + }, + 'ExLlama': { + 'temperature', + 'top_p', + 'top_k', + 'typical_p', + 'repetition_penalty', + 'repetition_penalty_range', + 'seed', + 'guidance_scale', + 'negative_prompt', + 'ban_eos_token', + 'add_bos_token', + 'custom_token_bans', + 'auto_max_new_tokens', + }, + 'ExLlamav2': { + 'temperature', + 'top_p', + 'min_p', + 'top_k', + 'typical_p', + 'tfs', + 'repetition_penalty', + 'repetition_penalty_range', + 'seed', + 'mirostat_mode', + 'mirostat_tau', + 'mirostat_eta', + 'ban_eos_token', + 'add_bos_token', + 'custom_token_bans', + 'skip_special_tokens', + 'auto_max_new_tokens', + }, + 'ExLlamav2_HF': { + 'temperature', + 'temperature_last', + 'top_p', + 'min_p', + 'top_k', + 'typical_p', + 'epsilon_cutoff', + 'eta_cutoff', + 'tfs', + 'top_a', + 'repetition_penalty', + 'presence_penalty', + 'frequency_penalty', + 'repetition_penalty_range', + 'encoder_repetition_penalty', + 'no_repeat_ngram_size', + 'min_length', + 'seed', + 'do_sample', + 'mirostat_mode', + 'mirostat_tau', + 'mirostat_eta', + 'grammar_file_row', + 'grammar_string', + 'guidance_scale', + 'negative_prompt', + 'ban_eos_token', + 'custom_token_bans', + 'add_bos_token', + 'skip_special_tokens', + 'auto_max_new_tokens', + }, + 'llama.cpp': { + 'temperature', + 'top_p', + 'min_p', + 'top_k', + 'typical_p', + 'tfs', + 'repetition_penalty', + 'presence_penalty', + 'frequency_penalty', + 'seed', + 'mirostat_mode', + 'mirostat_tau', + 'mirostat_eta', + 'grammar_file_row', + 'grammar_string', + 'ban_eos_token', + 'custom_token_bans', + }, + 'llamacpp_HF': { + 'temperature', + 'temperature_last', + 'top_p', + 'min_p', + 'top_k', + 'typical_p', + 'epsilon_cutoff', + 'eta_cutoff', + 'tfs', + 'top_a', + 'repetition_penalty', + 'presence_penalty', + 'frequency_penalty', + 'repetition_penalty_range', + 'encoder_repetition_penalty', + 'no_repeat_ngram_size', + 'min_length', + 'seed', + 'do_sample', + 'mirostat_mode', + 'mirostat_tau', + 'mirostat_eta', + 'grammar_file_row', + 'grammar_string', + 'guidance_scale', + 'negative_prompt', + 'ban_eos_token', + 'custom_token_bans', + 'add_bos_token', + 'skip_special_tokens', + 'auto_max_new_tokens', + }, + 'ctransformers': { + 'temperature', + 'top_p', + 'top_k', + 'repetition_penalty', + 'repetition_penalty_range', + }, +} + +loaders_model_types = { + 'GPTQ-for-LLaMa': [ + "None", + "llama", + "opt", + "gptj" + ], + 'ctransformers': [ + "None", + "gpt2", + "gptj", + "gptneox", + "llama", + "mpt", + "dollyv2", + "replit", + "starcoder", + "gptbigcode", + "falcon" + ], +} + + +@functools.cache +def list_all_samplers(): + all_samplers = set() + for k in loaders_samplers: + for sampler in loaders_samplers[k]: + all_samplers.add(sampler) + + return sorted(all_samplers) + + +def blacklist_samplers(loader): + all_samplers = list_all_samplers() + if loader == 'All': + return [gr.update(visible=True) for sampler in all_samplers] + else: + return [gr.update(visible=True) if sampler in loaders_samplers[loader] else gr.update(visible=False) for sampler in all_samplers] + + +def get_model_types(loader): + if loader in loaders_model_types: + return loaders_model_types[loader] + + return ["None"] + + +def get_gpu_memory_keys(): + return [k for k in shared.gradio if k.startswith('gpu_memory')] + + +@functools.cache +def get_all_params(): + all_params = set() + for k in loaders_and_params: + for el in loaders_and_params[k]: + all_params.add(el) + + if 'gpu_memory' in all_params: + all_params.remove('gpu_memory') + for k in get_gpu_memory_keys(): + all_params.add(k) + + return sorted(all_params) + + +def make_loader_params_visible(loader): + params = [] + all_params = get_all_params() + if loader in loaders_and_params: + params = loaders_and_params[loader] + + if 'gpu_memory' in params: + params.remove('gpu_memory') + params += get_gpu_memory_keys() + + return [gr.update(visible=True) if k in params else gr.update(visible=False) for k in all_params] diff --git a/modules/logging_colors.py b/modules/logging_colors.py new file mode 100644 index 0000000000000000000000000000000000000000..b9791e26859621fcab72885ef3fb978478854646 --- /dev/null +++ b/modules/logging_colors.py @@ -0,0 +1,67 @@ +import logging + +logger = logging.getLogger('text-generation-webui') + + +def setup_logging(): + ''' + Copied from: https://github.com/vladmandic/automatic + + All credits to vladmandic. + ''' + + class RingBuffer(logging.StreamHandler): + def __init__(self, capacity): + super().__init__() + self.capacity = capacity + self.buffer = [] + self.formatter = logging.Formatter('{ "asctime":"%(asctime)s", "created":%(created)f, "facility":"%(name)s", "pid":%(process)d, "tid":%(thread)d, "level":"%(levelname)s", "module":"%(module)s", "func":"%(funcName)s", "msg":"%(message)s" }') + + def emit(self, record): + msg = self.format(record) + # self.buffer.append(json.loads(msg)) + self.buffer.append(msg) + if len(self.buffer) > self.capacity: + self.buffer.pop(0) + + def get(self): + return self.buffer + + from rich.console import Console + from rich.logging import RichHandler + from rich.pretty import install as pretty_install + from rich.theme import Theme + from rich.traceback import install as traceback_install + + level = logging.DEBUG + logger.setLevel(logging.DEBUG) # log to file is always at level debug for facility `sd` + console = Console(log_time=True, log_time_format='%H:%M:%S-%f', theme=Theme({ + "traceback.border": "black", + "traceback.border.syntax_error": "black", + "inspect.value.border": "black", + })) + logging.basicConfig(level=logging.ERROR, format='%(asctime)s | %(name)s | %(levelname)s | %(module)s | %(message)s', handlers=[logging.NullHandler()]) # redirect default logger to null + pretty_install(console=console) + traceback_install(console=console, extra_lines=1, max_frames=10, width=console.width, word_wrap=False, indent_guides=False, suppress=[]) + while logger.hasHandlers() and len(logger.handlers) > 0: + logger.removeHandler(logger.handlers[0]) + + # handlers + rh = RichHandler(show_time=True, omit_repeated_times=False, show_level=True, show_path=False, markup=False, rich_tracebacks=True, log_time_format='%H:%M:%S-%f', level=level, console=console) + rh.setLevel(level) + logger.addHandler(rh) + + rb = RingBuffer(100) # 100 entries default in log ring buffer + rb.setLevel(level) + logger.addHandler(rb) + logger.buffer = rb.buffer + + # overrides + logging.getLogger("urllib3").setLevel(logging.ERROR) + logging.getLogger("httpx").setLevel(logging.ERROR) + logging.getLogger("diffusers").setLevel(logging.ERROR) + logging.getLogger("torch").setLevel(logging.ERROR) + logging.getLogger("lycoris").handlers = logger.handlers + + +setup_logging() diff --git a/modules/logits.py b/modules/logits.py new file mode 100644 index 0000000000000000000000000000000000000000..e12cf6e785d6cf93d7ba6317d8585b813f3363f4 --- /dev/null +++ b/modules/logits.py @@ -0,0 +1,75 @@ +import torch +from transformers import is_torch_xpu_available + +from modules import sampler_hijack, shared +from modules.logging_colors import logger +from modules.text_generation import generate_reply + +global_scores = None + + +def get_next_logits(prompt, state, use_samplers, previous, top_logits=50, return_dict=False): + if shared.model is None: + logger.error("No model is loaded! Select one in the Model tab.") + return 'Error: No model is loaded1 Select one in the Model tab.', previous + + is_non_hf_exllamav2 = shared.model.__class__.__name__ == 'Exllamav2Model' + is_non_hf_exllamav1 = shared.model.__class__.__name__ == 'ExllamaModel' + is_non_hf_llamacpp = shared.model.__class__.__name__ == 'LlamaCppModel' + + if use_samplers: + if any([is_non_hf_exllamav2, is_non_hf_exllamav1, is_non_hf_llamacpp]): + logger.error("Sampler hijacking is not supported non-Huggingface loaders.") + # sampling is all done in c for exllama, so it is really hard to hijack + # it should be possible to hijack llamacpp sampler by hijacking all their sampling methods, + # but it is not implemented yet + return 'Error: Sampler hijacking is not supported non-Huggingface loaders. Please disable the "Use samplers" option.', previous + + state['max_new_tokens'] = 1 + state['auto_max_new_tokens'] = False + for _ in generate_reply(prompt, state): + pass + + scores = sampler_hijack.global_scores[-1] + else: + if is_non_hf_exllamav2 or is_non_hf_exllamav1: + if is_torch_xpu_available(): + tokens = shared.tokenizer.encode(prompt).to("xpu:0") + else: + tokens = shared.tokenizer.encode(prompt).cuda() + scores = shared.model.get_logits(tokens)[-1][-1] + elif is_non_hf_llamacpp: + tokens = shared.tokenizer.encode(prompt) + scores = shared.model.get_logits(tokens)[-1][-1] + else: + if is_torch_xpu_available(): + tokens = shared.tokenizer.encode(prompt, return_tensors='pt').to("xpu:0") + else: + tokens = shared.tokenizer.encode(prompt, return_tensors='pt').cuda() + output = shared.model(input_ids=tokens) + scores = output['logits'][-1][-1] + + probs = torch.softmax(scores, dim=-1, dtype=torch.float) + topk_values, topk_indices = torch.topk(probs, k=top_logits, largest=True, sorted=True) + if is_non_hf_exllamav1 or is_non_hf_llamacpp: + topk_indices = [i.expand((1, 1)) for i in topk_indices] + + if hasattr(shared.tokenizer, 'convert_ids_to_tokens'): + tokens = [shared.tokenizer.convert_ids_to_tokens(int(i)) for i in topk_indices] + else: + tokens = [shared.tokenizer.decode(i) for i in topk_indices] + + if return_dict: + topk_values = [float(i) for i in topk_values] + output = {} + for row in list(zip(topk_values, tokens)): + output[row[1]] = row[0] + + return output + else: + topk_values = [f"{float(i):.5f}" for i in topk_values] + output = '' + for row in list(zip(topk_values, tokens)): + output += f"{row[0]} - {repr(row[1])}\n" + + return output, previous diff --git a/modules/metadata_gguf.py b/modules/metadata_gguf.py new file mode 100644 index 0000000000000000000000000000000000000000..70ad41dc41251615e1788fcfdbcd1eaaee5b3ce3 --- /dev/null +++ b/modules/metadata_gguf.py @@ -0,0 +1,92 @@ +import struct +from enum import IntEnum + + +class GGUFValueType(IntEnum): + UINT8 = 0 + INT8 = 1 + UINT16 = 2 + INT16 = 3 + UINT32 = 4 + INT32 = 5 + FLOAT32 = 6 + BOOL = 7 + STRING = 8 + ARRAY = 9 + UINT64 = 10 + INT64 = 11 + FLOAT64 = 12 + + +_simple_value_packing = { + GGUFValueType.UINT8: " 1, shared.args.alpha_value > 1, shared.args.disable_exllama, shared.args.disable_exllamav2]): + model = LoaderClass.from_pretrained(path_to_model, **params) + if torch.backends.mps.is_available(): + device = torch.device('mps') + model = model.to(device) + elif is_xpu_available(): + device = torch.device("xpu") + model = model.to(device) + else: + model = model.cuda() + + # DeepSpeed ZeRO-3 + elif shared.args.deepspeed: + model = LoaderClass.from_pretrained(path_to_model, torch_dtype=params['torch_dtype']) + model = deepspeed.initialize(model=model, config_params=ds_config, model_parameters=None, optimizer=None, lr_scheduler=None)[0] + model.module.eval() # Inference + logger.info(f'DeepSpeed ZeRO-3 is enabled: {is_deepspeed_zero3_enabled()}') + + # Load with quantization and/or offloading + else: + + if not any((shared.args.cpu, torch.cuda.is_available(), is_xpu_available(), torch.backends.mps.is_available())): + logger.warning('torch.cuda.is_available() and is_xpu_available() returned False. This means that no GPU has been detected. Falling back to CPU mode.') + + shared.args.cpu = True + + if shared.args.cpu: + params['torch_dtype'] = torch.float32 + else: + params['device_map'] = 'auto' + params['max_memory'] = get_max_memory_dict() + if shared.args.load_in_4bit: + # See https://github.com/huggingface/transformers/pull/23479/files + # and https://huggingface.co/blog/4bit-transformers-bitsandbytes + quantization_config_params = { + 'load_in_4bit': True, + 'bnb_4bit_compute_dtype': eval("torch.{}".format(shared.args.compute_dtype)) if shared.args.compute_dtype in ["bfloat16", "float16", "float32"] else None, + 'bnb_4bit_quant_type': shared.args.quant_type, + 'bnb_4bit_use_double_quant': shared.args.use_double_quant, + } + + logger.info('Using the following 4-bit params: ' + str(quantization_config_params)) + params['quantization_config'] = BitsAndBytesConfig(**quantization_config_params) + + elif shared.args.load_in_8bit: + if any((shared.args.auto_devices, shared.args.gpu_memory)): + params['quantization_config'] = BitsAndBytesConfig(load_in_8bit=True, llm_int8_enable_fp32_cpu_offload=True) + else: + params['quantization_config'] = BitsAndBytesConfig(load_in_8bit=True) + + if params['max_memory'] is not None: + with init_empty_weights(): + model = LoaderClass.from_config(config, trust_remote_code=params['trust_remote_code']) + + model.tie_weights() + params['device_map'] = infer_auto_device_map( + model, + dtype=torch.int8, + max_memory=params['max_memory'], + no_split_module_classes=model._no_split_modules + ) + + if shared.args.disk: + params['offload_folder'] = shared.args.disk_cache_dir + + if shared.args.disable_exllama or shared.args.disable_exllamav2: + try: + gptq_config = GPTQConfig( + bits=config.quantization_config.get('bits', 4), + disable_exllama=shared.args.disable_exllama, + disable_exllamav2=shared.args.disable_exllamav2, + ) + + params['quantization_config'] = gptq_config + logger.info(f'Loading with disable_exllama={shared.args.disable_exllama} and disable_exllamav2={shared.args.disable_exllamav2}.') + except: + exc = traceback.format_exc() + logger.error('Failed to disable exllama. Does the config.json for this model contain the necessary quantization info?') + print(exc) + + if shared.args.compress_pos_emb > 1: + params['rope_scaling'] = {'type': 'linear', 'factor': shared.args.compress_pos_emb} + elif shared.args.alpha_value > 1: + params['rope_scaling'] = {'type': 'dynamic', 'factor': RoPE.get_alpha_value(shared.args.alpha_value, shared.args.rope_freq_base)} + + model = LoaderClass.from_pretrained(path_to_model, **params) + + return model + + +def llamacpp_loader(model_name): + from modules.llamacpp_model import LlamaCppModel + + path = Path(f'{shared.args.model_dir}/{model_name}') + if path.is_file(): + model_file = path + else: + model_file = list(Path(f'{shared.args.model_dir}/{model_name}').glob('*.gguf'))[0] + + logger.info(f"llama.cpp weights detected: {model_file}") + model, tokenizer = LlamaCppModel.from_pretrained(model_file) + return model, tokenizer + + +def llamacpp_HF_loader(model_name): + from modules.llamacpp_hf import LlamacppHF + + for fname in [model_name, "oobabooga_llama-tokenizer", "llama-tokenizer"]: + path = Path(f'{shared.args.model_dir}/{fname}') + if all((path / file).exists() for file in ['tokenizer_config.json', 'special_tokens_map.json', 'tokenizer.model']): + logger.info(f'Using tokenizer from: {path}') + break + else: + logger.error("Could not load the model because a tokenizer in transformers format was not found. Please download oobabooga/llama-tokenizer.") + return None, None + + if shared.args.no_use_fast: + logger.info('Loading the tokenizer with use_fast=False.') + + tokenizer = AutoTokenizer.from_pretrained( + path, + trust_remote_code=shared.args.trust_remote_code, + use_fast=not shared.args.no_use_fast + ) + + model = LlamacppHF.from_pretrained(model_name) + return model, tokenizer + + +def ctransformers_loader(model_name): + from modules.ctransformers_model import CtransformersModel + + path = Path(f'{shared.args.model_dir}/{model_name}') + ctrans = CtransformersModel() + if ctrans.model_type_is_auto(): + model_file = path + else: + if path.is_file(): + model_file = path + else: + entries = Path(f'{shared.args.model_dir}/{model_name}') + gguf = list(entries.glob('*.gguf')) + bin = list(entries.glob('*.bin')) + if len(gguf) > 0: + model_file = gguf[0] + elif len(bin) > 0: + model_file = bin[0] + else: + logger.error("Could not find a model for ctransformers.") + return None, None + + logger.info(f'ctransformers weights detected: {model_file}') + model, tokenizer = ctrans.from_pretrained(model_file) + return model, tokenizer + + +def AutoAWQ_loader(model_name): + from awq import AutoAWQForCausalLM + + model_dir = Path(f'{shared.args.model_dir}/{model_name}') + + model = AutoAWQForCausalLM.from_quantized( + quant_path=model_dir, + max_new_tokens=shared.args.max_seq_len, + trust_remote_code=shared.args.trust_remote_code, + fuse_layers=not shared.args.no_inject_fused_attention, + max_memory=get_max_memory_dict(), + batch_size=1, + safetensors=any(model_dir.glob('*.safetensors')), + ) + + return model + + +def QuipSharp_loader(model_name): + try: + with RelativeImport("repositories/quip-sharp"): + from lib.utils.unsafe_import import model_from_hf_path + except: + logger.error( + "\nQuIP# has not been found. It must be installed manually for now.\n" + "For instructions on how to do that, please consult:\n" + "https://github.com/oobabooga/text-generation-webui/pull/4803\n" + ) + return None, None + + # This fixes duplicate logging messages after the import above. + handlers = logging.getLogger().handlers + if len(handlers) > 1: + logging.getLogger().removeHandler(handlers[1]) + + model_dir = Path(f'{shared.args.model_dir}/{model_name}') + if not all((model_dir / file).exists() for file in ['tokenizer_config.json', 'special_tokens_map.json', 'tokenizer.model']): + logger.error(f"Could not load the model because the tokenizer files could not be found in the model folder. Please download the following files from the original (unquantized) model into {model_dir}: special_tokens_map.json, tokenizer.json, tokenizer.model, tokenizer_config.json.") + return None, None + + model, model_str = model_from_hf_path( + model_dir, + use_cuda_graph=False, + use_flash_attn=not shared.args.no_flash_attn + ) + + return model + + +def GPTQ_loader(model_name): + + # Monkey patch + if shared.args.monkey_patch: + logger.warning("Applying the monkey patch for using LoRAs with GPTQ models. It may cause undefined behavior outside its intended scope.") + from modules.monkey_patch_gptq_lora import load_model_llama + + model, _ = load_model_llama(model_name) + + # No monkey patch + else: + import modules.GPTQ_loader + + model = modules.GPTQ_loader.load_quantized(model_name) + + return model + + +def AutoGPTQ_loader(model_name): + import modules.AutoGPTQ_loader + + return modules.AutoGPTQ_loader.load_quantized(model_name) + + +def ExLlama_loader(model_name): + from modules.exllama import ExllamaModel + + model, tokenizer = ExllamaModel.from_pretrained(model_name) + return model, tokenizer + + +def ExLlama_HF_loader(model_name): + from modules.exllama_hf import ExllamaHF + + return ExllamaHF.from_pretrained(model_name) + + +def ExLlamav2_loader(model_name): + from modules.exllamav2 import Exllamav2Model + + model, tokenizer = Exllamav2Model.from_pretrained(model_name) + return model, tokenizer + + +def ExLlamav2_HF_loader(model_name): + from modules.exllamav2_hf import Exllamav2HF + + return Exllamav2HF.from_pretrained(model_name) + + +def HQQ_loader(model_name): + from hqq.core.quantize import HQQBackend, HQQLinear + from hqq.engine.hf import HQQModelForCausalLM + + logger.info(f"Loading HQQ model with backend: {shared.args.hqq_backend}") + + model_dir = Path(f'{shared.args.model_dir}/{model_name}') + model = HQQModelForCausalLM.from_quantized(str(model_dir)) + HQQLinear.set_backend(getattr(HQQBackend, shared.args.hqq_backend)) + return model + + +def RWKV_loader(model_name): + ''' + This loader is not currently maintained as RWKV can now be loaded + through the transformers library. + ''' + from modules.RWKV import RWKVModel, RWKVTokenizer + + model = RWKVModel.from_pretrained( + Path(f'{shared.args.model_dir}/{model_name}'), + dtype="fp32" if shared.args.cpu else "bf16" if shared.args.bf16 else "fp16", + device="cpu" if shared.args.cpu else "xpu" if is_xpu_available() else "cuda" + ) + + tokenizer = RWKVTokenizer.from_pretrained(Path(shared.args.model_dir)) + return model, tokenizer + + +def get_max_memory_dict(): + max_memory = {} + max_cpu_memory = shared.args.cpu_memory.strip() if shared.args.cpu_memory is not None else '99GiB' + if shared.args.gpu_memory: + memory_map = list(map(lambda x: x.strip(), shared.args.gpu_memory)) + for i in range(len(memory_map)): + max_memory[i] = f'{memory_map[i]}GiB' if not re.match('.*ib$', memory_map[i].lower()) else memory_map[i] + + max_memory['cpu'] = f'{max_cpu_memory}GiB' if not re.match('.*ib$', max_cpu_memory.lower()) else max_cpu_memory + + # If --auto-devices is provided standalone, try to get a reasonable value + # for the maximum memory of device :0 + elif shared.args.auto_devices: + if is_xpu_available(): + total_mem = (torch.xpu.get_device_properties(0).total_memory / (1024 * 1024)) + else: + total_mem = (torch.cuda.get_device_properties(0).total_memory / (1024 * 1024)) + + suggestion = round((total_mem - 1000) / 1000) * 1000 + if total_mem - suggestion < 800: + suggestion -= 1000 + + suggestion = int(round(suggestion / 1000)) + logger.warning(f"Auto-assiging --gpu-memory {suggestion} for your GPU to try to prevent out-of-memory errors. You can manually set other values.") + max_memory[0] = f'{suggestion}GiB' + max_memory['cpu'] = f'{max_cpu_memory}GiB' if not re.match('.*ib$', max_cpu_memory.lower()) else max_cpu_memory + + return max_memory if len(max_memory) > 0 else None + + +def clear_torch_cache(): + gc.collect() + if not shared.args.cpu: + if is_xpu_available(): + torch.xpu.empty_cache() + else: + torch.cuda.empty_cache() + + +def unload_model(): + shared.model = shared.tokenizer = None + shared.lora_names = [] + shared.model_dirty_from_training = False + clear_torch_cache() + + +def reload_model(): + unload_model() + shared.model, shared.tokenizer = load_model(shared.model_name) diff --git a/modules/models_settings.py b/modules/models_settings.py new file mode 100644 index 0000000000000000000000000000000000000000..4e1fb1ad38fb1b034ad0d8a90713b4f8f7b15868 --- /dev/null +++ b/modules/models_settings.py @@ -0,0 +1,273 @@ +import json +import re +from pathlib import Path + +import yaml + +from modules import chat, loaders, metadata_gguf, shared, ui + + +def get_fallback_settings(): + return { + 'wbits': 'None', + 'groupsize': 'None', + 'desc_act': False, + 'model_type': 'None', + 'max_seq_len': 2048, + 'n_ctx': 2048, + 'rope_freq_base': 0, + 'compress_pos_emb': 1, + 'truncation_length': shared.settings['truncation_length'], + 'skip_special_tokens': shared.settings['skip_special_tokens'], + 'custom_stopping_strings': shared.settings['custom_stopping_strings'], + } + + +def get_model_metadata(model): + model_settings = {} + + # Get settings from models/config.yaml and models/config-user.yaml + settings = shared.model_config + for pat in settings: + if re.match(pat.lower(), model.lower()): + for k in settings[pat]: + model_settings[k] = settings[pat][k] + + path = Path(f'{shared.args.model_dir}/{model}/config.json') + if path.exists(): + hf_metadata = json.loads(open(path, 'r').read()) + else: + hf_metadata = None + + if 'loader' not in model_settings: + if hf_metadata is not None and 'quip_params' in hf_metadata: + model_settings['loader'] = 'QuIP#' + else: + loader = infer_loader(model, model_settings) + if 'wbits' in model_settings and type(model_settings['wbits']) is int and model_settings['wbits'] > 0: + loader = 'AutoGPTQ' + + model_settings['loader'] = loader + + # GGUF metadata + if model_settings['loader'] in ['llama.cpp', 'llamacpp_HF', 'ctransformers']: + path = Path(f'{shared.args.model_dir}/{model}') + if path.is_file(): + model_file = path + else: + model_file = list(path.glob('*.gguf'))[0] + + metadata = metadata_gguf.load_metadata(model_file) + if 'llama.context_length' in metadata: + model_settings['n_ctx'] = metadata['llama.context_length'] + if 'llama.rope.scale_linear' in metadata: + model_settings['compress_pos_emb'] = metadata['llama.rope.scale_linear'] + if 'llama.rope.freq_base' in metadata: + model_settings['rope_freq_base'] = metadata['llama.rope.freq_base'] + if 'tokenizer.chat_template' in metadata: + template = metadata['tokenizer.chat_template'] + eos_token = metadata['tokenizer.ggml.tokens'][metadata['tokenizer.ggml.eos_token_id']] + bos_token = metadata['tokenizer.ggml.tokens'][metadata['tokenizer.ggml.bos_token_id']] + template = template.replace('eos_token', "'{}'".format(eos_token)) + template = template.replace('bos_token', "'{}'".format(bos_token)) + + template = re.sub(r'raise_exception\([^)]*\)', "''", template) + model_settings['instruction_template'] = 'Custom (obtained from model metadata)' + model_settings['instruction_template_str'] = template + + else: + # Transformers metadata + if hf_metadata is not None: + metadata = json.loads(open(path, 'r').read()) + if 'max_position_embeddings' in metadata: + model_settings['truncation_length'] = metadata['max_position_embeddings'] + model_settings['max_seq_len'] = metadata['max_position_embeddings'] + + if 'rope_theta' in metadata: + model_settings['rope_freq_base'] = metadata['rope_theta'] + + if 'rope_scaling' in metadata and type(metadata['rope_scaling']) is dict and all(key in metadata['rope_scaling'] for key in ('type', 'factor')): + if metadata['rope_scaling']['type'] == 'linear': + model_settings['compress_pos_emb'] = metadata['rope_scaling']['factor'] + + if 'quantization_config' in metadata: + if 'bits' in metadata['quantization_config']: + model_settings['wbits'] = metadata['quantization_config']['bits'] + if 'group_size' in metadata['quantization_config']: + model_settings['groupsize'] = metadata['quantization_config']['group_size'] + if 'desc_act' in metadata['quantization_config']: + model_settings['desc_act'] = metadata['quantization_config']['desc_act'] + + # Read AutoGPTQ metadata + path = Path(f'{shared.args.model_dir}/{model}/quantize_config.json') + if path.exists(): + metadata = json.loads(open(path, 'r').read()) + if 'bits' in metadata: + model_settings['wbits'] = metadata['bits'] + if 'group_size' in metadata: + model_settings['groupsize'] = metadata['group_size'] + if 'desc_act' in metadata: + model_settings['desc_act'] = metadata['desc_act'] + + # Try to find the Jinja instruct template + path = Path(f'{shared.args.model_dir}/{model}') / 'tokenizer_config.json' + if path.exists(): + metadata = json.loads(open(path, 'r').read()) + if 'chat_template' in metadata: + template = metadata['chat_template'] + for k in ['eos_token', 'bos_token']: + if k in metadata: + value = metadata[k] + if type(value) is dict: + value = value['content'] + + template = template.replace(k, "'{}'".format(value)) + + template = re.sub(r'raise_exception\([^)]*\)', "''", template) + model_settings['instruction_template'] = 'Custom (obtained from model metadata)' + model_settings['instruction_template_str'] = template + + if 'instruction_template' not in model_settings: + model_settings['instruction_template'] = 'Alpaca' + + if model_settings['instruction_template'] != 'Custom (obtained from model metadata)': + model_settings['instruction_template_str'] = chat.load_instruction_template(model_settings['instruction_template']) + + # Ignore rope_freq_base if set to the default value + if 'rope_freq_base' in model_settings and model_settings['rope_freq_base'] == 10000: + model_settings.pop('rope_freq_base') + + # Apply user settings from models/config-user.yaml + settings = shared.user_config + for pat in settings: + if re.match(pat.lower(), model.lower()): + for k in settings[pat]: + model_settings[k] = settings[pat][k] + + return model_settings + + +def infer_loader(model_name, model_settings): + path_to_model = Path(f'{shared.args.model_dir}/{model_name}') + if not path_to_model.exists(): + loader = None + elif (path_to_model / 'quantize_config.json').exists() or ('wbits' in model_settings and type(model_settings['wbits']) is int and model_settings['wbits'] > 0): + loader = 'ExLlama_HF' + elif (path_to_model / 'quant_config.json').exists() or re.match(r'.*-awq', model_name.lower()): + loader = 'AutoAWQ' + elif len(list(path_to_model.glob('*.gguf'))) > 0: + loader = 'llama.cpp' + elif re.match(r'.*\.gguf', model_name.lower()): + loader = 'llama.cpp' + elif re.match(r'.*rwkv.*\.pth', model_name.lower()): + loader = 'RWKV' + elif re.match(r'.*exl2', model_name.lower()): + loader = 'ExLlamav2_HF' + elif re.match(r'.*-hqq', model_name.lower()): + return 'HQQ' + else: + loader = 'Transformers' + + return loader + + +def update_model_parameters(state, initial=False): + ''' + UI: update the command-line arguments based on the interface values + ''' + elements = ui.list_model_elements() # the names of the parameters + gpu_memories = [] + + for i, element in enumerate(elements): + if element not in state: + continue + + value = state[element] + if element.startswith('gpu_memory'): + gpu_memories.append(value) + continue + + if initial and element in shared.provided_arguments: + continue + + # Setting null defaults + if element in ['wbits', 'groupsize', 'model_type'] and value == 'None': + value = vars(shared.args_defaults)[element] + elif element in ['cpu_memory'] and value == 0: + value = vars(shared.args_defaults)[element] + + # Making some simple conversions + if element in ['wbits', 'groupsize', 'pre_layer']: + value = int(value) + elif element == 'cpu_memory' and value is not None: + value = f"{value}MiB" + + if element in ['pre_layer']: + value = [value] if value > 0 else None + + setattr(shared.args, element, value) + + found_positive = False + for i in gpu_memories: + if i > 0: + found_positive = True + break + + if not (initial and vars(shared.args)['gpu_memory'] != vars(shared.args_defaults)['gpu_memory']): + if found_positive: + shared.args.gpu_memory = [f"{i}MiB" for i in gpu_memories] + else: + shared.args.gpu_memory = None + + +def apply_model_settings_to_state(model, state): + ''' + UI: update the state variable with the model settings + ''' + model_settings = get_model_metadata(model) + if 'loader' in model_settings: + loader = model_settings.pop('loader') + + # If the user is using an alternative loader for the same model type, let them keep using it + if not (loader == 'AutoGPTQ' and state['loader'] in ['GPTQ-for-LLaMa', 'ExLlama', 'ExLlama_HF', 'ExLlamav2', 'ExLlamav2_HF']) and not (loader == 'llama.cpp' and state['loader'] in ['llamacpp_HF', 'ctransformers']): + state['loader'] = loader + + for k in model_settings: + if k in state: + if k in ['wbits', 'groupsize']: + state[k] = str(model_settings[k]) + else: + state[k] = model_settings[k] + + return state + + +def save_model_settings(model, state): + ''' + Save the settings for this model to models/config-user.yaml + ''' + if model == 'None': + yield ("Not saving the settings because no model is loaded.") + return + + with Path(f'{shared.args.model_dir}/config-user.yaml') as p: + if p.exists(): + user_config = yaml.safe_load(open(p, 'r').read()) + else: + user_config = {} + + model_regex = model + '$' # For exact matches + if model_regex not in user_config: + user_config[model_regex] = {} + + for k in ui.list_model_elements(): + if k == 'loader' or k in loaders.loaders_and_params[state['loader']]: + user_config[model_regex][k] = state[k] + + shared.user_config = user_config + + output = yaml.dump(user_config, sort_keys=False) + with open(p, 'w') as f: + f.write(output) + + yield (f"Settings for `{model}` saved to `{p}`.") diff --git a/modules/monkey_patch_gptq_lora.py b/modules/monkey_patch_gptq_lora.py new file mode 100644 index 0000000000000000000000000000000000000000..3166bd33ceba449cb542861b0238818f68c7b02e --- /dev/null +++ b/modules/monkey_patch_gptq_lora.py @@ -0,0 +1,39 @@ +# Copied from https://github.com/johnsmith0031/alpaca_lora_4bit + +from pathlib import Path + +import alpaca_lora_4bit.autograd_4bit as autograd_4bit +from alpaca_lora_4bit.amp_wrapper import AMPWrapper +from alpaca_lora_4bit.autograd_4bit import ( + Autograd4bitQuantLinear, + load_llama_model_4bit_low_ram +) +from alpaca_lora_4bit.models import Linear4bitLt +from alpaca_lora_4bit.monkeypatch.peft_tuners_lora_monkey_patch import ( + replace_peft_model_with_int4_lora_model +) + +from modules import shared +from modules.GPTQ_loader import find_quantized_model_file + +replace_peft_model_with_int4_lora_model() + + +def load_model_llama(model_name): + config_path = str(Path(f'{shared.args.model_dir}/{model_name}')) + model_path = str(find_quantized_model_file(model_name)) + model, tokenizer = load_llama_model_4bit_low_ram(config_path, model_path, groupsize=shared.args.groupsize, is_v1_model=False) + for _, m in model.named_modules(): + if isinstance(m, Autograd4bitQuantLinear) or isinstance(m, Linear4bitLt): + if m.is_v1_model: + m.zeros = m.zeros.half() + m.scales = m.scales.half() + m.bias = m.bias.half() + + autograd_4bit.auto_switch = True + + model.half() + wrapper = AMPWrapper(model) + wrapper.apply_generate() + + return model, tokenizer diff --git a/modules/one_click_installer_check.py b/modules/one_click_installer_check.py new file mode 100644 index 0000000000000000000000000000000000000000..4bde860094f5e9c1ad5e3293502c3606a9f4a130 --- /dev/null +++ b/modules/one_click_installer_check.py @@ -0,0 +1,9 @@ +from pathlib import Path + +from modules.logging_colors import logger + +if Path('../webui.py').exists(): + logger.warning('\nIt looks like you are running an outdated version of ' + 'the one-click-installers.\n' + 'Please migrate your installation following the instructions here:\n' + 'https://github.com/oobabooga/text-generation-webui/wiki/Migrating-an-old-one%E2%80%90click-install') diff --git a/modules/presets.py b/modules/presets.py new file mode 100644 index 0000000000000000000000000000000000000000..15443627dc04f7dea3276f7547efe1e943a39d39 --- /dev/null +++ b/modules/presets.py @@ -0,0 +1,118 @@ +import functools +import random +from pathlib import Path + +import yaml + +from modules import shared +from modules.loaders import loaders_samplers + + +def default_preset(): + return { + 'temperature': 1, + 'temperature_last': False, + 'top_p': 1, + 'min_p': 0, + 'top_k': 0, + 'repetition_penalty': 1, + 'presence_penalty': 0, + 'frequency_penalty': 0, + 'repetition_penalty_range': 1024, + 'typical_p': 1, + 'tfs': 1, + 'top_a': 0, + 'epsilon_cutoff': 0, + 'eta_cutoff': 0, + 'guidance_scale': 1, + 'penalty_alpha': 0, + 'mirostat_mode': 0, + 'mirostat_tau': 5, + 'mirostat_eta': 0.1, + 'do_sample': True, + 'encoder_repetition_penalty': 1, + 'no_repeat_ngram_size': 0, + 'min_length': 0, + 'num_beams': 1, + 'length_penalty': 1, + 'early_stopping': False, + } + + +def presets_params(): + return [k for k in default_preset()] + + +def load_preset(name): + generate_params = default_preset() + if name not in ['None', None, '']: + with open(Path(f'presets/{name}.yaml'), 'r') as infile: + preset = yaml.safe_load(infile) + + for k in preset: + generate_params[k] = preset[k] + + generate_params['temperature'] = min(1.99, generate_params['temperature']) + return generate_params + + +@functools.cache +def load_preset_memoized(name): + return load_preset(name) + + +def load_preset_for_ui(name, state): + generate_params = load_preset(name) + state.update(generate_params) + return state, *[generate_params[k] for k in presets_params()] + + +def random_preset(state): + params_and_values = { + 'remove_tail_tokens': { + 'top_p': [0.5, 0.8, 0.9, 0.95, 0.99], + 'min_p': [0.5, 0.2, 0.1, 0.05, 0.01], + 'top_k': [3, 5, 10, 20, 30, 40], + 'typical_p': [0.2, 0.575, 0.95], + 'tfs': [0.5, 0.8, 0.9, 0.95, 0.99], + 'top_a': [0.5, 0.2, 0.1, 0.05, 0.01], + 'epsilon_cutoff': [1, 3, 5, 7, 9], + 'eta_cutoff': [3, 6, 9, 12, 15, 18], + }, + 'flatten_distribution': { + 'temperature': [0.5, 0.7, 0.8, 1, 1.2, 1.5, 2.0], + }, + 'repetition': { + 'repetition_penalty': [1, 1.05, 1.1, 1.15, 1.20, 1.25], + 'presence_penalty': [0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.0, 2.0], + 'frequency_penalty': [0, 0.1, 0.2, 0.4, 0.6, 0.8, 1.0, 2.0], + }, + 'other': { + 'temperature_last': [True, False], + } + } + + generate_params = default_preset() + for cat in params_and_values: + choices = list(params_and_values[cat].keys()) + if shared.args.loader is not None: + choices = [x for x in choices if x in loaders_samplers[shared.args.loader]] + + if len(choices) > 0: + choice = random.choice(choices) + generate_params[choice] = random.choice(params_and_values[cat][choice]) + + state.update(generate_params) + return state, *[generate_params[k] for k in presets_params()] + + +def generate_preset_yaml(state): + defaults = default_preset() + data = {k: state[k] for k in presets_params()} + + # Remove entries that are identical to the defaults + for k in list(data.keys()): + if data[k] == defaults[k]: + del data[k] + + return yaml.dump(data, sort_keys=False) diff --git a/modules/prompts.py b/modules/prompts.py new file mode 100644 index 0000000000000000000000000000000000000000..565c245079d1824c6e96fd7ee2075c573f2081ac --- /dev/null +++ b/modules/prompts.py @@ -0,0 +1,27 @@ +from pathlib import Path + +from modules.text_generation import get_encoded_length + + +def load_prompt(fname): + if fname in ['None', '']: + return '' + else: + file_path = Path(f'prompts/{fname}.txt') + if not file_path.exists(): + return '' + + with open(file_path, 'r', encoding='utf-8') as f: + text = f.read() + if text[-1] == '\n': + text = text[:-1] + + return text + + +def count_tokens(text): + try: + tokens = get_encoded_length(text) + return str(tokens) + except: + return '0' diff --git a/modules/relative_imports.py b/modules/relative_imports.py new file mode 100644 index 0000000000000000000000000000000000000000..3c0eb56b77c6cb6b38fdbdeebabe9ad3b8d91b97 --- /dev/null +++ b/modules/relative_imports.py @@ -0,0 +1,13 @@ +import sys +from pathlib import Path + + +class RelativeImport: + def __init__(self, path): + self.import_path = Path(path) + + def __enter__(self): + sys.path.insert(0, str(self.import_path)) + + def __exit__(self, exc_type, exc_value, traceback): + sys.path.remove(str(self.import_path)) diff --git a/modules/sampler_hijack.py b/modules/sampler_hijack.py new file mode 100644 index 0000000000000000000000000000000000000000..218d1b1125087f94422bb4601679194259793308 --- /dev/null +++ b/modules/sampler_hijack.py @@ -0,0 +1,294 @@ +import math + +import torch +import transformers +from transformers import LogitsWarper, is_torch_xpu_available +from transformers.generation.logits_process import ( + LogitNormalization, + LogitsProcessor, + LogitsProcessorList, + TemperatureLogitsWarper +) + +global_scores = None + + +class MinPLogitsWarper(LogitsWarper): + def __init__(self, min_p: float, filter_value: float = -float("Inf"), min_tokens_to_keep: int = 1): + if min_p < 0 or min_p > 1.0: + raise ValueError(f"`min_p` has to be a float >= 0 and <= 1, but is {min_p}") + self.min_p = min_p + self.filter_value = filter_value + self.min_tokens_to_keep = min_tokens_to_keep + + def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor) -> torch.FloatTensor: + # Convert logits to probabilities + probs = torch.softmax(scores, dim=-1) + # Get the probability of the top token for each sequence in the batch + top_probs, _ = probs.max(dim=-1, keepdim=True) + # Calculate the actual min_p threshold by scaling min_p with the top token's probability + scaled_min_p = self.min_p * top_probs + # Create a mask for tokens that have a probability less than the scaled min_p + tokens_to_remove = probs < scaled_min_p + + sorted_indices = torch.argsort(scores, descending=True, dim=-1) + sorted_indices_to_remove = torch.gather(tokens_to_remove, dim=-1, index=sorted_indices) + + if self.min_tokens_to_keep > 1: + # Keep at least min_tokens_to_keep + sorted_indices_to_remove[..., : self.min_tokens_to_keep] = False + + indices_to_remove = sorted_indices_to_remove.scatter(1, sorted_indices, sorted_indices_to_remove) + scores = scores.masked_fill(indices_to_remove, self.filter_value) + return scores + + +class TailFreeLogitsWarper(LogitsWarper): + def __init__(self, tfs: float, filter_value: float = -float("Inf"), min_tokens_to_keep: int = 1): + tfs = float(tfs) + if tfs < 0 or tfs > 1.0: + raise ValueError(f"`tfs` has to be a float >= 0 and <= 1, but is {tfs}") + self.tfs = tfs + self.filter_value = filter_value + self.min_tokens_to_keep = min_tokens_to_keep + + def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor) -> torch.FloatTensor: + sorted_logits, sorted_indices = torch.sort(scores, descending=True) + probs = sorted_logits.softmax(dim=-1) + + # Compute second derivative normalized CDF + d2 = probs.diff().diff().abs() + normalized_d2 = d2 / d2.sum(dim=-1, keepdim=True) + normalized_d2_cdf = normalized_d2.cumsum(dim=-1) + + # Remove tokens with CDF value above the threshold (token with 0 are kept) + sorted_indices_to_remove = normalized_d2_cdf > self.tfs + + # Centre the distribution around the cutoff as in the original implementation of the algorithm + sorted_indices_to_remove = torch.cat( + ( + torch.zeros(scores.shape[0], 1, dtype=torch.bool, device=scores.device), + sorted_indices_to_remove, + torch.ones(scores.shape[0], 1, dtype=torch.bool, device=scores.device), + ), + dim=-1, + ) + + if self.min_tokens_to_keep > 1: + # Keep at least min_tokens_to_keep + sorted_indices_to_remove[..., : self.min_tokens_to_keep] = 0 + + indices_to_remove = sorted_indices_to_remove.scatter(1, sorted_indices, sorted_indices_to_remove) + scores = scores.masked_fill(indices_to_remove, self.filter_value) + return scores + + +class TopALogitsWarper(LogitsWarper): + def __init__(self, top_a: float, filter_value: float = -float("Inf"), min_tokens_to_keep: int = 1): + top_a = float(top_a) + if top_a < 0 or top_a > 1.0: + raise ValueError(f"`top_a` has to be a float >= 0 and <= 1, but is {top_a}") + self.top_a = top_a + self.filter_value = filter_value + self.min_tokens_to_keep = min_tokens_to_keep + + def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor) -> torch.FloatTensor: + sorted_logits, sorted_indices = torch.sort(scores, descending=True) + probs = sorted_logits.softmax(dim=-1) + + # Remove tokens with probability less than top_a*(max(probs))^2 (token with 0 are kept) + probs_max = probs[..., 0, None] + sorted_indices_to_remove = probs < probs_max * probs_max * self.top_a + + if self.min_tokens_to_keep > 1: + # Keep at least min_tokens_to_keep + sorted_indices_to_remove[..., : self.min_tokens_to_keep] = 0 + + indices_to_remove = sorted_indices_to_remove.scatter(1, sorted_indices, sorted_indices_to_remove) + scores = scores.masked_fill(indices_to_remove, self.filter_value) + return scores + + +class MirostatLogitsWarper(LogitsWarper): + def __init__(self, mirostat_mode: int, mirostat_tau: float, mirostat_eta: float, filter_value: float = -float("Inf"), min_tokens_to_keep: int = 1): + if mirostat_mode not in [2]: + raise ValueError(f"`mirostat` has to be a an integer 2, but is {mirostat_mode}") + self.mirostat_mode = mirostat_mode + self.mirostat_eta = mirostat_eta + self.mirostat_tau = mirostat_tau + self.filter_value = filter_value + self.min_tokens_to_keep = min_tokens_to_keep + self.mu = 2 * self.mirostat_tau + self.e = 0 + + def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor) -> torch.FloatTensor: + logits = scores[0] + sorted_logits, sorted_indices = torch.sort(logits, descending=True) + prob_original = torch.softmax(sorted_logits, dim=-1).tolist() # candidates + + # Truncate the words with surprise values greater than mu + for i, candidate in enumerate(prob_original): + if candidate > 0 and -math.log2(candidate) > self.mu: + if (i == 0): + sorted_logits = sorted_logits[:1] + else: + sorted_logits = sorted_logits[:i] + break + + # Normalize the probabilities of the remaining words + if is_torch_xpu_available(): + prob_topk = torch.softmax(sorted_logits, dim=0).to("xpu") + prev_i = torch.multinomial(prob_topk, num_samples=1, replacement=True).to("xpu") + else: + prob_topk = torch.softmax(sorted_logits, dim=0).to('cuda') + prev_i = torch.multinomial(prob_topk, num_samples=1, replacement=True).to('cuda') + + observed_surprise = -math.log2(prob_topk[prev_i]) + self.e = observed_surprise - self.mirostat_tau + + # Update mu using the learning rate and error + self.mu -= self.mirostat_eta * self.e + + sorted_indices_to_remove = torch.ones_like(scores[0], dtype=torch.bool) + sorted_indices_to_remove[prev_i] = False + + indices_to_remove = sorted_indices_to_remove.unsqueeze(0).scatter(1, sorted_indices.unsqueeze(0), sorted_indices_to_remove.unsqueeze(0)) + scores = scores.masked_fill(indices_to_remove, self.filter_value) + return scores + + +class SpyLogitsWarper(LogitsWarper): + def __init__(self): + pass + + def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor) -> torch.FloatTensor: + global global_scores + global_scores = scores + return scores + + +class RepetitionPenaltyLogitsProcessorWithRange(LogitsProcessor): + ''' + Copied from the transformers library + ''' + + def __init__(self, penalty: float, presence_penalty: float, frequency_penalty: float, _range: int): + if not (penalty > 0): + raise ValueError(f"`penalty` has to be strictly positive, but is {penalty}") + + self.penalty = penalty + self.presence_penalty = presence_penalty + self.frequency_penalty = frequency_penalty + self._range = _range + + def __call__(self, input_ids: torch.LongTensor, scores: torch.FloatTensor) -> torch.FloatTensor: + input_ids = input_ids[:, -self._range:] + + # We loop here because torch.unique() needs to process each row separately in the + # case that batch_size > 1. + for input_ids_row, scores_row in zip(input_ids, scores): + unique_ids, counts = torch.unique(input_ids_row, return_counts=True) + score = torch.gather(scores_row, 0, unique_ids) + + # multiplicative repetition penalty + # if score < 0 then repetition penalty has to be multiplied to reduce the previous token probability + score = torch.where(score < 0, score * self.penalty, score / self.penalty) + scores_row.scatter_(0, unique_ids, score) + + # presence_penalty and frequency_penalty + raw_presence_penalty = (counts > 0).to(scores.dtype) + raw_frequency_penalty = counts.to(scores.dtype) + additive_penalty = raw_presence_penalty*self.presence_penalty + raw_frequency_penalty*self.frequency_penalty + scores_row.scatter_add_(0, unique_ids, -additive_penalty) + + return scores + + +def get_logits_warper_patch(self, generation_config): + warpers = self._get_logits_warper_old(generation_config) + warpers_to_add = LogitsProcessorList() + min_tokens_to_keep = 2 if generation_config.num_beams > 1 else 1 + + if generation_config.mirostat_mode is not None and generation_config.mirostat_mode == 2: + warpers_to_add.append(MirostatLogitsWarper(mirostat_mode=generation_config.mirostat_mode, mirostat_eta=generation_config.mirostat_eta, mirostat_tau=generation_config.mirostat_tau, min_tokens_to_keep=min_tokens_to_keep)) + # We need to disable samplers other than temperature + for warper in warpers: + if not isinstance(warper, TemperatureLogitsWarper): + warpers.remove(warper) + else: + if generation_config.tfs is not None and 0.0 <= generation_config.tfs < 1.0: + warpers_to_add.append(TailFreeLogitsWarper(tfs=generation_config.tfs, min_tokens_to_keep=min_tokens_to_keep)) + if generation_config.top_a is not None and 0.0 < generation_config.top_a <= 1.0: + warpers_to_add.append(TopALogitsWarper(top_a=generation_config.top_a, min_tokens_to_keep=min_tokens_to_keep)) + if generation_config.min_p is not None and 0.0 < generation_config.min_p <= 1.0: + warpers_to_add.append(MinPLogitsWarper(min_p=generation_config.min_p, min_tokens_to_keep=min_tokens_to_keep)) + + if len(warpers) > 0 and isinstance(warpers[-1], LogitNormalization): + normalize = warpers.pop(-1) + else: + normalize = None + + warpers += warpers_to_add + if generation_config.temperature_last: + temperature_idx = None + for i in range(len(warpers)): + if warpers[i].__class__.__name__ == 'TemperatureLogitsWarper': + temperature_idx = i + break + + if temperature_idx is not None: + warpers = warpers[:temperature_idx] + warpers[temperature_idx + 1:] + [warpers[temperature_idx]] + warpers = LogitsProcessorList(warpers) + + if normalize is not None: + warpers.append(normalize) + + warpers.append(SpyLogitsWarper()) + # for i in range(len(warpers)): + # print(warpers[i].__class__.__name__) + return warpers + + +def get_logits_processor_patch(self, **kwargs): + repetition_penalty = kwargs['generation_config'].repetition_penalty + presence_penalty = kwargs['generation_config'].presence_penalty + frequency_penalty = kwargs['generation_config'].frequency_penalty + repetition_penalty_range = kwargs['generation_config'].repetition_penalty_range + do_rep_pen_hijack = (repetition_penalty > 1) or (presence_penalty != 0) or (frequency_penalty != 0) + if do_rep_pen_hijack: + # Make sure that a RepetitionPenaltyLogitsProcessor will be created + kwargs['generation_config'].repetition_penalty = 1.1 # must set to some value > 1 + + result = self._get_logits_processor_old(**kwargs) + + if do_rep_pen_hijack: + for i in range(len(result)): + if result[i].__class__.__name__ == 'RepetitionPenaltyLogitsProcessor': + result[i] = RepetitionPenaltyLogitsProcessorWithRange(repetition_penalty, presence_penalty, frequency_penalty, repetition_penalty_range) + + return result + + +def generation_config_init_patch(self, **kwargs): + self.__init___old(**kwargs) + self.min_p = kwargs.pop("min_p", 0.0) + self.tfs = kwargs.pop("tfs", 1.0) + self.top_a = kwargs.pop("top_a", 0.0) + self.mirostat_mode = kwargs.pop("mirostat_mode", 0) + self.mirostat_eta = kwargs.pop("mirostat_eta", 0.1) + self.mirostat_tau = kwargs.pop("mirostat_tau", 5) + self.repetition_penalty_range = kwargs.pop("repetition_penalty_range", 0) + self.presence_penalty = kwargs.pop("presence_penalty", 0) + self.frequency_penalty = kwargs.pop("frequency_penalty", 0) + self.temperature_last = kwargs.pop("temperature_last", False) + + +def hijack_samplers(): + transformers.GenerationMixin._get_logits_warper_old = transformers.GenerationMixin._get_logits_warper + transformers.GenerationMixin._get_logits_warper = get_logits_warper_patch + + transformers.GenerationMixin._get_logits_processor_old = transformers.GenerationMixin._get_logits_processor + transformers.GenerationMixin._get_logits_processor = get_logits_processor_patch + + transformers.GenerationConfig.__init___old = transformers.GenerationConfig.__init__ + transformers.GenerationConfig.__init__ = generation_config_init_patch diff --git a/modules/shared.py b/modules/shared.py new file mode 100644 index 0000000000000000000000000000000000000000..bb1290a4eee2c5ac02a703c988561204702393d1 --- /dev/null +++ b/modules/shared.py @@ -0,0 +1,319 @@ +import argparse +import os +import sys +from collections import OrderedDict +from pathlib import Path + +import yaml + +from modules.logging_colors import logger + +# Model variables +model = None +tokenizer = None +model_name = 'None' +is_seq2seq = False +model_dirty_from_training = False +lora_names = [] + +# Generation variables +stop_everything = False +generation_lock = None +processing_message = '*Is typing...*' + +# UI variables +gradio = {} +persistent_interface_state = {} +need_restart = False + +# UI defaults +settings = { + 'dark_theme': True, + 'show_controls': True, + 'start_with': '', + 'mode': 'chat', + 'chat_style': 'cai-chat', + 'prompt-default': 'QA', + 'prompt-notebook': 'QA', + 'preset': 'simple-1', + 'max_new_tokens': 512, + 'max_new_tokens_min': 1, + 'max_new_tokens_max': 4096, + 'negative_prompt': '', + 'seed': -1, + 'truncation_length': 2048, + 'truncation_length_min': 0, + 'truncation_length_max': 200000, + 'max_tokens_second': 0, + 'custom_stopping_strings': '', + 'custom_token_bans': '', + 'auto_max_new_tokens': False, + 'ban_eos_token': False, + 'add_bos_token': True, + 'skip_special_tokens': True, + 'stream': True, + 'character': 'Assistant', + 'name1': 'You', + 'custom_system_message': '', + 'instruction_template_str': "{%- set ns = namespace(found=false) -%}\n{%- for message in messages -%}\n {%- if message['role'] == 'system' -%}\n {%- set ns.found = true -%}\n {%- endif -%}\n{%- endfor -%}\n{%- if not ns.found -%}\n {{- '' + 'Below is an instruction that describes a task. Write a response that appropriately completes the request.' + '\\n\\n' -}}\n{%- endif %}\n{%- for message in messages %}\n {%- if message['role'] == 'system' -%}\n {{- '' + message['content'] + '\\n\\n' -}}\n {%- else -%}\n {%- if message['role'] == 'user' -%}\n {{-'### Instruction:\\n' + message['content'] + '\\n\\n'-}}\n {%- else -%}\n {{-'### Response:\\n' + message['content'] + '\\n\\n' -}}\n {%- endif -%}\n {%- endif -%}\n{%- endfor -%}\n{%- if add_generation_prompt -%}\n {{-'### Response:\\n'-}}\n{%- endif -%}", + 'chat_template_str': "{%- for message in messages %}\n {%- if message['role'] == 'system' -%}\n {{- message['content'] + '\\n\\n' -}}\n {%- else -%}\n {%- if message['role'] == 'user' -%}\n {{- name1 + ': ' + message['content'] + '\\n'-}}\n {%- else -%}\n {{- name2 + ': ' + message['content'] + '\\n' -}}\n {%- endif -%}\n {%- endif -%}\n{%- endfor -%}", + 'chat-instruct_command': 'Continue the chat dialogue below. Write a single reply for the character "<|character|>".\n\n<|prompt|>', + 'autoload_model': False, + 'gallery-items_per_page': 50, + 'gallery-open': False, + 'default_extensions': ['gallery'], +} + + +# Parser copied from https://github.com/vladmandic/automatic +parser = argparse.ArgumentParser(description="Text generation web UI", conflict_handler='resolve', add_help=True, formatter_class=lambda prog: argparse.HelpFormatter(prog, max_help_position=55, indent_increment=2, width=200)) + +# Basic settings +group = parser.add_argument_group('Basic settings') +group.add_argument('--multi-user', action='store_true', help='Multi-user mode. Chat histories are not saved or automatically loaded. Warning: this is likely not safe for sharing publicly.') +group.add_argument('--character', type=str, help='The name of the character to load in chat mode by default.') +group.add_argument('--model', type=str, help='Name of the model to load by default.') +group.add_argument('--lora', type=str, nargs='+', help='The list of LoRAs to load. If you want to load more than one LoRA, write the names separated by spaces.') +group.add_argument('--model-dir', type=str, default='models/', help='Path to directory with all the models.') +group.add_argument('--lora-dir', type=str, default='loras/', help='Path to directory with all the loras.') +group.add_argument('--model-menu', action='store_true', help='Show a model menu in the terminal when the web UI is first launched.') +group.add_argument('--settings', type=str, help='Load the default interface settings from this yaml file. See settings-template.yaml for an example. If you create a file called settings.yaml, this file will be loaded by default without the need to use the --settings flag.') +group.add_argument('--extensions', type=str, nargs='+', help='The list of extensions to load. If you want to load more than one extension, write the names separated by spaces.') +group.add_argument('--verbose', action='store_true', help='Print the prompts to the terminal.') +group.add_argument('--chat-buttons', action='store_true', help='Show buttons on the chat tab instead of a hover menu.') + +# Model loader +group = parser.add_argument_group('Model loader') +group.add_argument('--loader', type=str, help='Choose the model loader manually, otherwise, it will get autodetected. Valid options: Transformers, llama.cpp, llamacpp_HF, ExLlama_HF, ExLlamav2_HF, AutoGPTQ, AutoAWQ, GPTQ-for-LLaMa, ExLlama, ExLlamav2, ctransformers, QuIP#.') + +# Transformers/Accelerate +group = parser.add_argument_group('Transformers/Accelerate') +group.add_argument('--cpu', action='store_true', help='Use the CPU to generate text. Warning: Training on CPU is extremely slow.') +group.add_argument('--auto-devices', action='store_true', help='Automatically split the model across the available GPU(s) and CPU.') +group.add_argument('--gpu-memory', type=str, nargs='+', help='Maximum GPU memory in GiB to be allocated per GPU. Example: --gpu-memory 10 for a single GPU, --gpu-memory 10 5 for two GPUs. You can also set values in MiB like --gpu-memory 3500MiB.') +group.add_argument('--cpu-memory', type=str, help='Maximum CPU memory in GiB to allocate for offloaded weights. Same as above.') +group.add_argument('--disk', action='store_true', help='If the model is too large for your GPU(s) and CPU combined, send the remaining layers to the disk.') +group.add_argument('--disk-cache-dir', type=str, default='cache', help='Directory to save the disk cache to. Defaults to "cache".') +group.add_argument('--load-in-8bit', action='store_true', help='Load the model with 8-bit precision (using bitsandbytes).') +group.add_argument('--bf16', action='store_true', help='Load the model with bfloat16 precision. Requires NVIDIA Ampere GPU.') +group.add_argument('--no-cache', action='store_true', help='Set use_cache to False while generating text. This reduces VRAM usage slightly, but it comes at a performance cost.') +group.add_argument('--xformers', action='store_true', help='Use xformer\'s memory efficient attention. This is really old and probably doesn\'t do anything.') +group.add_argument('--sdp-attention', action='store_true', help='Use PyTorch 2.0\'s SDP attention. Same as above.') +group.add_argument('--trust-remote-code', action='store_true', help='Set trust_remote_code=True while loading the model. Necessary for some models.') +group.add_argument('--force-safetensors', action='store_true', help='Set use_safetensors=True while loading the model. This prevents arbitrary code execution.') +group.add_argument('--no_use_fast', action='store_true', help='Set use_fast=False while loading the tokenizer (it\'s True by default). Use this if you have any problems related to use_fast.') +group.add_argument('--use_flash_attention_2', action='store_true', help='Set use_flash_attention_2=True while loading the model.') + +# bitsandbytes 4-bit +group = parser.add_argument_group('bitsandbytes 4-bit') +group.add_argument('--load-in-4bit', action='store_true', help='Load the model with 4-bit precision (using bitsandbytes).') +group.add_argument('--use_double_quant', action='store_true', help='use_double_quant for 4-bit.') +group.add_argument('--compute_dtype', type=str, default='float16', help='compute dtype for 4-bit. Valid options: bfloat16, float16, float32.') +group.add_argument('--quant_type', type=str, default='nf4', help='quant_type for 4-bit. Valid options: nf4, fp4.') + +# llama.cpp +group = parser.add_argument_group('llama.cpp') +group.add_argument('--tensorcores', action='store_true', help='Use llama-cpp-python compiled with tensor cores support. This increases performance on RTX cards. NVIDIA only.') +group.add_argument('--n_ctx', type=int, default=2048, help='Size of the prompt context.') +group.add_argument('--threads', type=int, default=0, help='Number of threads to use.') +group.add_argument('--threads-batch', type=int, default=0, help='Number of threads to use for batches/prompt processing.') +group.add_argument('--no_mul_mat_q', action='store_true', help='Disable the mulmat kernels.') +group.add_argument('--n_batch', type=int, default=512, help='Maximum number of prompt tokens to batch together when calling llama_eval.') +group.add_argument('--no-mmap', action='store_true', help='Prevent mmap from being used.') +group.add_argument('--mlock', action='store_true', help='Force the system to keep the model in RAM.') +group.add_argument('--n-gpu-layers', type=int, default=0, help='Number of layers to offload to the GPU.') +group.add_argument('--tensor_split', type=str, default=None, help='Split the model across multiple GPUs. Comma-separated list of proportions. Example: 18,17.') +group.add_argument('--numa', action='store_true', help='Activate NUMA task allocation for llama.cpp.') +group.add_argument('--logits_all', action='store_true', help='Needs to be set for perplexity evaluation to work. Otherwise, ignore it, as it makes prompt processing slower.') +group.add_argument('--no_offload_kqv', action='store_true', help='Do not offload the K, Q, V to the GPU. This saves VRAM but reduces the performance.') +group.add_argument('--cache-capacity', type=str, help='Maximum cache capacity (llama-cpp-python). Examples: 2000MiB, 2GiB. When provided without units, bytes will be assumed.') + +# ExLlama +group = parser.add_argument_group('ExLlama') +group.add_argument('--gpu-split', type=str, help='Comma-separated list of VRAM (in GB) to use per GPU device for model layers. Example: 20,7,7.') +group.add_argument('--max_seq_len', type=int, default=2048, help='Maximum sequence length.') +group.add_argument('--cfg-cache', action='store_true', help='ExLlama_HF: Create an additional cache for CFG negative prompts. Necessary to use CFG with that loader, but not necessary for CFG with base ExLlama.') +group.add_argument('--no_flash_attn', action='store_true', help='Force flash-attention to not be used.') +group.add_argument('--cache_8bit', action='store_true', help='Use 8-bit cache to save VRAM.') +group.add_argument('--num_experts_per_token', type=int, default=2, help='Number of experts to use for generation. Applies to MoE models like Mixtral.') + +# AutoGPTQ +group = parser.add_argument_group('AutoGPTQ') +group.add_argument('--triton', action='store_true', help='Use triton.') +group.add_argument('--no_inject_fused_attention', action='store_true', help='Disable the use of fused attention, which will use less VRAM at the cost of slower inference.') +group.add_argument('--no_inject_fused_mlp', action='store_true', help='Triton mode only: disable the use of fused MLP, which will use less VRAM at the cost of slower inference.') +group.add_argument('--no_use_cuda_fp16', action='store_true', help='This can make models faster on some systems.') +group.add_argument('--desc_act', action='store_true', help='For models that do not have a quantize_config.json, this parameter is used to define whether to set desc_act or not in BaseQuantizeConfig.') +group.add_argument('--disable_exllama', action='store_true', help='Disable ExLlama kernel, which can improve inference speed on some systems.') +group.add_argument('--disable_exllamav2', action='store_true', help='Disable ExLlamav2 kernel.') + +# GPTQ-for-LLaMa +group = parser.add_argument_group('GPTQ-for-LLaMa') +group.add_argument('--wbits', type=int, default=0, help='Load a pre-quantized model with specified precision in bits. 2, 3, 4 and 8 are supported.') +group.add_argument('--model_type', type=str, help='Model type of pre-quantized model. Currently LLaMA, OPT, and GPT-J are supported.') +group.add_argument('--groupsize', type=int, default=-1, help='Group size.') +group.add_argument('--pre_layer', type=int, nargs='+', help='The number of layers to allocate to the GPU. Setting this parameter enables CPU offloading for 4-bit models. For multi-gpu, write the numbers separated by spaces, eg --pre_layer 30 60.') +group.add_argument('--checkpoint', type=str, help='The path to the quantized checkpoint file. If not specified, it will be automatically detected.') +group.add_argument('--monkey-patch', action='store_true', help='Apply the monkey patch for using LoRAs with quantized models.') + +# HQQ +group = parser.add_argument_group('HQQ') +group.add_argument('--hqq-backend', type=str, default='PYTORCH_COMPILE', help='Backend for the HQQ loader. Valid options: PYTORCH, PYTORCH_COMPILE, ATEN.') + +# DeepSpeed +group = parser.add_argument_group('DeepSpeed') +group.add_argument('--deepspeed', action='store_true', help='Enable the use of DeepSpeed ZeRO-3 for inference via the Transformers integration.') +group.add_argument('--nvme-offload-dir', type=str, help='DeepSpeed: Directory to use for ZeRO-3 NVME offloading.') +group.add_argument('--local_rank', type=int, default=0, help='DeepSpeed: Optional argument for distributed setups.') + +# RWKV +group = parser.add_argument_group('RWKV') +group.add_argument('--rwkv-strategy', type=str, default=None, help='RWKV: The strategy to use while loading the model. Examples: "cpu fp32", "cuda fp16", "cuda fp16i8".') +group.add_argument('--rwkv-cuda-on', action='store_true', help='RWKV: Compile the CUDA kernel for better performance.') + +# RoPE +group = parser.add_argument_group('RoPE') +group.add_argument('--alpha_value', type=float, default=1, help='Positional embeddings alpha factor for NTK RoPE scaling. Use either this or compress_pos_emb, not both.') +group.add_argument('--rope_freq_base', type=int, default=0, help='If greater than 0, will be used instead of alpha_value. Those two are related by rope_freq_base = 10000 * alpha_value ^ (64 / 63).') +group.add_argument('--compress_pos_emb', type=int, default=1, help="Positional embeddings compression factor. Should be set to (context length) / (model\'s original context length). Equal to 1/rope_freq_scale.") + +# Gradio +group = parser.add_argument_group('Gradio') +group.add_argument('--listen', action='store_true', help='Make the web UI reachable from your local network.') +group.add_argument('--listen-port', type=int, help='The listening port that the server will use.') +group.add_argument('--listen-host', type=str, help='The hostname that the server will use.') +group.add_argument('--share', action='store_true', help='Create a public URL. This is useful for running the web UI on Google Colab or similar.') +group.add_argument('--auto-launch', action='store_true', default=False, help='Open the web UI in the default browser upon launch.') +group.add_argument('--gradio-auth', type=str, help='Set Gradio authentication password in the format "username:password". Multiple credentials can also be supplied with "u1:p1,u2:p2,u3:p3".', default=None) +group.add_argument('--gradio-auth-path', type=str, help='Set the Gradio authentication file path. The file should contain one or more user:password pairs in the same format as above.', default=None) +group.add_argument('--ssl-keyfile', type=str, help='The path to the SSL certificate key file.', default=None) +group.add_argument('--ssl-certfile', type=str, help='The path to the SSL certificate cert file.', default=None) + +# API +group = parser.add_argument_group('API') +group.add_argument('--api', action='store_true', help='Enable the API extension.') +group.add_argument('--public-api', action='store_true', help='Create a public URL for the API using Cloudfare.') +group.add_argument('--public-api-id', type=str, help='Tunnel ID for named Cloudflare Tunnel. Use together with public-api option.', default=None) +group.add_argument('--api-port', type=int, default=5000, help='The listening port for the API.') +group.add_argument('--api-key', type=str, default='', help='API authentication key.') +group.add_argument('--admin-key', type=str, default='', help='API authentication key for admin tasks like loading and unloading models. If not set, will be the same as --api-key.') +group.add_argument('--nowebui', action='store_true', help='Do not launch the Gradio UI. Useful for launching the API in standalone mode.') + +# Multimodal +group = parser.add_argument_group('Multimodal') +group.add_argument('--multimodal-pipeline', type=str, default=None, help='The multimodal pipeline to use. Examples: llava-7b, llava-13b.') + +# Deprecated parameters +group = parser.add_argument_group('Deprecated') +group.add_argument('--notebook', action='store_true', help='DEPRECATED') +group.add_argument('--chat', action='store_true', help='DEPRECATED') +group.add_argument('--no-stream', action='store_true', help='DEPRECATED') +group.add_argument('--mul_mat_q', action='store_true', help='DEPRECATED') +group.add_argument('--api-blocking-port', type=int, default=5000, help='DEPRECATED') +group.add_argument('--api-streaming-port', type=int, default=5005, help='DEPRECATED') +group.add_argument('--llama_cpp_seed', type=int, default=0, help='DEPRECATED') +group.add_argument('--use_fast', action='store_true', help='DEPRECATED') + +args = parser.parse_args() +args_defaults = parser.parse_args([]) +provided_arguments = [] +for arg in sys.argv[1:]: + arg = arg.lstrip('-').replace('-', '_') + if hasattr(args, arg): + provided_arguments.append(arg) + +deprecated_args = ['notebook', 'chat', 'no_stream', 'mul_mat_q', 'use_fast'] + + +def do_cmd_flags_warnings(): + + # Deprecation warnings + for k in deprecated_args: + if getattr(args, k): + logger.warning(f'The --{k} flag has been deprecated and will be removed soon. Please remove that flag.') + + # Security warnings + if args.trust_remote_code: + logger.warning('trust_remote_code is enabled. This is dangerous.') + if 'COLAB_GPU' not in os.environ and not args.nowebui: + if args.share: + logger.warning("The gradio \"share link\" feature uses a proprietary executable to create a reverse tunnel. Use it with care.") + if any((args.listen, args.share)) and not any((args.gradio_auth, args.gradio_auth_path)): + logger.warning("\nYou are potentially exposing the web UI to the entire internet without any access password.\nYou can create one with the \"--gradio-auth\" flag like this:\n\n--gradio-auth username:password\n\nMake sure to replace username:password with your own.") + if args.multi_user: + logger.warning('\nThe multi-user mode is highly experimental and should not be shared publicly.') + + +def fix_loader_name(name): + if not name: + return name + + name = name.lower() + if name in ['llamacpp', 'llama.cpp', 'llama-cpp', 'llama cpp']: + return 'llama.cpp' + if name in ['llamacpp_hf', 'llama.cpp_hf', 'llama-cpp-hf', 'llamacpp-hf', 'llama.cpp-hf']: + return 'llamacpp_HF' + elif name in ['transformers', 'huggingface', 'hf', 'hugging_face', 'hugging face']: + return 'Transformers' + elif name in ['autogptq', 'auto-gptq', 'auto_gptq', 'auto gptq']: + return 'AutoGPTQ' + elif name in ['gptq-for-llama', 'gptqforllama', 'gptqllama', 'gptq for llama', 'gptq_for_llama']: + return 'GPTQ-for-LLaMa' + elif name in ['exllama', 'ex-llama', 'ex_llama', 'exlama']: + return 'ExLlama' + elif name in ['exllama-hf', 'exllama_hf', 'exllama hf', 'ex-llama-hf', 'ex_llama_hf']: + return 'ExLlama_HF' + elif name in ['exllamav2', 'exllama-v2', 'ex_llama-v2', 'exlamav2', 'exlama-v2', 'exllama2', 'exllama-2']: + return 'ExLlamav2' + elif name in ['exllamav2-hf', 'exllamav2_hf', 'exllama-v2-hf', 'exllama_v2_hf', 'exllama-v2_hf', 'exllama2-hf', 'exllama2_hf', 'exllama-2-hf', 'exllama_2_hf', 'exllama-2_hf']: + return 'ExLlamav2_HF' + elif name in ['ctransformers', 'ctranforemrs', 'ctransformer']: + return 'ctransformers' + elif name in ['autoawq', 'awq', 'auto-awq']: + return 'AutoAWQ' + elif name in ['quip#', 'quip-sharp', 'quipsharp', 'quip_sharp']: + return 'QuIP#' + elif name in ['hqq']: + return 'HQQ' + + +def add_extension(name, last=False): + if args.extensions is None: + args.extensions = [name] + elif last: + args.extensions = [x for x in args.extensions if x != name] + args.extensions.append(name) + elif name not in args.extensions: + args.extensions.append(name) + + +def is_chat(): + return True + + +args.loader = fix_loader_name(args.loader) + +# Activate the multimodal extension +if args.multimodal_pipeline is not None: + add_extension('multimodal') + +# Activate the API extension +if args.api or args.public_api: + add_extension('openai', last=True) + +# Load model-specific settings +with Path(f'{args.model_dir}/config.yaml') as p: + if p.exists(): + model_config = yaml.safe_load(open(p, 'r').read()) + else: + model_config = {} + +# Load custom model-specific settings +with Path(f'{args.model_dir}/config-user.yaml') as p: + if p.exists(): + user_config = yaml.safe_load(open(p, 'r').read()) + else: + user_config = {} + +model_config = OrderedDict(model_config) +user_config = OrderedDict(user_config) diff --git a/modules/text_generation.py b/modules/text_generation.py new file mode 100644 index 0000000000000000000000000000000000000000..f640b2cc746ec391bbf3c1668b9cb826cdcff48e --- /dev/null +++ b/modules/text_generation.py @@ -0,0 +1,415 @@ +import ast +import copy +import html +import random +import re +import time +import traceback + +import numpy as np +import torch +import transformers +from transformers import LogitsProcessorList, is_torch_xpu_available + +import modules.shared as shared +from modules.callbacks import ( + Iteratorize, + Stream, + _StopEverythingStoppingCriteria +) +from modules.extensions import apply_extensions +from modules.grammar.grammar_utils import initialize_grammar +from modules.grammar.logits_process import GrammarConstrainedLogitsProcessor +from modules.html_generator import generate_4chan_html, generate_basic_html +from modules.logging_colors import logger +from modules.models import clear_torch_cache, local_rank + + +def generate_reply(*args, **kwargs): + shared.generation_lock.acquire() + try: + for result in _generate_reply(*args, **kwargs): + yield result + finally: + shared.generation_lock.release() + + +def _generate_reply(question, state, stopping_strings=None, is_chat=False, escape_html=False, for_ui=False): + + # Find the appropriate generation function + generate_func = apply_extensions('custom_generate_reply') + if generate_func is None: + if shared.model_name == 'None' or shared.model is None: + logger.error("No model is loaded! Select one in the Model tab.") + yield '' + return + + if shared.model.__class__.__name__ in ['LlamaCppModel', 'RWKVModel', 'ExllamaModel', 'Exllamav2Model', 'CtransformersModel']: + generate_func = generate_reply_custom + else: + generate_func = generate_reply_HF + + # Prepare the input + original_question = question + if not is_chat: + state = apply_extensions('state', state) + question = apply_extensions('input', question, state) + + # Find the stopping strings + all_stop_strings = [] + for st in (stopping_strings, state['custom_stopping_strings']): + if type(st) is str: + st = ast.literal_eval(f"[{st}]") + + if type(st) is list and len(st) > 0: + all_stop_strings += st + + if shared.args.verbose: + print(f'\n\n{question}\n--------------------\n') + + shared.stop_everything = False + clear_torch_cache() + seed = set_manual_seed(state['seed']) + last_update = -1 + reply = '' + is_stream = state['stream'] + if len(all_stop_strings) > 0 and not state['stream']: + state = copy.deepcopy(state) + state['stream'] = True + + # Generate + for reply in generate_func(question, original_question, seed, state, stopping_strings, is_chat=is_chat): + reply, stop_found = apply_stopping_strings(reply, all_stop_strings) + if escape_html: + reply = html.escape(reply) + if is_stream: + cur_time = time.time() + + # Maximum number of tokens/second + if state['max_tokens_second'] > 0: + diff = 1 / state['max_tokens_second'] - (cur_time - last_update) + if diff > 0: + time.sleep(diff) + + last_update = time.time() + yield reply + + # Limit updates to 24 or 5 per second to avoid lag in the Gradio UI + # API updates are not limited + else: + min_update_interval = 0 if not for_ui else 0.2 if (shared.args.listen or shared.args.share) else 0.0417 + if cur_time - last_update > min_update_interval: + last_update = cur_time + yield reply + + if stop_found or (state['max_tokens_second'] > 0 and shared.stop_everything): + break + + if not is_chat: + reply = apply_extensions('output', reply, state) + + yield reply + + +def encode(prompt, add_special_tokens=True, add_bos_token=True, truncation_length=None): + if shared.tokenizer is None: + raise ValueError('No tokenizer is loaded') + + if shared.model.__class__.__name__ in ['LlamaCppModel', 'RWKVModel', 'CtransformersModel', 'Exllamav2Model']: + input_ids = shared.tokenizer.encode(str(prompt)) + if shared.model.__class__.__name__ not in ['Exllamav2Model']: + input_ids = np.array(input_ids).reshape(1, len(input_ids)) + else: + input_ids = shared.tokenizer.encode(str(prompt), return_tensors='pt', add_special_tokens=add_special_tokens) + if not add_bos_token: + while len(input_ids[0]) > 0 and input_ids[0][0] == shared.tokenizer.bos_token_id: + input_ids = input_ids[:, 1:] + + # Handling truncation + if truncation_length is not None: + input_ids = input_ids[:, -truncation_length:] + + if shared.model.__class__.__name__ in ['LlamaCppModel', 'RWKVModel', 'ExllamaModel', 'Exllamav2Model', 'CtransformersModel'] or shared.args.cpu: + return input_ids + elif shared.args.deepspeed: + return input_ids.to(device=local_rank) + elif torch.backends.mps.is_available(): + device = torch.device('mps') + return input_ids.to(device) + elif is_torch_xpu_available(): + return input_ids.to("xpu:0") + else: + return input_ids.cuda() + + +def decode(output_ids, skip_special_tokens=True): + if shared.tokenizer is None: + raise ValueError('No tokenizer is loaded') + + return shared.tokenizer.decode(output_ids, skip_special_tokens=skip_special_tokens) + + +def get_encoded_length(prompt): + length_after_extensions = apply_extensions('tokenized_length', prompt) + if length_after_extensions is not None: + return length_after_extensions + + return len(encode(prompt)[0]) + + +def get_token_ids(prompt): + tokens = encode(prompt)[0] + decoded_tokens = [shared.tokenizer.decode([i]) for i in tokens] + + output = '' + for row in list(zip(tokens, decoded_tokens)): + output += f"{str(int(row[0])).ljust(5)} - {repr(row[1])}\n" + + return output + + +def get_max_prompt_length(state): + return state['truncation_length'] - state['max_new_tokens'] + + +def generate_reply_wrapper(question, state, stopping_strings=None): + """ + Returns formatted outputs for the UI + """ + reply = question if not shared.is_seq2seq else '' + yield formatted_outputs(reply, shared.model_name) + + for reply in generate_reply(question, state, stopping_strings, is_chat=False, escape_html=True, for_ui=True): + if not shared.is_seq2seq: + reply = question + reply + + yield formatted_outputs(reply, shared.model_name) + + +def formatted_outputs(reply, model_name): + if any(s in model_name for s in ['gpt-4chan', 'gpt4chan']): + reply = fix_gpt4chan(reply) + return html.unescape(reply), generate_4chan_html(reply) + else: + return html.unescape(reply), generate_basic_html(reply) + + +def fix_gpt4chan(s): + """ + Removes empty replies from gpt4chan outputs + """ + for i in range(10): + s = re.sub("--- [0-9]*\n>>[0-9]*\n---", "---", s) + s = re.sub("--- [0-9]*\n *\n---", "---", s) + s = re.sub("--- [0-9]*\n\n\n---", "---", s) + + return s + + +def fix_galactica(s): + """ + Fix the LaTeX equations in GALACTICA + """ + s = s.replace(r'\[', r'$') + s = s.replace(r'\]', r'$') + s = s.replace(r'\(', r'$') + s = s.replace(r'\)', r'$') + s = s.replace(r'$$', r'$') + s = re.sub(r'\n', r'\n\n', s) + s = re.sub(r"\n{3,}", "\n\n", s) + return s + + +def set_manual_seed(seed): + seed = int(seed) + if seed == -1: + seed = random.randint(1, 2**31) + + torch.manual_seed(seed) + if torch.cuda.is_available(): + torch.cuda.manual_seed_all(seed) + elif is_torch_xpu_available(): + torch.xpu.manual_seed_all(seed) + + return seed + + +def stop_everything_event(): + shared.stop_everything = True + + +def apply_stopping_strings(reply, all_stop_strings): + stop_found = False + for string in all_stop_strings: + idx = reply.find(string) + if idx != -1: + reply = reply[:idx] + stop_found = True + break + + if not stop_found: + # If something like "\nYo" is generated just before "\nYou:" + # is completed, trim it + for string in all_stop_strings: + for j in range(len(string) - 1, 0, -1): + if reply[-j:] == string[:j]: + reply = reply[:-j] + break + else: + continue + + break + + return reply, stop_found + + +def get_reply_from_output_ids(output_ids, state, starting_from=0): + reply = decode(output_ids[starting_from:], state['skip_special_tokens']) + if (hasattr(shared.tokenizer, 'convert_ids_to_tokens') and len(output_ids) > starting_from and shared.tokenizer.convert_ids_to_tokens(int(output_ids[starting_from])).startswith('▁')) and not reply.startswith(' '): + reply = ' ' + reply + + return reply + + +def generate_reply_HF(question, original_question, seed, state, stopping_strings=None, is_chat=False): + generate_params = {} + for k in ['max_new_tokens', 'do_sample', 'temperature', 'temperature_last', 'top_p', 'min_p', 'typical_p', 'repetition_penalty', 'presence_penalty', 'frequency_penalty', 'repetition_penalty_range', 'encoder_repetition_penalty', 'top_k', 'min_length', 'no_repeat_ngram_size', 'num_beams', 'penalty_alpha', 'length_penalty', 'early_stopping', 'tfs', 'top_a', 'mirostat_mode', 'mirostat_tau', 'mirostat_eta', 'guidance_scale']: + generate_params[k] = state[k] + + if state['negative_prompt'] != '': + generate_params['negative_prompt_ids'] = encode(state['negative_prompt']) + + for k in ['epsilon_cutoff', 'eta_cutoff']: + if state[k] > 0: + generate_params[k] = state[k] * 1e-4 + + if state['ban_eos_token']: + generate_params['suppress_tokens'] = [shared.tokenizer.eos_token_id] + + if state['custom_token_bans']: + to_ban = [int(x) for x in state['custom_token_bans'].split(',')] + if len(to_ban) > 0: + if generate_params.get('suppress_tokens', None): + generate_params['suppress_tokens'] += to_ban + else: + generate_params['suppress_tokens'] = to_ban + + generate_params.update({'use_cache': not shared.args.no_cache}) + if shared.args.deepspeed: + generate_params.update({'synced_gpus': True}) + + # Encode the input + input_ids = encode(question, add_bos_token=state['add_bos_token'], truncation_length=get_max_prompt_length(state)) + output = input_ids[0] + cuda = not any((shared.args.cpu, shared.args.deepspeed)) + if state['auto_max_new_tokens']: + generate_params['max_new_tokens'] = state['truncation_length'] - input_ids.shape[-1] + + # Add the encoded tokens to generate_params + question, input_ids, inputs_embeds = apply_extensions('tokenizer', state, question, input_ids, None) + original_input_ids = input_ids + generate_params.update({'inputs': input_ids}) + if inputs_embeds is not None: + generate_params.update({'inputs_embeds': inputs_embeds}) + + # Stopping criteria / eos token + eos_token_ids = [shared.tokenizer.eos_token_id] if shared.tokenizer.eos_token_id is not None else [] + generate_params['eos_token_id'] = eos_token_ids + generate_params['stopping_criteria'] = transformers.StoppingCriteriaList() + generate_params['stopping_criteria'].append(_StopEverythingStoppingCriteria()) + + # Logits processor + processor = state.get('logits_processor', LogitsProcessorList([])) + if not isinstance(processor, LogitsProcessorList): + processor = LogitsProcessorList([processor]) + + # Grammar + if state['grammar_string'].strip() != '': + grammar = initialize_grammar(state['grammar_string']) + grammar_processor = GrammarConstrainedLogitsProcessor(grammar) + processor.append(grammar_processor) + + apply_extensions('logits_processor', processor, input_ids) + generate_params['logits_processor'] = processor + + t0 = time.time() + try: + if not is_chat and not shared.is_seq2seq: + yield '' + + # Generate the entire reply at once. + if not state['stream']: + with torch.no_grad(): + output = shared.model.generate(**generate_params)[0] + if cuda: + output = output.cuda() + + starting_from = 0 if shared.is_seq2seq else len(input_ids[0]) + yield get_reply_from_output_ids(output, state, starting_from=starting_from) + + # Stream the reply 1 token at a time. + # This is based on the trick of using 'stopping_criteria' to create an iterator. + else: + + def generate_with_callback(callback=None, *args, **kwargs): + kwargs['stopping_criteria'].append(Stream(callback_func=callback)) + clear_torch_cache() + with torch.no_grad(): + shared.model.generate(**kwargs) + + def generate_with_streaming(**kwargs): + return Iteratorize(generate_with_callback, [], kwargs, callback=None) + + with generate_with_streaming(**generate_params) as generator: + cumulative_reply = '' + starting_from = 0 if shared.is_seq2seq else len(input_ids[0]) + for output in generator: + if output[-1] in eos_token_ids: + break + + new_content = get_reply_from_output_ids(output, state, starting_from=starting_from) + # check the partial unicode character + if chr(0xfffd) in new_content: + continue + + cumulative_reply += new_content + starting_from = len(output) + yield cumulative_reply + + except Exception: + traceback.print_exc() + finally: + t1 = time.time() + original_tokens = len(original_input_ids[0]) + new_tokens = len(output) - (original_tokens if not shared.is_seq2seq else 0) + print(f'Output generated in {(t1-t0):.2f} seconds ({new_tokens/(t1-t0):.2f} tokens/s, {new_tokens} tokens, context {original_tokens}, seed {seed})') + return + + +def generate_reply_custom(question, original_question, seed, state, stopping_strings=None, is_chat=False): + """ + For models that do not use the transformers library for sampling + """ + seed = set_manual_seed(state['seed']) + + t0 = time.time() + reply = '' + try: + if not is_chat: + yield '' + + if not state['stream']: + reply = shared.model.generate(question, state) + yield reply + else: + for reply in shared.model.generate_with_streaming(question, state): + yield reply + + except Exception: + traceback.print_exc() + finally: + t1 = time.time() + original_tokens = len(encode(original_question)[0]) + new_tokens = len(encode(original_question + reply)[0]) - original_tokens + print(f'Output generated in {(t1-t0):.2f} seconds ({new_tokens/(t1-t0):.2f} tokens/s, {new_tokens} tokens, context {original_tokens}, seed {seed})') + return diff --git a/modules/training.py b/modules/training.py new file mode 100644 index 0000000000000000000000000000000000000000..b0e024008505e3739179cbcc26c142497312e6fe --- /dev/null +++ b/modules/training.py @@ -0,0 +1,776 @@ +import os + +os.environ["WANDB_MODE"] = "offline" +# os.environ["WANDB_DISABLED"] = "true" + +import json +import math +import random +import shutil +import sys +import threading +import time +import traceback +from datetime import datetime +from pathlib import Path + +import gradio as gr +import torch +import transformers +from datasets import Dataset, load_dataset +from peft import ( + LoraConfig, + get_peft_model, + prepare_model_for_kbit_training, + set_peft_model_state_dict +) +from peft.utils.other import \ + TRANSFORMERS_MODELS_TO_LORA_TARGET_MODULES_MAPPING as model_to_lora_modules +from transformers import is_torch_xpu_available +from transformers.models.auto.modeling_auto import ( + MODEL_FOR_CAUSAL_LM_MAPPING_NAMES +) + +from modules import shared, ui, utils +from modules.evaluate import ( + calculate_perplexity, + generate_markdown_table, + save_past_evaluations +) +from modules.logging_colors import logger +from modules.models import reload_model +from modules.utils import natural_keys + +MODEL_CLASSES = {v[1]: v[0] for v in MODEL_FOR_CAUSAL_LM_MAPPING_NAMES.items()} +PARAMETERS = ["lora_name", "always_override", "q_proj_en", "v_proj_en", "k_proj_en", "o_proj_en", "gate_proj_en", "down_proj_en", "up_proj_en", "save_steps", "micro_batch_size", "batch_size", "epochs", "learning_rate", "lr_scheduler_type", "lora_rank", "lora_alpha", "lora_dropout", "cutoff_len", "dataset", "eval_dataset", "format", "eval_steps", "raw_text_file", "overlap_len", "newline_favor_len", "higher_rank_limit", "warmup_steps", "optimizer", "hard_cut_string", "train_only_after", "stop_at_loss", "add_eos_token", "min_chars", "report_to"] +WANT_INTERRUPT = False + +train_log = {} +train_template = {} + + +def create_ui(): + mu = shared.args.multi_user + with gr.Tab("Training", elem_id="training-tab"): + with gr.Tab('Train LoRA', elem_id='lora-train-tab'): + tmp = gr.State('') + with gr.Row(): + with gr.Column(): + gr.Markdown("[Tutorial](https://github.com/oobabooga/text-generation-webui/wiki/05-%E2%80%90-Training-Tab)") + + with gr.Row(): + copy_from = gr.Dropdown(label='Copy parameters from', value='None', choices=utils.get_available_loras(), elem_classes=['slim-dropdown'], interactive=not mu) + ui.create_refresh_button(copy_from, lambda: None, lambda: {'choices': utils.get_available_loras()}, 'refresh-button', interactive=not mu) + + with gr.Row(): + with gr.Column(scale=5): + lora_name = gr.Textbox(label='Name', info='The name of your new LoRA file') + with gr.Column(): + always_override = gr.Checkbox(label='Override Existing Files', value=False, info='If the name is the same, checking will replace the existing file, and unchecking will load and continue from it (the rank must be the same).', elem_classes=['no-background']) + + with gr.Accordion(label='Target Modules', open=False): + gr.Markdown("Selects which modules to target in training. Targeting more modules is closer to a full fine-tune at the cost of increased VRAM requirements and adapter size.\nNOTE: Only works for model_id='llama', other types will retain default training behavior and not use these settings.") + with gr.Row(): + with gr.Column(): + q_proj_en = gr.Checkbox(label='Enable q_proj', value=True) + with gr.Column(): + v_proj_en = gr.Checkbox(label='Enable v_proj', value=True) + with gr.Column(): + k_proj_en = gr.Checkbox(label='Enable k_proj', value=False) + with gr.Column(): + o_proj_en = gr.Checkbox(label='Enable o_proj', value=False) + with gr.Column(): + gate_proj_en = gr.Checkbox(label='Enable gate_proj', value=False) + with gr.Column(): + down_proj_en = gr.Checkbox(label='Enable down_proj', value=False) + with gr.Column(): + up_proj_en = gr.Checkbox(label='Enable up_proj', value=False) + + with gr.Row(): + with gr.Column(): + lora_rank = gr.Slider(label='LoRA Rank', value=32, minimum=0, maximum=1024, step=4, info='Also called dimension count. Higher values = larger file, more content control. Smaller values = smaller file, less control. Use 4 or 8 for style, 128 or 256 to teach, 1024+ for fine-detail on big data. More VRAM is needed for higher ranks.') + lora_alpha = gr.Slider(label='LoRA Alpha', value=64, minimum=0, maximum=2048, step=4, info='This divided by the rank becomes the scaling of the LoRA. Higher means stronger. A good standard value is twice your Rank.') + batch_size = gr.Slider(label='Batch Size', value=128, minimum=0, maximum=1024, step=4, info='Global batch size. The two batch sizes together determine gradient accumulation (gradientAccum = batch / microBatch). Higher gradient accum values lead to better quality training.') + micro_batch_size = gr.Slider(label='Micro Batch Size', value=4, minimum=1, maximum=128, step=1, info='Per-device batch size (NOTE: multiple devices not yet implemented). Increasing this will increase VRAM usage.') + cutoff_len = gr.Slider(label='Cutoff Length', minimum=0, maximum=4096, value=256, step=32, info='Cutoff length for text input. Essentially, how long of a line of text to feed in at a time. Higher values require drastically more VRAM.') + + with gr.Column(): + save_steps = gr.Number(label='Save every n steps', value=0, info='If above 0, a checkpoint of the LoRA will be saved every time this many steps pass.') + + epochs = gr.Number(label='Epochs', value=3, info='Number of times every entry in the dataset should be fed into training. So 1 means feed each item in once, 5 means feed it in five times, etc.') + learning_rate = gr.Textbox(label='Learning Rate', value='3e-4', info='In scientific notation. 3e-4 is a good starting base point. 1e-2 is extremely high, 1e-6 is extremely low.') + with gr.Row(): + lr_scheduler_type = gr.Dropdown(label='LR Scheduler', value='linear', choices=['linear', 'constant', 'constant_with_warmup', 'cosine', 'cosine_with_restarts', 'polynomial', 'inverse_sqrt'], info='Learning rate scheduler - defines how the learning rate changes over time. "Constant" means never change, "linear" means to go in a straight line from the learning rate down to 0, cosine follows a curve, etc.', elem_classes=['slim-dropdown']) + + with gr.Accordion(label='Advanced Options', open=False): + with gr.Row(): + with gr.Column(): + lora_dropout = gr.Slider(label='LoRA Dropout', minimum=0.0, maximum=1.0, step=0.025, value=0.05, info='Percentage probability for dropout of LoRA layers. This can help reduce overfitting. Most users should leave at default.') + stop_at_loss = gr.Slider(label='Stop at loss', minimum=0.0, maximum=3.0, step=0.1, value=0.00, info='The process will automatically stop once the desired loss value is reached. (reasonable numbers are 1.5-1.8)') + with gr.Row(): + optimizer = gr.Dropdown(label='Optimizer', value='adamw_torch', choices=['adamw_hf', 'adamw_torch', 'adamw_torch_fused', 'adamw_torch_xla', 'adamw_apex_fused', 'adafactor', 'adamw_bnb_8bit', 'adamw_anyprecision', 'sgd', 'adagrad'], info='Different optimizer implementation options, for advanced users. Effects of different options are not well documented yet.', elem_classes=['slim-dropdown']) + + with gr.Column(): + warmup_steps = gr.Number(label='Warmup Steps', value=100, info='For this many steps at the start, the learning rate will be lower than normal. This helps the trainer prepare the model and precompute statistics to improve the quality of training after the start.') + train_only_after = gr.Textbox(label='Train Only After', value='', info='Only consider text *after* this string in any given chunk for training. For Alpaca datasets, use "### Response:" to only train the response and ignore the input.') + + add_eos_token = gr.Checkbox(label='Add EOS token', value=False, info="Adds EOS token for each dataset item. In case of raw text, the EOS will be added at the Hard Cut") + + higher_rank_limit = gr.Checkbox(label='Enable higher ranks', value=False, info='If checked, changes Rank/Alpha slider above to go much higher. This will not work without a datacenter-class GPU.') + report_to = gr.Radio(label="Save detailed logs with", value="None", choices=["None", "wandb", "tensorboard"], interactive=True) + + with gr.Column(): + with gr.Tab(label='Formatted Dataset'): + with gr.Row(): + format = gr.Dropdown(choices=utils.get_datasets('training/formats', 'json'), value='None', label='Data Format', info='The format file used to decide how to format the dataset input.', elem_classes=['slim-dropdown'], interactive=not mu) + ui.create_refresh_button(format, lambda: None, lambda: {'choices': utils.get_datasets('training/formats', 'json')}, 'refresh-button', interactive=not mu) + + with gr.Row(): + dataset = gr.Dropdown(choices=utils.get_datasets('training/datasets', 'json'), value='None', label='Dataset', info='The dataset file to use for training.', elem_classes=['slim-dropdown'], interactive=not mu) + ui.create_refresh_button(dataset, lambda: None, lambda: {'choices': utils.get_datasets('training/datasets', 'json')}, 'refresh-button', interactive=not mu) + + with gr.Row(): + eval_dataset = gr.Dropdown(choices=utils.get_datasets('training/datasets', 'json'), value='None', label='Evaluation Dataset', info='The (optional) dataset file used to evaluate the model after training.', elem_classes=['slim-dropdown'], interactive=not mu) + ui.create_refresh_button(eval_dataset, lambda: None, lambda: {'choices': utils.get_datasets('training/datasets', 'json')}, 'refresh-button', interactive=not mu) + + eval_steps = gr.Number(label='Evaluate every n steps', value=100, info='If an evaluation dataset is given, test it every time this many steps pass.') + + with gr.Tab(label="Raw text file"): + with gr.Row(): + raw_text_file = gr.Dropdown(choices=utils.get_datasets('training/datasets', 'txt'), value='None', label='Text file', info='The raw text file to use for training.', elem_classes=['slim-dropdown'], interactive=not mu) + ui.create_refresh_button(raw_text_file, lambda: None, lambda: {'choices': utils.get_datasets('training/datasets', 'txt')}, 'refresh-button', interactive=not mu) + + with gr.Row(): + with gr.Column(): + overlap_len = gr.Slider(label='Overlap Length', minimum=0, maximum=512, value=128, step=16, info='How many tokens from the prior chunk of text to include into the next chunk. (The chunks themselves will be of a size determined by Cutoff Length). Setting overlap to exactly half the cutoff length may be ideal.') + newline_favor_len = gr.Slider(label='Prefer Newline Cut Length', minimum=0, maximum=512, value=128, step=16, info='Length (in characters, not tokens) of the maximum distance to shift an overlap cut by to ensure chunks cut at newlines. If too low, cuts may occur in the middle of lines.') + + with gr.Column(): + hard_cut_string = gr.Textbox(label='Hard Cut String', value='\\n\\n\\n', info='String that indicates a hard cut between text parts. Helps prevent unwanted overlap.') + min_chars = gr.Number(label='Ignore small blocks', value=0, info='Ignore Hard Cut blocks that have less or equal characters than this number') + + with gr.Row(): + start_button = gr.Button("Start LoRA Training", variant='primary', interactive=not mu) + stop_button = gr.Button("Interrupt", interactive=not mu) + + output = gr.Markdown(value="Ready") + + with gr.Tab('Perplexity evaluation', elem_id='evaluate-tab'): + with gr.Row(): + with gr.Column(): + models = gr.Dropdown(utils.get_available_models(), label='Models', multiselect=True, interactive=not mu) + evaluate_text_file = gr.Dropdown(choices=['wikitext', 'ptb', 'ptb_new'] + utils.get_datasets('training/datasets', 'txt')[1:], value='wikitext', label='Input dataset', info='The raw text file on which the model will be evaluated. The first options are automatically downloaded: wikitext, ptb, and ptb_new. The next options are your local text files under training/datasets.', interactive=not mu) + with gr.Row(): + with gr.Column(): + stride_length = gr.Slider(label='Stride', minimum=0, maximum=32768, value=512, step=256, info='Used to make the evaluation faster at the cost of accuracy. 1 = slowest but most accurate. 512 is a common value.') + + with gr.Column(): + max_length = gr.Slider(label='max_length', minimum=0, maximum=shared.settings['truncation_length_max'], value=0, step=256, info='The context for each evaluation. If set to 0, the maximum context length for the model will be used.') + + with gr.Row(): + start_current_evaluation = gr.Button("Evaluate loaded model", interactive=not mu) + start_evaluation = gr.Button("Evaluate selected models", interactive=not mu) + stop_evaluation = gr.Button("Interrupt", interactive=not mu) + + with gr.Column(): + evaluation_log = gr.Markdown(value='') + + evaluation_table = gr.Dataframe(value=generate_markdown_table(), interactive=True) + with gr.Row(): + save_comments = gr.Button('Save comments', elem_classes="small-button", interactive=not mu) + refresh_table = gr.Button('Refresh the table', elem_classes="small-button", interactive=not mu) + + # Training events + all_params = [lora_name, always_override, q_proj_en, v_proj_en, k_proj_en, o_proj_en, gate_proj_en, down_proj_en, up_proj_en, save_steps, micro_batch_size, batch_size, epochs, learning_rate, lr_scheduler_type, lora_rank, lora_alpha, lora_dropout, cutoff_len, dataset, eval_dataset, format, eval_steps, raw_text_file, overlap_len, newline_favor_len, higher_rank_limit, warmup_steps, optimizer, hard_cut_string, train_only_after, stop_at_loss, add_eos_token, min_chars, report_to] + + copy_from.change(do_copy_params, [copy_from] + all_params, all_params) + start_button.click(do_train, all_params, output) + stop_button.click(do_interrupt, None, None, queue=False) + higher_rank_limit.change(change_rank_limit, [higher_rank_limit], [lora_rank, lora_alpha]) + + # Evaluation events. For some reason, the interrupt event + # doesn't work with the .then() syntax, so I write them one + # by one in this ugly but functional way. + ev = start_evaluation.click(calculate_perplexity, [models, evaluate_text_file, stride_length, max_length], evaluation_log, show_progress=False) + start_evaluation.click(generate_markdown_table, None, evaluation_table, show_progress=False) + + start_current_evaluation.click(lambda: ['current model'], None, tmp) + ev_cur = start_current_evaluation.click(calculate_perplexity, [tmp, evaluate_text_file, stride_length, max_length], evaluation_log, show_progress=False) + start_current_evaluation.click(generate_markdown_table, None, evaluation_table, show_progress=False) + + stop_evaluation.click(None, None, None, cancels=[ev, ev_cur], queue=False) + refresh_table.click(generate_markdown_table, None, evaluation_table, show_progress=True) + save_comments.click( + save_past_evaluations, evaluation_table, None).then( + lambda: "Comments saved.", None, evaluation_log, show_progress=False) + + +def do_interrupt(): + global WANT_INTERRUPT + WANT_INTERRUPT = True + + +def do_copy_params(lora_name: str, *args): + f_name = f"{shared.args.lora_dir}/{clean_path(None, lora_name)}/training_parameters.json" + if Path(f_name).is_file(): + with open(f_name, 'r', encoding='utf-8') as format_file: + params: dict[str, str] = json.load(format_file) + else: + params = {} + + result = list() + for i in range(0, len(PARAMETERS)): + key = PARAMETERS[i] + if key in params: + result.append(params[key]) + else: + result.append(args[i]) + + return result + + +def change_rank_limit(use_higher_ranks: bool): + mult = 2 if use_higher_ranks else 1 + return {"maximum": 1024 * mult, "__type__": "update"}, {"maximum": 2048 * mult, "__type__": "update"} + + +def clean_path(base_path: str, path: str): + """Strips unusual symbols and forcibly builds a path as relative to the intended directory.""" + path = path.replace('\\', '/').replace('..', '_') + if base_path is None: + return path + + return f'{Path(base_path).absolute()}/{path}' + + +def backup_adapter(input_folder): + # Get the creation date of the file adapter_model.bin + try: + adapter_file = Path(f"{input_folder}/adapter_model.bin") + if adapter_file.is_file(): + + logger.info("Backing up existing LoRA adapter") + creation_date = datetime.fromtimestamp(adapter_file.stat().st_ctime) + creation_date_str = creation_date.strftime("Backup-%Y-%m-%d") + + # Create the new subfolder + subfolder_path = Path(f"{input_folder}/{creation_date_str}") + subfolder_path.mkdir(parents=True, exist_ok=True) + + # Check if the file already exists in the subfolder + backup_adapter_file = Path(f"{input_folder}/{creation_date_str}/adapter_model.bin") + if backup_adapter_file.is_file(): + print(" - Backup already exists. Skipping backup process.") + return + + # Copy existing files to the new subfolder + existing_files = Path(input_folder).iterdir() + for file in existing_files: + if file.is_file(): + shutil.copy2(file, subfolder_path) + except Exception as e: + print("An error occurred in backup_adapter:", str(e)) + + +def calc_trainable_parameters(model): + trainable_params = 0 + all_param = 0 + for _, param in model.named_parameters(): + num_params = param.numel() + # if using DS Zero 3 and the weights are initialized empty + if num_params == 0 and hasattr(param, "ds_numel"): + num_params = param.ds_numel + + all_param += num_params + if param.requires_grad: + trainable_params += num_params + + return trainable_params, all_param + + +def do_train(lora_name: str, always_override: bool, q_proj_en: bool, v_proj_en: bool, k_proj_en: bool, o_proj_en: bool, gate_proj_en: bool, down_proj_en: bool, up_proj_en: bool, save_steps: int, micro_batch_size: int, batch_size: int, epochs: int, learning_rate: str, lr_scheduler_type: str, lora_rank: int, lora_alpha: int, lora_dropout: float, cutoff_len: int, dataset: str, eval_dataset: str, format: str, eval_steps: int, raw_text_file: str, overlap_len: int, newline_favor_len: int, higher_rank_limit: bool, warmup_steps: int, optimizer: str, hard_cut_string: str, train_only_after: str, stop_at_loss: float, add_eos_token: bool, min_chars: int, report_to: str): + + if shared.args.monkey_patch: + from alpaca_lora_4bit.monkeypatch.peft_tuners_lora_monkey_patch import ( + replace_peft_model_with_int4_lora_model + ) + replace_peft_model_with_int4_lora_model() + + global WANT_INTERRUPT + WANT_INTERRUPT = False + + # == Input validation / processing == + yield "Preparing the input..." + lora_file_path = clean_path(None, lora_name) + if lora_file_path.strip() == '': + yield "Missing or invalid LoRA file name input." + return + + lora_file_path = f"{Path(shared.args.lora_dir)}/{lora_file_path}" + actual_lr = float(learning_rate) + model_type = type(shared.model).__name__ + + if model_type in MODEL_CLASSES: + model_id = MODEL_CLASSES[model_type] + else: + model_id = "llama" + if model_type == "PeftModelForCausalLM": + if len(shared.lora_names) > 0: + yield "You are trying to train a LoRA while you already have another LoRA loaded. This will work, but may have unexpected effects. *(Will continue anyway in 5 seconds, press `Interrupt` to stop.)*" + logger.warning("Training LoRA over top of another LoRA. May have unexpected effects.") + else: + yield "Model ID not matched due to LoRA loading. Consider reloading base model. *(Will continue anyway in 5 seconds, press `Interrupt` to stop.)*" + logger.warning("Model ID not matched due to LoRA loading. Consider reloading base model.") + else: + yield "LoRA training has only currently been validated for LLaMA, OPT, GPT-J, and GPT-NeoX models. Unexpected errors may follow. *(Will continue anyway in 5 seconds, press `Interrupt` to stop.)*" + logger.warning(f"LoRA training has only currently been validated for LLaMA, OPT, GPT-J, and GPT-NeoX models. (Found model type: {model_type})") + + time.sleep(5) + + if shared.args.loader == 'GPTQ-for-LLaMa' and not shared.args.monkey_patch: + yield "LoRA training with GPTQ-for-LLaMa requires loading with `--monkey-patch`" + return + + if cutoff_len <= 0 or micro_batch_size <= 0 or batch_size <= 0 or actual_lr <= 0 or lora_rank <= 0 or lora_alpha <= 0: + yield "Cannot input zeroes." + return + + gradient_accumulation_steps = batch_size // micro_batch_size + shared.tokenizer.pad_token_id = 0 + shared.tokenizer.padding_side = "left" + + # Populate target_modules list with chosen X_proj modules. Llama-based models only atm, non-llama will revert to default behavior. + def list_target_modules(model_id): + if model_id != "llama": + return model_to_lora_modules[model_id] + + available_modules = { + "gate": gate_proj_en, + "down": down_proj_en, + "up": up_proj_en, + "q": q_proj_en, + "v": v_proj_en, + "k": k_proj_en, + "o": o_proj_en, + } + target_mods = [f"{name}_proj" for name, enabled in available_modules.items() if enabled] + return target_mods + + def encode(text, add_bos_token): + result = shared.tokenizer.encode(text, truncation=True, max_length=cutoff_len) + # Check if the first two tokens are BOS + if len(result) >= 2 and result[:2] == [shared.tokenizer.bos_token_id, shared.tokenizer.bos_token_id]: + result = result[1:] + + if not add_bos_token and result[0] == shared.tokenizer.bos_token_id: + result = result[1:] + return result + + def tokenize(prompt, append_eos_token=False): + + if train_only_after == '' or train_only_after not in prompt: + input_ids = encode(prompt, True) + + if append_eos_token and input_ids[-1] != shared.tokenizer.eos_token_id and len(input_ids) < cutoff_len: + input_ids.append(shared.tokenizer.eos_token_id) + + input_ids = [shared.tokenizer.pad_token_id] * (cutoff_len - len(input_ids)) + input_ids + labels = [1] * len(input_ids) + + else: + ind = prompt.index(train_only_after) + len(train_only_after) + before_tokens = encode(prompt[:ind], True) + after_tokens = encode(prompt[ind:], False) + + if append_eos_token and after_tokens[-1] != shared.tokenizer.eos_token_id: + after_tokens.append(shared.tokenizer.eos_token_id) + + full_length = len(after_tokens) + len(before_tokens) + if full_length > cutoff_len: + after_tokens = after_tokens[:cutoff_len - len(before_tokens)] + else: + before_tokens = [shared.tokenizer.pad_token_id] * (cutoff_len - full_length) + before_tokens + + input_ids = before_tokens + after_tokens + labels = [-100] * len(before_tokens) + [1] * len(after_tokens) + + input_ids = torch.tensor(input_ids) + return { + "input_ids": input_ids, + "labels": labels, + "attention_mask": input_ids.ne(shared.tokenizer.pad_token_id), + } + + train_template.clear() + + # == Prep the dataset, format, etc == + if raw_text_file not in ['None', '']: + train_template["template_type"] = "raw_text" + logger.info("Loading raw text file dataset") + fullpath = clean_path('training/datasets', f'{raw_text_file}') + fullpath = Path(fullpath) + if fullpath.is_dir(): + logger.info('Training path directory {}'.format(raw_text_file)) + raw_text = "" + file_paths = sorted(fullpath.glob('*.txt'), key=lambda path: natural_keys(path.name)) + for file_path in file_paths: + if file_path.is_file(): + with file_path.open('r', encoding='utf-8') as file: + raw_text += file.read().replace('\r', '') + + logger.info(f"Loaded training file: {file_path.name}") + else: + with open(clean_path('training/datasets', f'{raw_text_file}.txt'), 'r', encoding='utf-8') as file: + raw_text = file.read().replace('\r', '') + + cut_string = hard_cut_string.replace('\\n', '\n') + eos_added = 0 + out_tokens = [] + for text_part in raw_text.split(cut_string): + if len(text_part.strip()) <= min_chars: + continue + + tokens = shared.tokenizer.encode(text_part) + if add_eos_token: + tokens.append(shared.tokenizer.eos_token_id) + eos_added += 1 + + step = cutoff_len - overlap_len + if step <= 0: + yield f"Error: overlap_len ({overlap_len}) cannot be greater than or equal to cutoff_len ({cutoff_len})" + return + + out_tokens.extend(split_chunks(tokens, cutoff_len, step)) + + if eos_added > 0: + print(f"EOS added to {eos_added} text blocks") + + del raw_text # Note: could be a gig for a large dataset, so delete redundant data as we go to be safe on RAM + text_chunks = [shared.tokenizer.decode(x) for x in out_tokens] + del out_tokens + if newline_favor_len > 0: + text_chunks = [cut_chunk_for_newline(x, newline_favor_len) for x in text_chunks] + + train_data = Dataset.from_list([tokenize(x) for x in text_chunks]) + del text_chunks + eval_data = None + else: + if dataset in ['None', '']: + yield "Missing dataset choice input, cannot continue." + return + + if format in ['None', '']: + yield "Missing format choice input, cannot continue." + return + + train_template["template_type"] = "dataset" + + with open(clean_path('training/formats', f'{format}.json'), 'r', encoding='utf-8-sig') as formatFile: + format_data: dict[str, str] = json.load(formatFile) + + # == store training prompt == + for _, value in format_data.items(): + prompt_key = f"template_{len(train_template)}" + train_template[prompt_key] = value + + def generate_prompt(data_point: dict[str, str]): + for options, data in format_data.items(): + if set(options.split(',')) == set(x[0] for x in data_point.items() if (type(x[1]) is str and len(x[1].strip()) > 0)): + for key, val in data_point.items(): + if type(val) is str: + data = data.replace(f'%{key}%', val) + return data + raise RuntimeError(f'Data-point "{data_point}" has no keyset match within format "{list(format_data.keys())}"') + + def generate_and_tokenize_prompt(data_point): + prompt = generate_prompt(data_point) + return tokenize(prompt, add_eos_token) + + logger.info("Loading JSON datasets") + data = load_dataset("json", data_files=clean_path('training/datasets', f'{dataset}.json')) + train_data = data['train'].map(generate_and_tokenize_prompt, new_fingerprint='%030x' % random.randrange(16**30)) + + if eval_dataset == 'None': + eval_data = None + else: + eval_data = load_dataset("json", data_files=clean_path('training/datasets', f'{eval_dataset}.json')) + eval_data = eval_data['train'].map(generate_and_tokenize_prompt, new_fingerprint='%030x' % random.randrange(16**30)) + + # == We MUST reload model if it went through any previous training, even failed one == + if shared.model_dirty_from_training: + selected_model = shared.model_name + if selected_model: + print("\033[1;31;1m(Model has been modified by previous training, it needs to be reloaded...)\033[0;37;0m") + try: + yield f"Reloading {selected_model}..." + reload_model() + if shared.model is not None: + print("Model reloaded OK, continue with training.") + else: + return f"Failed to load {selected_model}." + except: + exc = traceback.format_exc() + logger.error('Failed to reload the model.') + print(exc) + return exc.replace('\n', '\n\n') + + # == Start prepping the model itself == + if not hasattr(shared.model, 'lm_head') or hasattr(shared.model.lm_head, 'weight'): + logger.info("Getting model ready") + prepare_model_for_kbit_training(shared.model) + + # base model is now frozen and should not be reused for any other LoRA training than this one + shared.model_dirty_from_training = True + + logger.info("Preparing for training") + config = LoraConfig( + r=lora_rank, + lora_alpha=lora_alpha, + target_modules=list_target_modules(model_id), + lora_dropout=lora_dropout, + bias="none", + task_type="CAUSAL_LM" + ) + + # == Backup the existing adapter == + if not always_override: + backup_adapter(lora_file_path) + + # == get model trainable params + model_trainable_params, model_all_params = calc_trainable_parameters(shared.model) + + try: + logger.info("Creating LoRA model") + lora_model = get_peft_model(shared.model, config) + if not always_override and Path(f"{lora_file_path}/adapter_model.bin").is_file(): + logger.info("Loading existing LoRA data") + state_dict_peft = torch.load(f"{lora_file_path}/adapter_model.bin", weights_only=True) + set_peft_model_state_dict(lora_model, state_dict_peft) + except: + yield traceback.format_exc().replace('\n', '\n\n') + return + + if shared.args.monkey_patch: + from alpaca_lora_4bit.autograd_4bit import Autograd4bitQuantLinear + from alpaca_lora_4bit.models import Linear4bitLt + for _, m in lora_model.named_modules(): + if isinstance(m, Autograd4bitQuantLinear) or isinstance(m, Linear4bitLt): + if m.is_v1_model: + m.zeros = m.zeros.half() + m.scales = m.scales.half() + + class Tracked(): + def __init__(self): + self.current_steps = 0 + self.max_steps = 0 + self.did_save = False + + tracked = Tracked() + actual_save_steps = math.ceil(save_steps / gradient_accumulation_steps) + + class Callbacks(transformers.TrainerCallback): + def on_step_begin(self, args: transformers.TrainingArguments, state: transformers.TrainerState, control: transformers.TrainerControl, **kwargs): + tracked.current_steps = state.global_step * gradient_accumulation_steps + tracked.max_steps = state.max_steps * gradient_accumulation_steps + if WANT_INTERRUPT: + control.should_epoch_stop = True + control.should_training_stop = True + elif state.global_step > 0 and actual_save_steps > 0 and state.global_step % actual_save_steps == 0: + lora_model.save_pretrained(f"{lora_file_path}/checkpoint-{tracked.current_steps}/") + # Save log + with open(f"{lora_file_path}/checkpoint-{tracked.current_steps}/training_log.json", 'w', encoding='utf-8') as file: + json.dump(train_log, file, indent=2) + # == Save training prompt == + with open(f"{lora_file_path}/checkpoint-{tracked.current_steps}/training_prompt.json", 'w', encoding='utf-8') as file: + json.dump(train_template, file, indent=2) + + def on_substep_end(self, args: transformers.TrainingArguments, state: transformers.TrainerState, control: transformers.TrainerControl, **kwargs): + tracked.current_steps += 1 + if WANT_INTERRUPT: + control.should_epoch_stop = True + control.should_training_stop = True + + def on_log(self, args: transformers.TrainingArguments, state: transformers.TrainerState, control: transformers.TrainerControl, logs, **kwargs): + train_log.update(logs) + train_log.update({"current_steps": tracked.current_steps}) + if WANT_INTERRUPT: + print("\033[1;31;1mInterrupted by user\033[0;37;0m") + + print(f"\033[1;30;40mStep: {tracked.current_steps} \033[0;37;0m", end='') + if 'loss' in logs: + loss = float(logs['loss']) + if loss <= stop_at_loss: + control.should_epoch_stop = True + control.should_training_stop = True + print(f"\033[1;31;1mStop Loss {stop_at_loss} reached.\033[0;37;0m") + + trainer = transformers.Trainer( + model=lora_model, + train_dataset=train_data, + eval_dataset=eval_data, + args=transformers.TrainingArguments( + report_to=report_to if report_to != "None" else None, + per_device_train_batch_size=micro_batch_size, + gradient_accumulation_steps=gradient_accumulation_steps, + warmup_steps=math.ceil(warmup_steps / gradient_accumulation_steps), + num_train_epochs=epochs, + learning_rate=actual_lr, + fp16=False if shared.args.cpu else True, + optim=optimizer, + logging_steps=2 if stop_at_loss > 0 else 5, + evaluation_strategy="steps" if eval_data is not None else "no", + eval_steps=math.ceil(eval_steps / gradient_accumulation_steps) if eval_data is not None else None, + save_strategy="steps" if eval_data is not None else "no", + output_dir=lora_file_path, + lr_scheduler_type=lr_scheduler_type, + load_best_model_at_end=eval_data is not None, + # TODO: Enable multi-device support + ddp_find_unused_parameters=None, + no_cuda=shared.args.cpu, + use_ipex=True if is_torch_xpu_available and not shared.args.cpu else False + ), + data_collator=transformers.DataCollatorForLanguageModeling(shared.tokenizer, mlm=False), + callbacks=list([Callbacks()]) + ) + + lora_model.config.use_cache = False + + if torch.__version__ >= "2" and sys.platform != "win32": + lora_model = torch.compile(lora_model) + + # == Save parameters for reuse == + with open(f"{lora_file_path}/training_parameters.json", 'w', encoding='utf-8') as file: + vars = locals() + json.dump({x: vars[x] for x in PARAMETERS}, file, indent=2) + + # == Save training prompt == + with open(f"{lora_file_path}/training_prompt.json", 'w', encoding='utf-8') as file: + json.dump(train_template, file, indent=2) + + # == Main run and monitor loop == + logger.info("Starting training") + yield "Starting..." + + lora_trainable_param, lora_all_param = calc_trainable_parameters(lora_model) + + projections_string = ", ".join([projection.replace("_proj", "") for projection in list_target_modules(model_id)]) + + print(f"Training '{model_id}' model using ({projections_string}) projections") + + if lora_all_param > 0: + print(f"Trainable params: {lora_trainable_param:,d} ({100 * lora_trainable_param / lora_all_param:.4f} %), All params: {lora_all_param:,d} (Model: {model_all_params:,d})") + + train_log.update({"base_model_name": shared.model_name}) + train_log.update({"base_model_class": shared.model.__class__.__name__}) + train_log.update({"base_loaded_in_4bit": getattr(lora_model, "is_loaded_in_4bit", False)}) + train_log.update({"base_loaded_in_8bit": getattr(lora_model, "is_loaded_in_8bit", False)}) + train_log.update({"projections": projections_string}) + + if stop_at_loss > 0: + print(f"Monitoring loss \033[1;31;1m(Auto-Stop at: {stop_at_loss})\033[0;37;0m") + + if WANT_INTERRUPT: + yield "Interrupted before start." + return + + def log_train_dataset(trainer): + decoded_entries = [] + # Try to decode the entries and write the log file + try: + # Iterate over the first 10 elements in the dataset (or fewer if there are less than 10) + for i in range(min(10, len(trainer.train_dataset))): + decoded_text = shared.tokenizer.decode(trainer.train_dataset[i]['input_ids']) + decoded_entries.append({"value": decoded_text}) + + # Write the log file + Path('logs').mkdir(exist_ok=True) + with open(Path('logs/train_dataset_sample.json'), 'w') as json_file: + json.dump(decoded_entries, json_file, indent=4) + + logger.info("Log file 'train_dataset_sample.json' created in the 'logs' directory.") + except Exception as e: + logger.error(f"Failed to create log file due to error: {e}") + + def threaded_run(): + log_train_dataset(trainer) + trainer.train() + # Note: save in the thread in case the gradio thread breaks (eg browser closed) + lora_model.save_pretrained(lora_file_path) + logger.info("LoRA training run is completed and saved.") + # Save log + with open(f"{lora_file_path}/training_log.json", 'w', encoding='utf-8') as file: + json.dump(train_log, file, indent=2) + + thread = threading.Thread(target=threaded_run) + thread.start() + last_step = 0 + start_time = time.perf_counter() + + while thread.is_alive(): + time.sleep(0.5) + if WANT_INTERRUPT: + yield "Interrupting, please wait... *(Run will stop after the current training step completes.)*" + + elif tracked.current_steps != last_step: + last_step = tracked.current_steps + time_elapsed = time.perf_counter() - start_time + if time_elapsed <= 0: + timer_info = "" + total_time_estimate = 999 + else: + its = tracked.current_steps / time_elapsed + if its > 1: + timer_info = f"`{its:.2f}` it/s" + else: + timer_info = f"`{1.0/its:.2f}` s/it" + + total_time_estimate = (1.0 / its) * (tracked.max_steps) + + yield f"Running... **{tracked.current_steps}** / **{tracked.max_steps}** ... {timer_info}, {format_time(time_elapsed)} / {format_time(total_time_estimate)} ... {format_time(total_time_estimate - time_elapsed)} remaining" + + # Saving in the train thread might fail if an error occurs, so save here if so. + if not tracked.did_save: + logger.info("Training complete, saving") + lora_model.save_pretrained(lora_file_path) + + if WANT_INTERRUPT: + logger.info("Training interrupted.") + yield f"Interrupted. Incomplete LoRA saved to `{lora_file_path}`." + else: + logger.info("Training complete!") + yield f"Done! LoRA saved to `{lora_file_path}`.\n\nBefore testing your new LoRA, make sure to first reload the model, as it is currently dirty from training." + + +def split_chunks(arr, size, step): + for i in range(0, len(arr), step): + yield arr[i:i + size] + + +def cut_chunk_for_newline(chunk: str, max_length: int): + if '\n' not in chunk: + return chunk + + first_newline = chunk.index('\n') + if first_newline < max_length: + chunk = chunk[first_newline + 1:] + + if '\n' not in chunk: + return chunk + + last_newline = chunk.rindex('\n') + if len(chunk) - last_newline < max_length: + chunk = chunk[:last_newline] + + return chunk + + +def format_time(seconds: float): + if seconds < 120: + return f"`{seconds:.0f}` seconds" + + minutes = seconds / 60 + if minutes < 120: + return f"`{minutes:.0f}` minutes" + + hours = minutes / 60 + return f"`{hours:.0f}` hours" diff --git a/modules/ui.py b/modules/ui.py new file mode 100644 index 0000000000000000000000000000000000000000..b94cceca78e53abeea4c23cfcf8f835b894d8a2e --- /dev/null +++ b/modules/ui.py @@ -0,0 +1,244 @@ +import copy +from pathlib import Path + +import gradio as gr +import torch +import yaml +from transformers import is_torch_xpu_available + +from modules import shared + +with open(Path(__file__).resolve().parent / '../css/NotoSans/stylesheet.css', 'r') as f: + css = f.read() +with open(Path(__file__).resolve().parent / '../css/main.css', 'r') as f: + css += f.read() +with open(Path(__file__).resolve().parent / '../js/main.js', 'r') as f: + js = f.read() +with open(Path(__file__).resolve().parent / '../js/save_files.js', 'r') as f: + save_files_js = f.read() +with open(Path(__file__).resolve().parent / '../js/switch_tabs.js', 'r') as f: + switch_tabs_js = f.read() +with open(Path(__file__).resolve().parent / '../js/show_controls.js', 'r') as f: + show_controls_js = f.read() +with open(Path(__file__).resolve().parent / '../js/update_big_picture.js', 'r') as f: + update_big_picture_js = f.read() + +refresh_symbol = '🔄' +delete_symbol = '🗑️' +save_symbol = '💾' + +theme = gr.themes.Default( + font=['Noto Sans', 'Helvetica', 'ui-sans-serif', 'system-ui', 'sans-serif'], + font_mono=['IBM Plex Mono', 'ui-monospace', 'Consolas', 'monospace'], +).set( + border_color_primary='#c5c5d2', + button_large_padding='6px 12px', + body_text_color_subdued='#484848', + background_fill_secondary='#eaeaea' +) + +if Path("notification.mp3").exists(): + audio_notification_js = "document.querySelector('#audio_notification audio')?.play();" +else: + audio_notification_js = "" + + +def list_model_elements(): + elements = [ + 'loader', + 'filter_by_loader', + 'cpu_memory', + 'auto_devices', + 'disk', + 'cpu', + 'bf16', + 'load_in_8bit', + 'trust_remote_code', + 'no_use_fast', + 'use_flash_attention_2', + 'load_in_4bit', + 'compute_dtype', + 'quant_type', + 'use_double_quant', + 'wbits', + 'groupsize', + 'model_type', + 'pre_layer', + 'triton', + 'desc_act', + 'no_inject_fused_attention', + 'no_inject_fused_mlp', + 'no_use_cuda_fp16', + 'disable_exllama', + 'disable_exllamav2', + 'cfg_cache', + 'no_flash_attn', + 'num_experts_per_token', + 'cache_8bit', + 'threads', + 'threads_batch', + 'n_batch', + 'no_mmap', + 'mlock', + 'no_mul_mat_q', + 'n_gpu_layers', + 'tensor_split', + 'n_ctx', + 'gpu_split', + 'max_seq_len', + 'compress_pos_emb', + 'alpha_value', + 'rope_freq_base', + 'numa', + 'logits_all', + 'no_offload_kqv', + 'tensorcores', + 'hqq_backend', + ] + if is_torch_xpu_available(): + for i in range(torch.xpu.device_count()): + elements.append(f'gpu_memory_{i}') + else: + for i in range(torch.cuda.device_count()): + elements.append(f'gpu_memory_{i}') + + return elements + + +def list_interface_input_elements(): + elements = [ + 'max_new_tokens', + 'auto_max_new_tokens', + 'max_tokens_second', + 'seed', + 'temperature', + 'temperature_last', + 'top_p', + 'min_p', + 'top_k', + 'typical_p', + 'epsilon_cutoff', + 'eta_cutoff', + 'repetition_penalty', + 'presence_penalty', + 'frequency_penalty', + 'repetition_penalty_range', + 'encoder_repetition_penalty', + 'no_repeat_ngram_size', + 'min_length', + 'do_sample', + 'penalty_alpha', + 'num_beams', + 'length_penalty', + 'early_stopping', + 'mirostat_mode', + 'mirostat_tau', + 'mirostat_eta', + 'grammar_string', + 'negative_prompt', + 'guidance_scale', + 'add_bos_token', + 'ban_eos_token', + 'custom_token_bans', + 'truncation_length', + 'custom_stopping_strings', + 'skip_special_tokens', + 'stream', + 'tfs', + 'top_a', + ] + + # Chat elements + elements += [ + 'textbox', + 'start_with', + 'character_menu', + 'history', + 'name1', + 'name2', + 'greeting', + 'context', + 'mode', + 'custom_system_message', + 'instruction_template_str', + 'chat_template_str', + 'chat_style', + 'chat-instruct_command', + ] + + # Notebook/default elements + elements += [ + 'textbox-notebook', + 'textbox-default', + 'output_textbox', + 'prompt_menu-default', + 'prompt_menu-notebook', + ] + + # Model elements + elements += list_model_elements() + + return elements + + +def gather_interface_values(*args): + output = {} + for i, element in enumerate(list_interface_input_elements()): + output[element] = args[i] + + if not shared.args.multi_user: + shared.persistent_interface_state = output + + return output + + +def apply_interface_values(state, use_persistent=False): + if use_persistent: + state = shared.persistent_interface_state + + elements = list_interface_input_elements() + if len(state) == 0: + return [gr.update() for k in elements] # Dummy, do nothing + else: + return [state[k] if k in state else gr.update() for k in elements] + + +def save_settings(state, preset, extensions, show_controls): + output = copy.deepcopy(shared.settings) + exclude = ['name2', 'greeting', 'context', 'turn_template'] + for k in state: + if k in shared.settings and k not in exclude: + output[k] = state[k] + + output['preset'] = preset + output['prompt-default'] = state['prompt_menu-default'] + output['prompt-notebook'] = state['prompt_menu-notebook'] + output['character'] = state['character_menu'] + output['default_extensions'] = extensions + output['seed'] = int(output['seed']) + output['show_controls'] = show_controls + + return yaml.dump(output, sort_keys=False, width=float("inf")) + + +def create_refresh_button(refresh_component, refresh_method, refreshed_args, elem_class, interactive=True): + """ + Copied from https://github.com/AUTOMATIC1111/stable-diffusion-webui + """ + def refresh(): + refresh_method() + args = refreshed_args() if callable(refreshed_args) else refreshed_args + + for k, v in args.items(): + setattr(refresh_component, k, v) + + return gr.update(**(args or {})) + + refresh_button = gr.Button(refresh_symbol, elem_classes=elem_class, interactive=interactive) + refresh_button.click( + fn=refresh, + inputs=[], + outputs=[refresh_component] + ) + + return refresh_button diff --git a/modules/ui_chat.py b/modules/ui_chat.py new file mode 100644 index 0000000000000000000000000000000000000000..db1f5da1adeb909497b506b4a345fb012daedb61 --- /dev/null +++ b/modules/ui_chat.py @@ -0,0 +1,365 @@ +import json +from functools import partial +from pathlib import Path + +import gradio as gr +from PIL import Image + +from modules import chat, shared, ui, utils +from modules.html_generator import chat_html_wrapper +from modules.text_generation import stop_everything_event +from modules.utils import gradio + +inputs = ('Chat input', 'interface_state') +reload_arr = ('history', 'name1', 'name2', 'mode', 'chat_style', 'character_menu') +clear_arr = ('delete_chat-confirm', 'delete_chat', 'delete_chat-cancel') + + +def create_ui(): + mu = shared.args.multi_user + + shared.gradio['Chat input'] = gr.State() + shared.gradio['history'] = gr.State({'internal': [], 'visible': []}) + + with gr.Tab('Chat', elem_id='chat-tab', elem_classes=("old-ui" if shared.args.chat_buttons else None)): + with gr.Row(): + with gr.Column(elem_id='chat-col'): + shared.gradio['display'] = gr.HTML(value=chat_html_wrapper({'internal': [], 'visible': []}, '', '', 'chat', 'cai-chat', '')) + + with gr.Row(elem_id="chat-input-row"): + with gr.Column(scale=1, elem_id='gr-hover-container'): + gr.HTML(value='
      ', elem_id='gr-hover') + + with gr.Column(scale=10, elem_id='chat-input-container'): + shared.gradio['textbox'] = gr.Textbox(label='', placeholder='Send a message', elem_id='chat-input', elem_classes=['add_scrollbar']) + shared.gradio['show_controls'] = gr.Checkbox(value=shared.settings['show_controls'], label='Show controls (Ctrl+S)', elem_id='show-controls') + shared.gradio['typing-dots'] = gr.HTML(value='
      ', label='typing', elem_id='typing-container') + + with gr.Column(scale=1, elem_id='generate-stop-container'): + with gr.Row(): + shared.gradio['Stop'] = gr.Button('Stop', elem_id='stop', visible=False) + shared.gradio['Generate'] = gr.Button('Generate', elem_id='Generate', variant='primary') + + # Hover menu buttons + with gr.Column(elem_id='chat-buttons'): + with gr.Row(): + shared.gradio['Regenerate'] = gr.Button('Regenerate (Ctrl + Enter)', elem_id='Regenerate') + shared.gradio['Continue'] = gr.Button('Continue (Alt + Enter)', elem_id='Continue') + shared.gradio['Remove last'] = gr.Button('Remove last reply (Ctrl + Shift + Backspace)', elem_id='Remove-last') + + with gr.Row(): + shared.gradio['Replace last reply'] = gr.Button('Replace last reply (Ctrl + Shift + L)', elem_id='Replace-last') + shared.gradio['Copy last reply'] = gr.Button('Copy last reply (Ctrl + Shift + K)', elem_id='Copy-last') + shared.gradio['Impersonate'] = gr.Button('Impersonate (Ctrl + Shift + M)', elem_id='Impersonate') + + with gr.Row(): + shared.gradio['Send dummy message'] = gr.Button('Send dummy message') + shared.gradio['Send dummy reply'] = gr.Button('Send dummy reply') + + with gr.Row(): + shared.gradio['Start new chat'] = gr.Button('Start new chat') + + with gr.Row(): + shared.gradio['send-chat-to-default'] = gr.Button('Send to default') + shared.gradio['send-chat-to-notebook'] = gr.Button('Send to notebook') + + with gr.Row(elem_id='past-chats-row'): + shared.gradio['unique_id'] = gr.Dropdown(label='Past chats', elem_classes=['slim-dropdown'], interactive=not mu) + shared.gradio['rename_chat'] = gr.Button('Rename', elem_classes='refresh-button', interactive=not mu) + shared.gradio['delete_chat'] = gr.Button('🗑️', elem_classes='refresh-button', interactive=not mu) + shared.gradio['delete_chat-cancel'] = gr.Button('Cancel', visible=False, elem_classes='refresh-button') + shared.gradio['delete_chat-confirm'] = gr.Button('Confirm', variant='stop', visible=False, elem_classes='refresh-button') + + with gr.Row(elem_id='rename-row'): + shared.gradio['rename_to'] = gr.Textbox(label='Rename to:', placeholder='New name', visible=False, elem_classes=['no-background']) + shared.gradio['rename_to-cancel'] = gr.Button('Cancel', visible=False, elem_classes='refresh-button') + shared.gradio['rename_to-confirm'] = gr.Button('Confirm', visible=False, elem_classes='refresh-button') + + with gr.Row(): + shared.gradio['start_with'] = gr.Textbox(label='Start reply with', placeholder='Sure thing!', value=shared.settings['start_with']) + + with gr.Row(): + shared.gradio['mode'] = gr.Radio(choices=['chat', 'chat-instruct', 'instruct'], value='chat', label='Mode', info='Defines how the chat prompt is generated. In instruct and chat-instruct modes, the instruction template selected under Parameters > Instruction template must match the current model.', elem_id='chat-mode') + shared.gradio['chat_style'] = gr.Dropdown(choices=utils.get_available_chat_styles(), label='Chat style', value=shared.settings['chat_style'], visible=shared.settings['mode'] != 'instruct') + + +def create_chat_settings_ui(): + mu = shared.args.multi_user + with gr.Tab('Character'): + with gr.Row(): + with gr.Column(scale=8): + with gr.Row(): + shared.gradio['character_menu'] = gr.Dropdown(value=None, choices=utils.get_available_characters(), label='Character', elem_id='character-menu', info='Used in chat and chat-instruct modes.', elem_classes='slim-dropdown') + ui.create_refresh_button(shared.gradio['character_menu'], lambda: None, lambda: {'choices': utils.get_available_characters()}, 'refresh-button', interactive=not mu) + shared.gradio['save_character'] = gr.Button('💾', elem_classes='refresh-button', interactive=not mu) + shared.gradio['delete_character'] = gr.Button('🗑️', elem_classes='refresh-button', interactive=not mu) + + shared.gradio['name1'] = gr.Textbox(value=shared.settings['name1'], lines=1, label='Your name') + shared.gradio['name2'] = gr.Textbox(value='', lines=1, label='Character\'s name') + shared.gradio['context'] = gr.Textbox(value='', lines=10, label='Context', elem_classes=['add_scrollbar']) + shared.gradio['greeting'] = gr.Textbox(value='', lines=5, label='Greeting', elem_classes=['add_scrollbar']) + + with gr.Column(scale=1): + shared.gradio['character_picture'] = gr.Image(label='Character picture', type='pil', interactive=not mu) + shared.gradio['your_picture'] = gr.Image(label='Your picture', type='pil', value=Image.open(Path('cache/pfp_me.png')) if Path('cache/pfp_me.png').exists() else None, interactive=not mu) + + with gr.Tab('Instruction template'): + with gr.Row(): + with gr.Column(): + with gr.Row(): + shared.gradio['instruction_template'] = gr.Dropdown(choices=utils.get_available_instruction_templates(), label='Saved instruction templates', value='Select template to load...', elem_classes='slim-dropdown') + ui.create_refresh_button(shared.gradio['instruction_template'], lambda: None, lambda: {'choices': utils.get_available_instruction_templates()}, 'refresh-button', interactive=not mu) + shared.gradio['load_template'] = gr.Button("Load", elem_classes='refresh-button') + shared.gradio['save_template'] = gr.Button('💾', elem_classes='refresh-button', interactive=not mu) + shared.gradio['delete_template'] = gr.Button('🗑️ ', elem_classes='refresh-button', interactive=not mu) + + with gr.Column(): + pass + + with gr.Row(): + with gr.Column(): + shared.gradio['custom_system_message'] = gr.Textbox(value=shared.settings['custom_system_message'], lines=2, label='Custom system message', info='If not empty, will be used instead of the default one.', elem_classes=['add_scrollbar']) + shared.gradio['instruction_template_str'] = gr.Textbox(value='', label='Instruction template', lines=24, info='Change this according to the model/LoRA that you are using. Used in instruct and chat-instruct modes.', elem_classes=['add_scrollbar', 'monospace']) + with gr.Row(): + shared.gradio['send_instruction_to_default'] = gr.Button('Send to default', elem_classes=['small-button']) + shared.gradio['send_instruction_to_notebook'] = gr.Button('Send to notebook', elem_classes=['small-button']) + shared.gradio['send_instruction_to_negative_prompt'] = gr.Button('Send to negative prompt', elem_classes=['small-button']) + + with gr.Column(): + shared.gradio['chat_template_str'] = gr.Textbox(value=shared.settings['chat_template_str'], label='Chat template', lines=22, elem_classes=['add_scrollbar', 'monospace']) + shared.gradio['chat-instruct_command'] = gr.Textbox(value=shared.settings['chat-instruct_command'], lines=4, label='Command for chat-instruct mode', info='<|character|> gets replaced by the bot name, and <|prompt|> gets replaced by the regular chat prompt.', elem_classes=['add_scrollbar']) + + with gr.Tab('Chat history'): + with gr.Row(): + with gr.Column(): + shared.gradio['save_chat_history'] = gr.Button(value='Save history') + + with gr.Column(): + shared.gradio['load_chat_history'] = gr.File(type='binary', file_types=['.json', '.txt'], label='Upload History JSON') + + with gr.Tab('Upload character'): + with gr.Tab('YAML or JSON'): + with gr.Row(): + shared.gradio['upload_json'] = gr.File(type='binary', file_types=['.json', '.yaml'], label='JSON or YAML File', interactive=not mu) + shared.gradio['upload_img_bot'] = gr.Image(type='pil', label='Profile Picture (optional)', interactive=not mu) + + shared.gradio['Submit character'] = gr.Button(value='Submit', interactive=False) + + with gr.Tab('TavernAI PNG'): + with gr.Row(): + with gr.Column(): + shared.gradio['upload_img_tavern'] = gr.Image(type='pil', label='TavernAI PNG File', elem_id='upload_img_tavern', interactive=not mu) + shared.gradio['tavern_json'] = gr.State() + with gr.Column(): + shared.gradio['tavern_name'] = gr.Textbox(value='', lines=1, label='Name', interactive=False) + shared.gradio['tavern_desc'] = gr.Textbox(value='', lines=4, max_lines=4, label='Description', interactive=False) + + shared.gradio['Submit tavern character'] = gr.Button(value='Submit', interactive=False) + + +def create_event_handlers(): + + # Obsolete variables, kept for compatibility with old extensions + shared.input_params = gradio(inputs) + shared.reload_inputs = gradio(reload_arr) + + shared.gradio['Generate'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda x: (x, ''), gradio('textbox'), gradio('Chat input', 'textbox'), show_progress=False).then( + chat.generate_chat_reply_wrapper, gradio(inputs), gradio('display', 'history'), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None).then( + lambda: None, None, None, _js=f'() => {{{ui.audio_notification_js}}}') + + shared.gradio['textbox'].submit( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda x: (x, ''), gradio('textbox'), gradio('Chat input', 'textbox'), show_progress=False).then( + chat.generate_chat_reply_wrapper, gradio(inputs), gradio('display', 'history'), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None).then( + lambda: None, None, None, _js=f'() => {{{ui.audio_notification_js}}}') + + shared.gradio['Regenerate'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + partial(chat.generate_chat_reply_wrapper, regenerate=True), gradio(inputs), gradio('display', 'history'), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None).then( + lambda: None, None, None, _js=f'() => {{{ui.audio_notification_js}}}') + + shared.gradio['Continue'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + partial(chat.generate_chat_reply_wrapper, _continue=True), gradio(inputs), gradio('display', 'history'), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None).then( + lambda: None, None, None, _js=f'() => {{{ui.audio_notification_js}}}') + + shared.gradio['Impersonate'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda x: x, gradio('textbox'), gradio('Chat input'), show_progress=False).then( + chat.impersonate_wrapper, gradio(inputs), gradio('textbox', 'display'), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda: None, None, None, _js=f'() => {{{ui.audio_notification_js}}}') + + shared.gradio['Replace last reply'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.replace_last_reply, gradio('textbox', 'interface_state'), gradio('history')).then( + lambda: '', None, gradio('textbox'), show_progress=False).then( + chat.redraw_html, gradio(reload_arr), gradio('display')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None) + + shared.gradio['Send dummy message'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.send_dummy_message, gradio('textbox', 'interface_state'), gradio('history')).then( + lambda: '', None, gradio('textbox'), show_progress=False).then( + chat.redraw_html, gradio(reload_arr), gradio('display')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None) + + shared.gradio['Send dummy reply'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.send_dummy_reply, gradio('textbox', 'interface_state'), gradio('history')).then( + lambda: '', None, gradio('textbox'), show_progress=False).then( + chat.redraw_html, gradio(reload_arr), gradio('display')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None) + + shared.gradio['Remove last'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.remove_last_message, gradio('history'), gradio('textbox', 'history'), show_progress=False).then( + chat.redraw_html, gradio(reload_arr), gradio('display')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None) + + shared.gradio['Stop'].click( + stop_everything_event, None, None, queue=False).then( + chat.redraw_html, gradio(reload_arr), gradio('display')) + + if not shared.args.multi_user: + shared.gradio['unique_id'].select( + chat.load_history, gradio('unique_id', 'character_menu', 'mode'), gradio('history')).then( + chat.redraw_html, gradio(reload_arr), gradio('display')) + + shared.gradio['Start new chat'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.start_new_chat, gradio('interface_state'), gradio('history')).then( + chat.redraw_html, gradio(reload_arr), gradio('display')).then( + lambda x: gr.update(choices=(histories := chat.find_all_histories(x)), value=histories[0]), gradio('interface_state'), gradio('unique_id')) + + shared.gradio['delete_chat'].click(lambda: [gr.update(visible=True), gr.update(visible=False), gr.update(visible=True)], None, gradio(clear_arr)) + shared.gradio['delete_chat-cancel'].click(lambda: [gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)], None, gradio(clear_arr)) + shared.gradio['delete_chat-confirm'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.delete_history, gradio('unique_id', 'character_menu', 'mode'), None).then( + chat.load_latest_history, gradio('interface_state'), gradio('history')).then( + chat.redraw_html, gradio(reload_arr), gradio('display')).then( + lambda x: gr.update(choices=(histories := chat.find_all_histories(x)), value=histories[0]), gradio('interface_state'), gradio('unique_id')).then( + lambda: [gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)], None, gradio(clear_arr)) + + shared.gradio['rename_chat'].click( + lambda x: x, gradio('unique_id'), gradio('rename_to')).then( + lambda: [gr.update(visible=True)] * 3, None, gradio('rename_to', 'rename_to-confirm', 'rename_to-cancel'), show_progress=False) + + shared.gradio['rename_to-cancel'].click( + lambda: [gr.update(visible=False)] * 3, None, gradio('rename_to', 'rename_to-confirm', 'rename_to-cancel'), show_progress=False) + + shared.gradio['rename_to-confirm'].click( + chat.rename_history, gradio('unique_id', 'rename_to', 'character_menu', 'mode'), None).then( + lambda: [gr.update(visible=False)] * 3, None, gradio('rename_to', 'rename_to-confirm', 'rename_to-cancel'), show_progress=False).then( + lambda x, y: gr.update(choices=chat.find_all_histories(x), value=y), gradio('interface_state', 'rename_to'), gradio('unique_id')) + + shared.gradio['load_chat_history'].upload( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.start_new_chat, gradio('interface_state'), gradio('history')).then( + chat.load_history_json, gradio('load_chat_history', 'history'), gradio('history')).then( + chat.redraw_html, gradio(reload_arr), gradio('display')).then( + lambda x: gr.update(choices=(histories := chat.find_all_histories(x)), value=histories[0]), gradio('interface_state'), gradio('unique_id')).then( + chat.save_history, gradio('history', 'unique_id', 'character_menu', 'mode'), None).then( + lambda: None, None, None, _js=f'() => {{{ui.switch_tabs_js}; switch_to_chat()}}') + + shared.gradio['character_menu'].change( + chat.load_character, gradio('character_menu', 'name1', 'name2'), gradio('name1', 'name2', 'character_picture', 'greeting', 'context')).success( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + chat.load_latest_history, gradio('interface_state'), gradio('history')).then( + chat.redraw_html, gradio(reload_arr), gradio('display')).then( + lambda x: gr.update(choices=(histories := chat.find_all_histories(x)), value=histories[0]), gradio('interface_state'), gradio('unique_id')).then( + lambda: None, None, None, _js=f'() => {{{ui.update_big_picture_js}; updateBigPicture()}}') + + shared.gradio['mode'].change( + lambda x: gr.update(visible=x != 'instruct'), gradio('mode'), gradio('chat_style'), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + partial(chat.character_is_loaded, raise_exception=True), gradio('interface_state'), None).success( + chat.load_latest_history, gradio('interface_state'), gradio('history')).then( + chat.redraw_html, gradio(reload_arr), gradio('display')).then( + lambda x: gr.update(choices=(histories := chat.find_all_histories(x)), value=histories[0]), gradio('interface_state'), gradio('unique_id')) + + shared.gradio['chat_style'].change(chat.redraw_html, gradio(reload_arr), gradio('display')) + shared.gradio['Copy last reply'].click(chat.send_last_reply_to_input, gradio('history'), gradio('textbox'), show_progress=False) + + # Save/delete a character + shared.gradio['save_character'].click( + lambda x: x, gradio('name2'), gradio('save_character_filename')).then( + lambda: gr.update(visible=True), None, gradio('character_saver')) + + shared.gradio['delete_character'].click(lambda: gr.update(visible=True), None, gradio('character_deleter')) + + shared.gradio['load_template'].click( + chat.load_instruction_template, gradio('instruction_template'), gradio('instruction_template_str')).then( + lambda: "Select template to load...", None, gradio('instruction_template')) + + shared.gradio['save_template'].click( + lambda: 'My Template.yaml', None, gradio('save_filename')).then( + lambda: 'instruction-templates/', None, gradio('save_root')).then( + chat.generate_instruction_template_yaml, gradio('instruction_template_str'), gradio('save_contents')).then( + lambda: gr.update(visible=True), None, gradio('file_saver')) + + shared.gradio['delete_template'].click( + lambda x: f'{x}.yaml', gradio('instruction_template'), gradio('delete_filename')).then( + lambda: 'instruction-templates/', None, gradio('delete_root')).then( + lambda: gr.update(visible=True), None, gradio('file_deleter')) + + shared.gradio['save_chat_history'].click( + lambda x: json.dumps(x, indent=4), gradio('history'), gradio('temporary_text')).then( + None, gradio('temporary_text', 'character_menu', 'mode'), None, _js=f'(hist, char, mode) => {{{ui.save_files_js}; saveHistory(hist, char, mode)}}') + + shared.gradio['Submit character'].click( + chat.upload_character, gradio('upload_json', 'upload_img_bot'), gradio('character_menu')).then( + lambda: None, None, None, _js=f'() => {{{ui.switch_tabs_js}; switch_to_character()}}') + + shared.gradio['Submit tavern character'].click( + chat.upload_tavern_character, gradio('upload_img_tavern', 'tavern_json'), gradio('character_menu')).then( + lambda: None, None, None, _js=f'() => {{{ui.switch_tabs_js}; switch_to_character()}}') + + shared.gradio['upload_json'].upload(lambda: gr.update(interactive=True), None, gradio('Submit character')) + shared.gradio['upload_json'].clear(lambda: gr.update(interactive=False), None, gradio('Submit character')) + shared.gradio['upload_img_tavern'].upload(chat.check_tavern_character, gradio('upload_img_tavern'), gradio('tavern_name', 'tavern_desc', 'tavern_json', 'Submit tavern character'), show_progress=False) + shared.gradio['upload_img_tavern'].clear(lambda: (None, None, None, gr.update(interactive=False)), None, gradio('tavern_name', 'tavern_desc', 'tavern_json', 'Submit tavern character'), show_progress=False) + shared.gradio['your_picture'].change( + chat.upload_your_profile_picture, gradio('your_picture'), None).then( + partial(chat.redraw_html, reset_cache=True), gradio(reload_arr), gradio('display')) + + shared.gradio['send_instruction_to_default'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda x: x.update({'mode': 'instruct', 'history': {'internal': [], 'visible': []}}), gradio('interface_state'), None).then( + partial(chat.generate_chat_prompt, 'Input'), gradio('interface_state'), gradio('textbox-default')).then( + lambda: None, None, None, _js=f'() => {{{ui.switch_tabs_js}; switch_to_default()}}') + + shared.gradio['send_instruction_to_notebook'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda x: x.update({'mode': 'instruct', 'history': {'internal': [], 'visible': []}}), gradio('interface_state'), None).then( + partial(chat.generate_chat_prompt, 'Input'), gradio('interface_state'), gradio('textbox-notebook')).then( + lambda: None, None, None, _js=f'() => {{{ui.switch_tabs_js}; switch_to_notebook()}}') + + shared.gradio['send_instruction_to_negative_prompt'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda x: x.update({'mode': 'instruct', 'history': {'internal': [], 'visible': []}}), gradio('interface_state'), None).then( + partial(chat.generate_chat_prompt, 'Input'), gradio('interface_state'), gradio('negative_prompt')).then( + lambda: None, None, None, _js=f'() => {{{ui.switch_tabs_js}; switch_to_generation_parameters()}}') + + shared.gradio['send-chat-to-default'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + partial(chat.generate_chat_prompt, '', _continue=True), gradio('interface_state'), gradio('textbox-default')).then( + lambda: None, None, None, _js=f'() => {{{ui.switch_tabs_js}; switch_to_default()}}') + + shared.gradio['send-chat-to-notebook'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + partial(chat.generate_chat_prompt, '', _continue=True), gradio('interface_state'), gradio('textbox-notebook')).then( + lambda: None, None, None, _js=f'() => {{{ui.switch_tabs_js}; switch_to_notebook()}}') + + shared.gradio['show_controls'].change(None, gradio('show_controls'), None, _js=f'(x) => {{{ui.show_controls_js}; toggle_controls(x)}}') diff --git a/modules/ui_default.py b/modules/ui_default.py new file mode 100644 index 0000000000000000000000000000000000000000..7db6f0d93abcc36354b0d687d83c865b8f5dd406 --- /dev/null +++ b/modules/ui_default.py @@ -0,0 +1,104 @@ +import gradio as gr + +from modules import logits, shared, ui, utils +from modules.prompts import count_tokens, load_prompt +from modules.text_generation import ( + generate_reply_wrapper, + get_token_ids, + stop_everything_event +) +from modules.utils import gradio + +inputs = ('textbox-default', 'interface_state') +outputs = ('output_textbox', 'html-default') + + +def create_ui(): + mu = shared.args.multi_user + with gr.Tab('Default', elem_id='default-tab'): + shared.gradio['last_input-default'] = gr.State('') + with gr.Row(): + with gr.Column(): + with gr.Row(): + shared.gradio['textbox-default'] = gr.Textbox(value='', lines=27, label='Input', elem_classes=['textbox_default', 'add_scrollbar']) + shared.gradio['token-counter-default'] = gr.HTML(value="0", elem_classes=["token-counter", "default-token-counter"]) + + with gr.Row(): + shared.gradio['Generate-default'] = gr.Button('Generate', variant='primary') + shared.gradio['Stop-default'] = gr.Button('Stop', elem_id='stop') + shared.gradio['Continue-default'] = gr.Button('Continue') + + with gr.Row(): + shared.gradio['prompt_menu-default'] = gr.Dropdown(choices=utils.get_available_prompts(), value='None', label='Prompt', elem_classes='slim-dropdown') + ui.create_refresh_button(shared.gradio['prompt_menu-default'], lambda: None, lambda: {'choices': utils.get_available_prompts()}, 'refresh-button', interactive=not mu) + shared.gradio['save_prompt-default'] = gr.Button('💾', elem_classes='refresh-button', interactive=not mu) + shared.gradio['delete_prompt-default'] = gr.Button('🗑️', elem_classes='refresh-button', interactive=not mu) + + with gr.Column(): + with gr.Tab('Raw'): + shared.gradio['output_textbox'] = gr.Textbox(lines=27, label='Output', elem_id='textbox-default', elem_classes=['textbox_default_output', 'add_scrollbar']) + + with gr.Tab('Markdown'): + shared.gradio['markdown_render-default'] = gr.Button('Render') + shared.gradio['markdown-default'] = gr.Markdown() + + with gr.Tab('HTML'): + shared.gradio['html-default'] = gr.HTML() + + with gr.Tab('Logits'): + with gr.Row(): + with gr.Column(scale=10): + shared.gradio['get_logits-default'] = gr.Button('Get next token probabilities') + with gr.Column(scale=1): + shared.gradio['use_samplers-default'] = gr.Checkbox(label='Use samplers', value=True, elem_classes=['no-background']) + + with gr.Row(): + shared.gradio['logits-default'] = gr.Textbox(lines=23, label='Output', elem_classes=['textbox_logits', 'add_scrollbar']) + shared.gradio['logits-default-previous'] = gr.Textbox(lines=23, label='Previous output', elem_classes=['textbox_logits', 'add_scrollbar']) + + with gr.Tab('Tokens'): + shared.gradio['get_tokens-default'] = gr.Button('Get token IDs for the input') + shared.gradio['tokens-default'] = gr.Textbox(lines=23, label='Tokens', elem_classes=['textbox_logits', 'add_scrollbar', 'monospace']) + + +def create_event_handlers(): + shared.gradio['Generate-default'].click( + lambda x: x, gradio('textbox-default'), gradio('last_input-default')).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + generate_reply_wrapper, gradio(inputs), gradio(outputs), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda: None, None, None, _js=f'() => {{{ui.audio_notification_js}}}') + + shared.gradio['textbox-default'].submit( + lambda x: x, gradio('textbox-default'), gradio('last_input-default')).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + generate_reply_wrapper, gradio(inputs), gradio(outputs), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda: None, None, None, _js=f'() => {{{ui.audio_notification_js}}}') + + shared.gradio['markdown_render-default'].click(lambda x: x, gradio('output_textbox'), gradio('markdown-default'), queue=False) + shared.gradio['Continue-default'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + generate_reply_wrapper, [shared.gradio['output_textbox']] + gradio(inputs)[1:], gradio(outputs), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda: None, None, None, _js=f'() => {{{ui.audio_notification_js}}}') + + shared.gradio['Stop-default'].click(stop_everything_event, None, None, queue=False) + shared.gradio['prompt_menu-default'].change(load_prompt, gradio('prompt_menu-default'), gradio('textbox-default'), show_progress=False) + shared.gradio['save_prompt-default'].click( + lambda x: x, gradio('textbox-default'), gradio('save_contents')).then( + lambda: 'prompts/', None, gradio('save_root')).then( + lambda: utils.current_time() + '.txt', None, gradio('save_filename')).then( + lambda: gr.update(visible=True), None, gradio('file_saver')) + + shared.gradio['delete_prompt-default'].click( + lambda: 'prompts/', None, gradio('delete_root')).then( + lambda x: x + '.txt', gradio('prompt_menu-default'), gradio('delete_filename')).then( + lambda: gr.update(visible=True), None, gradio('file_deleter')) + + shared.gradio['textbox-default'].change(lambda x: f"{count_tokens(x)}", gradio('textbox-default'), gradio('token-counter-default'), show_progress=False) + shared.gradio['get_logits-default'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + logits.get_next_logits, gradio('textbox-default', 'interface_state', 'use_samplers-default', 'logits-default'), gradio('logits-default', 'logits-default-previous'), show_progress=False) + + shared.gradio['get_tokens-default'].click(get_token_ids, gradio('textbox-default'), gradio('tokens-default'), show_progress=False) diff --git a/modules/ui_file_saving.py b/modules/ui_file_saving.py new file mode 100644 index 0000000000000000000000000000000000000000..39ab41d48242e1d68fdc01ca3ad3d87b8abac438 --- /dev/null +++ b/modules/ui_file_saving.py @@ -0,0 +1,102 @@ +import gradio as gr + +from modules import chat, presets, shared, ui, utils +from modules.utils import gradio + + +def create_ui(): + mu = shared.args.multi_user + + # Text file saver + with gr.Group(visible=False, elem_classes='file-saver') as shared.gradio['file_saver']: + shared.gradio['save_filename'] = gr.Textbox(lines=1, label='File name') + shared.gradio['save_root'] = gr.Textbox(lines=1, label='File folder', info='For reference. Unchangeable.', interactive=False) + shared.gradio['save_contents'] = gr.Textbox(lines=10, label='File contents') + with gr.Row(): + shared.gradio['save_confirm'] = gr.Button('Save', elem_classes="small-button", variant='primary', interactive=not mu) + shared.gradio['save_cancel'] = gr.Button('Cancel', elem_classes="small-button") + + # Text file deleter + with gr.Group(visible=False, elem_classes='file-saver') as shared.gradio['file_deleter']: + shared.gradio['delete_filename'] = gr.Textbox(lines=1, label='File name') + shared.gradio['delete_root'] = gr.Textbox(lines=1, label='File folder', info='For reference. Unchangeable.', interactive=False) + with gr.Row(): + shared.gradio['delete_confirm'] = gr.Button('Delete', elem_classes="small-button", variant='stop', interactive=not mu) + shared.gradio['delete_cancel'] = gr.Button('Cancel', elem_classes="small-button") + + # Character saver/deleter + with gr.Group(visible=False, elem_classes='file-saver') as shared.gradio['character_saver']: + shared.gradio['save_character_filename'] = gr.Textbox(lines=1, label='File name', info='The character will be saved to your characters/ folder with this base filename.') + with gr.Row(): + shared.gradio['save_character_confirm'] = gr.Button('Save', elem_classes="small-button", variant='primary', interactive=not mu) + shared.gradio['save_character_cancel'] = gr.Button('Cancel', elem_classes="small-button") + + with gr.Group(visible=False, elem_classes='file-saver') as shared.gradio['character_deleter']: + gr.Markdown('Confirm the character deletion?') + with gr.Row(): + shared.gradio['delete_character_confirm'] = gr.Button('Delete', elem_classes="small-button", variant='stop', interactive=not mu) + shared.gradio['delete_character_cancel'] = gr.Button('Cancel', elem_classes="small-button") + + # Preset saver + with gr.Group(visible=False, elem_classes='file-saver') as shared.gradio['preset_saver']: + shared.gradio['save_preset_filename'] = gr.Textbox(lines=1, label='File name', info='The preset will be saved to your presets/ folder with this base filename.') + shared.gradio['save_preset_contents'] = gr.Textbox(lines=10, label='File contents') + with gr.Row(): + shared.gradio['save_preset_confirm'] = gr.Button('Save', elem_classes="small-button", variant='primary', interactive=not mu) + shared.gradio['save_preset_cancel'] = gr.Button('Cancel', elem_classes="small-button") + + +def create_event_handlers(): + shared.gradio['save_confirm'].click( + lambda x, y, z: utils.save_file(x + y, z), gradio('save_root', 'save_filename', 'save_contents'), None).then( + lambda: gr.update(visible=False), None, gradio('file_saver')) + + shared.gradio['delete_confirm'].click( + lambda x, y: utils.delete_file(x + y), gradio('delete_root', 'delete_filename'), None).then( + lambda: gr.update(visible=False), None, gradio('file_deleter')) + + shared.gradio['delete_cancel'].click(lambda: gr.update(visible=False), None, gradio('file_deleter')) + shared.gradio['save_cancel'].click(lambda: gr.update(visible=False), None, gradio('file_saver')) + + shared.gradio['save_character_confirm'].click( + chat.save_character, gradio('name2', 'greeting', 'context', 'character_picture', 'save_character_filename'), None).then( + lambda: gr.update(visible=False), None, gradio('character_saver')).then( + lambda x: gr.update(choices=utils.get_available_characters(), value=x), gradio('save_character_filename'), gradio('character_menu')) + + shared.gradio['delete_character_confirm'].click( + chat.delete_character, gradio('character_menu'), None).then( + lambda: gr.update(visible=False), None, gradio('character_deleter')).then( + lambda: gr.update(choices=(characters := utils.get_available_characters()), value=characters[0]), None, gradio('character_menu')) + + shared.gradio['save_character_cancel'].click(lambda: gr.update(visible=False), None, gradio('character_saver')) + shared.gradio['delete_character_cancel'].click(lambda: gr.update(visible=False), None, gradio('character_deleter')) + + shared.gradio['save_preset'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + presets.generate_preset_yaml, gradio('interface_state'), gradio('save_preset_contents')).then( + lambda: 'My Preset', None, gradio('save_preset_filename')).then( + lambda: gr.update(visible=True), None, gradio('preset_saver')) + + shared.gradio['save_preset_confirm'].click( + lambda x, y: utils.save_file(f'presets/{x}.yaml', y), gradio('save_preset_filename', 'save_preset_contents'), None).then( + lambda: gr.update(visible=False), None, gradio('preset_saver')).then( + lambda x: gr.update(choices=utils.get_available_presets(), value=x), gradio('save_preset_filename'), gradio('preset_menu')) + + shared.gradio['save_preset_cancel'].click(lambda: gr.update(visible=False), None, gradio('preset_saver')) + + shared.gradio['delete_preset'].click( + lambda x: f'{x}.yaml', gradio('preset_menu'), gradio('delete_filename')).then( + lambda: 'presets/', None, gradio('delete_root')).then( + lambda: gr.update(visible=True), None, gradio('file_deleter')) + + shared.gradio['save_grammar'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda x: x, gradio('grammar_string'), gradio('save_contents')).then( + lambda: 'grammars/', None, gradio('save_root')).then( + lambda: 'My Fancy Grammar.gbnf', None, gradio('save_filename')).then( + lambda: gr.update(visible=True), None, gradio('file_saver')) + + shared.gradio['delete_grammar'].click( + lambda x: x, gradio('grammar_file'), gradio('delete_filename')).then( + lambda: 'grammars/', None, gradio('delete_root')).then( + lambda: gr.update(visible=True), None, gradio('file_deleter')) diff --git a/modules/ui_model_menu.py b/modules/ui_model_menu.py new file mode 100644 index 0000000000000000000000000000000000000000..ae8194b1be65716da603805a0134a1ba8274ae1a --- /dev/null +++ b/modules/ui_model_menu.py @@ -0,0 +1,274 @@ +import importlib +import math +import re +import traceback +from functools import partial +from pathlib import Path + +import gradio as gr +import psutil +import torch +from transformers import is_torch_xpu_available + +from modules import loaders, shared, ui, utils +from modules.logging_colors import logger +from modules.LoRA import add_lora_to_model +from modules.models import load_model, unload_model +from modules.models_settings import ( + apply_model_settings_to_state, + get_model_metadata, + save_model_settings, + update_model_parameters +) +from modules.utils import gradio + + +def create_ui(): + mu = shared.args.multi_user + + # Finding the default values for the GPU and CPU memories + total_mem = [] + if is_torch_xpu_available(): + for i in range(torch.xpu.device_count()): + total_mem.append(math.floor(torch.xpu.get_device_properties(i).total_memory / (1024 * 1024))) + else: + for i in range(torch.cuda.device_count()): + total_mem.append(math.floor(torch.cuda.get_device_properties(i).total_memory / (1024 * 1024))) + + default_gpu_mem = [] + if shared.args.gpu_memory is not None and len(shared.args.gpu_memory) > 0: + for i in shared.args.gpu_memory: + if 'mib' in i.lower(): + default_gpu_mem.append(int(re.sub('[a-zA-Z ]', '', i))) + else: + default_gpu_mem.append(int(re.sub('[a-zA-Z ]', '', i)) * 1000) + + while len(default_gpu_mem) < len(total_mem): + default_gpu_mem.append(0) + + total_cpu_mem = math.floor(psutil.virtual_memory().total / (1024 * 1024)) + if shared.args.cpu_memory is not None: + default_cpu_mem = re.sub('[a-zA-Z ]', '', shared.args.cpu_memory) + else: + default_cpu_mem = 0 + + with gr.Tab("Model", elem_id="model-tab"): + with gr.Row(): + with gr.Column(): + with gr.Row(): + with gr.Column(): + with gr.Row(): + shared.gradio['model_menu'] = gr.Dropdown(choices=utils.get_available_models(), value=lambda: shared.model_name, label='Model', elem_classes='slim-dropdown', interactive=not mu) + ui.create_refresh_button(shared.gradio['model_menu'], lambda: None, lambda: {'choices': utils.get_available_models()}, 'refresh-button', interactive=not mu) + shared.gradio['load_model'] = gr.Button("Load", visible=not shared.settings['autoload_model'], elem_classes='refresh-button', interactive=not mu) + shared.gradio['unload_model'] = gr.Button("Unload", elem_classes='refresh-button', interactive=not mu) + shared.gradio['reload_model'] = gr.Button("Reload", elem_classes='refresh-button', interactive=not mu) + shared.gradio['save_model_settings'] = gr.Button("Save settings", elem_classes='refresh-button', interactive=not mu) + + with gr.Column(): + with gr.Row(): + shared.gradio['lora_menu'] = gr.Dropdown(multiselect=True, choices=utils.get_available_loras(), value=shared.lora_names, label='LoRA(s)', elem_classes='slim-dropdown', interactive=not mu) + ui.create_refresh_button(shared.gradio['lora_menu'], lambda: None, lambda: {'choices': utils.get_available_loras(), 'value': shared.lora_names}, 'refresh-button', interactive=not mu) + shared.gradio['lora_menu_apply'] = gr.Button(value='Apply LoRAs', elem_classes='refresh-button', interactive=not mu) + + with gr.Row(): + with gr.Column(): + shared.gradio['loader'] = gr.Dropdown(label="Model loader", choices=loaders.loaders_and_params.keys(), value=None) + with gr.Box(): + with gr.Row(): + with gr.Column(): + for i in range(len(total_mem)): + shared.gradio[f'gpu_memory_{i}'] = gr.Slider(label=f"gpu-memory in MiB for device :{i}", maximum=total_mem[i], value=default_gpu_mem[i]) + + shared.gradio['cpu_memory'] = gr.Slider(label="cpu-memory in MiB", maximum=total_cpu_mem, value=default_cpu_mem) + shared.gradio['transformers_info'] = gr.Markdown('load-in-4bit params:') + shared.gradio['compute_dtype'] = gr.Dropdown(label="compute_dtype", choices=["bfloat16", "float16", "float32"], value=shared.args.compute_dtype) + shared.gradio['quant_type'] = gr.Dropdown(label="quant_type", choices=["nf4", "fp4"], value=shared.args.quant_type) + shared.gradio['hqq_backend'] = gr.Dropdown(label="hqq_backend", choices=["PYTORCH", "PYTORCH_COMPILE", "ATEN"], value=shared.args.hqq_backend) + + shared.gradio['n_gpu_layers'] = gr.Slider(label="n-gpu-layers", minimum=0, maximum=128, value=shared.args.n_gpu_layers) + shared.gradio['n_ctx'] = gr.Slider(minimum=0, maximum=shared.settings['truncation_length_max'], step=256, label="n_ctx", value=shared.args.n_ctx, info='Context length. Try lowering this if you run out of memory while loading the model.') + shared.gradio['threads'] = gr.Slider(label="threads", minimum=0, step=1, maximum=32, value=shared.args.threads) + shared.gradio['threads_batch'] = gr.Slider(label="threads_batch", minimum=0, step=1, maximum=32, value=shared.args.threads_batch) + shared.gradio['n_batch'] = gr.Slider(label="n_batch", minimum=1, maximum=2048, value=shared.args.n_batch) + + shared.gradio['wbits'] = gr.Dropdown(label="wbits", choices=["None", 1, 2, 3, 4, 8], value=shared.args.wbits if shared.args.wbits > 0 else "None") + shared.gradio['groupsize'] = gr.Dropdown(label="groupsize", choices=["None", 32, 64, 128, 1024], value=shared.args.groupsize if shared.args.groupsize > 0 else "None") + shared.gradio['model_type'] = gr.Dropdown(label="model_type", choices=["None"], value=shared.args.model_type or "None") + shared.gradio['pre_layer'] = gr.Slider(label="pre_layer", minimum=0, maximum=100, value=shared.args.pre_layer[0] if shared.args.pre_layer is not None else 0) + shared.gradio['autogptq_info'] = gr.Markdown('* ExLlama_HF is recommended over AutoGPTQ for models derived from Llama.') + shared.gradio['gpu_split'] = gr.Textbox(label='gpu-split', info='Comma-separated list of VRAM (in GB) to use per GPU. Example: 20,7,7') + shared.gradio['max_seq_len'] = gr.Slider(label='max_seq_len', minimum=0, maximum=shared.settings['truncation_length_max'], step=256, info='Context length. Try lowering this if you run out of memory while loading the model.', value=shared.args.max_seq_len) + shared.gradio['alpha_value'] = gr.Slider(label='alpha_value', minimum=1, maximum=8, step=0.05, info='Positional embeddings alpha factor for NTK RoPE scaling. Recommended values (NTKv1): 1.75 for 1.5x context, 2.5 for 2x context. Use either this or compress_pos_emb, not both.', value=shared.args.alpha_value) + shared.gradio['rope_freq_base'] = gr.Slider(label='rope_freq_base', minimum=0, maximum=1000000, step=1000, info='If greater than 0, will be used instead of alpha_value. Those two are related by rope_freq_base = 10000 * alpha_value ^ (64 / 63)', value=shared.args.rope_freq_base) + shared.gradio['compress_pos_emb'] = gr.Slider(label='compress_pos_emb', minimum=1, maximum=8, step=1, info='Positional embeddings compression factor. Should be set to (context length) / (model\'s original context length). Equal to 1/rope_freq_scale.', value=shared.args.compress_pos_emb) + shared.gradio['quipsharp_info'] = gr.Markdown('QuIP# only works on Linux.') + + with gr.Column(): + shared.gradio['tensorcores'] = gr.Checkbox(label="tensorcores", value=shared.args.tensorcores, info='Use llama-cpp-python compiled with tensor cores support. This increases performance on RTX cards. NVIDIA only.') + shared.gradio['no_offload_kqv'] = gr.Checkbox(label="no_offload_kqv", value=shared.args.no_offload_kqv, info='Do not offload the K, Q, V to the GPU. This saves VRAM but reduces the performance.') + shared.gradio['triton'] = gr.Checkbox(label="triton", value=shared.args.triton) + shared.gradio['no_inject_fused_attention'] = gr.Checkbox(label="no_inject_fused_attention", value=shared.args.no_inject_fused_attention, info='Disable fused attention. Fused attention improves inference performance but uses more VRAM. Fuses layers for AutoAWQ. Disable if running low on VRAM.') + shared.gradio['no_inject_fused_mlp'] = gr.Checkbox(label="no_inject_fused_mlp", value=shared.args.no_inject_fused_mlp, info='Affects Triton only. Disable fused MLP. Fused MLP improves performance but uses more VRAM. Disable if running low on VRAM.') + shared.gradio['no_use_cuda_fp16'] = gr.Checkbox(label="no_use_cuda_fp16", value=shared.args.no_use_cuda_fp16, info='This can make models faster on some systems.') + shared.gradio['desc_act'] = gr.Checkbox(label="desc_act", value=shared.args.desc_act, info='\'desc_act\', \'wbits\', and \'groupsize\' are used for old models without a quantize_config.json.') + shared.gradio['no_mul_mat_q'] = gr.Checkbox(label="no_mul_mat_q", value=shared.args.no_mul_mat_q, info='Disable the mulmat kernels.') + shared.gradio['no_mmap'] = gr.Checkbox(label="no-mmap", value=shared.args.no_mmap) + shared.gradio['mlock'] = gr.Checkbox(label="mlock", value=shared.args.mlock) + shared.gradio['numa'] = gr.Checkbox(label="numa", value=shared.args.numa, info='NUMA support can help on some systems with non-uniform memory access.') + shared.gradio['cpu'] = gr.Checkbox(label="cpu", value=shared.args.cpu) + shared.gradio['load_in_8bit'] = gr.Checkbox(label="load-in-8bit", value=shared.args.load_in_8bit) + shared.gradio['bf16'] = gr.Checkbox(label="bf16", value=shared.args.bf16) + shared.gradio['auto_devices'] = gr.Checkbox(label="auto-devices", value=shared.args.auto_devices) + shared.gradio['disk'] = gr.Checkbox(label="disk", value=shared.args.disk) + shared.gradio['load_in_4bit'] = gr.Checkbox(label="load-in-4bit", value=shared.args.load_in_4bit) + shared.gradio['use_double_quant'] = gr.Checkbox(label="use_double_quant", value=shared.args.use_double_quant) + shared.gradio['tensor_split'] = gr.Textbox(label='tensor_split', info='Split the model across multiple GPUs, comma-separated list of proportions, e.g. 18,17') + shared.gradio['trust_remote_code'] = gr.Checkbox(label="trust-remote-code", value=shared.args.trust_remote_code, info='To enable this option, start the web UI with the --trust-remote-code flag. It is necessary for some models.', interactive=shared.args.trust_remote_code) + shared.gradio['cfg_cache'] = gr.Checkbox(label="cfg-cache", value=shared.args.cfg_cache, info='Create an additional cache for CFG negative prompts.') + shared.gradio['logits_all'] = gr.Checkbox(label="logits_all", value=shared.args.logits_all, info='Needs to be set for perplexity evaluation to work. Otherwise, ignore it, as it makes prompt processing slower.') + shared.gradio['use_flash_attention_2'] = gr.Checkbox(label="use_flash_attention_2", value=shared.args.use_flash_attention_2, info='Set use_flash_attention_2=True while loading the model.') + shared.gradio['disable_exllama'] = gr.Checkbox(label="disable_exllama", value=shared.args.disable_exllama, info='Disable ExLlama kernel.') + shared.gradio['disable_exllamav2'] = gr.Checkbox(label="disable_exllamav2", value=shared.args.disable_exllamav2, info='Disable ExLlamav2 kernel.') + shared.gradio['no_flash_attn'] = gr.Checkbox(label="no_flash_attn", value=shared.args.no_flash_attn, info='Force flash-attention to not be used.') + shared.gradio['cache_8bit'] = gr.Checkbox(label="cache_8bit", value=shared.args.cache_8bit, info='Use 8-bit cache to save VRAM.') + shared.gradio['no_use_fast'] = gr.Checkbox(label="no_use_fast", value=shared.args.no_use_fast, info='Set use_fast=False while loading the tokenizer.') + shared.gradio['num_experts_per_token'] = gr.Number(label="Number of experts per token", value=shared.args.num_experts_per_token, info='Only applies to MoE models like Mixtral.') + shared.gradio['gptq_for_llama_info'] = gr.Markdown('Legacy loader for compatibility with older GPUs. ExLlama_HF or AutoGPTQ are preferred for GPTQ models when supported.') + shared.gradio['exllama_info'] = gr.Markdown("ExLlama_HF is recommended over ExLlama for better integration with extensions and more consistent sampling behavior across loaders.") + shared.gradio['exllamav2_info'] = gr.Markdown("ExLlamav2_HF is recommended over ExLlamav2 for better integration with extensions and more consistent sampling behavior across loaders.") + shared.gradio['llamacpp_HF_info'] = gr.Markdown('llamacpp_HF loads llama.cpp as a Transformers model. To use it, you need to download a tokenizer.\n\nOption 1 (recommended): place your .gguf in a subfolder of models/ along with these 4 files: special_tokens_map.json, tokenizer_config.json, tokenizer.json, tokenizer.model.\n\nOption 2: download `oobabooga/llama-tokenizer` under "Download model or LoRA". That\'s a default Llama tokenizer that will work for some (but not all) models.') + + with gr.Column(): + with gr.Row(): + shared.gradio['autoload_model'] = gr.Checkbox(value=shared.settings['autoload_model'], label='Autoload the model', info='Whether to load the model as soon as it is selected in the Model dropdown.', interactive=not mu) + + shared.gradio['custom_model_menu'] = gr.Textbox(label="Download model or LoRA", info="Enter the Hugging Face username/model path, for instance: facebook/galactica-125m. To specify a branch, add it at the end after a \":\" character like this: facebook/galactica-125m:main. To download a single file, enter its name in the second box.", interactive=not mu) + shared.gradio['download_specific_file'] = gr.Textbox(placeholder="File name (for GGUF models)", show_label=False, max_lines=1, interactive=not mu) + with gr.Row(): + shared.gradio['download_model_button'] = gr.Button("Download", variant='primary', interactive=not mu) + shared.gradio['get_file_list'] = gr.Button("Get file list", interactive=not mu) + + with gr.Row(): + shared.gradio['model_status'] = gr.Markdown('No model is loaded' if shared.model_name == 'None' else 'Ready') + + +def create_event_handlers(): + shared.gradio['loader'].change( + loaders.make_loader_params_visible, gradio('loader'), gradio(loaders.get_all_params())).then( + lambda value: gr.update(choices=loaders.get_model_types(value)), gradio('loader'), gradio('model_type')) + + # In this event handler, the interface state is read and updated + # with the model defaults (if any), and then the model is loaded + # unless "autoload_model" is unchecked + shared.gradio['model_menu'].change( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + apply_model_settings_to_state, gradio('model_menu', 'interface_state'), gradio('interface_state')).then( + ui.apply_interface_values, gradio('interface_state'), gradio(ui.list_interface_input_elements()), show_progress=False).then( + update_model_parameters, gradio('interface_state'), None).then( + load_model_wrapper, gradio('model_menu', 'loader', 'autoload_model'), gradio('model_status'), show_progress=False).success( + update_truncation_length, gradio('truncation_length', 'interface_state'), gradio('truncation_length')).then( + lambda x: x, gradio('loader'), gradio('filter_by_loader')) + + shared.gradio['load_model'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + update_model_parameters, gradio('interface_state'), None).then( + partial(load_model_wrapper, autoload=True), gradio('model_menu', 'loader'), gradio('model_status'), show_progress=False).success( + update_truncation_length, gradio('truncation_length', 'interface_state'), gradio('truncation_length')).then( + lambda x: x, gradio('loader'), gradio('filter_by_loader')) + + shared.gradio['reload_model'].click( + unload_model, None, None).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + update_model_parameters, gradio('interface_state'), None).then( + partial(load_model_wrapper, autoload=True), gradio('model_menu', 'loader'), gradio('model_status'), show_progress=False).success( + update_truncation_length, gradio('truncation_length', 'interface_state'), gradio('truncation_length')).then( + lambda x: x, gradio('loader'), gradio('filter_by_loader')) + + shared.gradio['unload_model'].click( + unload_model, None, None).then( + lambda: "Model unloaded", None, gradio('model_status')) + + shared.gradio['save_model_settings'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + save_model_settings, gradio('model_menu', 'interface_state'), gradio('model_status'), show_progress=False) + + shared.gradio['lora_menu_apply'].click(load_lora_wrapper, gradio('lora_menu'), gradio('model_status'), show_progress=False) + shared.gradio['download_model_button'].click(download_model_wrapper, gradio('custom_model_menu', 'download_specific_file'), gradio('model_status'), show_progress=True) + shared.gradio['get_file_list'].click(partial(download_model_wrapper, return_links=True), gradio('custom_model_menu', 'download_specific_file'), gradio('model_status'), show_progress=True) + shared.gradio['autoload_model'].change(lambda x: gr.update(visible=not x), gradio('autoload_model'), gradio('load_model')) + + +def load_model_wrapper(selected_model, loader, autoload=False): + if not autoload: + yield f"The settings for `{selected_model}` have been updated.\n\nClick on \"Load\" to load it." + return + + if selected_model == 'None': + yield "No model selected" + else: + try: + yield f"Loading `{selected_model}`..." + unload_model() + if selected_model != '': + shared.model, shared.tokenizer = load_model(selected_model, loader) + + if shared.model is not None: + output = f"Successfully loaded `{selected_model}`." + + settings = get_model_metadata(selected_model) + if 'instruction_template' in settings: + output += '\n\nIt seems to be an instruction-following model with template "{}". In the chat tab, instruct or chat-instruct modes should be used.'.format(settings['instruction_template']) + + yield output + else: + yield f"Failed to load `{selected_model}`." + except: + exc = traceback.format_exc() + logger.error('Failed to load the model.') + print(exc) + yield exc.replace('\n', '\n\n') + + +def load_lora_wrapper(selected_loras): + yield ("Applying the following LoRAs to {}:\n\n{}".format(shared.model_name, '\n'.join(selected_loras))) + add_lora_to_model(selected_loras) + yield ("Successfuly applied the LoRAs") + + +def download_model_wrapper(repo_id, specific_file, progress=gr.Progress(), return_links=False, check=False): + try: + progress(0.0) + downloader = importlib.import_module("download-model").ModelDownloader() + model, branch = downloader.sanitize_model_and_branch_names(repo_id, None) + yield ("Getting the download links from Hugging Face") + links, sha256, is_lora, is_llamacpp = downloader.get_download_links_from_huggingface(model, branch, text_only=False, specific_file=specific_file) + if return_links: + yield '\n\n'.join([f"`{Path(link).name}`" for link in links]) + return + + yield ("Getting the output folder") + base_folder = shared.args.lora_dir if is_lora else shared.args.model_dir + output_folder = downloader.get_output_folder(model, branch, is_lora, is_llamacpp=is_llamacpp, base_folder=base_folder) + if check: + progress(0.5) + yield ("Checking previously downloaded files") + downloader.check_model_files(model, branch, links, sha256, output_folder) + progress(1.0) + else: + yield (f"Downloading file{'s' if len(links) > 1 else ''} to `{output_folder}/`") + downloader.download_model_files(model, branch, links, sha256, output_folder, progress_bar=progress, threads=4, is_llamacpp=is_llamacpp) + yield ("Done!") + except: + progress(1.0) + yield traceback.format_exc().replace('\n', '\n\n') + + +def update_truncation_length(current_length, state): + if 'loader' in state: + if state['loader'].lower().startswith('exllama'): + return state['max_seq_len'] + elif state['loader'] in ['llama.cpp', 'llamacpp_HF', 'ctransformers']: + return state['n_ctx'] + + return current_length diff --git a/modules/ui_notebook.py b/modules/ui_notebook.py new file mode 100644 index 0000000000000000000000000000000000000000..6bd5c919f797a30003f291ed40ca82a924f760e7 --- /dev/null +++ b/modules/ui_notebook.py @@ -0,0 +1,106 @@ +import gradio as gr + +from modules import logits, shared, ui, utils +from modules.prompts import count_tokens, load_prompt +from modules.text_generation import ( + generate_reply_wrapper, + get_token_ids, + stop_everything_event +) +from modules.utils import gradio + +inputs = ('textbox-notebook', 'interface_state') +outputs = ('textbox-notebook', 'html-notebook') + + +def create_ui(): + mu = shared.args.multi_user + with gr.Tab('Notebook', elem_id='notebook-tab'): + shared.gradio['last_input-notebook'] = gr.State('') + with gr.Row(): + with gr.Column(scale=4): + with gr.Tab('Raw'): + with gr.Row(): + shared.gradio['textbox-notebook'] = gr.Textbox(value='', lines=27, elem_id='textbox-notebook', elem_classes=['textbox', 'add_scrollbar']) + shared.gradio['token-counter-notebook'] = gr.HTML(value="0", elem_classes=["token-counter"]) + + with gr.Tab('Markdown'): + shared.gradio['markdown_render-notebook'] = gr.Button('Render') + shared.gradio['markdown-notebook'] = gr.Markdown() + + with gr.Tab('HTML'): + shared.gradio['html-notebook'] = gr.HTML() + + with gr.Tab('Logits'): + with gr.Row(): + with gr.Column(scale=10): + shared.gradio['get_logits-notebook'] = gr.Button('Get next token probabilities') + with gr.Column(scale=1): + shared.gradio['use_samplers-notebook'] = gr.Checkbox(label='Use samplers', value=True, elem_classes=['no-background']) + + with gr.Row(): + shared.gradio['logits-notebook'] = gr.Textbox(lines=23, label='Output', elem_classes=['textbox_logits_notebook', 'add_scrollbar']) + shared.gradio['logits-notebook-previous'] = gr.Textbox(lines=23, label='Previous output', elem_classes=['textbox_logits_notebook', 'add_scrollbar']) + + with gr.Tab('Tokens'): + shared.gradio['get_tokens-notebook'] = gr.Button('Get token IDs for the input') + shared.gradio['tokens-notebook'] = gr.Textbox(lines=23, label='Tokens', elem_classes=['textbox_logits_notebook', 'add_scrollbar', 'monospace']) + + with gr.Row(): + shared.gradio['Generate-notebook'] = gr.Button('Generate', variant='primary', elem_classes='small-button') + shared.gradio['Stop-notebook'] = gr.Button('Stop', elem_classes='small-button', elem_id='stop') + shared.gradio['Undo'] = gr.Button('Undo', elem_classes='small-button') + shared.gradio['Regenerate-notebook'] = gr.Button('Regenerate', elem_classes='small-button') + + with gr.Column(scale=1): + gr.HTML('
      ') + with gr.Row(): + shared.gradio['prompt_menu-notebook'] = gr.Dropdown(choices=utils.get_available_prompts(), value='None', label='Prompt', elem_classes='slim-dropdown') + ui.create_refresh_button(shared.gradio['prompt_menu-notebook'], lambda: None, lambda: {'choices': utils.get_available_prompts()}, ['refresh-button', 'refresh-button-small'], interactive=not mu) + shared.gradio['save_prompt-notebook'] = gr.Button('💾', elem_classes=['refresh-button', 'refresh-button-small'], interactive=not mu) + shared.gradio['delete_prompt-notebook'] = gr.Button('🗑️', elem_classes=['refresh-button', 'refresh-button-small'], interactive=not mu) + + +def create_event_handlers(): + shared.gradio['Generate-notebook'].click( + lambda x: x, gradio('textbox-notebook'), gradio('last_input-notebook')).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + generate_reply_wrapper, gradio(inputs), gradio(outputs), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda: None, None, None, _js=f'() => {{{ui.audio_notification_js}}}') + + shared.gradio['textbox-notebook'].submit( + lambda x: x, gradio('textbox-notebook'), gradio('last_input-notebook')).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + generate_reply_wrapper, gradio(inputs), gradio(outputs), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda: None, None, None, _js=f'() => {{{ui.audio_notification_js}}}') + + shared.gradio['Undo'].click(lambda x: x, gradio('last_input-notebook'), gradio('textbox-notebook'), show_progress=False) + shared.gradio['markdown_render-notebook'].click(lambda x: x, gradio('textbox-notebook'), gradio('markdown-notebook'), queue=False) + shared.gradio['Regenerate-notebook'].click( + lambda x: x, gradio('last_input-notebook'), gradio('textbox-notebook'), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + generate_reply_wrapper, gradio(inputs), gradio(outputs), show_progress=False).then( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + lambda: None, None, None, _js=f'() => {{{ui.audio_notification_js}}}') + + shared.gradio['Stop-notebook'].click(stop_everything_event, None, None, queue=False) + shared.gradio['prompt_menu-notebook'].change(load_prompt, gradio('prompt_menu-notebook'), gradio('textbox-notebook'), show_progress=False) + shared.gradio['save_prompt-notebook'].click( + lambda x: x, gradio('textbox-notebook'), gradio('save_contents')).then( + lambda: 'prompts/', None, gradio('save_root')).then( + lambda: utils.current_time() + '.txt', None, gradio('save_filename')).then( + lambda: gr.update(visible=True), None, gradio('file_saver')) + + shared.gradio['delete_prompt-notebook'].click( + lambda: 'prompts/', None, gradio('delete_root')).then( + lambda x: x + '.txt', gradio('prompt_menu-notebook'), gradio('delete_filename')).then( + lambda: gr.update(visible=True), None, gradio('file_deleter')) + + shared.gradio['textbox-notebook'].input(lambda x: f"{count_tokens(x)}", gradio('textbox-notebook'), gradio('token-counter-notebook'), show_progress=False) + shared.gradio['get_logits-notebook'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + logits.get_next_logits, gradio('textbox-notebook', 'interface_state', 'use_samplers-notebook', 'logits-notebook'), gradio('logits-notebook', 'logits-notebook-previous'), show_progress=False) + + shared.gradio['get_tokens-notebook'].click(get_token_ids, gradio('textbox-notebook'), gradio('tokens-notebook'), show_progress=False) diff --git a/modules/ui_parameters.py b/modules/ui_parameters.py new file mode 100644 index 0000000000000000000000000000000000000000..0c53963e8a3791d79e39a69ff9fd684aeb98b259 --- /dev/null +++ b/modules/ui_parameters.py @@ -0,0 +1,112 @@ +from pathlib import Path + +import gradio as gr + +from modules import loaders, presets, shared, ui, ui_chat, utils +from modules.utils import gradio + + +def create_ui(default_preset): + mu = shared.args.multi_user + generate_params = presets.load_preset(default_preset) + with gr.Tab("Parameters", elem_id="parameters"): + with gr.Tab("Generation"): + with gr.Row(): + with gr.Column(): + with gr.Row(): + shared.gradio['preset_menu'] = gr.Dropdown(choices=utils.get_available_presets(), value=default_preset, label='Preset', elem_classes='slim-dropdown') + ui.create_refresh_button(shared.gradio['preset_menu'], lambda: None, lambda: {'choices': utils.get_available_presets()}, 'refresh-button', interactive=not mu) + shared.gradio['save_preset'] = gr.Button('💾', elem_classes='refresh-button', interactive=not mu) + shared.gradio['delete_preset'] = gr.Button('🗑️', elem_classes='refresh-button', interactive=not mu) + shared.gradio['random_preset'] = gr.Button('🎲', elem_classes='refresh-button') + + with gr.Column(): + shared.gradio['filter_by_loader'] = gr.Dropdown(label="Filter by loader", choices=["All"] + list(loaders.loaders_and_params.keys()), value="All", elem_classes='slim-dropdown') + + with gr.Row(): + with gr.Column(): + with gr.Row(): + with gr.Column(): + shared.gradio['max_new_tokens'] = gr.Slider(minimum=shared.settings['max_new_tokens_min'], maximum=shared.settings['max_new_tokens_max'], step=1, label='max_new_tokens', value=shared.settings['max_new_tokens']) + shared.gradio['temperature'] = gr.Slider(0.01, 1.99, value=generate_params['temperature'], step=0.01, label='temperature') + shared.gradio['top_p'] = gr.Slider(0.0, 1.0, value=generate_params['top_p'], step=0.01, label='top_p') + shared.gradio['min_p'] = gr.Slider(0.0, 1.0, value=generate_params['min_p'], step=0.01, label='min_p') + shared.gradio['top_k'] = gr.Slider(0, 200, value=generate_params['top_k'], step=1, label='top_k') + shared.gradio['repetition_penalty'] = gr.Slider(1.0, 1.5, value=generate_params['repetition_penalty'], step=0.01, label='repetition_penalty') + shared.gradio['presence_penalty'] = gr.Slider(0, 2, value=generate_params['presence_penalty'], step=0.05, label='presence_penalty') + shared.gradio['frequency_penalty'] = gr.Slider(0, 2, value=generate_params['frequency_penalty'], step=0.05, label='frequency_penalty') + shared.gradio['repetition_penalty_range'] = gr.Slider(0, 4096, step=64, value=generate_params['repetition_penalty_range'], label='repetition_penalty_range') + shared.gradio['typical_p'] = gr.Slider(0.0, 1.0, value=generate_params['typical_p'], step=0.01, label='typical_p') + shared.gradio['tfs'] = gr.Slider(0.0, 1.0, value=generate_params['tfs'], step=0.01, label='tfs') + shared.gradio['top_a'] = gr.Slider(0.0, 1.0, value=generate_params['top_a'], step=0.01, label='top_a') + shared.gradio['epsilon_cutoff'] = gr.Slider(0, 9, value=generate_params['epsilon_cutoff'], step=0.01, label='epsilon_cutoff') + shared.gradio['eta_cutoff'] = gr.Slider(0, 20, value=generate_params['eta_cutoff'], step=0.01, label='eta_cutoff') + + with gr.Column(): + shared.gradio['guidance_scale'] = gr.Slider(-0.5, 2.5, step=0.05, value=generate_params['guidance_scale'], label='guidance_scale', info='For CFG. 1.5 is a good value.') + shared.gradio['negative_prompt'] = gr.Textbox(value=shared.settings['negative_prompt'], label='Negative prompt', lines=3, elem_classes=['add_scrollbar']) + shared.gradio['penalty_alpha'] = gr.Slider(0, 5, value=generate_params['penalty_alpha'], label='penalty_alpha', info='For Contrastive Search. do_sample must be unchecked.') + shared.gradio['mirostat_mode'] = gr.Slider(0, 2, step=1, value=generate_params['mirostat_mode'], label='mirostat_mode', info='mode=1 is for llama.cpp only.') + shared.gradio['mirostat_tau'] = gr.Slider(0, 10, step=0.01, value=generate_params['mirostat_tau'], label='mirostat_tau') + shared.gradio['mirostat_eta'] = gr.Slider(0, 1, step=0.01, value=generate_params['mirostat_eta'], label='mirostat_eta') + shared.gradio['temperature_last'] = gr.Checkbox(value=generate_params['temperature_last'], label='temperature_last', info='Makes temperature the last sampler instead of the first.') + shared.gradio['do_sample'] = gr.Checkbox(value=generate_params['do_sample'], label='do_sample') + shared.gradio['seed'] = gr.Number(value=shared.settings['seed'], label='Seed (-1 for random)') + with gr.Accordion('Other parameters', open=False): + shared.gradio['encoder_repetition_penalty'] = gr.Slider(0.8, 1.5, value=generate_params['encoder_repetition_penalty'], step=0.01, label='encoder_repetition_penalty') + shared.gradio['no_repeat_ngram_size'] = gr.Slider(0, 20, step=1, value=generate_params['no_repeat_ngram_size'], label='no_repeat_ngram_size') + shared.gradio['min_length'] = gr.Slider(0, 2000, step=1, value=generate_params['min_length'], label='min_length') + shared.gradio['num_beams'] = gr.Slider(1, 20, step=1, value=generate_params['num_beams'], label='num_beams', info='For Beam Search, along with length_penalty and early_stopping.') + shared.gradio['length_penalty'] = gr.Slider(-5, 5, value=generate_params['length_penalty'], label='length_penalty') + shared.gradio['early_stopping'] = gr.Checkbox(value=generate_params['early_stopping'], label='early_stopping') + + gr.Markdown("[Learn more](https://github.com/oobabooga/text-generation-webui/wiki/03-%E2%80%90-Parameters-Tab)") + + with gr.Column(): + with gr.Row(): + with gr.Column(): + shared.gradio['truncation_length'] = gr.Slider(value=get_truncation_length(), minimum=shared.settings['truncation_length_min'], maximum=shared.settings['truncation_length_max'], step=256, label='Truncate the prompt up to this length', info='The leftmost tokens are removed if the prompt exceeds this length. Most models require this to be at most 2048.') + shared.gradio['max_tokens_second'] = gr.Slider(value=shared.settings['max_tokens_second'], minimum=0, maximum=20, step=1, label='Maximum number of tokens/second', info='To make text readable in real time.') + shared.gradio['custom_stopping_strings'] = gr.Textbox(lines=1, value=shared.settings["custom_stopping_strings"] or None, label='Custom stopping strings', info='In addition to the defaults. Written between "" and separated by commas.', placeholder='"\\n", "\\nYou:"') + shared.gradio['custom_token_bans'] = gr.Textbox(value=shared.settings['custom_token_bans'] or None, label='Custom token bans', info='Specific token IDs to ban from generating, comma-separated. The IDs can be found in the Default or Notebook tab.') + + with gr.Column(): + shared.gradio['auto_max_new_tokens'] = gr.Checkbox(value=shared.settings['auto_max_new_tokens'], label='auto_max_new_tokens', info='Expand max_new_tokens to the available context length.') + shared.gradio['ban_eos_token'] = gr.Checkbox(value=shared.settings['ban_eos_token'], label='Ban the eos_token', info='Forces the model to never end the generation prematurely.') + shared.gradio['add_bos_token'] = gr.Checkbox(value=shared.settings['add_bos_token'], label='Add the bos_token to the beginning of prompts', info='Disabling this can make the replies more creative.') + shared.gradio['skip_special_tokens'] = gr.Checkbox(value=shared.settings['skip_special_tokens'], label='Skip special tokens', info='Some specific models need this unset.') + shared.gradio['stream'] = gr.Checkbox(value=shared.settings['stream'], label='Activate text streaming') + + with gr.Row() as shared.gradio['grammar_file_row']: + shared.gradio['grammar_file'] = gr.Dropdown(value='None', choices=utils.get_available_grammars(), label='Load grammar from file (.gbnf)', elem_classes='slim-dropdown') + ui.create_refresh_button(shared.gradio['grammar_file'], lambda: None, lambda: {'choices': utils.get_available_grammars()}, 'refresh-button', interactive=not mu) + shared.gradio['save_grammar'] = gr.Button('💾', elem_classes='refresh-button', interactive=not mu) + shared.gradio['delete_grammar'] = gr.Button('🗑️ ', elem_classes='refresh-button', interactive=not mu) + + shared.gradio['grammar_string'] = gr.Textbox(value='', label='Grammar', lines=16, elem_classes=['add_scrollbar', 'monospace']) + + ui_chat.create_chat_settings_ui() + + +def create_event_handlers(): + shared.gradio['filter_by_loader'].change(loaders.blacklist_samplers, gradio('filter_by_loader'), gradio(loaders.list_all_samplers()), show_progress=False) + shared.gradio['preset_menu'].change(presets.load_preset_for_ui, gradio('preset_menu', 'interface_state'), gradio('interface_state') + gradio(presets.presets_params())) + shared.gradio['random_preset'].click(presets.random_preset, gradio('interface_state'), gradio('interface_state') + gradio(presets.presets_params())) + shared.gradio['grammar_file'].change(load_grammar, gradio('grammar_file'), gradio('grammar_string')) + + +def get_truncation_length(): + if 'max_seq_len' in shared.provided_arguments or shared.args.max_seq_len != shared.args_defaults.max_seq_len: + return shared.args.max_seq_len + elif 'n_ctx' in shared.provided_arguments or shared.args.n_ctx != shared.args_defaults.n_ctx: + return shared.args.n_ctx + else: + return shared.settings['truncation_length'] + + +def load_grammar(name): + p = Path(f'grammars/{name}') + if p.exists(): + return open(p, 'r').read() + else: + return '' diff --git a/modules/ui_session.py b/modules/ui_session.py new file mode 100644 index 0000000000000000000000000000000000000000..61e050657d9d9cec20dda3ba0e704d23edebacd5 --- /dev/null +++ b/modules/ui_session.py @@ -0,0 +1,70 @@ +import gradio as gr + +from modules import shared, ui, utils +from modules.github import clone_or_pull_repository +from modules.utils import gradio + + +def create_ui(): + mu = shared.args.multi_user + with gr.Tab("Session", elem_id="session-tab"): + with gr.Row(): + with gr.Column(): + shared.gradio['reset_interface'] = gr.Button("Apply flags/extensions and restart", interactive=not mu) + with gr.Row(): + shared.gradio['toggle_dark_mode'] = gr.Button('Toggle 💡') + shared.gradio['save_settings'] = gr.Button('Save UI defaults to settings.yaml', interactive=not mu) + + with gr.Row(): + with gr.Column(): + shared.gradio['extensions_menu'] = gr.CheckboxGroup(choices=utils.get_available_extensions(), value=shared.args.extensions, label="Available extensions", info='Note that some of these extensions may require manually installing Python requirements through the command: pip install -r extensions/extension_name/requirements.txt', elem_classes='checkboxgroup-table') + + with gr.Column(): + shared.gradio['bool_menu'] = gr.CheckboxGroup(choices=get_boolean_arguments(), value=get_boolean_arguments(active=True), label="Boolean command-line flags", elem_classes='checkboxgroup-table') + + with gr.Column(): + extension_name = gr.Textbox(lines=1, label='Install or update an extension', info='Enter the GitHub URL below and press Enter. For a list of extensions, see: https://github.com/oobabooga/text-generation-webui-extensions ⚠️ WARNING ⚠️ : extensions can execute arbitrary code. Make sure to inspect their source code before activating them.', interactive=not mu) + extension_status = gr.Markdown() + + extension_name.submit(clone_or_pull_repository, extension_name, extension_status, show_progress=False) + + # Reset interface event + shared.gradio['reset_interface'].click( + set_interface_arguments, gradio('extensions_menu', 'bool_menu'), None).then( + lambda: None, None, None, _js='() => {document.body.innerHTML=\'

      Reloading...

      \'; setTimeout(function(){location.reload()},2500); return []}') + + shared.gradio['toggle_dark_mode'].click(lambda: None, None, None, _js='() => {document.getElementsByTagName("body")[0].classList.toggle("dark")}') + shared.gradio['save_settings'].click( + ui.gather_interface_values, gradio(shared.input_elements), gradio('interface_state')).then( + ui.save_settings, gradio('interface_state', 'preset_menu', 'extensions_menu', 'show_controls'), gradio('save_contents')).then( + lambda: './', None, gradio('save_root')).then( + lambda: 'settings.yaml', None, gradio('save_filename')).then( + lambda: gr.update(visible=True), None, gradio('file_saver')) + + +def set_interface_arguments(extensions, bool_active): + shared.args.extensions = extensions + + bool_list = get_boolean_arguments() + + for k in bool_list: + setattr(shared.args, k, False) + for k in bool_active: + setattr(shared.args, k, True) + if k == 'api': + shared.add_extension('openai', last=True) + + shared.need_restart = True + + +def get_boolean_arguments(active=False): + exclude = shared.deprecated_args + + cmd_list = vars(shared.args) + bool_list = sorted([k for k in cmd_list if type(cmd_list[k]) is bool and k not in exclude + ui.list_model_elements()]) + bool_active = [k for k in bool_list if vars(shared.args)[k]] + + if active: + return bool_active + else: + return bool_list diff --git a/modules/utils.py b/modules/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..50bf3a7c78c30bdf9e82c32bfd69abc94a86c1b8 --- /dev/null +++ b/modules/utils.py @@ -0,0 +1,134 @@ +import os +import re +from datetime import datetime +from pathlib import Path + +from modules import github, shared +from modules.logging_colors import logger + + +# Helper function to get multiple values from shared.gradio +def gradio(*keys): + if len(keys) == 1 and type(keys[0]) in [list, tuple]: + keys = keys[0] + + return [shared.gradio[k] for k in keys] + + +def save_file(fname, contents): + if fname == '': + logger.error('File name is empty!') + return + + root_folder = Path(__file__).resolve().parent.parent + abs_path_str = os.path.abspath(fname) + rel_path_str = os.path.relpath(abs_path_str, root_folder) + rel_path = Path(rel_path_str) + if rel_path.parts[0] == '..': + logger.error(f'Invalid file path: {fname}') + return + + with open(abs_path_str, 'w', encoding='utf-8') as f: + f.write(contents) + + logger.info(f'Saved {abs_path_str}.') + + +def delete_file(fname): + if fname == '': + logger.error('File name is empty!') + return + + root_folder = Path(__file__).resolve().parent.parent + abs_path_str = os.path.abspath(fname) + rel_path_str = os.path.relpath(abs_path_str, root_folder) + rel_path = Path(rel_path_str) + if rel_path.parts[0] == '..': + logger.error(f'Invalid file path: {fname}') + return + + if rel_path.exists(): + rel_path.unlink() + logger.info(f'Deleted {fname}.') + + +def current_time(): + return f"{datetime.now().strftime('%Y-%m-%d-%H%M%S')}" + + +def atoi(text): + return int(text) if text.isdigit() else text.lower() + + +# Replace multiple string pairs in a string +def replace_all(text, dic): + for i, j in dic.items(): + text = text.replace(i, j) + + return text + + +def natural_keys(text): + return [atoi(c) for c in re.split(r'(\d+)', text)] + + +def get_available_models(): + model_list = [] + for item in list(Path(f'{shared.args.model_dir}/').glob('*')): + if not item.name.endswith(('.txt', '-np', '.pt', '.json', '.yaml', '.py')) and 'llama-tokenizer' not in item.name: + model_list.append(re.sub('.pth$', '', item.name)) + + return ['None'] + sorted(model_list, key=natural_keys) + + +def get_available_presets(): + return sorted(set((k.stem for k in Path('presets').glob('*.yaml'))), key=natural_keys) + + +def get_available_prompts(): + prompts = [] + files = set((k.stem for k in Path('prompts').glob('*.txt'))) + prompts += sorted([k for k in files if re.match('^[0-9]', k)], key=natural_keys, reverse=True) + prompts += sorted([k for k in files if re.match('^[^0-9]', k)], key=natural_keys) + prompts += ['None'] + return prompts + + +def get_available_characters(): + paths = (x for x in Path('characters').iterdir() if x.suffix in ('.json', '.yaml', '.yml')) + return sorted(set((k.stem for k in paths)), key=natural_keys) + + +def get_available_instruction_templates(): + path = "instruction-templates" + paths = [] + if os.path.exists(path): + paths = (x for x in Path(path).iterdir() if x.suffix in ('.json', '.yaml', '.yml')) + + return ['Select template to load...'] + sorted(set((k.stem for k in paths)), key=natural_keys) + + +def get_available_extensions(): + extensions = sorted(set(map(lambda x: x.parts[1], Path('extensions').glob('*/script.py'))), key=natural_keys) + extensions = [v for v in extensions if v not in github.new_extensions] + return extensions + + +def get_available_loras(): + return ['None'] + sorted([item.name for item in list(Path(shared.args.lora_dir).glob('*')) if not item.name.endswith(('.txt', '-np', '.pt', '.json'))], key=natural_keys) + + +def get_datasets(path: str, ext: str): + # include subdirectories for raw txt files to allow training from a subdirectory of txt files + if ext == "txt": + return ['None'] + sorted(set([k.stem for k in list(Path(path).glob('*.txt')) + list(Path(path).glob('*/')) if k.stem != 'put-trainer-datasets-here']), key=natural_keys) + + return ['None'] + sorted(set([k.stem for k in Path(path).glob(f'*.{ext}') if k.stem != 'put-trainer-datasets-here']), key=natural_keys) + + +def get_available_chat_styles(): + return sorted(set(('-'.join(k.stem.split('-')[1:]) for k in Path('css').glob('chat_style*.css'))), key=natural_keys) + + +def get_available_grammars(): + return ['None'] + sorted([item.name for item in list(Path('grammars').glob('*.gbnf'))], key=natural_keys) diff --git a/one_click.py b/one_click.py new file mode 100644 index 0000000000000000000000000000000000000000..76e8580ecc797a35004e7976dff54ecd8be7a48a --- /dev/null +++ b/one_click.py @@ -0,0 +1,415 @@ +import argparse +import glob +import hashlib +import os +import platform +import re +import signal +import site +import subprocess +import sys + +script_dir = os.getcwd() +conda_env_path = os.path.join(script_dir, "installer_files", "env") + +# Remove the '# ' from the following lines as needed for your AMD GPU on Linux +# os.environ["ROCM_PATH"] = '/opt/rocm' +# os.environ["HSA_OVERRIDE_GFX_VERSION"] = '10.3.0' +# os.environ["HCC_AMDGPU_TARGET"] = 'gfx1030' + +# Command-line flags +cmd_flags_path = os.path.join(script_dir, "CMD_FLAGS.txt") +if os.path.exists(cmd_flags_path): + with open(cmd_flags_path, 'r') as f: + CMD_FLAGS = ' '.join(line.strip().rstrip('\\').strip() for line in f if line.strip().rstrip('\\').strip() and not line.strip().startswith('#')) +else: + CMD_FLAGS = '' + +flags = f"{' '.join([flag for flag in sys.argv[1:] if flag != '--update'])} {CMD_FLAGS}" + + +def signal_handler(sig, frame): + sys.exit(0) + + +signal.signal(signal.SIGINT, signal_handler) + + +def is_linux(): + return sys.platform.startswith("linux") + + +def is_windows(): + return sys.platform.startswith("win") + + +def is_macos(): + return sys.platform.startswith("darwin") + + +def is_x86_64(): + return platform.machine() == "x86_64" + + +def cpu_has_avx2(): + try: + import cpuinfo + + info = cpuinfo.get_cpu_info() + if 'avx2' in info['flags']: + return True + else: + return False + except: + return True + + +def cpu_has_amx(): + try: + import cpuinfo + + info = cpuinfo.get_cpu_info() + if 'amx' in info['flags']: + return True + else: + return False + except: + return True + + +def torch_version(): + site_packages_path = None + for sitedir in site.getsitepackages(): + if "site-packages" in sitedir and conda_env_path in sitedir: + site_packages_path = sitedir + break + + if site_packages_path: + torch_version_file = open(os.path.join(site_packages_path, 'torch', 'version.py')).read().splitlines() + torver = [line for line in torch_version_file if '__version__' in line][0].split('__version__ = ')[1].strip("'") + else: + from torch import __version__ as torver + return torver + + +def is_installed(): + site_packages_path = None + for sitedir in site.getsitepackages(): + if "site-packages" in sitedir and conda_env_path in sitedir: + site_packages_path = sitedir + break + + if site_packages_path: + return os.path.isfile(os.path.join(site_packages_path, 'torch', '__init__.py')) + else: + return os.path.isdir(conda_env_path) + + +def check_env(): + # If we have access to conda, we are probably in an environment + conda_exist = run_cmd("conda", environment=True, capture_output=True).returncode == 0 + if not conda_exist: + print("Conda is not installed. Exiting...") + sys.exit(1) + + # Ensure this is a new environment and not the base environment + if os.environ["CONDA_DEFAULT_ENV"] == "base": + print("Create an environment for this project and activate it. Exiting...") + sys.exit(1) + + +def clear_cache(): + run_cmd("conda clean -a -y", environment=True) + run_cmd("python -m pip cache purge", environment=True) + + +def print_big_message(message): + message = message.strip() + lines = message.split('\n') + print("\n\n*******************************************************************") + for line in lines: + if line.strip() != '': + print("*", line) + + print("*******************************************************************\n\n") + + +def calculate_file_hash(file_path): + p = os.path.join(script_dir, file_path) + if os.path.isfile(p): + with open(p, 'rb') as f: + return hashlib.sha256(f.read()).hexdigest() + else: + return '' + + +def run_cmd(cmd, assert_success=False, environment=False, capture_output=False, env=None): + # Use the conda environment + if environment: + if is_windows(): + conda_bat_path = os.path.join(script_dir, "installer_files", "conda", "condabin", "conda.bat") + cmd = "\"" + conda_bat_path + "\" activate \"" + conda_env_path + "\" >nul && " + cmd + else: + conda_sh_path = os.path.join(script_dir, "installer_files", "conda", "etc", "profile.d", "conda.sh") + cmd = ". \"" + conda_sh_path + "\" && conda activate \"" + conda_env_path + "\" && " + cmd + + # Run shell commands + result = subprocess.run(cmd, shell=True, capture_output=capture_output, env=env) + + # Assert the command ran successfully + if assert_success and result.returncode != 0: + print("Command '" + cmd + "' failed with exit status code '" + str(result.returncode) + "'.\n\nExiting now.\nTry running the start/update script again.") + sys.exit(1) + + return result + + +def install_webui(): + # Select your GPU, or choose to run in CPU mode + if "GPU_CHOICE" in os.environ: + choice = os.environ["GPU_CHOICE"].upper() + print_big_message(f"Selected GPU choice \"{choice}\" based on the GPU_CHOICE environment variable.") + else: + print() + print("What is your GPU?") + print() + print("A) NVIDIA") + print("B) AMD (Linux/MacOS only. Requires ROCm SDK 5.6 on Linux)") + print("C) Apple M Series") + print("D) Intel Arc (IPEX)") + print("N) None (I want to run models in CPU mode)") + print() + + choice = input("Input> ").upper() + while choice not in 'ABCDN': + print("Invalid choice. Please try again.") + choice = input("Input> ").upper() + + if choice == "N": + print_big_message("Once the installation ends, make sure to open CMD_FLAGS.txt with\na text editor and add the --cpu flag.") + + # Find the proper Pytorch installation command + install_git = "conda install -y -k ninja git" + install_pytorch = "python -m pip install torch torchvision torchaudio" + + use_cuda118 = "N" + if any((is_windows(), is_linux())) and choice == "A": + if "USE_CUDA118" in os.environ: + use_cuda118 = "Y" if os.environ.get("USE_CUDA118", "").lower() in ("yes", "y", "true", "1", "t", "on") else "N" + else: + # Ask for CUDA version if using NVIDIA + print("\nDo you want to use CUDA 11.8 instead of 12.1? Only choose this option if your GPU is very old (Kepler or older).\nFor RTX and GTX series GPUs, say \"N\". If unsure, say \"N\".\n") + use_cuda118 = input("Input (Y/N)> ").upper().strip('"\'').strip() + while use_cuda118 not in 'YN': + print("Invalid choice. Please try again.") + use_cuda118 = input("Input> ").upper().strip('"\'').strip() + if use_cuda118 == 'Y': + print("CUDA: 11.8") + else: + print("CUDA: 12.1") + + install_pytorch = f"python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/{'cu121' if use_cuda118 == 'N' else 'cu118'}" + elif not is_macos() and choice == "B": + if is_linux(): + install_pytorch = "python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.6" + else: + print("AMD GPUs are only supported on Linux. Exiting...") + sys.exit(1) + elif is_linux() and (choice == "C" or choice == "N"): + install_pytorch = "python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu" + elif choice == "D": + install_pytorch = "python -m pip install torch==2.1.0a0 torchvision==0.16.0a0 intel_extension_for_pytorch==2.1.10+xpu --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/" + + # Install Git and then Pytorch + print_big_message("Installing PyTorch.") + run_cmd(f"{install_git} && {install_pytorch} && python -m pip install py-cpuinfo==9.0.0", assert_success=True, environment=True) + + # Install CUDA libraries (this wasn't necessary for Pytorch before...) + if choice == "A": + print_big_message("Installing the CUDA runtime libraries.") + run_cmd(f"conda install -y -c \"nvidia/label/{'cuda-12.1.1' if use_cuda118 == 'N' else 'cuda-11.8.0'}\" cuda-runtime", assert_success=True, environment=True) + + # Install the webui requirements + update_requirements(initial_installation=True) + + +def update_requirements(initial_installation=False): + # Create .git directory if missing + if not os.path.isdir(os.path.join(script_dir, ".git")): + git_creation_cmd = 'git init -b main && git remote add origin https://github.com/oobabooga/text-generation-webui && git fetch && git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main && git reset --hard origin/main && git branch --set-upstream-to=origin/main' + run_cmd(git_creation_cmd, environment=True, assert_success=True) + + files_to_check = [ + 'start_linux.sh', 'start_macos.sh', 'start_windows.bat', 'start_wsl.bat', + 'update_linux.sh', 'update_macos.sh', 'update_windows.bat', 'update_wsl.bat', + 'one_click.py' + ] + + before_pull_hashes = {file_name: calculate_file_hash(file_name) for file_name in files_to_check} + run_cmd("git pull --autostash", assert_success=True, environment=True) + after_pull_hashes = {file_name: calculate_file_hash(file_name) for file_name in files_to_check} + + # Check for differences in installation file hashes + for file_name in files_to_check: + if before_pull_hashes[file_name] != after_pull_hashes[file_name]: + print_big_message(f"File '{file_name}' was updated during 'git pull'. Please run the script again.") + exit(1) + + # Extensions requirements are installed only during the initial install by default. + # That can be changed with the INSTALL_EXTENSIONS environment variable. + install = initial_installation + if "INSTALL_EXTENSIONS" in os.environ: + install = os.environ["INSTALL_EXTENSIONS"].lower() in ("yes", "y", "true", "1", "t", "on") + + if install: + print_big_message("Installing extensions requirements.") + skip = ['superbooga', 'superboogav2', 'coqui_tts'] # Fail to install on Windows + extensions = [foldername for foldername in os.listdir('extensions') if os.path.isfile(os.path.join('extensions', foldername, 'requirements.txt'))] + extensions = [x for x in extensions if x not in skip] + for i, extension in enumerate(extensions): + print(f"\n\n--- [{i+1}/{len(extensions)}]: {extension}\n\n") + extension_req_path = os.path.join("extensions", extension, "requirements.txt") + run_cmd("python -m pip install -r " + extension_req_path + " --upgrade", assert_success=False, environment=True) + elif initial_installation: + print_big_message("Will not install extensions due to INSTALL_EXTENSIONS environment variable.") + + # Detect the Python and PyTorch versions + torver = torch_version() + is_cuda = '+cu' in torver + is_cuda118 = '+cu118' in torver # 2.1.0+cu118 + is_cuda117 = '+cu117' in torver # 2.0.1+cu117 + is_rocm = '+rocm' in torver # 2.0.1+rocm5.4.2 + is_intel = '+cxx11' in torver # 2.0.1a0+cxx11.abi + is_cpu = '+cpu' in torver # 2.0.1+cpu + + if is_rocm: + if cpu_has_avx2(): + requirements_file = "requirements_amd.txt" + else: + requirements_file = "requirements_amd_noavx2.txt" + elif is_cpu: + if cpu_has_avx2(): + requirements_file = "requirements_cpu_only.txt" + else: + requirements_file = "requirements_cpu_only_noavx2.txt" + elif is_macos(): + if is_x86_64(): + requirements_file = "requirements_apple_intel.txt" + else: + requirements_file = "requirements_apple_silicon.txt" + else: + if cpu_has_avx2(): + requirements_file = "requirements.txt" + else: + requirements_file = "requirements_noavx2.txt" + + print_big_message(f"Installing webui requirements from file: {requirements_file}") + print(f"TORCH: {torver}\n") + + # Prepare the requirements file + textgen_requirements = open(requirements_file).read().splitlines() + if is_cuda117: + textgen_requirements = [req.replace('+cu121', '+cu117').replace('+cu122', '+cu117').replace('torch2.1', 'torch2.0') for req in textgen_requirements] + elif is_cuda118: + textgen_requirements = [req.replace('+cu121', '+cu118').replace('+cu122', '+cu118') for req in textgen_requirements] + if is_windows() and (is_cuda117 or is_cuda118): # No flash-attention on Windows for CUDA 11 + textgen_requirements = [req for req in textgen_requirements if 'jllllll/flash-attention' not in req] + + with open('temp_requirements.txt', 'w') as file: + file.write('\n'.join(textgen_requirements)) + + # Workaround for git+ packages not updating properly. + git_requirements = [req for req in textgen_requirements if req.startswith("git+")] + for req in git_requirements: + url = req.replace("git+", "") + package_name = url.split("/")[-1].split("@")[0].rstrip(".git") + run_cmd("python -m pip uninstall -y " + package_name, environment=True) + print(f"Uninstalled {package_name}") + + # Make sure that API requirements are installed (temporary) + extension_req_path = os.path.join("extensions", "openai", "requirements.txt") + if os.path.exists(extension_req_path): + run_cmd("python -m pip install -r " + extension_req_path + " --upgrade", environment=True) + + # Install/update the project requirements + run_cmd("python -m pip install -r temp_requirements.txt --upgrade", assert_success=True, environment=True) + os.remove('temp_requirements.txt') + + # Check for '+cu' or '+rocm' in version string to determine if torch uses CUDA or ROCm. Check for pytorch-cuda as well for backwards compatibility + if not any((is_cuda, is_rocm)) and run_cmd("conda list -f pytorch-cuda | grep pytorch-cuda", environment=True, capture_output=True).returncode == 1: + clear_cache() + return + + if not os.path.exists("repositories/"): + os.mkdir("repositories") + + os.chdir("repositories") + + # Install or update ExLlama as needed + if not os.path.exists("exllama/"): + run_cmd("git clone https://github.com/turboderp/exllama.git", environment=True) + else: + os.chdir("exllama") + run_cmd("git pull", environment=True) + os.chdir("..") + + if is_linux(): + # Fix JIT compile issue with ExLlama in Linux/WSL + if not os.path.exists(f"{conda_env_path}/lib64"): + run_cmd(f'ln -s "{conda_env_path}/lib" "{conda_env_path}/lib64"', environment=True) + + # On some Linux distributions, g++ may not exist or be the wrong version to compile GPTQ-for-LLaMa + gxx_output = run_cmd("g++ -dumpfullversion -dumpversion", environment=True, capture_output=True) + if gxx_output.returncode != 0 or int(gxx_output.stdout.strip().split(b".")[0]) > 11: + # Install the correct version of g++ + run_cmd("conda install -y -k conda-forge::gxx_linux-64=11.2.0", environment=True) + + clear_cache() + + +def download_model(): + run_cmd("python download-model.py", environment=True) + + +def launch_webui(): + run_cmd(f"python server.py {flags}", environment=True) + + +if __name__ == "__main__": + # Verifies we are in a conda environment + check_env() + + parser = argparse.ArgumentParser(add_help=False) + parser.add_argument('--update', action='store_true', help='Update the web UI.') + args, _ = parser.parse_known_args() + + if args.update: + update_requirements() + else: + # If webui has already been installed, skip and run + if not is_installed(): + install_webui() + os.chdir(script_dir) + + if os.environ.get("LAUNCH_AFTER_INSTALL", "").lower() in ("no", "n", "false", "0", "f", "off"): + print_big_message("Install finished successfully and will now exit due to LAUNCH_AFTER_INSTALL.") + sys.exit() + + # Check if a model has been downloaded yet + if '--model-dir' in flags: + # Splits on ' ' or '=' while maintaining spaces within quotes + flags_list = re.split(' +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)|=', flags) + model_dir = [flags_list[(flags_list.index(flag)+1)] for flag in flags_list if flag == '--model-dir'][0].strip('"\'') + else: + model_dir = 'models' + + if len([item for item in glob.glob(f'{model_dir}/*') if not item.endswith(('.txt', '.yaml'))]) == 0: + print_big_message("WARNING: You haven't downloaded any model yet.\nOnce the web UI launches, head over to the \"Model\" tab and download one.") + + # Workaround for llama-cpp-python loading paths in CUDA env vars even if they do not exist + conda_path_bin = os.path.join(conda_env_path, "bin") + if not os.path.exists(conda_path_bin): + os.mkdir(conda_path_bin) + + # Launch the webui + launch_webui() diff --git a/presets/Asterism.yaml b/presets/Asterism.yaml new file mode 100644 index 0000000000000000000000000000000000000000..87b56e1fa5675ba99f7845d8a729c784f5fe363d --- /dev/null +++ b/presets/Asterism.yaml @@ -0,0 +1,4 @@ +temperature: 1.68 +top_p: 0.17 +repetition_penalty: 1.02 +top_k: 77 diff --git a/presets/Big O.yaml b/presets/Big O.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2ab182687647aaa04868d08024eefaacd0b48b06 --- /dev/null +++ b/presets/Big O.yaml @@ -0,0 +1,6 @@ +temperature: 0.87 +top_p: 0.99 +typical_p: 0.68 +tfs: 0.68 +repetition_penalty: 1.01 +top_k: 85 diff --git a/presets/Contrastive Search.yaml b/presets/Contrastive Search.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d9a47a9f5b75ae5d2db9da0ace7a51d962fdef94 --- /dev/null +++ b/presets/Contrastive Search.yaml @@ -0,0 +1,3 @@ +do_sample: false +top_k: 4 +penalty_alpha: 0.3 diff --git a/presets/Debug-deterministic.yaml b/presets/Debug-deterministic.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cbe7064f119993b9d73c8baa2454f04b6e7f79b7 --- /dev/null +++ b/presets/Debug-deterministic.yaml @@ -0,0 +1 @@ +do_sample: false diff --git a/presets/Divine Intellect.yaml b/presets/Divine Intellect.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ac750e40dc94a7a622a21e692bc399b4e8d9e2df --- /dev/null +++ b/presets/Divine Intellect.yaml @@ -0,0 +1,4 @@ +temperature: 1.31 +top_p: 0.14 +repetition_penalty: 1.17 +top_k: 49 diff --git a/presets/LLaMA-Precise.yaml b/presets/LLaMA-Precise.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c5f9cae25636cafb52a8d99c9d610c1a33a7ef3b --- /dev/null +++ b/presets/LLaMA-Precise.yaml @@ -0,0 +1,4 @@ +temperature: 0.7 +top_p: 0.1 +repetition_penalty: 1.18 +top_k: 40 diff --git a/presets/Midnight Enigma.yaml b/presets/Midnight Enigma.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0bd1763c6d5aab39dd7a25ac69c453a846e93fb1 --- /dev/null +++ b/presets/Midnight Enigma.yaml @@ -0,0 +1,4 @@ +temperature: 0.98 +top_p: 0.37 +repetition_penalty: 1.18 +top_k: 100 diff --git a/presets/Mirostat.yaml b/presets/Mirostat.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8bf97e808009a0a187edc2fc41b69ae6c3c5b299 --- /dev/null +++ b/presets/Mirostat.yaml @@ -0,0 +1,2 @@ +mirostat_mode: 2 +mirostat_tau: 8 diff --git a/presets/Shortwave.yaml b/presets/Shortwave.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a2528abdb4b950defd50c42ef6cbe0f884560e79 --- /dev/null +++ b/presets/Shortwave.yaml @@ -0,0 +1,4 @@ +temperature: 1.53 +top_p: 0.64 +repetition_penalty: 1.07 +top_k: 33 diff --git a/presets/Space Alien.yaml b/presets/Space Alien.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4c9a2dd2f0577aea3d42607ac5b94ec9c5bf15a9 --- /dev/null +++ b/presets/Space Alien.yaml @@ -0,0 +1,4 @@ +temperature: 1.31 +top_p: 0.29 +repetition_penalty: 1.09 +top_k: 72 diff --git a/presets/StarChat.yaml b/presets/StarChat.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2d00898b53f33d8983e7752c81258c1bc0b6e569 --- /dev/null +++ b/presets/StarChat.yaml @@ -0,0 +1,3 @@ +temperature: 0.2 +top_p: 0.95 +top_k: 50 diff --git a/presets/Titanic.yaml b/presets/Titanic.yaml new file mode 100644 index 0000000000000000000000000000000000000000..38760c2676a628f1398a17b258935969ba41e428 --- /dev/null +++ b/presets/Titanic.yaml @@ -0,0 +1,5 @@ +temperature: 1.01 +top_p: 0.21 +repetition_penalty: 1.21 +encoder_repetition_penalty: 1.07 +top_k: 91 diff --git a/presets/Yara.yaml b/presets/Yara.yaml new file mode 100644 index 0000000000000000000000000000000000000000..87bb019ec62bb7afc395d3212b7560c25c3d36ed --- /dev/null +++ b/presets/Yara.yaml @@ -0,0 +1,4 @@ +temperature: 0.82 +top_p: 0.21 +repetition_penalty: 1.19 +top_k: 72 diff --git a/presets/simple-1.yaml b/presets/simple-1.yaml new file mode 100644 index 0000000000000000000000000000000000000000..30a106590b6d70d9c537a8b2b6c26f2a832bd8b9 --- /dev/null +++ b/presets/simple-1.yaml @@ -0,0 +1,4 @@ +temperature: 0.7 +top_p: 0.9 +repetition_penalty: 1.15 +top_k: 20 diff --git a/presets/tfs-with-top-a.yaml b/presets/tfs-with-top-a.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f16127cdcfed21050a6c6c9d4d06d3f6c179dbcf --- /dev/null +++ b/presets/tfs-with-top-a.yaml @@ -0,0 +1,4 @@ +temperature: 0.7 +tfs: 0.95 +top_a: 0.2 +repetition_penalty: 1.15 diff --git a/prompts/Alpaca-with-Input.txt b/prompts/Alpaca-with-Input.txt new file mode 100644 index 0000000000000000000000000000000000000000..56df0e285be9689ab1f8ea698ce748e6d1b02af2 --- /dev/null +++ b/prompts/Alpaca-with-Input.txt @@ -0,0 +1,10 @@ +Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request. + +### Instruction: +Instruction + +### Input: +Input + +### Response: + diff --git a/prompts/GPT-4chan.txt b/prompts/GPT-4chan.txt new file mode 100644 index 0000000000000000000000000000000000000000..1bc8c7f4613f982e3dfa367562a764cf5bd4c73b --- /dev/null +++ b/prompts/GPT-4chan.txt @@ -0,0 +1,6 @@ +----- +--- 865467536 +Hello, AI frens! +How are you doing on this fine day? +--- 865467537 + diff --git a/prompts/QA.txt b/prompts/QA.txt new file mode 100644 index 0000000000000000000000000000000000000000..32b0e2350f3c0a7f447dcd1aba11d6ae2247e5a8 --- /dev/null +++ b/prompts/QA.txt @@ -0,0 +1,4 @@ +Common sense questions and answers + +Question: +Factual answer: diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..4843741bbabac4f52090f3b0eb1cc2b6286d91f0 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,101 @@ +accelerate==0.25.* +colorama +datasets +einops +exllamav2==0.0.11; platform_system != "Darwin" and platform_machine != "x86_64" +gradio==3.50.* +hqq==0.1.1.post1 +markdown +numpy==1.24.* +optimum==1.16.* +pandas +peft==0.7.* +Pillow>=9.5.0 +pyyaml +requests +rich +safetensors==0.4.1 +scipy +sentencepiece +tensorboard +transformers==4.36.* +tqdm +wandb + +# bitsandbytes +bitsandbytes==0.41.1; platform_system != "Windows" +https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.1-py3-none-win_amd64.whl; platform_system == "Windows" + +# llama-cpp-python (CPU only, AVX2) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" + +# llama-cpp-python (CUDA, no tensor cores) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" + +# llama-cpp-python (CUDA, tensor cores) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" + +# CUDA wheels +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/ctransformers-cuBLAS-wheels/releases/download/AVX2/ctransformers-0.2.27+cu121-py3-none-any.whl +autoawq==0.1.7; platform_system == "Linux" or platform_system == "Windows" diff --git a/requirements_amd.txt b/requirements_amd.txt new file mode 100644 index 0000000000000000000000000000000000000000..f15014adf519f1bed374beb65639e665754a7fcf --- /dev/null +++ b/requirements_amd.txt @@ -0,0 +1,57 @@ +accelerate==0.25.* +colorama +datasets +einops +exllamav2==0.0.11; platform_system == "Windows" or python_version < "3.10" or python_version > "3.11" or platform_machine != "x86_64" +gradio==3.50.* +hqq==0.1.1.post1 +markdown +numpy==1.24.* +optimum==1.16.* +pandas +peft==0.7.* +Pillow>=9.5.0 +pyyaml +requests +rich +safetensors==0.4.1 +scipy +sentencepiece +tensorboard +transformers==4.36.* +tqdm +wandb + +# bitsandbytes +bitsandbytes==0.38.1; platform_system != "Windows" +https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.38.1-py3-none-win_amd64.whl; platform_system == "Windows" + +# llama-cpp-python (CPU only, AVX2) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" + +# AMD wheels +https://github.com/jllllll/llama-cpp-python-cuBLAS-wheels/releases/download/rocm/llama_cpp_python_cuda-0.2.23+rocm5.6.1-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/llama-cpp-python-cuBLAS-wheels/releases/download/rocm/llama_cpp_python_cuda-0.2.23+rocm5.6.1-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/llama-cpp-python-cuBLAS-wheels/releases/download/rocm/llama_cpp_python_cuda-0.2.23+rocm5.6.1-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/llama-cpp-python-cuBLAS-wheels/releases/download/rocm/llama_cpp_python_cuda-0.2.23+rocm5.6.1-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+rocm5.6-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+rocm5.6-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+rocm5.6-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+rocm5.6-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+rocm5.6-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+rocm5.6-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+rocm5.6-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+rocm5.6-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+rocm5.6-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+rocm5.6-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+rocm5.6-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+rocm5.6-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+rocm5.6-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+rocm5.6-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" diff --git a/requirements_amd_noavx2.txt b/requirements_amd_noavx2.txt new file mode 100644 index 0000000000000000000000000000000000000000..843cbac1e7b440c723359b2807b402d40fbaeb7f --- /dev/null +++ b/requirements_amd_noavx2.txt @@ -0,0 +1,53 @@ +accelerate==0.25.* +colorama +datasets +einops +exllamav2==0.0.11; platform_system == "Windows" or python_version < "3.10" or python_version > "3.11" or platform_machine != "x86_64" +gradio==3.50.* +hqq==0.1.1.post1 +markdown +numpy==1.24.* +optimum==1.16.* +pandas +peft==0.7.* +Pillow>=9.5.0 +pyyaml +requests +rich +safetensors==0.4.1 +scipy +sentencepiece +tensorboard +transformers==4.36.* +tqdm +wandb + +# bitsandbytes +bitsandbytes==0.38.1; platform_system != "Windows" +https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.38.1-py3-none-win_amd64.whl; platform_system == "Windows" + +# llama-cpp-python (CPU only, no AVX2) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" + +# AMD wheels +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+rocm5.6-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+rocm5.6-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+rocm5.6-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+rocm5.6-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+rocm5.6-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+rocm5.6-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+rocm5.6-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+rocm5.6-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+rocm5.6-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+rocm5.6-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+rocm5.6-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+rocm5.6-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+rocm5.6-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+rocm5.6-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" diff --git a/requirements_apple_intel.txt b/requirements_apple_intel.txt new file mode 100644 index 0000000000000000000000000000000000000000..cee6d185b7b0607965236befe2f585b13d13cde4 --- /dev/null +++ b/requirements_apple_intel.txt @@ -0,0 +1,41 @@ +accelerate==0.25.* +colorama +datasets +einops +exllamav2==0.0.11 +gradio==3.50.* +hqq==0.1.1.post1 +markdown +numpy==1.24.* +optimum==1.16.* +pandas +peft==0.7.* +Pillow>=9.5.0 +pyyaml +requests +rich +safetensors==0.4.1 +scipy +sentencepiece +tensorboard +transformers==4.36.* +tqdm +wandb + +# bitsandbytes +bitsandbytes==0.41.1; platform_system != "Windows" +https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.1-py3-none-win_amd64.whl; platform_system == "Windows" + +# Mac wheels +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp311-cp311-macosx_11_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "20.0.0" and platform_release < "21.0.0" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp310-cp310-macosx_11_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "20.0.0" and platform_release < "21.0.0" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp39-cp39-macosx_11_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "20.0.0" and platform_release < "21.0.0" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp38-cp38-macosx_11_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "20.0.0" and platform_release < "21.0.0" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp311-cp311-macosx_12_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "21.0.0" and platform_release < "22.0.0" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp310-cp310-macosx_12_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "21.0.0" and platform_release < "22.0.0" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp39-cp39-macosx_12_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "21.0.0" and platform_release < "22.0.0" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp38-cp38-macosx_12_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "21.0.0" and platform_release < "22.0.0" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp311-cp311-macosx_14_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "23.0.0" and platform_release < "24.0.0" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp310-cp310-macosx_14_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "23.0.0" and platform_release < "24.0.0" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp39-cp39-macosx_14_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "23.0.0" and platform_release < "24.0.0" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp38-cp38-macosx_14_0_x86_64.whl; platform_system == "Darwin" and platform_release >= "23.0.0" and platform_release < "24.0.0" and python_version == "3.8" diff --git a/requirements_apple_silicon.txt b/requirements_apple_silicon.txt new file mode 100644 index 0000000000000000000000000000000000000000..a3aede26a2999319d5d09828db41d762a5908fd9 --- /dev/null +++ b/requirements_apple_silicon.txt @@ -0,0 +1,45 @@ +accelerate==0.25.* +colorama +datasets +einops +exllamav2==0.0.11 +gradio==3.50.* +hqq==0.1.1.post1 +markdown +numpy==1.24.* +optimum==1.16.* +pandas +peft==0.7.* +Pillow>=9.5.0 +pyyaml +requests +rich +safetensors==0.4.1 +scipy +sentencepiece +tensorboard +transformers==4.36.* +tqdm +wandb + +# bitsandbytes +bitsandbytes==0.41.1; platform_system != "Windows" +https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.1-py3-none-win_amd64.whl; platform_system == "Windows" + +# Mac wheels +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp311-cp311-macosx_11_0_arm64.whl; platform_system == "Darwin" and platform_release >= "20.0.0" and platform_release < "21.0.0" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp310-cp310-macosx_11_0_arm64.whl; platform_system == "Darwin" and platform_release >= "20.0.0" and platform_release < "21.0.0" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp39-cp39-macosx_11_0_arm64.whl; platform_system == "Darwin" and platform_release >= "20.0.0" and platform_release < "21.0.0" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp38-cp38-macosx_11_0_arm64.whl; platform_system == "Darwin" and platform_release >= "20.0.0" and platform_release < "21.0.0" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp311-cp311-macosx_12_0_arm64.whl; platform_system == "Darwin" and platform_release >= "21.0.0" and platform_release < "22.0.0" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp310-cp310-macosx_12_0_arm64.whl; platform_system == "Darwin" and platform_release >= "21.0.0" and platform_release < "22.0.0" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp39-cp39-macosx_12_0_arm64.whl; platform_system == "Darwin" and platform_release >= "21.0.0" and platform_release < "22.0.0" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp38-cp38-macosx_12_0_arm64.whl; platform_system == "Darwin" and platform_release >= "21.0.0" and platform_release < "22.0.0" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp311-cp311-macosx_13_0_arm64.whl; platform_system == "Darwin" and platform_release >= "22.0.0" and platform_release < "23.0.0" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp310-cp310-macosx_13_0_arm64.whl; platform_system == "Darwin" and platform_release >= "22.0.0" and platform_release < "23.0.0" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp39-cp39-macosx_13_0_arm64.whl; platform_system == "Darwin" and platform_release >= "22.0.0" and platform_release < "23.0.0" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp38-cp38-macosx_13_0_arm64.whl; platform_system == "Darwin" and platform_release >= "22.0.0" and platform_release < "23.0.0" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp311-cp311-macosx_14_0_arm64.whl; platform_system == "Darwin" and platform_release >= "23.0.0" and platform_release < "24.0.0" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp310-cp310-macosx_14_0_arm64.whl; platform_system == "Darwin" and platform_release >= "23.0.0" and platform_release < "24.0.0" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp39-cp39-macosx_14_0_arm64.whl; platform_system == "Darwin" and platform_release >= "23.0.0" and platform_release < "24.0.0" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/metal/llama_cpp_python-0.2.24-cp38-cp38-macosx_14_0_arm64.whl; platform_system == "Darwin" and platform_release >= "23.0.0" and platform_release < "24.0.0" and python_version == "3.8" diff --git a/requirements_cpu_only.txt b/requirements_cpu_only.txt new file mode 100644 index 0000000000000000000000000000000000000000..af04acf7324e0c2d2c69c5aa2dd290b9bfd759c0 --- /dev/null +++ b/requirements_cpu_only.txt @@ -0,0 +1,37 @@ +accelerate==0.25.* +colorama +datasets +einops +exllamav2==0.0.11 +gradio==3.50.* +hqq==0.1.1.post1 +markdown +numpy==1.24.* +optimum==1.16.* +pandas +peft==0.7.* +Pillow>=9.5.0 +pyyaml +requests +rich +safetensors==0.4.1 +scipy +sentencepiece +tensorboard +transformers==4.36.* +tqdm +wandb + +# bitsandbytes +bitsandbytes==0.41.1; platform_system != "Windows" +https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.1-py3-none-win_amd64.whl; platform_system == "Windows" + +# llama-cpp-python (CPU only, AVX2) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" diff --git a/requirements_cpu_only_noavx2.txt b/requirements_cpu_only_noavx2.txt new file mode 100644 index 0000000000000000000000000000000000000000..1c9d15c07fbd7a79701602498e78b00854c512c7 --- /dev/null +++ b/requirements_cpu_only_noavx2.txt @@ -0,0 +1,37 @@ +accelerate==0.25.* +colorama +datasets +einops +exllamav2==0.0.11 +gradio==3.50.* +hqq==0.1.1.post1 +markdown +numpy==1.24.* +optimum==1.16.* +pandas +peft==0.7.* +Pillow>=9.5.0 +pyyaml +requests +rich +safetensors==0.4.1 +scipy +sentencepiece +tensorboard +transformers==4.36.* +tqdm +wandb + +# bitsandbytes +bitsandbytes==0.41.1; platform_system != "Windows" +https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.1-py3-none-win_amd64.whl; platform_system == "Windows" + +# llama-cpp-python (CPU only, no AVX2) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" diff --git a/requirements_noavx2.txt b/requirements_noavx2.txt new file mode 100644 index 0000000000000000000000000000000000000000..39751fc5e510b91c9a8ec9816e11eceff3c2c064 --- /dev/null +++ b/requirements_noavx2.txt @@ -0,0 +1,101 @@ +accelerate==0.25.* +colorama +datasets +einops +exllamav2==0.0.11; platform_system != "Darwin" and platform_machine != "x86_64" +gradio==3.50.* +hqq==0.1.1.post1 +markdown +numpy==1.24.* +optimum==1.16.* +pandas +peft==0.7.* +Pillow>=9.5.0 +pyyaml +requests +rich +safetensors==0.4.1 +scipy +sentencepiece +tensorboard +transformers==4.36.* +tqdm +wandb + +# bitsandbytes +bitsandbytes==0.41.1; platform_system != "Windows" +https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.1-py3-none-win_amd64.whl; platform_system == "Windows" + +# llama-cpp-python (CPU only, no AVX2) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" + +# llama-cpp-python (CUDA, no tensor cores) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121avx-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121avx-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121avx-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121avx-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121avx-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121avx-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121avx-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121avx-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" + +# llama-cpp-python (CUDA, tensor cores) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121avx-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121avx-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121avx-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121avx-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121avx-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121avx-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121avx-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121avx-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" + +# CUDA wheels +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/ctransformers-cuBLAS-wheels/releases/download/AVX/ctransformers-0.2.27+cu121-py3-none-any.whl +autoawq==0.1.7; platform_system == "Linux" or platform_system == "Windows" diff --git a/requirements_nowheels.txt b/requirements_nowheels.txt new file mode 100644 index 0000000000000000000000000000000000000000..22e10c6b07e4789a67fc942b411e894e7ab0e826 --- /dev/null +++ b/requirements_nowheels.txt @@ -0,0 +1,27 @@ +accelerate==0.25.* +colorama +datasets +einops +exllamav2==0.0.11 +gradio==3.50.* +hqq==0.1.1.post1 +markdown +numpy==1.24.* +optimum==1.16.* +pandas +peft==0.7.* +Pillow>=9.5.0 +pyyaml +requests +rich +safetensors==0.4.1 +scipy +sentencepiece +tensorboard +transformers==4.36.* +tqdm +wandb + +# bitsandbytes +bitsandbytes==0.41.1; platform_system != "Windows" +https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.1-py3-none-win_amd64.whl; platform_system == "Windows" diff --git a/server.py b/server.py new file mode 100644 index 0000000000000000000000000000000000000000..6ef9005d6cb9984da64159b6aac04e2e70a4dd00 --- /dev/null +++ b/server.py @@ -0,0 +1,262 @@ +import os +import warnings + +from modules import shared + +import accelerate # This early import makes Intel GPUs happy + +import modules.one_click_installer_check +from modules.block_requests import OpenMonkeyPatch, RequestBlocker +from modules.logging_colors import logger + +os.environ['GRADIO_ANALYTICS_ENABLED'] = 'False' +os.environ['BITSANDBYTES_NOWELCOME'] = '1' +warnings.filterwarnings('ignore', category=UserWarning, message='TypedStorage is deprecated') +warnings.filterwarnings('ignore', category=UserWarning, message='Using the update method is deprecated') +warnings.filterwarnings('ignore', category=UserWarning, message='Field "model_name" has conflict') +warnings.filterwarnings('ignore', category=UserWarning, message='The value passed into gr.Dropdown()') +warnings.filterwarnings('ignore', category=UserWarning, message='Field "model_names" has conflict') + +with RequestBlocker(): + import gradio as gr + +import matplotlib + +matplotlib.use('Agg') # This fixes LaTeX rendering on some systems + +import json +import os +import signal +import sys +import time +from functools import partial +from pathlib import Path +from threading import Lock + +import yaml + +import modules.extensions as extensions_module +from modules import ( + chat, + training, + ui, + ui_chat, + ui_default, + ui_file_saving, + ui_model_menu, + ui_notebook, + ui_parameters, + ui_session, + utils +) +from modules.extensions import apply_extensions +from modules.LoRA import add_lora_to_model +from modules.models import load_model +from modules.models_settings import ( + get_fallback_settings, + get_model_metadata, + update_model_parameters +) +from modules.shared import do_cmd_flags_warnings +from modules.utils import gradio + + +def signal_handler(sig, frame): + logger.info("Received Ctrl+C. Shutting down Text generation web UI gracefully.") + sys.exit(0) + + +signal.signal(signal.SIGINT, signal_handler) + + +def create_interface(): + + title = 'Text generation web UI' + + # Password authentication + auth = [] + if shared.args.gradio_auth: + auth.extend(x.strip() for x in shared.args.gradio_auth.strip('"').replace('\n', '').split(',') if x.strip()) + if shared.args.gradio_auth_path: + with open(shared.args.gradio_auth_path, 'r', encoding="utf8") as file: + auth.extend(x.strip() for line in file for x in line.split(',') if x.strip()) + auth = [tuple(cred.split(':')) for cred in auth] + + # Import the extensions and execute their setup() functions + if shared.args.extensions is not None and len(shared.args.extensions) > 0: + extensions_module.load_extensions() + + # Force some events to be triggered on page load + shared.persistent_interface_state.update({ + 'loader': shared.args.loader or 'Transformers', + 'mode': shared.settings['mode'], + 'character_menu': shared.args.character or shared.settings['character'], + 'instruction_template_str': shared.settings['instruction_template_str'], + 'prompt_menu-default': shared.settings['prompt-default'], + 'prompt_menu-notebook': shared.settings['prompt-notebook'], + 'filter_by_loader': shared.args.loader or 'All' + }) + + if Path("cache/pfp_character.png").exists(): + Path("cache/pfp_character.png").unlink() + + # css/js strings + css = ui.css + js = ui.js + css += apply_extensions('css') + js += apply_extensions('js') + + # Interface state elements + shared.input_elements = ui.list_interface_input_elements() + + with gr.Blocks(css=css, analytics_enabled=False, title=title, theme=ui.theme) as shared.gradio['interface']: + + # Interface state + shared.gradio['interface_state'] = gr.State({k: None for k in shared.input_elements}) + + # Audio notification + if Path("notification.mp3").exists(): + shared.gradio['audio_notification'] = gr.Audio(interactive=False, value="notification.mp3", elem_id="audio_notification", visible=False) + + # Floating menus for saving/deleting files + ui_file_saving.create_ui() + + # Temporary clipboard for saving files + shared.gradio['temporary_text'] = gr.Textbox(visible=False) + + # Text Generation tab + ui_chat.create_ui() + ui_default.create_ui() + ui_notebook.create_ui() + + ui_parameters.create_ui(shared.settings['preset']) # Parameters tab + ui_model_menu.create_ui() # Model tab + training.create_ui() # Training tab + ui_session.create_ui() # Session tab + + # Generation events + ui_chat.create_event_handlers() + ui_default.create_event_handlers() + ui_notebook.create_event_handlers() + + # Other events + ui_file_saving.create_event_handlers() + ui_parameters.create_event_handlers() + ui_model_menu.create_event_handlers() + + # Interface launch events + if shared.settings['dark_theme']: + shared.gradio['interface'].load(lambda: None, None, None, _js="() => document.getElementsByTagName('body')[0].classList.add('dark')") + + shared.gradio['interface'].load(lambda: None, None, None, _js=f"() => {{{js}}}") + shared.gradio['interface'].load(None, gradio('show_controls'), None, _js=f'(x) => {{{ui.show_controls_js}; toggle_controls(x)}}') + shared.gradio['interface'].load(partial(ui.apply_interface_values, {}, use_persistent=True), None, gradio(ui.list_interface_input_elements()), show_progress=False) + shared.gradio['interface'].load(chat.redraw_html, gradio(ui_chat.reload_arr), gradio('display')) + + extensions_module.create_extensions_tabs() # Extensions tabs + extensions_module.create_extensions_block() # Extensions block + + # Launch the interface + shared.gradio['interface'].queue(concurrency_count=64) + with OpenMonkeyPatch(): + shared.gradio['interface'].launch( + prevent_thread_lock=True, + share=shared.args.share, + server_name=None if not shared.args.listen else (shared.args.listen_host or '0.0.0.0'), + server_port=shared.args.listen_port, + inbrowser=shared.args.auto_launch, + auth=auth or None, + ssl_verify=False if (shared.args.ssl_keyfile or shared.args.ssl_certfile) else True, + ssl_keyfile=shared.args.ssl_keyfile, + ssl_certfile=shared.args.ssl_certfile + ) + + +if __name__ == "__main__": + + logger.info("Starting Text generation web UI") + do_cmd_flags_warnings() + + # Load custom settings + settings_file = None + if shared.args.settings is not None and Path(shared.args.settings).exists(): + settings_file = Path(shared.args.settings) + elif Path('settings.yaml').exists(): + settings_file = Path('settings.yaml') + elif Path('settings.json').exists(): + settings_file = Path('settings.json') + + if settings_file is not None: + logger.info(f"Loading settings from {settings_file}") + file_contents = open(settings_file, 'r', encoding='utf-8').read() + new_settings = json.loads(file_contents) if settings_file.suffix == "json" else yaml.safe_load(file_contents) + shared.settings.update(new_settings) + + # Fallback settings for models + shared.model_config['.*'] = get_fallback_settings() + shared.model_config.move_to_end('.*', last=False) # Move to the beginning + + # Activate the extensions listed on settings.yaml + extensions_module.available_extensions = utils.get_available_extensions() + for extension in shared.settings['default_extensions']: + shared.args.extensions = shared.args.extensions or [] + if extension not in shared.args.extensions: + shared.args.extensions.append(extension) + + available_models = utils.get_available_models() + + # Model defined through --model + if shared.args.model is not None: + shared.model_name = shared.args.model + + # Select the model from a command-line menu + elif shared.args.model_menu: + if len(available_models) == 0: + logger.error('No models are available! Please download at least one.') + sys.exit(0) + else: + print('The following models are available:\n') + for i, model in enumerate(available_models): + print(f'{i+1}. {model}') + + print(f'\nWhich one do you want to load? 1-{len(available_models)}\n') + i = int(input()) - 1 + print() + + shared.model_name = available_models[i] + + # If any model has been selected, load it + if shared.model_name != 'None': + p = Path(shared.model_name) + if p.exists(): + model_name = p.parts[-1] + shared.model_name = model_name + else: + model_name = shared.model_name + + model_settings = get_model_metadata(model_name) + update_model_parameters(model_settings, initial=True) # hijack the command-line arguments + + # Load the model + shared.model, shared.tokenizer = load_model(model_name) + if shared.args.lora: + add_lora_to_model(shared.args.lora) + + shared.generation_lock = Lock() + + if shared.args.nowebui: + # Start the API in standalone mode + shared.args.extensions = [x for x in shared.args.extensions if x != 'gallery'] + if shared.args.extensions is not None and len(shared.args.extensions) > 0: + extensions_module.load_extensions() + else: + # Launch the web UI + create_interface() + while True: + time.sleep(0.5) + if shared.need_restart: + shared.need_restart = False + time.sleep(0.5) + shared.gradio['interface'].close() + time.sleep(0.5) + create_interface() diff --git a/settings-template.yaml b/settings-template.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8f7e9e9eba8641f4a6d6a3a3e56c51a43548221a --- /dev/null +++ b/settings-template.yaml @@ -0,0 +1,72 @@ +dark_theme: true +show_controls: true +start_with: '' +mode: chat +chat_style: cai-chat +prompt-default: QA +prompt-notebook: QA +preset: simple-1 +max_new_tokens: 512 +max_new_tokens_min: 1 +max_new_tokens_max: 4096 +negative_prompt: '' +seed: -1 +truncation_length: 2048 +truncation_length_min: 0 +truncation_length_max: 200000 +max_tokens_second: 0 +custom_stopping_strings: '' +custom_token_bans: '' +auto_max_new_tokens: false +ban_eos_token: false +add_bos_token: true +skip_special_tokens: true +stream: true +character: Assistant +name1: You +custom_system_message: '' +instruction_template_str: |- + {%- set ns = namespace(found=false) -%} + {%- for message in messages -%} + {%- if message['role'] == 'system' -%} + {%- set ns.found = true -%} + {%- endif -%} + {%- endfor -%} + {%- if not ns.found -%} + {{- '' + 'Below is an instruction that describes a task. Write a response that appropriately completes the request.' + '\n\n' -}} + {%- endif %} + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- '' + message['content'] + '\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{-'### Instruction:\n' + message['content'] + '\n\n'-}} + {%- else -%} + {{-'### Response:\n' + message['content'] + '\n\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} + {%- if add_generation_prompt -%} + {{-'### Response:\n'-}} + {%- endif -%} +chat_template_str: |- + {%- for message in messages %} + {%- if message['role'] == 'system' -%} + {{- message['content'] + '\n\n' -}} + {%- else -%} + {%- if message['role'] == 'user' -%} + {{- name1 + ': ' + message['content'] + '\n'-}} + {%- else -%} + {{- name2 + ': ' + message['content'] + '\n' -}} + {%- endif -%} + {%- endif -%} + {%- endfor -%} +chat-instruct_command: |- + Continue the chat dialogue below. Write a single reply for the character "<|character|>". + + <|prompt|> +autoload_model: false +gallery-items_per_page: 50 +gallery-open: false +default_extensions: +- gallery diff --git a/start_linux.sh b/start_linux.sh new file mode 100644 index 0000000000000000000000000000000000000000..948e40b8ad533375d10a426bddd1629bd77c4408 --- /dev/null +++ b/start_linux.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +cd "$(dirname "${BASH_SOURCE[0]}")" + +if [[ "$(pwd)" =~ " " ]]; then echo This script relies on Miniconda which can not be silently installed under a path with spaces. && exit; fi + +# deactivate existing conda envs as needed to avoid conflicts +{ conda deactivate && conda deactivate && conda deactivate; } 2> /dev/null + +OS_ARCH=$(uname -m) +case "${OS_ARCH}" in + x86_64*) OS_ARCH="x86_64";; + arm64*) OS_ARCH="aarch64";; + aarch64*) OS_ARCH="aarch64";; + *) echo "Unknown system architecture: $OS_ARCH! This script runs only on x86_64 or arm64" && exit +esac + +# config +INSTALL_DIR="$(pwd)/installer_files" +CONDA_ROOT_PREFIX="$(pwd)/installer_files/conda" +INSTALL_ENV_DIR="$(pwd)/installer_files/env" +MINICONDA_DOWNLOAD_URL="https://repo.anaconda.com/miniconda/Miniconda3-py310_23.3.1-0-Linux-${OS_ARCH}.sh" +conda_exists="F" + +# figure out whether git and conda needs to be installed +if "$CONDA_ROOT_PREFIX/bin/conda" --version &>/dev/null; then conda_exists="T"; fi + +# (if necessary) install git and conda into a contained environment +# download miniconda +if [ "$conda_exists" == "F" ]; then + echo "Downloading Miniconda from $MINICONDA_DOWNLOAD_URL to $INSTALL_DIR/miniconda_installer.sh" + + mkdir -p "$INSTALL_DIR" + curl -Lk "$MINICONDA_DOWNLOAD_URL" > "$INSTALL_DIR/miniconda_installer.sh" + + chmod u+x "$INSTALL_DIR/miniconda_installer.sh" + bash "$INSTALL_DIR/miniconda_installer.sh" -b -p $CONDA_ROOT_PREFIX + + # test the conda binary + echo "Miniconda version:" + "$CONDA_ROOT_PREFIX/bin/conda" --version +fi + +# create the installer env +if [ ! -e "$INSTALL_ENV_DIR" ]; then + "$CONDA_ROOT_PREFIX/bin/conda" create -y -k --prefix "$INSTALL_ENV_DIR" python=3.11 +fi + +# check if conda environment was actually created +if [ ! -e "$INSTALL_ENV_DIR/bin/python" ]; then + echo "Conda environment is empty." + exit +fi + +# environment isolation +export PYTHONNOUSERSITE=1 +unset PYTHONPATH +unset PYTHONHOME +export CUDA_PATH="$INSTALL_ENV_DIR" +export CUDA_HOME="$CUDA_PATH" + +# activate installer env +source "$CONDA_ROOT_PREFIX/etc/profile.d/conda.sh" # otherwise conda complains about 'shell not initialized' (needed when running in a script) +conda activate "$INSTALL_ENV_DIR" + +# setup installer env +python one_click.py $@ diff --git a/start_macos.sh b/start_macos.sh new file mode 100644 index 0000000000000000000000000000000000000000..5877e1676914f5ba983f161b5dc7dcc14ee53be5 --- /dev/null +++ b/start_macos.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +cd "$(dirname "${BASH_SOURCE[0]}")" + +if [[ "$(pwd)" =~ " " ]]; then echo This script relies on Miniconda which can not be silently installed under a path with spaces. && exit; fi + +# deactivate existing conda envs as needed to avoid conflicts +{ conda deactivate && conda deactivate && conda deactivate; } 2> /dev/null + +# M Series or Intel +OS_ARCH=$(uname -m) +case "${OS_ARCH}" in + x86_64*) OS_ARCH="x86_64";; + arm64*) OS_ARCH="arm64";; + *) echo "Unknown system architecture: $OS_ARCH! This script runs only on x86_64 or arm64" && exit +esac + +# config +INSTALL_DIR="$(pwd)/installer_files" +CONDA_ROOT_PREFIX="$(pwd)/installer_files/conda" +INSTALL_ENV_DIR="$(pwd)/installer_files/env" +MINICONDA_DOWNLOAD_URL="https://repo.anaconda.com/miniconda/Miniconda3-py310_23.3.1-0-MacOSX-${OS_ARCH}.sh" +conda_exists="F" + +# figure out whether git and conda needs to be installed +if "$CONDA_ROOT_PREFIX/bin/conda" --version &>/dev/null; then conda_exists="T"; fi + +# (if necessary) install git and conda into a contained environment +# download miniconda +if [ "$conda_exists" == "F" ]; then + echo "Downloading Miniconda from $MINICONDA_DOWNLOAD_URL to $INSTALL_DIR/miniconda_installer.sh" + + mkdir -p "$INSTALL_DIR" + curl -Lk "$MINICONDA_DOWNLOAD_URL" > "$INSTALL_DIR/miniconda_installer.sh" + + chmod u+x "$INSTALL_DIR/miniconda_installer.sh" + bash "$INSTALL_DIR/miniconda_installer.sh" -b -p $CONDA_ROOT_PREFIX + + # test the conda binary + echo "Miniconda version:" + "$CONDA_ROOT_PREFIX/bin/conda" --version +fi + +# create the installer env +if [ ! -e "$INSTALL_ENV_DIR" ]; then + "$CONDA_ROOT_PREFIX/bin/conda" create -y -k --prefix "$INSTALL_ENV_DIR" python=3.11 +fi + +# check if conda environment was actually created +if [ ! -e "$INSTALL_ENV_DIR/bin/python" ]; then + echo "Conda environment is empty." + exit +fi + +# environment isolation +export PYTHONNOUSERSITE=1 +unset PYTHONPATH +unset PYTHONHOME +export CUDA_PATH="$INSTALL_ENV_DIR" +export CUDA_HOME="$CUDA_PATH" + +# activate installer env +source "$CONDA_ROOT_PREFIX/etc/profile.d/conda.sh" # otherwise conda complains about 'shell not initialized' (needed when running in a script) +conda activate "$INSTALL_ENV_DIR" + +# setup installer env +python one_click.py $@ diff --git a/start_windows.bat b/start_windows.bat new file mode 100644 index 0000000000000000000000000000000000000000..cdc303e46e49f12c046b942c8da19bce5aca7081 --- /dev/null +++ b/start_windows.bat @@ -0,0 +1,84 @@ +@echo off + +cd /D "%~dp0" + +set PATH=%PATH%;%SystemRoot%\system32 + +echo "%CD%"| findstr /C:" " >nul && echo This script relies on Miniconda which can not be silently installed under a path with spaces. && goto end + +@rem Check for special characters in installation path +set "SPCHARMESSAGE="WARNING: Special characters were detected in the installation path!" " This can cause the installation to fail!"" +echo "%CD%"| findstr /R /C:"[!#\$%&()\*+,;<=>?@\[\]\^`{|}~]" >nul && ( + call :PrintBigMessage %SPCHARMESSAGE% +) +set SPCHARMESSAGE= + +@rem fix failed install when installing to a separate drive +set TMP=%cd%\installer_files +set TEMP=%cd%\installer_files + +@rem deactivate existing conda envs as needed to avoid conflicts +(call conda deactivate && call conda deactivate && call conda deactivate) 2>nul + +@rem config +set INSTALL_DIR=%cd%\installer_files +set CONDA_ROOT_PREFIX=%cd%\installer_files\conda +set INSTALL_ENV_DIR=%cd%\installer_files\env +set MINICONDA_DOWNLOAD_URL=https://repo.anaconda.com/miniconda/Miniconda3-py310_23.3.1-0-Windows-x86_64.exe +set conda_exists=F + +@rem figure out whether git and conda needs to be installed +call "%CONDA_ROOT_PREFIX%\_conda.exe" --version >nul 2>&1 +if "%ERRORLEVEL%" EQU "0" set conda_exists=T + +@rem (if necessary) install git and conda into a contained environment +@rem download conda +if "%conda_exists%" == "F" ( + echo Downloading Miniconda from %MINICONDA_DOWNLOAD_URL% to %INSTALL_DIR%\miniconda_installer.exe + + mkdir "%INSTALL_DIR%" + call curl -Lk "%MINICONDA_DOWNLOAD_URL%" > "%INSTALL_DIR%\miniconda_installer.exe" || ( echo. && echo Miniconda failed to download. && goto end ) + + echo Installing Miniconda to %CONDA_ROOT_PREFIX% + start /wait "" "%INSTALL_DIR%\miniconda_installer.exe" /InstallationType=JustMe /NoShortcuts=1 /AddToPath=0 /RegisterPython=0 /NoRegistry=1 /S /D=%CONDA_ROOT_PREFIX% + + @rem test the conda binary + echo Miniconda version: + call "%CONDA_ROOT_PREFIX%\_conda.exe" --version || ( echo. && echo Miniconda not found. && goto end ) +) + +@rem create the installer env +if not exist "%INSTALL_ENV_DIR%" ( + echo Packages to install: %PACKAGES_TO_INSTALL% + call "%CONDA_ROOT_PREFIX%\_conda.exe" create --no-shortcuts -y -k --prefix "%INSTALL_ENV_DIR%" python=3.11 || ( echo. && echo Conda environment creation failed. && goto end ) +) + +@rem check if conda environment was actually created +if not exist "%INSTALL_ENV_DIR%\python.exe" ( echo. && echo Conda environment is empty. && goto end ) + +@rem environment isolation +set PYTHONNOUSERSITE=1 +set PYTHONPATH= +set PYTHONHOME= +set "CUDA_PATH=%INSTALL_ENV_DIR%" +set "CUDA_HOME=%CUDA_PATH%" + +@rem activate installer env +call "%CONDA_ROOT_PREFIX%\condabin\conda.bat" activate "%INSTALL_ENV_DIR%" || ( echo. && echo Miniconda hook not found. && goto end ) + +@rem setup installer env +call python one_click.py %* + +@rem below are functions for the script next line skips these during normal execution +goto end + +:PrintBigMessage +echo. && echo. +echo ******************************************************************* +for %%M in (%*) do echo * %%~M +echo ******************************************************************* +echo. && echo. +exit /b + +:end +pause diff --git a/start_wsl.bat b/start_wsl.bat new file mode 100644 index 0000000000000000000000000000000000000000..d7bacead6b0ea94656ecacd8bccede01d7d53cc8 --- /dev/null +++ b/start_wsl.bat @@ -0,0 +1,11 @@ +@echo off + +cd /D "%~dp0" + +set PATH=%PATH%;%SystemRoot%\system32 + +@rem sed -i 's/\x0D$//' ./wsl.sh converts newlines to unix format in the wsl script +call wsl -e bash -lic "sed -i 's/\x0D$//' ./wsl.sh; source ./wsl.sh %*" + +:end +pause diff --git a/temp_requirements.txt b/temp_requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..c0703f71bd3d6cb2bf5c95b97eff5366fd1af7ff --- /dev/null +++ b/temp_requirements.txt @@ -0,0 +1,101 @@ +accelerate==0.25.* +colorama +datasets +einops +exllamav2==0.0.11; platform_system != "Darwin" and platform_machine != "x86_64" +gradio==3.50.* +hqq==0.1.1.post1 +markdown +numpy==1.24.* +optimum==1.16.* +pandas +peft==0.7.* +Pillow>=9.5.0 +pyyaml +requests +rich +safetensors==0.4.1 +scipy +sentencepiece +tensorboard +transformers==4.36.* +tqdm +wandb + +# bitsandbytes +bitsandbytes==0.41.1; platform_system != "Windows" +https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.1-py3-none-win_amd64.whl; platform_system == "Windows" + +# llama-cpp-python (CPU only, AVX2) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/cpu/llama_cpp_python-0.2.24+cpuavx2-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" + +# llama-cpp-python (CUDA, no tensor cores) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda-0.2.24+cu121-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" + +# llama-cpp-python (CUDA, tensor cores) +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp311-cp311-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp310-cp310-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp39-cp39-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/oobabooga/llama-cpp-python-cuBLAS-wheels/releases/download/textgen-webui/llama_cpp_python_cuda_tensorcores-0.2.24+cu121-cp38-cp38-manylinux_2_31_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" + +# CUDA wheels +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/AutoGPTQ/releases/download/v0.6.0/auto_gptq-0.6.0+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/exllama/releases/download/0.0.18/exllama-0.0.18+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/turboderp/exllamav2/releases/download/v0.0.11/exllamav2-0.0.11+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu121torch2.1cxx11abiFALSE-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/Dao-AILab/flash-attention/releases/download/v2.3.4/flash_attn-2.3.4+cu122torch2.1cxx11abiFALSE-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp311-cp311-win_amd64.whl; platform_system == "Windows" and python_version == "3.11" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp310-cp310-win_amd64.whl; platform_system == "Windows" and python_version == "3.10" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp39-cp39-win_amd64.whl; platform_system == "Windows" and python_version == "3.9" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp38-cp38-win_amd64.whl; platform_system == "Windows" and python_version == "3.8" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp311-cp311-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.11" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp310-cp310-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.10" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp39-cp39-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.9" +https://github.com/jllllll/GPTQ-for-LLaMa-CUDA/releases/download/0.1.1/gptq_for_llama-0.1.1+cu121-cp38-cp38-linux_x86_64.whl; platform_system == "Linux" and platform_machine == "x86_64" and python_version == "3.8" +https://github.com/jllllll/ctransformers-cuBLAS-wheels/releases/download/AVX2/ctransformers-0.2.27+cu121-py3-none-any.whl +autoawq==0.1.7; platform_system == "Linux" or platform_system == "Windows" \ No newline at end of file diff --git a/training/datasets/put-trainer-datasets-here.txt b/training/datasets/put-trainer-datasets-here.txt new file mode 100644 index 0000000000000000000000000000000000000000..e54a670e583b8a622f92f8718003c6fd27708620 --- /dev/null +++ b/training/datasets/put-trainer-datasets-here.txt @@ -0,0 +1 @@ +to load multiple raw text files create a subdirectory and put them all there diff --git a/training/formats/alpaca-chatbot-format.json b/training/formats/alpaca-chatbot-format.json new file mode 100644 index 0000000000000000000000000000000000000000..4b38103f4c23de004666e0316855db62e57d2ad0 --- /dev/null +++ b/training/formats/alpaca-chatbot-format.json @@ -0,0 +1,4 @@ +{ + "instruction,output": "User: %instruction%\nAssistant: %output%", + "instruction,input,output": "User: %instruction%: %input%\nAssistant: %output%" +} diff --git a/training/formats/alpaca-format.json b/training/formats/alpaca-format.json new file mode 100644 index 0000000000000000000000000000000000000000..dd6df95640360297257b618715370093b715b21f --- /dev/null +++ b/training/formats/alpaca-format.json @@ -0,0 +1,4 @@ +{ + "instruction,output": "Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\n%instruction%\n\n### Response:\n%output%", + "instruction,input,output": "Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\n%instruction%\n\n### Input:\n%input%\n\n### Response:\n%output%" +} diff --git a/training/formats/vicuna-format.json b/training/formats/vicuna-format.json new file mode 100644 index 0000000000000000000000000000000000000000..c1aa4f15ebcb99a57f696cbe1ec586ed7d5d4a90 --- /dev/null +++ b/training/formats/vicuna-format.json @@ -0,0 +1,3 @@ +{ + "instruction,output": "A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions.\n\nUSER: %instruction%\n\nASSISTANT: %output%" +} diff --git a/update_linux.sh b/update_linux.sh new file mode 100644 index 0000000000000000000000000000000000000000..371db554a33f53f3bd3c5bf15fedeaf2f6812639 --- /dev/null +++ b/update_linux.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +cd "$(dirname "${BASH_SOURCE[0]}")" + +if [[ "$(pwd)" =~ " " ]]; then echo This script relies on Miniconda which can not be silently installed under a path with spaces. && exit; fi + +# deactivate existing conda envs as needed to avoid conflicts +{ conda deactivate && conda deactivate && conda deactivate; } 2> /dev/null + +# config +CONDA_ROOT_PREFIX="$(pwd)/installer_files/conda" +INSTALL_ENV_DIR="$(pwd)/installer_files/env" + +# environment isolation +export PYTHONNOUSERSITE=1 +unset PYTHONPATH +unset PYTHONHOME +export CUDA_PATH="$INSTALL_ENV_DIR" +export CUDA_HOME="$CUDA_PATH" + +# activate installer env +source "$CONDA_ROOT_PREFIX/etc/profile.d/conda.sh" # otherwise conda complains about 'shell not initialized' (needed when running in a script) +conda activate "$INSTALL_ENV_DIR" + +# update installer env +python one_click.py --update && echo -e "\nDone!" diff --git a/update_macos.sh b/update_macos.sh new file mode 100644 index 0000000000000000000000000000000000000000..371db554a33f53f3bd3c5bf15fedeaf2f6812639 --- /dev/null +++ b/update_macos.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +cd "$(dirname "${BASH_SOURCE[0]}")" + +if [[ "$(pwd)" =~ " " ]]; then echo This script relies on Miniconda which can not be silently installed under a path with spaces. && exit; fi + +# deactivate existing conda envs as needed to avoid conflicts +{ conda deactivate && conda deactivate && conda deactivate; } 2> /dev/null + +# config +CONDA_ROOT_PREFIX="$(pwd)/installer_files/conda" +INSTALL_ENV_DIR="$(pwd)/installer_files/env" + +# environment isolation +export PYTHONNOUSERSITE=1 +unset PYTHONPATH +unset PYTHONHOME +export CUDA_PATH="$INSTALL_ENV_DIR" +export CUDA_HOME="$CUDA_PATH" + +# activate installer env +source "$CONDA_ROOT_PREFIX/etc/profile.d/conda.sh" # otherwise conda complains about 'shell not initialized' (needed when running in a script) +conda activate "$INSTALL_ENV_DIR" + +# update installer env +python one_click.py --update && echo -e "\nDone!" diff --git a/update_windows.bat b/update_windows.bat new file mode 100644 index 0000000000000000000000000000000000000000..0d8f815272c5eec8714ef1adc1a23d547d6bf62d --- /dev/null +++ b/update_windows.bat @@ -0,0 +1,37 @@ +@echo off + +cd /D "%~dp0" + +set PATH=%PATH%;%SystemRoot%\system32 + +echo "%CD%"| findstr /C:" " >nul && echo This script relies on Miniconda which can not be silently installed under a path with spaces. && goto end + +@rem fix failed install when installing to a separate drive +set TMP=%cd%\installer_files +set TEMP=%cd%\installer_files + +@rem deactivate existing conda envs as needed to avoid conflicts +(call conda deactivate && call conda deactivate && call conda deactivate) 2>nul + +@rem config +set CONDA_ROOT_PREFIX=%cd%\installer_files\conda +set INSTALL_ENV_DIR=%cd%\installer_files\env + +@rem environment isolation +set PYTHONNOUSERSITE=1 +set PYTHONPATH= +set PYTHONHOME= +set "CUDA_PATH=%INSTALL_ENV_DIR%" +set "CUDA_HOME=%CUDA_PATH%" + +@rem activate installer env +call "%CONDA_ROOT_PREFIX%\condabin\conda.bat" activate "%INSTALL_ENV_DIR%" || ( echo. && echo Miniconda hook not found. && goto end ) + +@rem update installer env +call python one_click.py --update && ( + echo. + echo Done! +) + +:end +pause diff --git a/update_wsl.bat b/update_wsl.bat new file mode 100644 index 0000000000000000000000000000000000000000..36d019a86641bb69392e04822f9697c80b28dcf9 --- /dev/null +++ b/update_wsl.bat @@ -0,0 +1,11 @@ +@echo off + +cd /D "%~dp0" + +set PATH=%PATH%;%SystemRoot%\system32 + +@rem sed -i 's/\x0D$//' ./wsl.sh converts newlines to unix format in the wsl script calling wsl.sh with 'update' will run updater +call wsl -e bash -lic "sed -i 's/\x0D$//' ./wsl.sh; source ./wsl.sh update" + +:end +pause diff --git a/wsl.sh b/wsl.sh new file mode 100644 index 0000000000000000000000000000000000000000..5c7d6212e0ab8f6777aee29ddd022a3b442b015c --- /dev/null +++ b/wsl.sh @@ -0,0 +1,112 @@ +#!/bin/bash + +# detect if build-essential is missing or broken +if ! dpkg-query -W -f'${Status}' "build-essential" 2>/dev/null | grep -q "ok installed"; then +echo "build-essential not found or broken! + +A C++ compiler is required to build needed Python packages! +To install one, run cmd_wsl.bat and enter these commands: + +sudo apt-get update +sudo apt-get install build-essential +" +read -n1 -p "Continue the installer anyway? [y,n]" EXIT_PROMPT +# only continue if user inputs 'y' else exit +if ! [[ $EXIT_PROMPT == "Y" || $EXIT_PROMPT == "y" ]]; then exit; fi +fi + +# deactivate existing conda envs as needed to avoid conflicts +{ conda deactivate && conda deactivate && conda deactivate; } 2> /dev/null + +# config unlike other scripts, can't use current directory due to file IO bug in WSL, needs to be in virtual drive +INSTALL_DIR_PREFIX="$HOME/text-gen-install" +if [[ ! $(realpath "$(pwd)/..") = /mnt/* ]]; then + INSTALL_DIR_PREFIX="$(realpath "$(pwd)/..")" && INSTALL_INPLACE=1 +fi +INSTALL_DIR="$INSTALL_DIR_PREFIX/text-generation-webui" +CONDA_ROOT_PREFIX="$INSTALL_DIR/installer_files/conda" +INSTALL_ENV_DIR="$INSTALL_DIR/installer_files/env" +MINICONDA_DOWNLOAD_URL="https://repo.anaconda.com/miniconda/Miniconda3-py310_23.3.1-0-Linux-x86_64.sh" +conda_exists="F" + +# environment isolation +export PYTHONNOUSERSITE=1 +unset PYTHONPATH +unset PYTHONHOME +export CUDA_PATH="$INSTALL_ENV_DIR" +export CUDA_HOME="$CUDA_PATH" + +# /usr/lib/wsl/lib needs to be added to LD_LIBRARY_PATH to fix years-old bug in WSL where GPU drivers aren't linked properly +export LD_LIBRARY_PATH="$CUDA_HOME/lib:/usr/lib/wsl/lib:$LD_LIBRARY_PATH" + +# open bash cli if called with 'wsl.sh cmd' with workarounds for existing conda +if [ "$1" == "cmd" ]; then + exec bash --init-file <(echo ". ~/.bashrc; conda deactivate 2> /dev/null; cd $INSTALL_DIR || cd $HOME; source $CONDA_ROOT_PREFIX/etc/profile.d/conda.sh; conda activate $INSTALL_ENV_DIR") + exit +fi + +if [[ "$INSTALL_DIR" =~ " " ]]; then echo This script relies on Miniconda which can not be silently installed under a path with spaces. && exit; fi + +# create install dir if missing +if [ ! -d "$INSTALL_DIR" ]; then mkdir -p "$INSTALL_DIR" || exit; fi + +# figure out whether git and conda needs to be installed +if "$CONDA_ROOT_PREFIX/bin/conda" --version &>/dev/null; then conda_exists="T"; fi + +# (if necessary) install git and conda into a contained environment +# download miniconda +if [ "$conda_exists" == "F" ]; then + echo "Downloading Miniconda from $MINICONDA_DOWNLOAD_URL to $INSTALL_DIR/miniconda_installer.sh" + + curl -Lk "$MINICONDA_DOWNLOAD_URL" > "$INSTALL_DIR/miniconda_installer.sh" + + chmod u+x "$INSTALL_DIR/miniconda_installer.sh" + bash "$INSTALL_DIR/miniconda_installer.sh" -b -p $CONDA_ROOT_PREFIX + + # test the conda binary + echo "Miniconda version:" + "$CONDA_ROOT_PREFIX/bin/conda" --version +fi + +# create the installer env +if [ ! -e "$INSTALL_ENV_DIR" ]; then + "$CONDA_ROOT_PREFIX/bin/conda" create -y -k --prefix "$INSTALL_ENV_DIR" python=3.11 git +fi + +# check if conda environment was actually created +if [ ! -e "$INSTALL_ENV_DIR/bin/python" ]; then + echo "Conda environment is empty." + exit +fi + +# activate installer env +source "$CONDA_ROOT_PREFIX/etc/profile.d/conda.sh" # otherwise conda complains about 'shell not initialized' (needed when running in a script) +conda activate "$INSTALL_ENV_DIR" + +pushd $INSTALL_DIR 1> /dev/null || exit + +if [ ! -f "./server.py" ]; then + git init -b main + git remote add origin https://github.com/oobabooga/text-generation-webui + git fetch + git remote set-head origin -a + git reset origin/HEAD --hard + git branch --set-upstream-to=origin/HEAD + git restore -- . :!./CMD_FLAGS.txt +fi + +# copy CMD_FLAGS.txt to install dir to allow edits within Windows +if [[ $INSTALL_INPLACE != 1 ]]; then + # workaround for old install migration + if [ ! -f "./wsl.sh" ]; then + git pull || exit + [ -f "../webui.py" ] && mv "../webui.py" "../webui-old.py" + fi + if [ -f "$(dirs +1)/CMD_FLAGS.txt" ] && [ -f "./CMD_FLAGS.txt" ]; then cp -u "$(dirs +1)/CMD_FLAGS.txt" "$INSTALL_DIR"; fi +fi + +# setup installer env update env if called with 'wsl.sh update' +case "$1" in +("update") python one_click.py --update;; +(*) python one_click.py $@;; +esac