From e9144e5703d392cd8c84cd34290deb8dc537c3ae Mon Sep 17 00:00:00 2001 From: Jovan Gerodetti Date: Tue, 30 Jun 2015 19:52:16 +0200 Subject: [PATCH 01/49] voice recorder proposal for #190 --- app/js/controllers.js | 2 + app/js/directives.js | 66 +++++++++++++++++++++++++ app/js/init.js | 3 +- app/js/locales/en-us.json | 1 + app/less/mobile.less | 99 +++++++++++++++++++++++++++++++++++-- app/manifest.webapp | 3 ++ app/partials/mobile/im.html | 17 ++++++- 7 files changed, 184 insertions(+), 7 deletions(-) diff --git a/app/js/controllers.js b/app/js/controllers.js index 65fd936d..c1cea6bd 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -473,6 +473,8 @@ angular.module('myApp.controllers', ['myApp.i18n']) skipped: false }; + $scope.voiceRecorder = { time : '', recording : null }; + $scope.openSettings = function () { $modal.open({ templateUrl: templateUrl('settings_modal'), diff --git a/app/js/directives.js b/app/js/directives.js index 114f7d95..70ffd24c 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1449,9 +1449,12 @@ angular.module('myApp.directives', ['myApp.filters']) var messageFieldWrap = $('.im_send_field_wrap', element)[0]; var dragStarted, dragTimeout; var submitBtn = $('.im_submit', element)[0]; + var voiceRecord = $('.im_record', element); var stickerImageCompiled = $compile(''); var cachedStickerImages = {}; + var audioRecorder = null; + var audioStream = null; var emojiTooltip = new EmojiTooltip(emojiButton, { getStickers: function (callback) { @@ -1552,6 +1555,69 @@ angular.module('myApp.directives', ['myApp.filters']) }); }); + if (Config.Navigator.ffos) { + + navigator.getUserMedia = ( navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); + + voiceRecord.on('touchstart', function(e) { + navigator.getUserMedia({audio : true}, function(stream){ + var start = Date.now(); + var touch = null; + + audioStream = stream; + audioRecorder = new MediaRecorder(stream); + + var interval = setInterval(function(){ + var time = (new Date()); + + time.setTime(Date.now() - start); + + $scope.$apply(function(){ + $scope.$parent.$parent.voiceRecorder.time = (time.getMinutes() < 10 ? '0' : '') + time.getMinutes() + ':' + (time.getSeconds() < 10 ? '0' : '') + time.getSeconds(); + }); + }, 1000); + + $scope.$apply(function(){ + $scope.$parent.$parent.voiceRecorder.time = '00:00'; + $scope.$parent.$parent.voiceRecorder.recording = interval; + }); + + audioRecorder.start(); + + console.log('recording now!'); + + }, function(e){ + console.error(e); + }); + }); + + voiceRecord.on('click', function(){ + if (audioRecorder) { + audioRecorder.ondataavailable = function(e){ + var blob = e.data; + + console.log(blob); + $scope.draftMessage.files = [blob]; + $scope.draftMessage.isMedia = true; + } + } + }); + + voiceRecord.on('touchend', function(){ + if (audioRecorder) { + audioRecorder.stop(); + audioStream.stop(); + + clearInterval($scope.$parent.$parent.voiceRecorder.recording); + + $scope.$apply(function(){ + $scope.$parent.$parent.voiceRecorder.recording = null; + }); + } + }); + + } + var sendOnEnter = true; function updateSendSettings () { Storage.get('send_ctrlenter').then(function (sendOnCtrl) { diff --git a/app/js/init.js b/app/js/init.js index 4cc3b4be..8cd74586 100644 --- a/app/js/init.js +++ b/app/js/init.js @@ -65,7 +65,8 @@ (function initApplication () { var classes = [ Config.Navigator.osX ? 'osx' : 'non_osx', - Config.Navigator.retina ? 'is_2x' : 'is_1x' + Config.Navigator.retina ? 'is_2x' : 'is_1x', + Config.Navigator.ffos ? 'ffos' : 'non_ffos' ]; if (Config.Modes.ios_standalone) { classes.push('ios_standalone'); diff --git a/app/js/locales/en-us.json b/app/js/locales/en-us.json index eca49eb8..208a72d5 100644 --- a/app/js/locales/en-us.json +++ b/app/js/locales/en-us.json @@ -470,6 +470,7 @@ "im_attach_file_title": "Send file", "im_emoji_btn_title": "Insert emoticon", "im_submit_message": "Send", + "im_voice_recorder_label": "Swipe left to abort", "login_sign_in": "Sign in", "login_enter_number_description": "Please choose your country and enter your full phone number.", diff --git a/app/less/mobile.less b/app/less/mobile.less index b554febb..9b1b6f10 100644 --- a/app/less/mobile.less +++ b/app/less/mobile.less @@ -1368,7 +1368,7 @@ a.im_message_fwd_author { } } -.icon-paperclip { +.icon-paperclip, .icon-mic { display: inline-block; width: 19px; height: 23px; @@ -1379,12 +1379,16 @@ a.im_message_fwd_author { background-position: -12px -68px; } -.im_attach { +.icon-mic { + background-position: -12px -285px; +} + +.im_attach, .im_record { cursor: pointer; display: none; overflow: hidden; position: absolute; - right: 0; + right: 34px; top: 0; margin: 0; width: 50px; @@ -1399,6 +1403,32 @@ a.im_message_fwd_author { } } +.non_ffos { + .im_attach { + right: 0; + } +} + +.im_record { + right: 0; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; +} + +.ffos { + .im_send_form_empty { + .im_send_field_wrap { + margin-right: 85px; + } + + .im_record { + display: block; + } + } +} + .im_send_form_empty { .im_submit { display: none; @@ -1409,6 +1439,28 @@ a.im_message_fwd_author { } } +.im_voice_recording { + background-color: rgb(23, 23, 23); + color: white; + + .im_voice_recorder_wrap { + display: block; + } + + .im_send_field_wrap { + display: none; + } + + .im_attach { + display: none; + } + + .composer_emoji_insert_btn { + display: none; + } + +} + .icon-emoji { display: inline-block; width: 22px; @@ -1449,6 +1501,45 @@ a.im_message_fwd_author { } } +.im_voice_recorder_wrap { + margin-left: 0px; + padding-left: 10px; + height: 38px; + display: none; + line-height: 38px; + color: white; +} + +.im_recorder_indicator, .im_recorder_time { + float: left; + vertical-align: middle; +} + +.im_recorder_indicator i { + background-color: #F00; + height: 10px; + width: 10px; + border-radius: 50%; + margin-right: 5px; + vertical-align: middle; + display: inline-block; +} + +.im_recorder_label { + overflow: auto; + font-size: 17px; + text-align: center; + margin-right: 50px; + + i, span { + vertical-align: middle; + } + + i { + margin-right: 5px; + } +} + .composer_rich_textarea { min-height: 18px; max-height: 136px; @@ -1810,4 +1901,4 @@ a.media_modal_date:hover { } .im_send_keyboard_wrap { padding: 0 5px; -} \ No newline at end of file +} diff --git a/app/manifest.webapp b/app/manifest.webapp index 697a9f82..333ce733 100644 --- a/app/manifest.webapp +++ b/app/manifest.webapp @@ -44,6 +44,9 @@ "device-storage:videos": { "description": "Required for videos download", "access": "createonly" + }, + "audio-capture" : { + "description" : "Required to record voice messages" } }, "activities": { diff --git a/app/partials/mobile/im.html b/app/partials/mobile/im.html index e15bf62b..8d01c015 100644 --- a/app/partials/mobile/im.html +++ b/app/partials/mobile/im.html @@ -130,7 +130,7 @@ -
+
@@ -156,11 +156,24 @@
+
+
+
{{voiceRecorder.time}}
+
+ + +
+
+
+
+ +
+ @@ -187,4 +200,4 @@
-
\ No newline at end of file + From 57fa8cf6fbd583f0e8236ae3c83157504cb289fa Mon Sep 17 00:00:00 2001 From: Jovan Gerodetti Date: Fri, 10 Jul 2015 13:45:06 +0200 Subject: [PATCH 02/49] slight UX improvement --- app/js/controllers.js | 2 +- app/js/directives.js | 7 ++++++- app/less/mobile.less | 12 +++++++++++- app/partials/mobile/im.html | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/js/controllers.js b/app/js/controllers.js index c1cea6bd..4c30f366 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -473,7 +473,7 @@ angular.module('myApp.controllers', ['myApp.i18n']) skipped: false }; - $scope.voiceRecorder = { time : '', recording : null }; + $scope.voiceRecorder = { time : '', recording : null, processing : false }; $scope.openSettings = function () { $modal.open({ diff --git a/app/js/directives.js b/app/js/directives.js index 70ffd24c..bf9f4837 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1593,17 +1593,22 @@ angular.module('myApp.directives', ['myApp.filters']) voiceRecord.on('click', function(){ if (audioRecorder) { + $scope.$parent.$parent.voiceRecorder.processing = true; + audioRecorder.ondataavailable = function(e){ var blob = e.data; console.log(blob); $scope.draftMessage.files = [blob]; $scope.draftMessage.isMedia = true; + + audioRecorder = null; + $scope.$parent.$parent.voiceRecorder.processing = false; } } }); - voiceRecord.on('touchend', function(){ + $($window).on('touchend', function(){ if (audioRecorder) { audioRecorder.stop(); audioStream.stop(); diff --git a/app/less/mobile.less b/app/less/mobile.less index 9b1b6f10..513d87de 100644 --- a/app/less/mobile.less +++ b/app/less/mobile.less @@ -1439,7 +1439,7 @@ a.im_message_fwd_author { } } -.im_voice_recording { +.im_voice_recording, .im_processing_recording { background-color: rgb(23, 23, 23); color: white; @@ -1461,6 +1461,16 @@ a.im_message_fwd_author { } +.im_processing_recording { + .im_recorder_indicator i { + background-color: green; + } + + .im_record { + display: none; + } +} + .icon-emoji { display: inline-block; width: 22px; diff --git a/app/partials/mobile/im.html b/app/partials/mobile/im.html index 8d01c015..78b6bcba 100644 --- a/app/partials/mobile/im.html +++ b/app/partials/mobile/im.html @@ -130,7 +130,7 @@ -
+
From e1cc8b88295c2dbe2a497f2b72b00ca345f77853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lerique?= Date: Tue, 15 Sep 2015 15:24:09 +0200 Subject: [PATCH 03/49] Use a promise to gather the recorded data `click` is when we know if we should use the recorded data or discard it, but `click` fires after `touchend`. So to avoid stopping the recording and registering `ondataavailable` afterwards, register a promise on `ondataavailable`, and gather the data if needed in `click`. --- app/js/directives.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/js/directives.js b/app/js/directives.js index bf9f4837..bbde5aad 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1454,6 +1454,7 @@ angular.module('myApp.directives', ['myApp.filters']) var stickerImageCompiled = $compile(''); var cachedStickerImages = {}; var audioRecorder = null; + var audioPromise = null; var audioStream = null; var emojiTooltip = new EmojiTooltip(emojiButton, { @@ -1595,7 +1596,7 @@ angular.module('myApp.directives', ['myApp.filters']) if (audioRecorder) { $scope.$parent.$parent.voiceRecorder.processing = true; - audioRecorder.ondataavailable = function(e){ + audioPromise.then(function(e) { var blob = e.data; console.log(blob); @@ -1604,12 +1605,16 @@ angular.module('myApp.directives', ['myApp.filters']) audioRecorder = null; $scope.$parent.$parent.voiceRecorder.processing = false; - } + }); } }); $($window).on('touchend', function(){ if (audioRecorder) { + audioPromise = new Promise(function(resolve) { + audioRecorder.ondataavailable = resolve; + }); + audioRecorder.stop(); audioStream.stop(); From ad66b39ff8803e41956aa1c91933b55f71efc00b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lerique?= Date: Tue, 15 Sep 2015 15:26:46 +0200 Subject: [PATCH 04/49] Prevent a new recording from starting while processing --- app/js/directives.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/js/directives.js b/app/js/directives.js index bbde5aad..90cdd715 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1561,6 +1561,7 @@ angular.module('myApp.directives', ['myApp.filters']) navigator.getUserMedia = ( navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); voiceRecord.on('touchstart', function(e) { + if ($scope.$parent.$parent.voiceRecorder.processing) { return; } navigator.getUserMedia({audio : true}, function(stream){ var start = Date.now(); var touch = null; From 49029b301be0c7a512bc418c086939e5d6036f2d Mon Sep 17 00:00:00 2001 From: Jovan Gerodetti Date: Fri, 13 Nov 2015 08:41:51 +0100 Subject: [PATCH 05/49] don't access dead objects Some clean up to prevent the app from accessing the dead stream object. --- app/js/directives.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/app/js/directives.js b/app/js/directives.js index 90cdd715..b86e3b62 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1562,10 +1562,12 @@ angular.module('myApp.directives', ['myApp.filters']) voiceRecord.on('touchstart', function(e) { if ($scope.$parent.$parent.voiceRecorder.processing) { return; } + navigator.getUserMedia({audio : true}, function(stream){ var start = Date.now(); var touch = null; + audioPromise = null; audioStream = stream; audioRecorder = new MediaRecorder(stream); @@ -1594,7 +1596,7 @@ angular.module('myApp.directives', ['myApp.filters']) }); voiceRecord.on('click', function(){ - if (audioRecorder) { + if (audioPromise) { $scope.$parent.$parent.voiceRecorder.processing = true; audioPromise.then(function(e) { @@ -1604,14 +1606,15 @@ angular.module('myApp.directives', ['myApp.filters']) $scope.draftMessage.files = [blob]; $scope.draftMessage.isMedia = true; - audioRecorder = null; $scope.$parent.$parent.voiceRecorder.processing = false; + + audioPromise = null; }); } }); $($window).on('touchend', function(){ - if (audioRecorder) { + if (audioStream && audioRecorder) { audioPromise = new Promise(function(resolve) { audioRecorder.ondataavailable = resolve; }); @@ -1619,6 +1622,9 @@ angular.module('myApp.directives', ['myApp.filters']) audioRecorder.stop(); audioStream.stop(); + audioRecorder = null; + audioStream = null; + clearInterval($scope.$parent.$parent.voiceRecorder.recording); $scope.$apply(function(){ From 20b20ba613f05bf82ef2ea2c232fc1aa364dd6bb Mon Sep 17 00:00:00 2001 From: Jovan Gerodetti Date: Fri, 13 Nov 2015 09:12:08 +0100 Subject: [PATCH 06/49] fix for a wrong merge conflic resolve --- app/js/directives.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/js/directives.js b/app/js/directives.js index b86e3b62..4630ac58 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1429,7 +1429,8 @@ angular.module('myApp.directives', ['myApp.filters']) }) - .directive('mySendForm', function (_, $timeout, $compile, $modalStack, $http, $interpolate, Storage, AppStickersManager, AppDocsManager, ErrorService, shouldFocusOnInteraction) { + .directive('mySendForm', function (_, $window, $compile, $modalStack, $http, $interpolate, Storage, AppStickersManager, AppDocsManager, ErrorService, shouldFocusOnInteraction) { + return { link: link, scope: { From 27b8c75744fddc3262b72114ca34132c7f2bb62f Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Wed, 28 Jun 2017 17:40:47 +0300 Subject: [PATCH 07/49] Remove unused dep Closes #1234 --- package.json | 1 - yarn.lock | 1177 ++------------------------------------------------ 2 files changed, 44 insertions(+), 1134 deletions(-) diff --git a/package.json b/package.json index cef396fe..48d2774c 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,6 @@ "gulp-ng-annotate": "~0.5.2", "gulp-replace": "^0.2.0", "gulp-rev": "^1.1.0", - "gulp-serviceworker": "0.0.3", "gulp-standard": "^7.0.1", "gulp-uglify": "^1.0.2", "gulp-usemin": "=0.3.11", diff --git a/yarn.lock b/yarn.lock index 33cf45f9..62845f2e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,20 +13,6 @@ accepts@1.1.4: mime-types "~2.0.4" negotiator "0.4.9" -accepts@~1.2.12, accepts@~1.2.13: - version "1.2.13" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea" - dependencies: - mime-types "~2.1.6" - negotiator "0.5.3" - -accepts@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" - dependencies: - mime-types "~2.1.11" - negotiator "0.6.1" - accord@^0.26.3: version "0.26.4" resolved "https://registry.yarnpkg.com/accord/-/accord-0.26.4.tgz#fc4c8d3ebab406a07cb28819b859651c44a92e80" @@ -68,13 +54,6 @@ after@0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627" -agent-base@2: - version "2.0.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" - dependencies: - extend "~3.0.0" - semver "~5.0.1" - ajv-keywords@^1.0.0: version "1.5.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.0.tgz#c11e6859eafff83e0dafc416929472eca946aa2c" @@ -116,10 +95,6 @@ ansi-regex@^0.2.0, ansi-regex@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" -ansi-regex@^1.0.0, ansi-regex@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-1.1.1.tgz#41c847194646375e6a1a5d10c3ca054ef9fc980d" - ansi-styles@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" @@ -248,16 +223,10 @@ async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async@1.5.2, async@1.x, async@^1.2.1, async@^1.4.0, async@~1.5.2: +async@1.x, async@^1.2.1, async@^1.4.0, async@~1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.0.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" - dependencies: - lodash "^4.14.0" - async@~0.2.6: version "0.2.10" resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" @@ -286,30 +255,10 @@ base64-arraybuffer@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz#474df4a9f2da24e05df3158c3b1db3c3cd46a154" -base64-url@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.2.1.tgz#199fd661702a0e7b7dcae6e0698bb089c52f6d78" - -base64-url@1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.3.3.tgz#f8b6c537f09a4fc58c99cb86e0b0e9c61461a20f" - base64id@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f" -basic-auth-connect@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" - -basic-auth@~1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.4.tgz#030935b01de7c9b94a824b29f3fccb750d3a5290" - -batch@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" - bcrypt-pbkdf@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" @@ -378,17 +327,7 @@ binary-extensions@^1.0.0: version "1.8.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" -bindings@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" - -bl@^1.0.0, bl@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" - dependencies: - readable-stream "~2.0.5" - -bl@~1.0.0: +bl@^1.0.0, bl@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/bl/-/bl-1.0.3.tgz#fc5421a28fd4226036c3b3891a66a25bc64d226e" dependencies: @@ -423,21 +362,6 @@ body-parser@^1.12.4, body-parser@~1.14.0: raw-body "~2.1.5" type-is "~1.6.10" -body-parser@~1.13.3: - version "1.13.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.13.3.tgz#c08cf330c3358e151016a05746f13f029c97fa97" - dependencies: - bytes "2.1.0" - content-type "~1.0.1" - debug "~2.2.0" - depd "~1.0.1" - http-errors "~1.3.1" - iconv-lite "0.4.11" - on-finished "~2.3.0" - qs "4.0.0" - raw-body "~2.1.2" - type-is "~1.6.6" - boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" @@ -465,10 +389,6 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" @@ -492,10 +412,6 @@ builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" -bytes@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4" - bytes@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.2.0.tgz#fd35464a403f6f9117c2de3609ecff9cae000588" @@ -518,13 +434,6 @@ callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" -camel-case@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -536,7 +445,7 @@ camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -camelcase@^2.0.0, camelcase@^2.0.1: +camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" @@ -592,29 +501,6 @@ chalk@~0.4.0: has-color "~0.1.0" strip-ansi "~0.1.0" -change-case@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.0.tgz#6c9c8e35f8790870a82b6b0745be8c3cbef9b081" - dependencies: - camel-case "^3.0.0" - constant-case "^2.0.0" - dot-case "^2.1.0" - header-case "^1.0.0" - is-lower-case "^1.1.0" - is-upper-case "^1.1.0" - lower-case "^1.1.1" - lower-case-first "^1.0.0" - no-case "^2.2.0" - param-case "^2.1.0" - pascal-case "^2.0.0" - path-case "^2.1.0" - sentence-case "^2.1.0" - snake-case "^2.1.0" - swap-case "^1.1.0" - title-case "^2.1.0" - upper-case "^1.1.1" - upper-case-first "^1.1.0" - chokidar@^1.4.1: version "1.6.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" @@ -664,21 +550,10 @@ cli-cursor@^1.0.1: dependencies: restore-cursor "^1.0.1" -cli-width@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-1.1.1.tgz#a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d" - cli-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" -cli@^0.11.1: - version "0.11.3" - resolved "https://registry.yarnpkg.com/cli/-/cli-0.11.3.tgz#7b0cd3de990e452925667c0dbaffdc9f7f2a9a15" - dependencies: - exit "0.1.2" - glob "^7.0.5" - cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -687,14 +562,6 @@ cliui@^2.1.0: right-align "^0.1.1" wordwrap "0.0.2" -cliui@^3.0.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" @@ -741,12 +608,6 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" -collections@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/collections/-/collections-0.2.2.tgz#1f23026b2ef36f927eecc901e99c5f0d48fa334e" - dependencies: - weak-map "1.0.0" - color-convert@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" @@ -799,7 +660,7 @@ commander@2.5.x: version "2.5.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.5.1.tgz#23c61f6e47be143cc02e7ad4bb1c47f5cd5a2883" -commander@2.9.0, commander@^2.8.1, commander@^2.9.0: +commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -827,23 +688,6 @@ component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" -compressible@~2.0.5: - version "2.0.9" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.9.tgz#6daab4e2b599c2770dd9e21e7a891b1c5a755425" - dependencies: - mime-db ">= 1.24.0 < 2" - -compression@~1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.5.2.tgz#b03b8d86e6f8ad29683cba8df91ddc6ffc77b395" - dependencies: - accepts "~1.2.12" - bytes "2.1.0" - compressible "~2.0.5" - debug "~2.2.0" - on-headers "~1.0.0" - vary "~1.0.1" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -870,55 +714,6 @@ concat-with-sourcemaps@*, concat-with-sourcemaps@^1.0.0: dependencies: source-map "^0.5.1" -connect-livereload@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/connect-livereload/-/connect-livereload-0.5.4.tgz#80157d1371c9f37cc14039ab1895970d119dc3bc" - -connect-timeout@~1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/connect-timeout/-/connect-timeout-1.6.2.tgz#de9a5ec61e33a12b6edaab7b5f062e98c599b88e" - dependencies: - debug "~2.2.0" - http-errors "~1.3.1" - ms "0.7.1" - on-headers "~1.0.0" - -connect@^2.30.0: - version "2.30.2" - resolved "https://registry.yarnpkg.com/connect/-/connect-2.30.2.tgz#8da9bcbe8a054d3d318d74dfec903b5c39a1b609" - dependencies: - basic-auth-connect "1.0.0" - body-parser "~1.13.3" - bytes "2.1.0" - compression "~1.5.2" - connect-timeout "~1.6.2" - content-type "~1.0.1" - cookie "0.1.3" - cookie-parser "~1.3.5" - cookie-signature "1.0.6" - csurf "~1.8.3" - debug "~2.2.0" - depd "~1.0.1" - errorhandler "~1.4.2" - express-session "~1.11.3" - finalhandler "0.4.0" - fresh "0.3.0" - http-errors "~1.3.1" - method-override "~2.3.5" - morgan "~1.6.1" - multiparty "3.3.2" - on-headers "~1.0.0" - parseurl "~1.3.0" - pause "0.1.0" - qs "4.0.0" - response-time "~2.3.1" - serve-favicon "~2.3.0" - serve-index "~1.7.2" - serve-static "~1.10.0" - type-is "~1.6.6" - utils-merge "1.0.0" - vhost "~3.0.1" - connect@^3.3.5: version "3.5.0" resolved "https://registry.yarnpkg.com/connect/-/connect-3.5.0.tgz#b357525a0b4c1f50599cd983e1d9efeea9677198" @@ -936,13 +731,6 @@ console-stream@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44" -constant-case@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" - dependencies: - snake-case "^2.1.0" - upper-case "^1.1.1" - content-type@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" @@ -955,21 +743,6 @@ convert-source-map@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.4.1.tgz#f919a0099fe31f80fc5a1d0eb303161b394070c7" -cookie-parser@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.3.5.tgz#9d755570fb5d17890771227a02314d9be7cf8356" - dependencies: - cookie "0.1.3" - cookie-signature "1.0.6" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.3.tgz#e734a5c1417fce472d5aef82c381cabb64d1a435" - core-js@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" @@ -978,10 +751,6 @@ core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -crc@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba" - create-error-class@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" @@ -994,15 +763,6 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" -csrf@~3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/csrf/-/csrf-3.0.4.tgz#ba01423e5b5bea7b655e38b0bdd1323954cbdaa5" - dependencies: - base64-url "1.3.3" - rndm "1.2.0" - tsscmp "1.0.5" - uid-safe "2.1.3" - csso@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/csso/-/csso-2.0.0.tgz#178b43a44621221c27756086f531e02f42900ee8" @@ -1010,15 +770,6 @@ csso@~2.0.0: clap "^1.0.9" source-map "^0.5.3" -csurf@~1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/csurf/-/csurf-1.8.3.tgz#23f2a13bf1d8fce1d0c996588394442cba86a56a" - dependencies: - cookie "0.1.3" - cookie-signature "1.0.6" - csrf "~3.0.0" - http-errors "~1.3.1" - currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -1064,25 +815,19 @@ debug@0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" -debug@2, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" - dependencies: - ms "0.7.2" - debug@2.2.0, debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" dependencies: ms "0.7.1" -debug@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" +debug@^2.1.0, debug@^2.1.1, debug@^2.2.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" dependencies: ms "0.7.2" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.0.0, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1154,10 +899,6 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -deep-property@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/deep-property/-/deep-property-1.1.0.tgz#22eb26f49e62c9d5153141a4db62b33f80418008" - defaults@^1.0.0, defaults@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -1207,10 +948,6 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" - depd@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" @@ -1219,10 +956,6 @@ deprecated@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - detect-file@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" @@ -1241,10 +974,6 @@ diagnostics@~1.0.1: enabled "1.0.x" kuler "0.0.x" -diff@^1.0.8: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" - doctrine@^1.2.1, doctrine@^1.2.2: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -1295,12 +1024,6 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" -dot-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.0.tgz#4b43dd0d7403c34cb645424add397e80bfe85ca6" - dependencies: - no-case "^2.2.0" - download@^4.0.0, download@^4.1.2: version "4.4.3" resolved "https://registry.yarnpkg.com/download/-/download-4.4.3.tgz#aa55fdad392d95d4b68e8c2be03e0c2aa21ba9ac" @@ -1333,7 +1056,7 @@ duplexer2@^0.1.4, duplexer2@~0.1.0: dependencies: readable-stream "^2.0.2" -duplexer@^0.1.1, duplexer@~0.1.1: +duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -1447,13 +1170,6 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" -errorhandler@~1.4.2: - version "1.4.3" - resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.4.3.tgz#b7b70ed8f359e9db88092f2d20c0f831420ad83f" - dependencies: - accepts "~1.3.0" - escape-html "~1.0.3" - es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.5, es5-ext@~0.10.6, es5-ext@~0.10.7: version "0.10.12" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" @@ -1542,10 +1258,6 @@ es6-weak-map@~0.1.4: es6-iterator "~0.1.3" es6-symbol "~2.0.1" -escape-html@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -1668,10 +1380,6 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -etag@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" - event-emitter@~0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" @@ -1679,7 +1387,7 @@ event-emitter@~0.3.4: d "~0.1.1" es5-ext "~0.10.7" -event-stream@*, event-stream@^3.1.0, event-stream@^3.1.7, event-stream@^3.3.2: +event-stream@*, event-stream@^3.1.0, event-stream@^3.1.7: version "3.3.4" resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" dependencies: @@ -1743,10 +1451,6 @@ exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" -exit@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - expand-braces@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" @@ -1780,27 +1484,13 @@ expand-tilde@^1.2.1, expand-tilde@^1.2.2: dependencies: os-homedir "^1.0.1" -express-session@~1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af" - dependencies: - cookie "0.1.3" - cookie-signature "1.0.6" - crc "3.3.0" - debug "~2.2.0" - depd "~1.0.1" - on-headers "~1.0.0" - parseurl "~1.3.0" - uid-safe "~2.0.0" - utils-merge "1.0.0" - extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" dependencies: is-extendable "^0.1.0" -extend@3, extend@^3.0.0, extend@~3.0.0: +extend@^3.0.0, extend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" @@ -1834,12 +1524,6 @@ fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -faye-websocket@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - dependencies: - websocket-driver ">=0.5.1" - faye-websocket@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.7.3.tgz#cc4074c7f4a4dfd03af54dd65c354b135132ce11" @@ -1900,15 +1584,6 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" -finalhandler@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b" - dependencies: - debug "~2.2.0" - escape-html "1.0.2" - on-finished "~2.3.0" - unpipe "~1.0.0" - finalhandler@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" @@ -1988,13 +1663,6 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" -follow-redirects@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-0.0.7.tgz#34b90bab2a911aa347571da90f22bd36ecd8a919" - dependencies: - debug "^2.2.0" - stream-consume "^0.1.0" - for-in@^0.1.5: version "0.1.6" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" @@ -2009,14 +1677,6 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@~1.0.0-rc4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" - dependencies: - async "^2.0.1" - combined-stream "^1.0.5" - mime-types "^2.1.11" - form-data@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" @@ -2025,10 +1685,6 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" -fresh@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" - from@~0: version "0.1.3" resolved "https://registry.yarnpkg.com/from/-/from-0.1.3.tgz#ef63ac2062ac32acf7862e0d40b44b896f22f3bc" @@ -2037,16 +1693,6 @@ fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" -"fs-extra@^0.26.0 || ^0.30.0": - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - fs-extra@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" @@ -2133,18 +1779,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -gh-pages@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-0.11.0.tgz#93313c6dcbfc74d426bc89a29ebff6420acc3c1b" - dependencies: - async "1.5.2" - commander "2.9.0" - globby "^4.0.0" - graceful-fs "4.1.2" - q "1.4.1" - q-io "1.13.2" - wrench "1.5.8" - gifsicle@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/gifsicle/-/gifsicle-3.0.4.tgz#f45cb5ed10165b665dc929e0e9328b6c821dfa3b" @@ -2159,54 +1793,6 @@ gift@^0.6.1: dependencies: underscore "1.x.x" -git-list-remotes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/git-list-remotes/-/git-list-remotes-1.0.2.tgz#b1b036c2cb7e0bf9939343824b451926a2a30989" - dependencies: - gitconfiglocal "^1.0.0" - -git-remote-url@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/git-remote-url/-/git-remote-url-1.0.1.tgz#8d6b1c32558e6838813b28327bfacfdcae3da249" - dependencies: - gitconfiglocal "^1.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - dependencies: - ini "^1.3.2" - -gitconfiglocal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-2.0.1.tgz#b50092c90505d3977b4d99d764f9f599c980e774" - dependencies: - ini "^1.3.2" - -github-slug@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/github-slug/-/github-slug-2.0.0.tgz#c94758485607555f977ff2ed7f90e2f2596da652" - dependencies: - gitconfiglocal "^2.0.1" - github-url-from-git "^1.4.0" - temp "^0.8.3" - -github-url-from-git@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/github-url-from-git/-/github-url-from-git-1.5.0.tgz#f985fedcc0a9aa579dc88d7aff068d55cc6251a0" - -github@^2.4.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/github/-/github-2.6.0.tgz#40cd3414a599f3a63e9d10a246ba858d15b38fcc" - dependencies: - follow-redirects "0.0.7" - https-proxy-agent "^1.0.0" - mime "^1.2.11" - -github@~0.1.10: - version "0.1.16" - resolved "https://registry.yarnpkg.com/github/-/github-0.1.16.tgz#895d2a85b0feb7980d89ac0ce4f44dcaa03f17b5" - glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -2282,24 +1868,24 @@ glob@^5.0.15, glob@^5.0.3: once "^1.3.0" path-is-absolute "^1.0.0" -"glob@^5.0.15 || ^6.0.1 || ^7.0.0", glob@^7.0.3, glob@^7.0.5: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" +glob@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" dependencies: - fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.2" + minimatch "2 || 3" once "^1.3.0" path-is-absolute "^1.0.0" -glob@^6.0.1, glob@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" +glob@^7.0.3, glob@^7.0.5: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: + fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "2 || 3" + minimatch "^3.0.2" once "^1.3.0" path-is-absolute "^1.0.0" @@ -2356,17 +1942,6 @@ globby@^2.0.0: glob "^5.0.3" object-assign "^3.0.0" -globby@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-4.1.0.tgz#080f54549ec1b82a6c60e631fc82e1211dbe95f8" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^6.0.1" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - globby@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" @@ -2412,10 +1987,6 @@ got@^5.0.0: unzip-response "^1.0.2" url-parse-lax "^1.0.0" -graceful-fs@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.2.tgz#fe2239b7574972e67e41f808823f9bfa4a991e37" - graceful-fs@^3.0.0, graceful-fs@^3.0.2: version "3.0.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" @@ -2469,25 +2040,6 @@ gulp-concat@~2.4.1: gulp-util "^3.0.1" through "^2.3.4" -gulp-conflict@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/gulp-conflict/-/gulp-conflict-0.4.0.tgz#0273cf2dc0c8f20e9432de15525bf31766348fee" - dependencies: - diff "^1.0.8" - gulp-util "~3.0.1" - inquirer "~0.8.0" - through2 "~0.6.3" - -gulp-connect@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gulp-connect/-/gulp-connect-5.0.0.tgz#f2fdf306ae911468368c2285f2d782f13eddaf4e" - dependencies: - connect "^2.30.0" - connect-livereload "^0.5.4" - event-stream "^3.3.2" - gulp-util "^3.0.6" - tiny-lr "^0.2.1" - gulp-decompress@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gulp-decompress/-/gulp-decompress-1.2.0.tgz#8eeb65a5e015f8ed8532cafe28454960626f0dc7" @@ -2545,14 +2097,6 @@ gulp-imagemin@^2.3.0: pretty-bytes "^2.0.1" through2-concurrent "^1.1.0" -"gulp-install@https://github.com/marco-c/gulp-install/tarball/56f8ebf87f14651f586d6377dea75c2f3d1b1691": - version "0.6.0" - resolved "https://github.com/marco-c/gulp-install/tarball/56f8ebf87f14651f586d6377dea75c2f3d1b1691#29adce391946c585d8bfb62101c29c3afeabdc67" - dependencies: - gulp-util "^3.0.4" - through2 "^2.0.0" - which "^1.0.9" - gulp-less@^3.0.5: version "3.3.0" resolved "https://registry.yarnpkg.com/gulp-less/-/gulp-less-3.3.0.tgz#d085565da3c810307fde7c7874e86520dc503234" @@ -2620,7 +2164,7 @@ gulp-ng-annotate@~0.5.2: through2 "~0.4.1" vinyl-sourcemaps-apply "~0.1.1" -gulp-rename@^1.2.0, gulp-rename@^1.2.2: +gulp-rename@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817" @@ -2639,13 +2183,6 @@ gulp-rev@^1.1.0: object-assign "^1.0.0" through2 "^0.6.1" -gulp-serviceworker@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/gulp-serviceworker/-/gulp-serviceworker-0.0.3.tgz#1bbc7ae0cf592c204971ad00c2c20a37576a6ac3" - dependencies: - oghliner "^1.0.1" - through2 "^2.0.0" - gulp-sourcemaps@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c" @@ -2668,14 +2205,6 @@ gulp-standard@^7.0.1: standard "^7.0.1" through2 "^2.0.0" -"gulp-template@^3.0.0 || ^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/gulp-template/-/gulp-template-4.0.0.tgz#05de36808c6fb9966578d5a94ee72cee08cdc53b" - dependencies: - gulp-util "^3.0.0" - lodash "^4.8.2" - through2 "^2.0.0" - gulp-uglify@^1.0.2: version "1.5.4" resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-1.5.4.tgz#524788d87666d09f9d0c21fb2177f90039a658c9" @@ -2699,7 +2228,7 @@ gulp-usemin@=0.3.11: q "~1.1.2" through2 "~0.5.1" -gulp-util@*, gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.2, gulp-util@^3.0.4, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.1: +gulp-util@*, gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.2, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.1: version "3.0.8" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" dependencies: @@ -2791,12 +2320,6 @@ gulplog@^1.0.0: dependencies: glogg "^1.0.0" -gzip-size@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" - dependencies: - duplexer "^0.1.1" - handlebars@^4.0.1: version "4.0.6" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" @@ -2878,13 +2401,6 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" -header-case@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.0.tgz#d9e335909505d56051ec16a0106821889e910781" - dependencies: - no-case "^2.2.0" - upper-case "^1.1.3" - hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" @@ -2936,18 +2452,6 @@ http@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/http/-/http-0.0.0.tgz#86e6326d29c5d039de9fac584a45689f929f4f72" -https-proxy-agent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" - dependencies: - agent-base "2" - debug "2" - extend "3" - -iconv-lite@0.4.11: - version "0.4.11" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.11.tgz#2ecb42fd294744922209a2e7c404dac8793d8ade" - iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" @@ -3046,7 +2550,7 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" @@ -3068,27 +2572,10 @@ inquirer@^0.12.0: strip-ansi "^3.0.0" through "^2.3.6" -inquirer@~0.8.0: - version "0.8.5" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.8.5.tgz#dbd740cf6ca3b731296a63ce6f6d961851f336df" - dependencies: - ansi-regex "^1.1.1" - chalk "^1.0.0" - cli-width "^1.0.1" - figures "^1.3.5" - lodash "^3.3.1" - readline2 "^0.1.1" - rx "^2.4.3" - through "^2.3.6" - interpret@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - ip-regex@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd" @@ -3196,12 +2683,6 @@ is-jpg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-jpg/-/is-jpg-1.0.0.tgz#2959c17e73430db38264da75b90dd54f2d86da1c" -is-lower-case@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" - dependencies: - lower-case "^1.1.0" - is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: version "2.15.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" @@ -3307,12 +2788,6 @@ is-unc-path@^0.1.1: dependencies: unc-path-regex "^0.1.0" -is-upper-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" - dependencies: - upper-case "^1.1.0" - is-url@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26" @@ -3400,7 +2875,7 @@ js-string-escape@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" -js-yaml@3.x, js-yaml@^3.2.3, js-yaml@^3.4.3, js-yaml@^3.5.1: +js-yaml@3.x, js-yaml@^3.5.1: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" dependencies: @@ -3543,10 +3018,6 @@ kuler@0.0.x: dependencies: colornames "0.0.2" -lazy-cache@^0.2.4: - version "0.2.7" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" - lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" @@ -3561,12 +3032,6 @@ lazystream@^1.0.0: dependencies: readable-stream "^2.0.5" -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - "less@2.6.x || ^2.7.1": version "2.7.2" resolved "https://registry.yarnpkg.com/less/-/less-2.7.2.tgz#368d6cc73e1fb03981183280918743c5dcf9b3df" @@ -3615,14 +3080,6 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -lodash._arraycopy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - -lodash._arrayeach@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" @@ -3634,10 +3091,6 @@ lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" -lodash._basefor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" - lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" @@ -3788,14 +3241,6 @@ lodash.isobject@~2.4.1: dependencies: lodash._objecttypes "~2.4.1" -lodash.isplainobject@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5" - dependencies: - lodash._basefor "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.keysin "^3.0.0" - lodash.isplainobject@^4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" @@ -3804,10 +3249,6 @@ lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" -lodash.istypedarray@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" - lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -3824,33 +3265,10 @@ lodash.keys@~2.4.1: lodash._shimkeys "~2.4.1" lodash.isobject "~2.4.1" -lodash.keysin@^3.0.0: - version "3.0.8" - resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" - dependencies: - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - lodash.mapvalues@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" -lodash.merge@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994" - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._createassigner "^3.0.0" - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - lodash.isplainobject "^3.0.0" - lodash.istypedarray "^3.0.0" - lodash.keys "^3.0.0" - lodash.keysin "^3.0.0" - lodash.toplainobject "^3.0.0" - lodash.merge@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" @@ -3920,13 +3338,6 @@ lodash.templatesettings@~2.4.1: lodash._reinterpolate "~2.4.1" lodash.escape "~2.4.1" -lodash.toplainobject@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keysin "^3.0.0" - lodash.uniq@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -3937,11 +3348,11 @@ lodash.values@~2.4.1: dependencies: lodash.keys "~2.4.1" -lodash@^3.3.1, lodash@^3.8.0: +lodash@^3.8.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.14.0, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.8.2: +lodash@^4.0.0, lodash@^4.0.1, lodash@^4.3.0, lodash@^4.5.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -3949,10 +3360,6 @@ lodash@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" -lodash@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.3.1.tgz#a4663b53686b895ff074e2ba504dfb76a8e2b770" - lodash@~2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" @@ -3988,16 +3395,6 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lower-case-first@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" - dependencies: - lower-case "^1.1.2" - -lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.3.tgz#c92393d976793eee5ba4edb583cf8eae35bd9bfb" - lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" @@ -4094,19 +3491,6 @@ merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" -method-override@~2.3.5: - version "2.3.7" - resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.7.tgz#8e1d47ac480fb0cd8777083f11c896901166b2e5" - dependencies: - debug "2.3.3" - methods "~1.1.2" - parseurl "~1.3.1" - vary "~1.1.0" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - micromatch@^2.1.5, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -4125,15 +3509,15 @@ micromatch@^2.1.5, micromatch@^2.3.7: parse-glob "^3.0.4" regex-cache "^0.4.2" -"mime-db@>= 1.24.0 < 2", mime-db@~1.25.0: - version "1.25.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" - mime-db@~1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7" -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: +mime-db@~1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" + +mime-types@^2.1.12, mime-types@~2.1.13, mime-types@~2.1.7: version "2.1.13" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" dependencies: @@ -4145,14 +3529,10 @@ mime-types@~2.0.4: dependencies: mime-db "~1.12.0" -mime@1.3.4, mime@^1.2.11, mime@^1.3.4, mime@~1.3.4: +mime@^1.2.11, mime@^1.3.4, mime@~1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" -mimeparse@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/mimeparse/-/mimeparse-0.1.4.tgz#dafb02752370fd226093ae3152c271af01ac254a" - mini-lr@^0.1.8: version "0.1.9" resolved "https://registry.yarnpkg.com/mini-lr/-/mini-lr-0.1.9.tgz#02199d27347953d1fd1d6dbded4261f187b2d0f6" @@ -4233,20 +3613,6 @@ mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "0.0.8" -morgan@~1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.6.1.tgz#5fd818398c6819cba28a7cd6664f292fe1c0bbf2" - dependencies: - basic-auth "~1.0.3" - debug "~2.2.0" - depd "~1.0.1" - on-finished "~2.3.0" - on-headers "~1.0.0" - -mozilla-tabzilla@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mozilla-tabzilla/-/mozilla-tabzilla-0.5.1.tgz#60606c7a8fff542c22fc365fbd9761f8dc603204" - ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" @@ -4261,28 +3627,17 @@ multiline@^1.0.2: dependencies: strip-indent "^1.0.0" -multiparty@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f" - dependencies: - readable-stream "~1.1.9" - stream-counter "~0.2.0" - multipipe@^0.1.0, multipipe@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" dependencies: duplexer2 "0.0.2" -mute-stream@0.0.4, mute-stream@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.4.tgz#a9219960a6d5d5d046597aee51252c6655f7177e" - mute-stream@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" -nan@^2.3.0, nan@^2.3.3: +nan@^2.3.0: version "2.5.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8" @@ -4294,14 +3649,10 @@ negotiator@0.4.9: version "0.4.9" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.4.9.tgz#92e46b6db53c7e421ed64a2bc94f08be7630df3f" -negotiator@0.5.3, negotiator@~0.5.3: +negotiator@~0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - next-tick@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-0.2.2.tgz#75da4a927ee5887e39065880065b7336413b310d" @@ -4323,12 +3674,6 @@ ng-annotate@~0.15.1: stringset "~0.2.1" tryor "~0.1.2" -no-case@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081" - dependencies: - lower-case "^1.1.1" - node-pre-gyp@^0.6.29: version "0.6.32" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" @@ -4351,12 +3696,6 @@ node-uuid@~1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" -nodegit-promise@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/nodegit-promise/-/nodegit-promise-4.0.0.tgz#5722b184f2df7327161064a791d2e842c9167b34" - dependencies: - asap "~2.0.3" - nopt@3.x, nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -4424,50 +3763,12 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -oghliner@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/oghliner/-/oghliner-1.1.1.tgz#080f75a1682ac5d3792d3f4a6d4ae91a67048345" - dependencies: - chalk "^1.1.1" - change-case "^3.0.0" - cli "^0.11.1" - commander "^2.8.1" - fs-extra "^0.26.0 || ^0.30.0" - gh-pages "^0.11.0" - git-list-remotes "^1.0.0" - git-remote-url "^1.0.0" - github "^2.4.0" - github-slug "^2.0.0" - github-url-from-git "^1.4.0" - glob "^5.0.15 || ^6.0.1 || ^7.0.0" - gulp "^3.9.0" - gulp-conflict "^0.4.0" - gulp-connect "^5.0.0" - gulp-install "https://github.com/marco-c/gulp-install/tarball/56f8ebf87f14651f586d6377dea75c2f3d1b1691" - gulp-rename "^1.2.2" - gulp-template "^3.0.0 || ^4.0.0" - gzip-size "^3.0.0" - mozilla-tabzilla "^0.5.1" - pretty-bytes "^2.0.1 || ^3.0.0" - promisified-promptly "^1.0.0" - promisify-node "^0.2.1 || ^0.3.0 || ^0.4.0" - read-yaml "^1.0.0" - temp "^0.8.3" - through2 "^2.0.0" - travis-ci "^2.1.0" - travis-encrypt "^2.0.0" - write-yaml "^0.2.1" - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: ee-first "1.1.1" -on-headers@~1.0.0, on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" - once@1.x, once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -4555,22 +3856,10 @@ os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" - os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -param-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.0.tgz#2619f90fd6c829ed0b958f1c84ed03a745a6d70a" - dependencies: - no-case "^2.2.0" - parse-filepath@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73" @@ -4620,19 +3909,6 @@ parseurl@~1.3.0, parseurl@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" -pascal-case@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.0.tgz#39c248bde5a8dc02d5160696bdb01e044d016ee1" - dependencies: - camel-case "^3.0.0" - upper-case-first "^1.1.0" - -path-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.0.tgz#5ac491de642936e5dfe0e18d16c461b8be8cf073" - dependencies: - no-case "^2.2.0" - path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -4688,10 +3964,6 @@ pause-stream@0.0.11: dependencies: through "~2.3" -pause@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" - pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -4762,7 +4034,7 @@ pretty-bytes@^2.0.1: meow "^3.1.0" number-is-nan "^1.0.0" -"pretty-bytes@^2.0.1 || ^3.0.0", pretty-bytes@^3.0.1: +pretty-bytes@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" dependencies: @@ -4790,25 +4062,6 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -promisified-promptly@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promisified-promptly/-/promisified-promptly-1.0.2.tgz#325d900dd36f071fb474396bbceeb14c0c069329" - dependencies: - promptly "^0.2.1" - -"promisify-node@^0.2.1 || ^0.3.0 || ^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/promisify-node/-/promisify-node-0.4.0.tgz#32803874ec411784e4786c339902a87a179a469c" - dependencies: - nodegit-promise "~4.0.0" - object-assign "^4.0.1" - -promptly@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/promptly/-/promptly-0.2.1.tgz#6444e7ca4dbd9899e7eeb5ec3922827ebdc22b3b" - dependencies: - read "~1.0.4" - prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" @@ -4817,22 +4070,7 @@ punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -q-io@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/q-io/-/q-io-1.13.2.tgz#eea130d481ddb5e1aa1bc5a66855f7391d06f003" - dependencies: - collections "^0.2.0" - mime "^1.2.11" - mimeparse "^0.1.4" - q "^1.0.1" - qs "^1.2.1" - url2 "^0.0.0" - -q@1.4.1, q@^1.0.1, q@^1.1.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" - -q@~1.1.2: +q@^1.1.2, q@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/q/-/q-1.1.2.tgz#6357e291206701d99f197ab84e57e8ad196f2a89" @@ -4840,38 +4078,18 @@ qjobs@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" -qs@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" - qs@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.0.tgz#a9f31142af468cb72b25b30136ba2456834916be" -qs@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-1.2.2.tgz#19b57ff24dc2a99ce1f8bdf6afcda59f8ef61f88" - qs@~2.2.3: version "2.2.5" resolved "https://registry.yarnpkg.com/qs/-/qs-2.2.5.tgz#1088abaf9dcc0ae5ae45b709e6c6b5888b23923c" -qs@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-5.1.0.tgz#4d932e5c7ea411cca76a312d39a606200fd50cd9" - -qs@~6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.1.tgz#ce03c5ff0935bc1d9d69a9f14cbd18e568d67625" - qs@~6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" -random-bytes@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" - randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" @@ -4883,11 +4101,7 @@ range-parser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" -range-parser@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" - -raw-body@~2.1.2, raw-body@~2.1.5: +raw-body@~2.1.5: version "2.1.7" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" dependencies: @@ -4926,19 +4140,6 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read-yaml@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-yaml/-/read-yaml-1.0.0.tgz#ab529b12da653e03197079994d040131ba5f5765" - dependencies: - js-yaml "^3.2.3" - xtend "^4.0.0" - -read@~1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - dependencies: - mute-stream "~0.0.4" - "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17, readable-stream@~1.0.2: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -4948,7 +4149,7 @@ read@~1.0.4: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^1.0.26-2, readable-stream@~1.1.8, readable-stream@~1.1.9: +readable-stream@^1.0.26-2, readable-stream@~1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" dependencies: @@ -5001,13 +4202,6 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -readline2@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-0.1.1.tgz#99443ba6e83b830ef3051bfd7dc241a82728d568" - dependencies: - mute-stream "0.0.4" - strip-ansi "^2.0.1" - readline2@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" @@ -5103,32 +4297,6 @@ request@^2.72.0, request@^2.79.0, request@~2.79.0: tunnel-agent "~0.4.1" uuid "^3.0.0" -request@~2.74.0: - version "2.74.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~1.0.0-rc4" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - require-uncached@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" @@ -5159,13 +4327,6 @@ resolve@^1.1.6, resolve@^1.1.7: version "1.2.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" -response-time@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/response-time/-/response-time-2.3.2.tgz#ffa71bab952d62f7c1d49b7434355fbc68dffc5a" - dependencies: - depd "~1.1.0" - on-headers "~1.0.1" - restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -5185,14 +4346,6 @@ rimraf@2, rimraf@^2.2.6, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.3, rimraf@~2. dependencies: glob "^7.0.5" -rimraf@~2.2.6: - version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - -rndm@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/rndm/-/rndm-1.2.0.tgz#f33fe9cfb52bbfd520aa18323bc65db110a1b76c" - run-async@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" @@ -5214,10 +4367,6 @@ rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" -rx@^2.4.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/rx/-/rx-2.5.3.tgz#21adc7d80f02002af50dae97fd9dbf248755f566" - sax@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" @@ -5246,67 +4395,10 @@ semver@^4.0.3, semver@^4.1.0, semver@~4.3.3: version "4.3.6" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" -semver@~5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" - -send@0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz#765e7607c8055452bba6f0b052595350986036de" - dependencies: - debug "~2.2.0" - depd "~1.1.0" - destroy "~1.0.4" - escape-html "~1.0.3" - etag "~1.7.0" - fresh "0.3.0" - http-errors "~1.3.1" - mime "1.3.4" - ms "0.7.1" - on-finished "~2.3.0" - range-parser "~1.0.3" - statuses "~1.2.1" - -sentence-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.0.tgz#d592fbed457fd1a59e3af0ee17e99f6fd70d7efd" - dependencies: - no-case "^2.2.0" - upper-case-first "^1.1.2" - sequencify@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" -serve-favicon@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.3.2.tgz#dd419e268de012ab72b319d337f2105013f9381f" - dependencies: - etag "~1.7.0" - fresh "0.3.0" - ms "0.7.2" - parseurl "~1.3.1" - -serve-index@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.7.3.tgz#7a057fc6ee28dc63f64566e5fa57b111a86aecd2" - dependencies: - accepts "~1.2.13" - batch "0.5.3" - debug "~2.2.0" - escape-html "~1.0.3" - http-errors "~1.3.1" - mime-types "~2.1.9" - parseurl "~1.3.1" - -serve-static@~1.10.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz#ce5a6ecd3101fed5ec09827dac22a9c29bfb0535" - dependencies: - escape-html "~1.0.3" - parseurl "~1.3.1" - send "0.13.2" - serviceworker-cache-polyfill@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz#de19ee73bef21ab3c0740a37b33db62464babdeb" @@ -5343,12 +4435,6 @@ slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" -snake-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" - dependencies: - no-case "^2.2.0" - sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" @@ -5537,10 +4623,6 @@ statuses@1, statuses@~1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" -statuses@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28" - stream-combiner2@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" @@ -5554,16 +4636,10 @@ stream-combiner@~0.0.3, stream-combiner@~0.0.4: dependencies: duplexer "~0.1.1" -stream-consume@^0.1.0, stream-consume@~0.1.0: +stream-consume@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" -stream-counter@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" - dependencies: - readable-stream "~1.1.8" - stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" @@ -5605,12 +4681,6 @@ strip-ansi@^0.3.0: dependencies: ansi-regex "^0.2.1" -strip-ansi@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-2.0.1.tgz#df62c1aa94ed2f114e1d0f21fd1d50482b79a60e" - dependencies: - ansi-regex "^1.0.0" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -5721,13 +4791,6 @@ sw-toolbox@^3.1.1: path-to-regexp "^1.0.1" serviceworker-cache-polyfill "^4.0.0" -swap-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" - dependencies: - lower-case "^1.1.1" - upper-case "^1.1.1" - table@^3.7.8: version "3.8.3" resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" @@ -5769,13 +4832,6 @@ tar@~2.2.1: fstream "^1.0.2" inherits "2" -temp@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" - dependencies: - os-tmpdir "^1.0.0" - rimraf "~2.2.6" - tempfile@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" @@ -5815,7 +4871,7 @@ through2@^0.5.0, through2@^0.5.1, through2@~0.5.1: readable-stream "~1.0.17" xtend "~3.0.0" -through2@^0.6.0, through2@^0.6.1, through2@^0.6.3, through2@~0.6.3: +through2@^0.6.0, through2@^0.6.1, through2@^0.6.3: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" dependencies: @@ -5861,24 +4917,6 @@ timers-ext@0.1: es5-ext "~0.10.2" next-tick "~0.2.2" -tiny-lr@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-0.2.1.tgz#b3fdba802e5d56a33c2f6f10794b32e477ac729d" - dependencies: - body-parser "~1.14.0" - debug "~2.2.0" - faye-websocket "~0.10.0" - livereload-js "^2.2.0" - parseurl "~1.3.0" - qs "~5.1.0" - -title-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.0.tgz#c68ccb4232079ded64f94b91b4941ade91391979" - dependencies: - no-case "^2.2.0" - upper-case "^1.0.3" - tmp@0.0.28: version "0.0.28" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" @@ -5901,28 +4939,6 @@ tough-cookie@~2.3.0: dependencies: punycode "^1.4.1" -travis-ci@^2.0.3, travis-ci@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/travis-ci/-/travis-ci-2.1.1.tgz#98696265af827ae3576f31aa06d876e74b4b082e" - dependencies: - github "~0.1.10" - lodash "~1.3.1" - request "~2.74.0" - underscore.string "~2.2.0rc" - -travis-encrypt@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/travis-encrypt/-/travis-encrypt-2.1.1.tgz#94e05b90ca147bfab0d0383e2f657b5d9e554b66" - dependencies: - colors "^1.1.2" - deep-property "^1.1.0" - lodash.merge "^3.3.2" - read-yaml "^1.0.0" - travis-ci "^2.0.3" - ursa "^0.9.1" - write-yaml "^0.2.2" - yargs "^3.32.0" - trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -5941,10 +4957,6 @@ tryor@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b" -tsscmp@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" - tunnel-agent@^0.4.0, tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" @@ -5959,7 +4971,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-is@~1.6.10, type-is@~1.6.6: +type-is@~1.6.10: version "1.6.14" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" dependencies: @@ -6000,19 +5012,6 @@ uid-number@~0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" -uid-safe@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.3.tgz#077e264a00b3187936b270bb7376a26473631071" - dependencies: - base64-url "1.3.3" - random-bytes "~1.0.0" - -uid-safe@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.0.0.tgz#a7f3c6ca64a1f6a5d04ec0ef3e4c3d5367317137" - dependencies: - base64-url "1.2.1" - ultron@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" @@ -6021,10 +5020,6 @@ unc-path-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" -underscore.string@~2.2.0rc: - version "2.2.1" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.2.1.tgz#d7c0fa2af5d5a1a67f4253daee98132e733f0f19" - underscore@1.x.x: version "1.8.3" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" @@ -6052,16 +5047,6 @@ unzip-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" -upper-case-first@^1.1.0, upper-case-first@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" - dependencies: - upper-case "^1.1.1" - -upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - urijs@^1.16.1: version "1.18.4" resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.18.4.tgz#0c97a17a0b0e4a2e635a565c2f16c0f180605e28" @@ -6078,17 +5063,6 @@ url-regex@^3.0.0: dependencies: ip-regex "^1.0.1" -url2@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/url2/-/url2-0.0.0.tgz#4eaabd1d5c3ac90d62ab4485c998422865a04b1a" - -ursa@^0.9.1: - version "0.9.4" - resolved "https://registry.yarnpkg.com/ursa/-/ursa-0.9.4.tgz#0a2abfb7dc4267f733b0f8f2fc7f2c895d40a413" - dependencies: - bindings "^1.2.1" - nan "^2.3.3" - user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" @@ -6148,24 +5122,12 @@ validate-npm-package-license@^3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" -vary@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" - -vary@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" - verror@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" dependencies: extsprintf "1.0.2" -vhost@~3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/vhost/-/vhost-3.0.2.tgz#2fb1decd4c466aa88b0f9341af33dc1aff2478d5" - vinyl-assign@^1.0.1: version "1.2.1" resolved "https://registry.yarnpkg.com/vinyl-assign/-/vinyl-assign-1.2.1.tgz#4d198891b5515911d771a8cd9c5480a46a074a45" @@ -6271,11 +5233,7 @@ ware@^1.2.0: dependencies: wrap-fn "^0.1.0" -weak-map@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.0.tgz#b66e56a9df0bd25a76bbf1b514db129080614a37" - -websocket-driver@>=0.3.6, websocket-driver@>=0.5.1: +websocket-driver@>=0.3.6: version "0.6.5" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" dependencies: @@ -6293,7 +5251,7 @@ whet.extend@~0.9.9: version "0.9.9" resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" -which@^1.0.9, which@^1.1.1, which@^1.2.12, which@~1.2.10: +which@^1.1.1, which@^1.2.12, which@~1.2.10: version "1.2.12" resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" dependencies: @@ -6309,10 +5267,6 @@ window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" -window-size@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -6325,13 +5279,6 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-fn@^0.1.0: version "0.1.5" resolved "https://registry.yarnpkg.com/wrap-fn/-/wrap-fn-0.1.5.tgz#f21b6e41016ff4a7e31720dbc63a09016bdf9845" @@ -6348,19 +5295,6 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -wrench@1.5.8: - version "1.5.8" - resolved "https://registry.yarnpkg.com/wrench/-/wrench-1.5.8.tgz#7a31c97f7869246d76c5cf2f5c977a1c4c8e5ab5" - -write-yaml@^0.2.1, write-yaml@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/write-yaml/-/write-yaml-0.2.2.tgz#106f837a0e9dc0eeb4d22f632405a3d824ced787" - dependencies: - extend-shallow "^2.0.1" - js-yaml "^3.4.3" - lazy-cache "^0.2.4" - write "^0.2.1" - write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" @@ -6392,22 +5326,6 @@ xtend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a" -y18n@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -yargs@^3.32.0: - version "3.32.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" - dependencies: - camelcase "^2.0.1" - cliui "^3.0.3" - decamelize "^1.1.1" - os-locale "^1.4.0" - string-width "^1.0.1" - window-size "^0.1.4" - y18n "^3.2.0" - yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" @@ -6417,19 +5335,12 @@ yargs@~3.10.0: decamelize "^1.0.0" window-size "0.1.0" -yauzl@2.4.1: +yauzl@2.4.1, yauzl@^2.2.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" dependencies: fd-slicer "~1.0.1" -yauzl@^2.2.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.7.0.tgz#e21d847868b496fc29eaec23ee87fdd33e9b2bce" - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.0.1" - yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" From cd3979aeab294655144409c8a58a3c02b7900ffe Mon Sep 17 00:00:00 2001 From: Bart Date: Wed, 28 Jun 2017 17:03:49 +0200 Subject: [PATCH 08/49] Cleanup of tests, improved readability of the test code (#1434) * Cleanup of tests, improved readability * Improved readability concerning timeout/loading tests, removed unnecessary 'this.' --- app/js/controllers.js | 4 +- .../controllers/AppFooterControllerSpec.js | 24 +- .../controllers/AppImPanelControllerSpec.js | 10 +- .../AppLangSelectControllerSpec.js | 23 +- .../controllers/AppWelcomeControllerSpec.js | 37 +-- .../ChangelogModalControlelerSpec.js | 55 ++-- .../DocumentModalControllerSpec.js | 145 +++++---- test/unit/controllers/EmbedModalController.js | 74 +++-- .../controllers/PeerSelectControllerSpec.js | 305 +++++++++--------- .../controllers/VideoModalControllerSpec.js | 152 +++++---- test/unit/directives/myHeadDirective.js | 14 +- test/unit/directives/myLangFooterDirective.js | 14 +- .../services/PhonebookContactsServiceSpec.js | 20 +- 13 files changed, 439 insertions(+), 438 deletions(-) diff --git a/app/js/controllers.js b/app/js/controllers.js index 2057bb6e..b579e8bb 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -3537,7 +3537,7 @@ angular.module('myApp.controllers', ['myApp.i18n']) } $scope.$on('history_delete', function (e, historyUpdate) { - if (historyUpdate.msgs[$scope.messageID]) { + if (historyUpdate && historyUpdate.msgs && historyUpdate.msgs[$scope.messageID]) { $modalInstance.dismiss() } }) @@ -3571,7 +3571,7 @@ angular.module('myApp.controllers', ['myApp.i18n']) } $scope.$on('history_delete', function (e, historyUpdate) { - if (historyUpdate.msgs[$scope.messageID]) { + if (historyUpdate && historyUpdate.msgs && historyUpdate.msgs[$scope.messageID]) { $modalInstance.dismiss() } }) diff --git a/test/unit/controllers/AppFooterControllerSpec.js b/test/unit/controllers/AppFooterControllerSpec.js index 39f210af..4f857192 100644 --- a/test/unit/controllers/AppFooterControllerSpec.js +++ b/test/unit/controllers/AppFooterControllerSpec.js @@ -2,34 +2,32 @@ /* global describe, it, inject, expect, beforeEach */ describe('AppFooterController', function () { - var $controller, $scope, service, serviceFlag - beforeEach(module('myApp.controllers')) beforeEach(function () { - serviceFlag = false - service = { + this.LayoutSwitchService = { + serviceFlag: false, switchLayout: function (parameter) { - serviceFlag = true + this.serviceFlag = true } } inject(function (_$controller_, _$rootScope_) { - $controller = _$controller_ + this.$controller = _$controller_ - $scope = _$rootScope_.$new() - $controller('AppFooterController', { - $scope: $scope, - LayoutSwitchService: service + this.$scope = _$rootScope_.$new() + this.$controller('AppFooterController', { + $scope: this.$scope, + LayoutSwitchService: this.LayoutSwitchService }) }) }) // define tests it('calls the right function', function (done) { - expect(serviceFlag).toBe(false) - $scope.switchLayout(null) - expect(serviceFlag).toBe(true) + expect(this.LayoutSwitchService.serviceFlag).toBe(false) + this.$scope.switchLayout(true) + expect(this.LayoutSwitchService.serviceFlag).toBe(true) done() }) }) diff --git a/test/unit/controllers/AppImPanelControllerSpec.js b/test/unit/controllers/AppImPanelControllerSpec.js index 2b02a09a..260aa266 100644 --- a/test/unit/controllers/AppImPanelControllerSpec.js +++ b/test/unit/controllers/AppImPanelControllerSpec.js @@ -2,21 +2,19 @@ /* global describe, it, inject, expect, beforeEach, jasmine */ describe('AppImPanelController', function () { - var $scope - beforeEach(module('myApp.controllers')) beforeEach(function () { inject(function (_$controller_, _$rootScope_) { - $scope = _$rootScope_.$new() - $scope.$on = jasmine.createSpy('$on') - _$controller_('AppImPanelController', { $scope: $scope }) + this.$scope = _$rootScope_.$new() + this.$scope.$on = jasmine.createSpy('$on') + _$controller_('AppImPanelController', { $scope: this.$scope }) }) }) // define tests it('sets $on(user_update) to no-operation function', function (done) { - expect($scope.$on).toHaveBeenCalledWith('user_update', angular.noop) + expect(this.$scope.$on).toHaveBeenCalledWith('user_update', angular.noop) done() }) }) diff --git a/test/unit/controllers/AppLangSelectControllerSpec.js b/test/unit/controllers/AppLangSelectControllerSpec.js index c4cba5bb..07ddadca 100644 --- a/test/unit/controllers/AppLangSelectControllerSpec.js +++ b/test/unit/controllers/AppLangSelectControllerSpec.js @@ -2,18 +2,17 @@ /* global describe, it, inject, expect, beforeEach, xit */ describe('AppLangSelectController', function () { - var $controller, $scope - beforeEach(module('ui.bootstrap')) beforeEach(module('myApp.services')) beforeEach(module('myApp.controllers')) beforeEach(function () { inject(function (_$controller_, _$rootScope_, _, Storage, ErrorService, AppRuntimeManager) { - $controller = _$controller_ - $scope = _$rootScope_.$new() - $controller('AppLangSelectController', { - $scope: $scope, + this.$controller = _$controller_ + this.$scope = _$rootScope_.$new() + + this.$controller('AppLangSelectController', { + $scope: this.$scope, _: _, Storage: Storage, ErrorService: ErrorService, @@ -23,24 +22,24 @@ describe('AppLangSelectController', function () { }) it('holds the supportedLocales', function () { - expect($scope.supportedLocales).toBeDefined() + expect(this.$scope.supportedLocales).toBeDefined() }) it('holds langNames', function () { - expect($scope.langNames).toBeDefined() + expect(this.$scope.langNames).toBeDefined() }) it('holds the current locale', function () { - expect($scope.curLocale).toBeDefined() + expect(this.$scope.curLocale).toBeDefined() }) it('has a locale form', function () { - expect($scope.form).toBeDefined() - expect($scope.form.locale).toBeDefined() + expect(this.$scope.form).toBeDefined() + expect(this.$scope.form.locale).toBeDefined() }) it('allows to select a locale', function () { - expect($scope.localeSelect).toBeDefined() + expect(this.$scope.localeSelect).toBeDefined() }) describe('when the user switches the locale', function () { diff --git a/test/unit/controllers/AppWelcomeControllerSpec.js b/test/unit/controllers/AppWelcomeControllerSpec.js index 9e3cadd8..1787fce0 100644 --- a/test/unit/controllers/AppWelcomeControllerSpec.js +++ b/test/unit/controllers/AppWelcomeControllerSpec.js @@ -2,21 +2,18 @@ /* global describe, it, inject, expect, beforeEach */ describe('AppWelcomeController', function () { - var $controller, $rootScope, $scope, $location, MtpApiManager, ErrorService, - ChangelogNotifyService, LayoutSwitchService - beforeEach(module('myApp.controllers')) beforeEach(function () { - ChangelogNotifyService = { + this.ChangelogNotifyService = { checkUpdate: function () {} } - LayoutSwitchService = { + this.LayoutSwitchService = { start: function () {} } - MtpApiManager = { + this.MtpApiManager = { getUserID: function () { return { then: function () {} @@ -24,23 +21,19 @@ describe('AppWelcomeController', function () { } } - module(function ($provide) { - $provide.value('MtpApiManager', MtpApiManager) - }) - inject(function (_$controller_, _$rootScope_, _$location_) { - $controller = _$controller_ - $rootScope = _$rootScope_ - $location = _$location_ - - $scope = $rootScope.$new() - $controller('AppWelcomeController', { - $scope: $scope, - $location: $location, - MtpApiManager: MtpApiManager, - ErrorService: ErrorService, - ChangelogNotifyService: ChangelogNotifyService, - LayoutSwitchService: LayoutSwitchService + this.$controller = _$controller_ + this.$rootScope = _$rootScope_ + this.$location = _$location_ + this.$scope = _$rootScope_.$new() + + this.$controller('AppWelcomeController', { + $scope: this.$scope, + $location: this.$location, + MtpApiManager: this.MtpApiManager, + ErrorService: this.ErrorService, + ChangelogNotifyService: this.ChangelogNotifyService, + LayoutSwitchService: this.LayoutSwitchService }) }) }) diff --git a/test/unit/controllers/ChangelogModalControlelerSpec.js b/test/unit/controllers/ChangelogModalControlelerSpec.js index 86c6ed1a..3ad28f62 100644 --- a/test/unit/controllers/ChangelogModalControlelerSpec.js +++ b/test/unit/controllers/ChangelogModalControlelerSpec.js @@ -2,69 +2,68 @@ /* global describe, it, inject, expect, beforeEach, Config */ describe('ChangeLogModalController', function () { - var $controller, $scope, modal, modalFlag - beforeEach(module('myApp.controllers')) beforeEach(function () { - modalFlag = false - modal = { + this.modal = { + modalFlag: false, open: function (data) { - modalFlag = true + this.modalFlag = true } } inject(function (_$controller_, _$rootScope_) { - $controller = _$controller_ + this.$controller = _$controller_ + + this.$scope = _$rootScope_.$new() - $scope = _$rootScope_.$new() - $controller('ChangelogModalController', { - $scope: $scope, - $modal: modal + this.$controller('ChangelogModalController', { + $scope: this.$scope, + $modal: this.modal }) }) }) // define tests it('will have standard data when no function is called', function (done) { - expect($scope.changelogHidden).toBe(false) - expect($scope.changelogShown).toBe(false) - expect($scope.currentVersion).toBe(Config.App.version) + expect(this.$scope.changelogHidden).toBe(false) + expect(this.$scope.changelogShown).toBe(false) + expect(this.$scope.currentVersion).toBe(Config.App.version) done() }) it('will show the changelog', function (done) { - $scope.showAllVersions() - expect($scope.changelogHidden).toBe(false) - expect($scope.changelogShown).toBe(true) + this.$scope.showAllVersions() + expect(this.$scope.changelogHidden).toBe(false) + expect(this.$scope.changelogShown).toBe(true) done() }) it('will allow to show any version when "changelogShown" is true', function (done) { - $scope.changelogShown = true - expect($scope.canShowVersion(null)).toBe(true) - expect($scope.canShowVersion('0.0.1')).toBe(true) - expect($scope.canShowVersion('0.1.0')).toBe(true) - expect($scope.canShowVersion('1.0.0')).toBe(true) + this.$scope.changelogShown = true + expect(this.$scope.canShowVersion(null)).toBe(true) + expect(this.$scope.canShowVersion('0.0.1')).toBe(true) + expect(this.$scope.canShowVersion('0.1.0')).toBe(true) + expect(this.$scope.canShowVersion('1.0.0')).toBe(true) done() }) it('will allow the version to be shown when the current verion is bigger than the last function', function (done) { - expect($scope.canShowVersion('100.100.100')).toBe(true) + expect(this.$scope.canShowVersion('100.100.100')).toBe(true) done() }) it('won\'t allow the version to be shown when it is smaller than the current version', function (done) { - expect($scope.changelogHidden).toBe(false) - expect($scope.canShowVersion('0.0.0')).toBe(false) - expect($scope.changelogHidden).toBe(true) + expect(this.$scope.changelogHidden).toBe(false) + expect(this.$scope.canShowVersion('0.0.0')).toBe(false) + expect(this.$scope.changelogHidden).toBe(true) done() }) it('will call modal when the changeUsername function is called', function (done) { - expect(modalFlag).toBe(false) - $scope.changeUsername() - expect(modalFlag).toBe(true) + expect(this.modal.modalFlag).toBe(false) + this.$scope.changeUsername() + expect(this.modal.modalFlag).toBe(true) done() }) }) diff --git a/test/unit/controllers/DocumentModalControllerSpec.js b/test/unit/controllers/DocumentModalControllerSpec.js index 9593b4fa..471b84b9 100644 --- a/test/unit/controllers/DocumentModalControllerSpec.js +++ b/test/unit/controllers/DocumentModalControllerSpec.js @@ -1,20 +1,19 @@ 'use strict' -/* global describe, it, inject, expect, beforeEach, jasmine */ +/* global describe, it, inject, expect, beforeEach, jasmine, spyOn */ describe('DocumentModalController', function () { - var $controller, $scope, $rootScope, $docManager, $errService, $input, $messManager, $pSelectService, $modalI, createController - beforeEach(module('myApp.controllers')) beforeEach(function () { - $docManager = {} - $docManager.wrapForHistory = jasmine.createSpy('wrapForHistory') - $docManager.saveDocFile = jasmine.createSpy('saveDocFile') + this.AppDocsManager = { + wrapForHistory: jasmine.createSpy('wrapForHistory'), + saveDocFile: jasmine.createSpy('saveDocFile') + } - $input = {} - $errService = { + this.ErrorService = { + $input: {}, confirm: function (message) { - $input = message + this.$input = message return { then: function (f) { f() @@ -23,9 +22,10 @@ describe('DocumentModalController', function () { } } - $pSelectService = { + this.PeersSelectService = { + $input: {}, selectPeer: function (options) { - $input = options + this.$input = options return { then: function (f) { f('Peerselected') @@ -34,100 +34,103 @@ describe('DocumentModalController', function () { } } - createController = function (spyBroadcast, spyOn) { - if (spyBroadcast) { - $rootScope.$broadcast = jasmine.createSpy('$broadcast') - } - if (spyOn) { - $scope.$on = jasmine.createSpy('$on') - } - $controller('DocumentModalController', { - $scope: $scope, - $rootScope: $rootScope, - $modalInstance: $modalI, - PeersSelectService: $pSelectService, - AppMessagesManager: $messManager, - AppDocsManager: $docManager, - AppPeersManager: {}, - ErrorService: $errService - }) + this.AppMessagesManager = { + deleteMessages: jasmine.createSpy('deleteMessages') } - $messManager = {} - $messManager.deleteMessages = jasmine.createSpy('deleteMessages') - - $modalI = {} - $modalI.dismiss = jasmine.createSpy('dismissModal') + this.$modalInstance = { + dismiss: jasmine.createSpy('dismissModal') + } inject(function (_$controller_, _$rootScope_) { - $rootScope = _$rootScope_ - $scope = $rootScope.$new() - $scope.docID = 'randomdoc' - - $controller = _$controller_ + this.$rootScope = _$rootScope_ + this.$scope = this.$rootScope.$new() + this.$scope.docID = 'randomdoc' + + this.$controller = _$controller_ + + spyOn(this.$rootScope, '$broadcast').and.callThrough() + spyOn(this.$scope, '$on').and.callThrough() + + this.$controller('DocumentModalController', { + $scope: this.$scope, + $rootScope: this.$rootScope, + $modalInstance: this.$modalInstance, + PeersSelectService: this.PeersSelectService, + AppMessagesManager: this.AppMessagesManager, + AppDocsManager: this.AppDocsManager, + AppPeersManager: {}, + ErrorService: this.ErrorService + }) }) }) // define tests it('sets the document in the scope', function (done) { - createController(false, false) - - expect($docManager.wrapForHistory).toHaveBeenCalledWith($scope.docID) + expect(this.AppDocsManager.wrapForHistory).toHaveBeenCalledWith(this.$scope.docID) done() }) it('forwards a message with a document', function (done) { - createController(true, false) - $scope.messageID = 'id039' + this.$scope.messageID = 'id039' + var messageID = this.$scope.messageID - $scope.forward() - expect($input).toEqual({canSend: true}) - expect($scope.$broadcast).toHaveBeenCalledWith('history_focus', { + this.$scope.forward() + expect(this.PeersSelectService.$input).toEqual({canSend: true}) + expect(this.$scope.$broadcast).toHaveBeenCalledWith('history_focus', { peerString: 'Peerselected', attachment: { _: 'fwd_messages', - id: [$scope.messageID] + id: [messageID] } }) done() }) it('deletes a message with a document', function (done) { - createController(false, false) - $scope.messageID = 'id123' + this.$scope.messageID = 'id123' - $scope.delete() - expect($input).toEqual({type: 'MESSAGE_DELETE'}) - expect($messManager.deleteMessages).toHaveBeenCalledWith([$scope.messageID]) + this.$scope.delete() + expect(this.ErrorService.$input).toEqual({type: 'MESSAGE_DELETE'}) + expect(this.AppMessagesManager.deleteMessages).toHaveBeenCalledWith([this.$scope.messageID]) done() }) it('downloads the document', function (done) { - createController(false, false) - - $scope.download() - expect($docManager.saveDocFile).toHaveBeenCalledWith($scope.docID) + this.$scope.download() + expect(this.AppDocsManager.saveDocFile).toHaveBeenCalledWith(this.$scope.docID) done() }) - it('delete a document linked to a message', function (done) { - createController(false, true) - $scope.messageID = 'id33' + it('can not delete a document not linked to a message', function (done) { + this.$scope.messageID = 'id42' - $rootScope.$broadcast('history_delete') - expect($scope.$on).toHaveBeenCalledWith('history_delete', jasmine.any(Function)) - expect($modalI.dismiss).not.toHaveBeenCalled() + var historyUpdate = {} + this.$rootScope.$broadcast('history_delete', historyUpdate) + expect(this.$scope.$on).toHaveBeenCalledWith('history_delete', jasmine.any(Function)) + expect(this.$modalInstance.dismiss).not.toHaveBeenCalled() + + historyUpdate.msgs = {} + this.$rootScope.$broadcast('history_delete', historyUpdate) + expect(this.$scope.$on).toHaveBeenCalledWith('history_delete', jasmine.any(Function)) + expect(this.$modalInstance.dismiss).not.toHaveBeenCalled() done() }) - it('delete a document linked to a modal instance', function (done) { - createController(false, false) - $scope.messageID = 'id876' - - var $msgs = {} - $msgs[$scope.messageID] = {message: 'some non-empty message'} - $rootScope.$broadcast('history_delete', {msgs: $msgs}) - expect($modalI.dismiss).toHaveBeenCalled() - done() + describe('when the document is related to the message', function () { + beforeEach(function () { + this.historyUpdate = { + msgs: {} + } + }) + it('delete that document', function (done) { + this.$scope.messageID = 'id33' + this.historyUpdate.msgs[this.$scope.messageID] = 'an update for id33' + + this.$rootScope.$broadcast('history_delete', this.historyUpdate) + expect(this.$scope.$on).toHaveBeenCalledWith('history_delete', jasmine.any(Function)) + expect(this.$modalInstance.dismiss).toHaveBeenCalled() + done() + }) }) }) diff --git a/test/unit/controllers/EmbedModalController.js b/test/unit/controllers/EmbedModalController.js index 7aa89649..72bfe10d 100644 --- a/test/unit/controllers/EmbedModalController.js +++ b/test/unit/controllers/EmbedModalController.js @@ -2,18 +2,17 @@ /* global describe, it, inject, expect, beforeEach, jasmine */ describe('EmbedModalController', function () { - var $scope, $rootScope, $webpageManager, $errService, $input, $messManager, $pSelectService, $modalI - beforeEach(module('myApp.controllers')) beforeEach(function () { - $webpageManager = {} - $webpageManager.wrapForFull = jasmine.createSpy('wrapForFull') + this.AppWebPagesManager = { + wrapForFull: jasmine.createSpy('wrapForFull') + } - $input = {} - $errService = { + this.ErrorService = { + input: {}, confirm: function (message) { - $input = message + this.input = message return { then: function (f) { f() @@ -22,9 +21,10 @@ describe('EmbedModalController', function () { } } - $pSelectService = { + this.PeersSelectService = { + input: {}, selectPeer: function (options) { - $input = options + this.input = options return { then: function (f) { f('Peerselected') @@ -33,60 +33,64 @@ describe('EmbedModalController', function () { } } - $messManager = {} - $messManager.deleteMessages = jasmine.createSpy('deleteMessages') + this.AppMessagesManager = { + deleteMessages: jasmine.createSpy('deleteMessages') + } - $modalI = {} - $modalI.dismiss = jasmine.createSpy('dismissModal') + this.$modalInstance = { + dismiss: jasmine.createSpy('dismissModal') + } inject(function (_$controller_, _$rootScope_) { - $rootScope = _$rootScope_ - $rootScope.$broadcast = jasmine.createSpy('$broadcast') - $scope = $rootScope.$new() - $scope.webpageID = 'www.notRelevant.com' + this.$rootScope = _$rootScope_ + this.$rootScope.$broadcast = jasmine.createSpy('$broadcast') + this.$scope = this.$rootScope.$new() + this.$scope.webpageID = 'www.notRelevant.com' + _$controller_('EmbedModalController', { $q: {}, - $scope: $scope, - $rootScope: $rootScope, - $modalInstance: $modalI, - PeersSelectService: $pSelectService, - AppMessagesManager: $messManager, + $scope: this.$scope, + $rootScope: this.$rootScope, + $modalInstance: this.$modalInstance, + PeersSelectService: this.PeersSelectService, + AppMessagesManager: this.AppMessagesManager, AppPeersManager: {}, AppPhotosManager: {}, - AppWebPagesManager: $webpageManager, - ErrorService: $errService + AppWebPagesManager: this.AppWebPagesManager, + ErrorService: this.ErrorService }) }) }) // define tests it('sets the embeded webpage in the scope', function (done) { - expect($scope.nav).toEqual({}) - expect($webpageManager.wrapForFull).toHaveBeenCalledWith($scope.webpageID) + expect(this.$scope.nav).toEqual({}) + expect(this.AppWebPagesManager.wrapForFull).toHaveBeenCalledWith(this.$scope.webpageID) done() }) it('forwards a message with an embeded link', function (done) { - $scope.messageID = 'id1234234' + this.$scope.messageID = 'id1234234' + var messageID = this.$scope.messageID - $scope.forward() - expect($input).toEqual({canSend: true}) - expect($scope.$broadcast).toHaveBeenCalledWith('history_focus', { + this.$scope.forward() + expect(this.PeersSelectService.input).toEqual({canSend: true}) + expect(this.$scope.$broadcast).toHaveBeenCalledWith('history_focus', { peerString: 'Peerselected', attachment: { _: 'fwd_messages', - id: [$scope.messageID] + id: [messageID] } }) done() }) it('deletes a message with an embeded link', function (done) { - $scope.messageID = 'id979565673' + this.$scope.messageID = 'id979565673' - $scope.delete() - expect($input).toEqual({type: 'MESSAGE_DELETE'}) - expect($messManager.deleteMessages).toHaveBeenCalledWith([$scope.messageID]) + this.$scope.delete() + expect(this.ErrorService.input).toEqual({type: 'MESSAGE_DELETE'}) + expect(this.AppMessagesManager.deleteMessages).toHaveBeenCalledWith([this.$scope.messageID]) done() }) }) diff --git a/test/unit/controllers/PeerSelectControllerSpec.js b/test/unit/controllers/PeerSelectControllerSpec.js index 79e858e3..492f489e 100644 --- a/test/unit/controllers/PeerSelectControllerSpec.js +++ b/test/unit/controllers/PeerSelectControllerSpec.js @@ -2,22 +2,20 @@ /* global describe, it, inject, expect, beforeEach */ describe('PeerSelectController', function () { - var $controller, $scope, $q, $mod, $APManager, $EService, createController, timeoutTime, $promiseData, $promise, $promiseFlag - beforeEach(module('myApp.controllers')) beforeEach(function () { // The modalInstance will propably usually give a boolean as return. // However, for testing purposes it is important to gain knowledge about the input of the function - $mod = { + this.$modalInstance = { close: function (arr) { return arr } } - timeoutTime = 1000 + this.oneSecond = 1000 - $APManager = { + this.AppPeersManager = { getPeerString: function (str) { return 'P'.concat(str) }, @@ -29,229 +27,232 @@ describe('PeerSelectController', function () { } } - // The controller is created in the test in order to test different initial content of scope variables. - createController = function () { - $controller('PeerSelectController', { - $scope: $scope, - $modalInstance: $mod, - $q: $q, - AppPeersManager: $APManager, - ErrorService: $EService - }) - } - - $promiseFlag = false - $promise = { + this.promise = { + promiseFlag: false, then: function (f) { - $promiseFlag = true + this.$promiseFlag = true f() } } - $EService = { - confirm: function (data) { - $promiseData = data - return $promise + var promise = this.promise + + this.$q = { + when: function () { + return promise } } - $q = { - when: function () { - return $promise + this.ErrorService = { + $promiseData: {}, + confirm: function (data) { + this.$promiseData = data + return promise } } inject(function (_$controller_, _$rootScope_) { - $controller = _$controller_ - $scope = _$rootScope_.$new() + this.$controller = _$controller_ + this.$scope = _$rootScope_.$new() + + // The controller is created in the test in order to test different initial content of scope variables. + this.createController = function () { + this.$controller('PeerSelectController', { + $scope: this.$scope, + $modalInstance: this.$modalInstance, + $q: this.$q, + AppPeersManager: this.AppPeersManager, + ErrorService: this.ErrorService + }) + } }) }) it('initialises properties', function (done) { - createController() + this.createController() // Set timer to give the controller time to resolve. setTimeout(function () { - expect($scope.selectedPeers).toBeDefined() - expect($scope.selectedPeersIDs).toBeDefined() - expect($scope.selectedCount).toBeDefined() - }, timeoutTime) + expect(this.$scope.selectedPeers).toBeDefined() + expect(this.$scope.selectedPeersIDs).toBeDefined() + expect(this.$scope.selectedCount).toBeDefined() + }, this.oneSecond) done() }) it('compiles with a shareLinkPromise that resolves', function (done) { var expected = 'testURL' - $scope.shareLinkPromise = { + var oneSecond = this.oneSecond + this.$scope.shareLinkPromise = { then: function (resolve, reject) { - setTimeout(resolve(expected), timeoutTime) + setTimeout(resolve(expected), oneSecond) } } - createController() + this.createController() - setTimeout(function () { - expect($scope.shareLink.loading).toBe(true) - expect($scope.shareLink.url).not.toBeDefined() - setTimeout(function () { - expect($scope.shareLink.url).toBe(expected) - }, timeoutTime) - }, timeoutTime) + function afterLoad () { + expect(this.$scope.shareLink.url).toBe(expected) + } + + function duringLoad () { + expect(this.$scope.shareLink.loading).toBe(true) + expect(this.$scope.shareLink.url).not.toBeDefined() + setTimeout(afterLoad, oneSecond) + } + + setTimeout(duringLoad, oneSecond) done() }) it('compiles with a shareLinkPromise that doesn\'t resolve', function (done) { - $scope.shareLinkPromise = { + var oneSecond = this.oneSecond + this.$scope.shareLinkPromise = { then: function (resolve, reject) { - setTimeout(reject(), timeoutTime) + setTimeout(reject(), oneSecond) } } - createController() + this.createController() - setTimeout(function () { - expect($scope.shareLink.loading).toBe(true) - setTimeout(function () { - expect($scope.shareLink).not.toBeDefined() - }, timeoutTime) - }, timeoutTime) - done() - }) - - it('can select and submit a single dialog without confirmed type', function (done) { - createController() - - $scope.dialogSelect('dialogX') - - expect($promiseData).not.toBeDefined() - expect($promiseFlag).toBe(true) - - done() - }) - - it('can select and submit a single dialog with confirmed type', function (done) { - createController() - - $scope.confirm_type = 'INVITE_TO_GROUP' - $scope.dialogSelect('dialogX') - - var expected = { - type: 'INVITE_TO_GROUP', - peer_id: 'X', - peer_data: 'Xpeer' + function afterLoad () { + expect(this.$scope.shareLink).not.toBeDefined() } - expect($promiseData).toEqual(expected) - expect($promiseFlag).toBe(true) + function duringLoad () { + expect(this.$scope.shareLink.loading).toBe(true) + setTimeout(afterLoad, oneSecond) + } + setTimeout(duringLoad, oneSecond) done() }) - it('can select a dialog', function (done) { - createController() + describe('after initialisation', function () { + beforeEach(function () { + this.createController() + }) - $scope.multiSelect = true - $scope.dialogSelect('dialogX') + it('can select and submit a single dialog without confirmed type', function (done) { + this.$scope.dialogSelect('dialogX') - var expected = ['X'] + expect(this.ErrorService.$promiseData).toEqual({}) + expect(this.promise.$promiseFlag).toBe(true) - expect($scope.selectedPeers['X']).toBe('Xpeer') - expect($scope.selectedCount).toBe(1) - expect($scope.selectedPeerIDs).toEqual(expected) + done() + }) - done() - }) + it('can select and submit a single dialog with confirmed type', function (done) { + this.$scope.confirm_type = 'INVITE_TO_GROUP' + this.$scope.dialogSelect('dialogX') - it('can select multiple dialogs', function (done) { - createController() + var peerId = 'X' + var expected = { + type: 'INVITE_TO_GROUP', + peer_id: peerId, + peer_data: this.AppPeersManager.getPeer(peerId) + } - $scope.multiSelect = true - $scope.dialogSelect('dialogX') - $scope.dialogSelect('dialogZ') - $scope.dialogSelect('dialogY') + expect(this.ErrorService.$promiseData).toEqual(expected) + expect(this.promise.$promiseFlag).toBe(true) - var expected = ['Y', 'Z', 'X'] + done() + }) - expect($scope.selectedCount).toBe(3) - expect($scope.selectedPeerIDs).toEqual(expected) + it('can select a dialog', function (done) { + this.$scope.multiSelect = true + this.$scope.dialogSelect('dialogX') - done() - }) + var expected = { + selectedPeers: 'Xpeer', + selectedPeerIDs: ['X'] + } - it('can unselect a dialog', function (done) { - createController() + expect(this.$scope.selectedPeers['X']).toBe(expected.selectedPeers) + expect(this.$scope.selectedCount).toBe(1) + expect(this.$scope.selectedPeerIDs).toEqual(expected.selectedPeerIDs) - $scope.multiSelect = true - $scope.selectedCount = 1 - $scope.selectedPeers['Y'] = 'aYPeer' - $scope.selectedPeerIDs.unshift('Y') + done() + }) - $scope.dialogSelect('dialogY') + it('can select multiple dialogs', function (done) { + this.$scope.multiSelect = true + this.$scope.dialogSelect('dialogX') + this.$scope.dialogSelect('dialogZ') + this.$scope.dialogSelect('dialogY') - var expected = [] + var expected = ['Y', 'Z', 'X'] - expect($scope.selectedPeers['Y']).not.toBeDefined() - expect($scope.selectedCount).toBe(0) - expect($scope.selectedPeerIDs).toEqual(expected) + expect(this.$scope.selectedCount).toBe(3) + expect(this.$scope.selectedPeerIDs).toEqual(expected) - done() - }) + done() + }) - it('can select multiple dialogs', function (done) { - createController() + it('can unselect a dialog', function (done) { + this.$scope.multiSelect = true + this.$scope.selectedCount = 1 + this.$scope.selectedPeers['Y'] = 'aYPeer' + this.$scope.selectedPeerIDs.unshift('Y') - $scope.multiSelect = true - $scope.dialogSelect('dialogX') - $scope.dialogSelect('dialogZ') - $scope.dialogSelect('dialogY') - $scope.dialogSelect('dialogZ') + this.$scope.dialogSelect('dialogY') - var expected = ['Y', 'X'] + var expected = [] - expect($scope.selectedCount).toBe(2) - expect($scope.selectedPeerIDs).toEqual(expected) + expect(this.$scope.selectedPeers['Y']).not.toBeDefined() + expect(this.$scope.selectedCount).toBe(0) + expect(this.$scope.selectedPeerIDs).toEqual(expected) - done() - }) + done() + }) - it('can\'t submit a empty set of dialogs', function (done) { - createController() + it('can select multiple dialogs', function (done) { + this.$scope.multiSelect = true + this.$scope.dialogSelect('dialogX') + this.$scope.dialogSelect('dialogZ') + this.$scope.dialogSelect('dialogY') + this.$scope.dialogSelect('dialogZ') - expect($scope.submitSelected()).not.toBeDefined() + var expected = ['Y', 'X'] - done() - }) + expect(this.$scope.selectedCount).toBe(2) + expect(this.$scope.selectedPeerIDs).toEqual(expected) - it('can submit one dialog', function (done) { - createController() + done() + }) - $scope.selectedCount = 1 - $scope.selectedPeers['test'] = 'peer' - var expected = ['Ptest'] - expect($scope.submitSelected()).toEqual(expected) + it('can\'t submit a empty set of dialogs', function (done) { + expect(this.$scope.submitSelected()).not.toBeDefined() - done() - }) + done() + }) - it('can submit multiple dialogs', function (done) { - createController() + it('can submit one dialog', function (done) { + this.$scope.selectedCount = 1 + this.$scope.selectedPeers['test'] = 'peer' + var expected = ['Ptest'] + expect(this.$scope.submitSelected()).toEqual(expected) - $scope.selectedCount = 3 - $scope.selectedPeers['test1'] = $scope.selectedPeers['test2'] = $scope.selectedPeers['test4'] = 'peer' + done() + }) - var expected = ['Ptest4', 'Ptest2', 'Ptest1'] - expect($scope.submitSelected()).toEqual(expected) + it('can submit multiple dialogs', function (done) { + this.$scope.selectedCount = 3 + this.$scope.selectedPeers['test1'] = this.$scope.selectedPeers['test2'] = this.$scope.selectedPeers['test4'] = 'peer' - done() - }) + var expected = ['Ptest4', 'Ptest2', 'Ptest1'] + expect(this.$scope.submitSelected()).toEqual(expected) - it('can toggle', function (done) { - createController() + done() + }) - var broadcastFlag = '' - $scope.$broadcast = function (input) { broadcastFlag = input } + it('can toggle', function (done) { + var broadcastFlag = '' + this.$scope.$broadcast = function (input) { broadcastFlag = input } - $scope.toggleSearch() - expect(broadcastFlag).toBe('dialogs_search_toggle') + this.$scope.toggleSearch() + expect(broadcastFlag).toBe('dialogs_search_toggle') - done() + done() + }) }) }) diff --git a/test/unit/controllers/VideoModalControllerSpec.js b/test/unit/controllers/VideoModalControllerSpec.js index 9f5e14f7..b24e3ee1 100644 --- a/test/unit/controllers/VideoModalControllerSpec.js +++ b/test/unit/controllers/VideoModalControllerSpec.js @@ -1,20 +1,19 @@ 'use strict' -/* global describe, it, inject, expect, beforeEach, jasmine */ +/* global describe, it, inject, expect, beforeEach, jasmine, spyOn */ describe('VideoModalController', function () { - var $controller, $scope, $rootScope, $docManager, $errService, $input, $messManager, $pSelectService, $modalI, createController - beforeEach(module('myApp.controllers')) beforeEach(function () { - $docManager = {} - $docManager.wrapVideoForFull = jasmine.createSpy('wrapVideoForFull') - $docManager.saveDocFile = jasmine.createSpy('saveDocFile') + this.AppDocsManager = { + wrapVideoForFull: jasmine.createSpy('wrapVideoForFull'), + saveDocFile: jasmine.createSpy('saveDocFile') + } - $input = {} - $errService = { + this.ErrorService = { + input: {}, confirm: function (message) { - $input = message + this.input = message return { then: function (f) { f() @@ -23,9 +22,10 @@ describe('VideoModalController', function () { } } - $pSelectService = { + this.PeersSelectService = { + input: {}, selectPeer: function (options) { - $input = options + this.input = options return { then: function (f) { f('Peerselected') @@ -34,102 +34,114 @@ describe('VideoModalController', function () { } } - createController = function (spyBroadcast, spyOn) { - if (spyBroadcast) { - $rootScope.$broadcast = jasmine.createSpy('$broadcast') - } - if (spyOn) { - $scope.$on = jasmine.createSpy('$on') - } - $controller('VideoModalController', { - $scope: $scope, - $rootScope: $rootScope, - $modalInstance: $modalI, - PeersSelectService: $pSelectService, - AppMessagesManager: $messManager, - AppDocsManager: $docManager, - AppPeersManager: {}, - ErrorService: $errService - }) + this.AppMessagesManager = { + deleteMessages: jasmine.createSpy('deleteMessages') } - $messManager = {} - $messManager.deleteMessages = jasmine.createSpy('deleteMessages') - - $modalI = {} - $modalI.dismiss = jasmine.createSpy('dismissModal') + this.$modalInstance = { + dismiss: jasmine.createSpy('dismissModal') + } inject(function (_$controller_, _$rootScope_) { - $rootScope = _$rootScope_ - $scope = $rootScope.$new() - $scope.docID = 'randomvideo' - - $controller = _$controller_ + this.$rootScope = _$rootScope_ + this.$scope = this.$rootScope.$new() + this.$scope.docID = 'randomvideo' + + this.$controller = _$controller_ + + spyOn(this.$rootScope, '$broadcast').and.callThrough() + spyOn(this.$scope, '$on').and.callThrough() + + this.$controller('VideoModalController', { + $scope: this.$scope, + $rootScope: this.$rootScope, + $modalInstance: this.$modalInstance, + PeersSelectService: this.PeersSelectService, + AppMessagesManager: this.AppMessagesManager, + AppDocsManager: this.AppDocsManager, + AppPeersManager: {}, + ErrorService: this.ErrorService + }) }) }) // define tests it('sets the video in the scope', function (done) { - createController(false, false) - - expect($scope.progress).toEqual({enabled: false}) - expect($scope.player).toEqual({}) - expect($docManager.wrapVideoForFull).toHaveBeenCalledWith($scope.docID) + expect(this.$scope.progress).toEqual({enabled: false}) + expect(this.$scope.player).toEqual({}) + expect(this.AppDocsManager.wrapVideoForFull).toHaveBeenCalledWith(this.$scope.docID) done() }) it('forwards a message with a video', function (done) { - createController(true, false) - $scope.messageID = 'id68567' + this.$scope.messageID = 'id68567' + var messageID = this.$scope.messageID - $scope.forward() - expect($input).toEqual({canSend: true}) - expect($scope.$broadcast).toHaveBeenCalledWith('history_focus', { + this.$scope.forward() + expect(this.PeersSelectService.input).toEqual({canSend: true}) + expect(this.$scope.$broadcast).toHaveBeenCalledWith('history_focus', { peerString: 'Peerselected', attachment: { _: 'fwd_messages', - id: [$scope.messageID] + id: [messageID] } }) done() }) it('deletes a message with a video', function (done) { - createController(false, false) - $scope.messageID = 'id235235' + this.$scope.messageID = 'id235235' - $scope.delete() - expect($input).toEqual({type: 'MESSAGE_DELETE'}) - expect($messManager.deleteMessages).toHaveBeenCalledWith([$scope.messageID]) + this.$scope.delete() + expect(this.ErrorService.input).toEqual({type: 'MESSAGE_DELETE'}) + expect(this.AppMessagesManager.deleteMessages).toHaveBeenCalledWith([this.$scope.messageID]) done() }) it('downloads the document (video)', function (done) { - createController(false, false) - - $scope.download() - expect($docManager.saveDocFile).toHaveBeenCalledWith($scope.docID) + this.$scope.download() + expect(this.AppDocsManager.saveDocFile).toHaveBeenCalledWith(this.$scope.docID) done() }) it('delete a video linked to a message', function (done) { - createController(false, true) - $scope.messageID = 'id2352' + this.$scope.messageID = 'id2352' - $rootScope.$broadcast('history_delete') - expect($scope.$on).toHaveBeenCalledWith('history_delete', jasmine.any(Function)) - expect($modalI.dismiss).not.toHaveBeenCalled() + this.$rootScope.$broadcast('history_delete') + expect(this.$scope.$on).toHaveBeenCalledWith('history_delete', jasmine.any(Function)) + expect(this.$modalInstance.dismiss).not.toHaveBeenCalled() done() }) - it('delete a video linked to a modal instance', function (done) { - createController(false, false) - $scope.messageID = 'id6234' + it('can not delete a video not linked to a message', function (done) { + this.$scope.messageID = 'id42' - var $msgs = {} - $msgs[$scope.messageID] = {message: 'some non-empty message'} - $rootScope.$broadcast('history_delete', {msgs: $msgs}) - expect($modalI.dismiss).toHaveBeenCalled() + var historyUpdate = {} + this.$rootScope.$broadcast('history_delete', historyUpdate) + expect(this.$scope.$on).toHaveBeenCalledWith('history_delete', jasmine.any(Function)) + expect(this.$modalInstance.dismiss).not.toHaveBeenCalled() + + historyUpdate.msgs = {} + this.$rootScope.$broadcast('history_delete', historyUpdate) + expect(this.$scope.$on).toHaveBeenCalledWith('history_delete', jasmine.any(Function)) + expect(this.$modalInstance.dismiss).not.toHaveBeenCalled() done() }) + + describe('when the video is related to the message', function () { + beforeEach(function () { + this.historyUpdate = { + msgs: {} + } + }) + it('delete that video', function (done) { + this.$scope.messageID = 'id33' + this.historyUpdate.msgs[this.$scope.messageID] = 'an update for id33' + + this.$rootScope.$broadcast('history_delete', this.historyUpdate) + expect(this.$scope.$on).toHaveBeenCalledWith('history_delete', jasmine.any(Function)) + expect(this.$modalInstance.dismiss).toHaveBeenCalled() + done() + }) + }) }) diff --git a/test/unit/directives/myHeadDirective.js b/test/unit/directives/myHeadDirective.js index dc7294e9..029aebc4 100644 --- a/test/unit/directives/myHeadDirective.js +++ b/test/unit/directives/myHeadDirective.js @@ -2,25 +2,23 @@ /* global describe, it, inject, expect, beforeEach */ describe('myHead directive', function () { - var $compile, $rootScope - beforeEach(module('myApp.templates')) beforeEach(module('myApp.directives')) beforeEach(inject(function (_$compile_, _$rootScope_) { - $compile = _$compile_ - $rootScope = _$rootScope_ + this.$compile = _$compile_ + this.$rootScope = _$rootScope_ })) it('compiles a my-head attribute', function () { - var compiledElement = $compile('
')($rootScope) - $rootScope.$digest() // Fire watchers + var compiledElement = this.$compile('
')(this.$rootScope) + this.$rootScope.$digest() expect(compiledElement.html()).toContain('tg_page_head') }) it('compiles a my-head element', function () { - var compiledElement = $compile('')($rootScope) - $rootScope.$digest() // Fire watchers + var compiledElement = this.$compile('')(this.$rootScope) + this.$rootScope.$digest() expect(compiledElement.html()).toContain('tg_page_head') }) }) diff --git a/test/unit/directives/myLangFooterDirective.js b/test/unit/directives/myLangFooterDirective.js index abb987d9..2ebdaff0 100644 --- a/test/unit/directives/myLangFooterDirective.js +++ b/test/unit/directives/myLangFooterDirective.js @@ -2,8 +2,6 @@ /* global describe, it, inject, expect, beforeEach */ describe('myLangFooter directive', function () { - var $compile, $rootScope - beforeEach(module('ui.bootstrap')) beforeEach(module('myApp.templates')) // ErrorServiceProvider in myApp.services is needed by @@ -13,20 +11,20 @@ describe('myLangFooter directive', function () { beforeEach(module('myApp.directives')) beforeEach(inject(function (_$compile_, _$rootScope_) { - $compile = _$compile_ - $rootScope = _$rootScope_ + this.$compile = _$compile_ + this.$rootScope = _$rootScope_ })) it('compiles a my-lang-footer attribute', function () { - var compiledElement = $compile('
')($rootScope) - $rootScope.$digest() // Fire watchers + var compiledElement = this.$compile('
')(this.$rootScope) + this.$rootScope.$digest() expect(compiledElement.html()).toContain('footer_lang_link') expect(compiledElement.html()).toContain('AppLangSelectController') }) it('compiles a my-lang-footer element', function () { - var compiledElement = $compile('')($rootScope) - $rootScope.$digest() // Fire watchers + var compiledElement = this.$compile('')(this.$rootScope) + this.$rootScope.$digest() expect(compiledElement.html()).toContain('footer_lang_link') expect(compiledElement.html()).toContain('AppLangSelectController') }) diff --git a/test/unit/services/PhonebookContactsServiceSpec.js b/test/unit/services/PhonebookContactsServiceSpec.js index 2d3225b0..a6128ca0 100644 --- a/test/unit/services/PhonebookContactsServiceSpec.js +++ b/test/unit/services/PhonebookContactsServiceSpec.js @@ -2,52 +2,50 @@ /* global describe, it, inject, expect, beforeEach, jasmine, xit */ describe('PhonebookContactsService', function () { - var PhonebookContactsService, $modal - beforeEach(module('ui.bootstrap')) beforeEach(module('myApp.services')) beforeEach(inject(function (_PhonebookContactsService_) { - PhonebookContactsService = _PhonebookContactsService_ + this.PhonebookContactsService = _PhonebookContactsService_ })) describe('Public API:', function () { it('checks availability', function () { - expect(PhonebookContactsService.isAvailable).toBeDefined() + expect(this.PhonebookContactsService.isAvailable).toBeDefined() }) it('open the phonebook for import', function () { - expect(PhonebookContactsService.openPhonebookImport).toBeDefined() + expect(this.PhonebookContactsService.openPhonebookImport).toBeDefined() }) it('get phonebook contacts', function () { - expect(PhonebookContactsService.getPhonebookContacts).toBeDefined() + expect(this.PhonebookContactsService.getPhonebookContacts).toBeDefined() }) describe('usage', function () { describe('of isAvailable()', function () { it('returns false in most cases', function (done) { - expect(PhonebookContactsService.isAvailable()).toBe(false) + expect(this.PhonebookContactsService.isAvailable()).toBe(false) done() }) }) describe('of openPhonebookImport()', function () { beforeEach(function () { - $modal = { + this.$modal = { open: jasmine.createSpy('open') } }) xit('opens a modal', function () { - PhonebookContactsService.openPhonebookImport() - expect($modal.open).toHaveBeenCalled() + this.PhonebookContactsService.openPhonebookImport() + expect(this.$modal.open).toHaveBeenCalled() }) }) describe('of getPhonebookContacts()', function () { xit('will get rejected in most cases', function (done) { - var promise = PhonebookContactsService.getPhonebookContacts() + var promise = this.PhonebookContactsService.getPhonebookContacts() promise.finally(function () { expect(promise.isFullfilled()).toBe(true) done() From aea853055654b5b2d67231dde3badeda511d977b Mon Sep 17 00:00:00 2001 From: Bart Date: Wed, 28 Jun 2017 17:04:48 +0200 Subject: [PATCH 09/49] Added tests to improve Controller test coverage to over 10% (#1428) * fully tested CountrySelectModal Controller * Added test CountrySelectModal Controller for forgotten scenarios * fully tested ImportContactModal Controller * fully tested ProfileEditModal Controller and cleanup style of tests * fully tested PasswordRecoveryModal Controller * tested most of UsernameEditModal Controller * Improved readability, refactored beforeEach ImportContactModalControllerSpec * Tried to make the code more DRY * removed unnecessary 'this.' --- app/js/controllers.js | 14 +- .../CountrySelectModalControllerSpec.js | 181 ++++++++++++++++++ .../ImportContactModalControllerSpec.js | 160 ++++++++++++++++ .../PasswordRecoveryModalControllerSpec.js | 113 +++++++++++ .../ProfileEditModalControllerSpec.js | 108 +++++++++++ .../UsernameEditModalControllerSpec.js | 146 ++++++++++++++ 6 files changed, 716 insertions(+), 6 deletions(-) create mode 100644 test/unit/controllers/CountrySelectModalControllerSpec.js create mode 100644 test/unit/controllers/ImportContactModalControllerSpec.js create mode 100644 test/unit/controllers/PasswordRecoveryModalControllerSpec.js create mode 100644 test/unit/controllers/ProfileEditModalControllerSpec.js create mode 100644 test/unit/controllers/UsernameEditModalControllerSpec.js diff --git a/app/js/controllers.js b/app/js/controllers.js index b579e8bb..ad7ffe58 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -4455,9 +4455,11 @@ angular.module('myApp.controllers', ['myApp.i18n']) AppUsersManager.saveApiUser(user) $modalInstance.close() }, function (error) { - if (error.type == 'USERNAME_NOT_MODIFIED') { - error.handled = true - $modalInstance.close() + switch (error.type) { + case 'USERNAME_NOT_MODIFIED': + error.handled = true + $modalInstance.close() + break } })['finally'](function () { delete $scope.profile.updating @@ -4470,9 +4472,9 @@ angular.module('myApp.controllers', ['myApp.i18n']) return } MtpApiManager.invokeApi('account.checkUsername', { - username: newVal || '' + username: newVal }).then(function (valid) { - if ($scope.profile.username != newVal) { + if ($scope.profile.username !== newVal) { return } if (valid) { @@ -4481,7 +4483,7 @@ angular.module('myApp.controllers', ['myApp.i18n']) $scope.checked = {error: true} } }, function (error) { - if ($scope.profile.username != newVal) { + if ($scope.profile.username !== newVal) { return } switch (error.type) { diff --git a/test/unit/controllers/CountrySelectModalControllerSpec.js b/test/unit/controllers/CountrySelectModalControllerSpec.js new file mode 100644 index 00000000..8d7ea801 --- /dev/null +++ b/test/unit/controllers/CountrySelectModalControllerSpec.js @@ -0,0 +1,181 @@ +'use strict' +/* global describe, it, inject, expect, beforeEach, afterEach, spyOn, jasmine, Config, SearchIndexManager */ + +describe('CountrySelectModalController', function () { + beforeEach(module('myApp.controllers')) + + beforeEach(inject(function (_$controller_, _$rootScope_, ___) { + this.$controller = _$controller_ + this.$rootScope = _$rootScope_ + this._ = ___ + + this.$scope = _$rootScope_.$new() + this.createController = function () { + this.$controller('CountrySelectModalController', { + $scope: this.$scope, + $modalInstance: {}, + $rootScope: this.$rootScope, + _: this._ + }) + } + + spyOn(SearchIndexManager, 'indexObject').and.callThrough() + })) + + beforeEach(function () { + this.ConfigCountryCodes = Config.CountryCodes + this.testData = { + singleCode: { + countryCode: ['NL', 'country_select_modal_country_nl', '+31'], + countryCode_full: 'NL Netherlands +31', + countryPhoneSets: [{ name: 'Netherlands', code: '+31' }] + }, + multipleCode: { + countryCode: ['VA', 'country_select_modal_country_va', '+39 06 698', '+379'], + countryCode_full: 'VA Vatican City +39 06 698 +379', + countryPhoneSets: [{ name: 'Vatican City', code: '+39 06 698' }, { name: 'Vatican City', code: '+379' }] + }, + multipleCode2: { + countryCode: ['AB', 'country_select_modal_country_ab', '+7 840', '+7 940', '+995 44'], + countryCode_full: 'AB Abkhazia +7 840 +7 940 +995 44', + countryPhoneSets: [{ name: 'Abkhazia', code: '+7 840' }, { name: 'Abkhazia', code: '+7 940' }, { name: 'Abkhazia', code: '+995 44' }] + }, + allSetsSorted: function () { + return [].concat(this.multipleCode2.countryPhoneSets, this.singleCode.countryPhoneSets, this.multipleCode.countryPhoneSets) + }, + allSetsUnsorted: function () { + return [].concat(this.singleCode.countryPhoneSets, this.multipleCode2.countryPhoneSets, this.multipleCode.countryPhoneSets) + } + } + }) + + afterEach(function () { + Config.CountryCodes = this.ConfigCountryCodes + }) + + // The tests before controller initiation. + // In order to mock Config data + + it('initiates Country to select', function (done) { + Config.CountryCodes = [this.testData.singleCode.countryCode] + var expected = this.testData.singleCode.countryCode_full + + this.createController() + + expect(SearchIndexManager.indexObject).toHaveBeenCalledWith(0, expected, jasmine.any(Object)) + done() + }) + + it('initiates Countriy to select with 2 (or more) country codes', function (done) { + Config.CountryCodes = [this.testData.multipleCode.countryCode] + var expected = this.testData.multipleCode.countryCode_full + + this.createController() + + expect(SearchIndexManager.indexObject).toHaveBeenCalledWith(0, expected, jasmine.any(Object)) + done() + }) + + it('initiates Countries to select', function (done) { + Config.CountryCodes = [this.testData.singleCode.countryCode, this.testData.multipleCode.countryCode] + var expected1 = this.testData.singleCode.countryCode_full + var expected2 = this.testData.multipleCode.countryCode_full + + this.createController() + + expect(SearchIndexManager.indexObject).toHaveBeenCalledWith(0, expected1, jasmine.any(Object)) + expect(SearchIndexManager.indexObject).toHaveBeenCalledWith(1, expected2, jasmine.any(Object)) + done() + }) + + describe('(after initiation)', function () { + beforeEach(function () { + Config.CountryCodes = [this.testData.singleCode.countryCode, this.testData.multipleCode2.countryCode, this.testData.multipleCode.countryCode] + this.createController() + }) + + it('initiates the right values', function (done) { + expect(this.$scope.search).toEqual({}) + expect(this.$scope.slice).toEqual({limit: 20, limitDelta: 20}) + done() + }) + + it('creates a sorted list of all selectable countries', function (done) { + this.$rootScope.$digest() + var expected = this.testData.allSetsSorted() + + expect(this.$scope.countries).toEqual(expected) + done() + }) + + it('creates a sorted list of all selectable countries for an empty string-input', function (done) { + this.$rootScope.$digest() + this.$scope.search.query = '' + this.$rootScope.$digest() + var expected = this.testData.allSetsSorted() + + expect(this.$scope.countries).toEqual(expected) + done() + }) + + describe(', when an input is given,', function () { + beforeEach(function () { + this.$rootScope.$digest() + this.$scope.search.query = 'A' + }) + + it('creates a sorted list of all countries containing the input', function (done) { + var expected = this.testData.allSetsSorted() + + expect(this.$scope.countries).toEqual(expected) + + this.$rootScope.$digest() + expected = this.testData.multipleCode2.countryPhoneSets + + expect(this.$scope.countries).toEqual(expected) + done() + }) + + it('restore the original list when the input is deleted', function (done) { + this.$rootScope.$digest() + this.$scope.search.query = '' + this.$rootScope.$digest() + + var expected = this.testData.allSetsSorted() + + expect(this.$scope.countries).toEqual(expected) + done() + }) + + it('restore the original list when the input is changed', function (done) { + this.$rootScope.$digest() + this.$scope.search.query = 'Ne' + this.$rootScope.$digest() + + var expected = this.testData.singleCode.countryPhoneSets + + expect(this.$scope.countries).toEqual(expected) + done() + }) + }) + + describe(', when no sorting is available,', function () { + beforeEach(function () { + this.StringCompare = String.prototype.localeCompare + String.prototype.localeCompare = null + }) + + afterEach(function () { + String.prototype.localeCompare = this.StringCompare + }) + + it('creates a list of all selectable countries', function (done) { + this.$rootScope.$digest() + var expected = this.testData.allSetsUnsorted() + + expect(this.$scope.countries).toEqual(expected) + done() + }) + }) + }) +}) diff --git a/test/unit/controllers/ImportContactModalControllerSpec.js b/test/unit/controllers/ImportContactModalControllerSpec.js new file mode 100644 index 00000000..1603d348 --- /dev/null +++ b/test/unit/controllers/ImportContactModalControllerSpec.js @@ -0,0 +1,160 @@ +'use strict' +/* global describe, it, inject, expect, beforeEach, jasmine */ + +describe('ImportContactModalController', function () { + beforeEach(module('myApp.controllers')) + + beforeEach(function () { + this.modalInstance = { + close: jasmine.createSpy('close'), + dismiss: jasmine.createSpy('dismiss') + } + + this.randomID = 123456852 + + function thenFinallyFactory (input) { + return { + then: function (callback) { + callback(input) + return { + finally: function (callback) { + callback() + } + } + } + } + } + + this.AppUsersManager = { + thenValue: null, + importContact: function (phone, first, last) { + this.input = { + phone: phone, + first: first, + last: last + } + return thenFinallyFactory(this.thenValue) + } + } + + this.ErrorService = { + show: jasmine.createSpy('show') + } + + this.PhonebookContactsService = { + thenValue: false, + isAvailable: function () { + return false + }, + openPhonebookImport: function () { + var then = thenFinallyFactory(this.thenValue) + return { + result: then + } + } + } + + inject(function (_$controller_, _$rootScope_) { + this.$controller = _$controller_ + this.$rootScope = _$rootScope_ + + this.$scope = _$rootScope_.$new() + this.createController = function () { + this.$controller('ImportContactModalController', { + $scope: this.$scope, + $modalInstance: this.modalInstance, + $rootScope: this.$rootScope, + AppUsersManager: this.AppUsersManager, + ErrorService: this.ErrorService, + PhonebookContactsService: this.PhonebookContactsService + }) + } + }) + }) + + it('can create a controller when no imported contacts are defined', function (done) { + this.createController() + + expect(this.$scope.importContact).toEqual({}) + done() + }) + + it('can create a controller when imported contacts are defined', function (done) { + this.$scope.importContact = { non_empty: true } + this.createController() + var expected = { non_empty: true } + + expect(this.$scope.importContact).toEqual(expected) + done() + }) + + describe('(when the controller is created), ', function () { + beforeEach(function () { + this.createController() + }) + + it('does nothing when no phonenumber was entered', function (done) { + this.$scope.doImport() + + expect(this.$scope.progress).not.toBeDefined() + + this.$scope.importContact = { + first_name: 'bob' + } + expect(this.$scope.progress).not.toBeDefined() + done() + }) + + describe('when contact-information is added, it', function () { + beforeEach(function () { + this.$scope.importContact = { + phone: '+316132465798' + } + }) + + it('can handle phoneNumber that are not telegram users', function (done) { + this.$scope.doImport() + + expect(this.ErrorService.show).toHaveBeenCalledWith({ error: {code: 404, type: 'USER_NOT_USING_TELEGRAM'} }) + expect(this.modalInstance.close).toHaveBeenCalledWith(null) + expect(this.$scope.progress.enabled).not.toBeDefined() + done() + }) + + it('can import contacts that are telegram users', function (done) { + this.AppUsersManager.thenValue = this.randomID + this.$scope.doImport() + + expect(this.ErrorService.show).not.toHaveBeenCalled() + expect(this.modalInstance.close).toHaveBeenCalledWith(this.randomID) + expect(this.$scope.progress.enabled).not.toBeDefined() + expect(this.AppUsersManager.input).toEqual({phone: '+316132465798', first: '', last: ''}) + done() + }) + + it('can handle contacts with first and last name', function (done) { + this.$scope.importContact.first_name = 'jan' + this.$scope.importContact.last_name = 'wandelaar' + this.$scope.doImport() + + expect(this.AppUsersManager.input).toEqual({phone: '+316132465798', first: 'jan', last: 'wandelaar'}) + done() + }) + }) + + it('can not import contacts from a phonebook if none were found', function (done) { + this.$scope.importPhonebook() + + expect(this.modalInstance.dismiss).toHaveBeenCalled() + done() + }) + + it('can import contacts from a phonebook', function (done) { + this.PhonebookContactsService.thenValue = {0: 'dummy'} + this.$scope.importPhonebook() + + expect(this.modalInstance.close).toHaveBeenCalledWith('dummy') + done() + }) + }) +}) diff --git a/test/unit/controllers/PasswordRecoveryModalControllerSpec.js b/test/unit/controllers/PasswordRecoveryModalControllerSpec.js new file mode 100644 index 00000000..3c2285f1 --- /dev/null +++ b/test/unit/controllers/PasswordRecoveryModalControllerSpec.js @@ -0,0 +1,113 @@ +'use strict' +/* global describe, it, inject, expect, beforeEach, jasmine */ + +describe('PasswordRecoveryModalController', function () { + beforeEach(module('myApp.controllers')) + + beforeEach(function () { + this.PasswordManager = { + errorField: null, + recover: function () { + return this + }, + then: function (callback, error) { + if (!this.errorField) { + callback({}) + } else { + error(this.errorField) + } + return { + finally: function (final) { + final() + } + } + } + } + + this.ErrorService = { alert: jasmine.createSpy('alert') } + this.modalInstance = { + close: jasmine.createSpy('close'), + dismiss: jasmine.createSpy('dismiss') + } + + inject(function (_$controller_, _$rootScope_, ___) { + this.$controller = _$controller_ + this.$scope = _$rootScope_.$new() + this.$scope.recovery = {} + + this.$controller('PasswordRecoveryModalController', { + $scope: this.$scope, + $q: {}, + _: ___, + PasswordManager: this.PasswordManager, + MtpApiManager: {}, + ErrorService: this.ErrorService, + $modalInstance: this.modalInstance + }) + }) + }) + + it('can handle a successful password change', function (done) { + this.$scope.checkCode() + + expect(this.$scope.recovery.updating).toBe(true) + expect(this.ErrorService.alert).toHaveBeenCalledWith('Password deactivated', 'You have disabled Two-Step Verification.') + expect(this.modalInstance.close).toHaveBeenCalled() + done() + }) + + describe('when an error occurs', function () { + beforeEach(function () { + this.PasswordManager.errorField = {} + }) + + it('cancels the recovery', function (done) { + this.$scope.checkCode() + + expect(this.$scope.recovery.updating).not.toBeDefined() + expect(this.ErrorService.alert).not.toHaveBeenCalled() + expect(this.modalInstance.close).not.toHaveBeenCalled() + done() + }) + + it('can handle the error for an empty code', function (done) { + this.PasswordManager.errorField.type = 'CODE_EMPTY' + this.$scope.checkCode() + + expect(this.$scope.recovery.error_field).toEqual('code') + done() + }) + + it('can handle the error for an invalid code', function (done) { + this.PasswordManager.errorField.type = 'CODE_INVALID' + this.$scope.checkCode() + + expect(this.$scope.recovery.error_field).toEqual('code') + done() + }) + + it('can handle the error for an empty password', function (done) { + this.PasswordManager.errorField.type = 'PASSWORD_EMPTY' + this.$scope.checkCode() + + expect(this.modalInstance.dismiss).toHaveBeenCalled() + done() + }) + + it('can handle the error for the unavailability of the recovery', function (done) { + this.PasswordManager.errorField.type = 'PASSWORD_RECOVERY_NA' + this.$scope.checkCode() + + expect(this.modalInstance.dismiss).toHaveBeenCalled() + done() + }) + + it('can handle the error for an expired recovery', function (done) { + this.PasswordManager.errorField.type = 'PASSWORD_RECOVERY_EXPIRED' + this.$scope.checkCode() + + expect(this.modalInstance.dismiss).toHaveBeenCalled() + done() + }) + }) +}) diff --git a/test/unit/controllers/ProfileEditModalControllerSpec.js b/test/unit/controllers/ProfileEditModalControllerSpec.js new file mode 100644 index 00000000..5fc86031 --- /dev/null +++ b/test/unit/controllers/ProfileEditModalControllerSpec.js @@ -0,0 +1,108 @@ +'use strict' +/* global describe, it, inject, expect, beforeEach, jasmine */ + +describe('ProfileEditModalController', function () { + beforeEach(module('myApp.controllers')) + + beforeEach(function () { + var id = 42 + this.randomID = id + + this.MtpApiManager = { + errorField: null, + getUserID: function () { + return { + then: function (callback) { + callback(id) + } + } + }, + invokeApi: function (action, params) { + return this + }, + then: function (callback, error) { + if (!this.errorField) { + callback({}) + } else { + error(this.errorField) + } + return { + finally: function (final) { + final() + } + } + } + } + + this.AppUsersManager = { + getUser: function (userId) { + return { + first_name: 'John', + last_name: 'Doe' + } + }, + saveApiUser: jasmine.createSpy('saveApiUser') + } + this.$modalInstance = { close: jasmine.createSpy('close') } + + inject(function (_$controller_, _$rootScope_) { + this.$controller = _$controller_ + this.$scope = _$rootScope_.$new() + + this.$controller('ProfileEditModalController', { + $scope: this.$scope, + $modalInstance: this.$modalInstance, + AppUsersManager: this.AppUsersManager, + MtpApiManager: this.MtpApiManager + }) + }) + }) + + it('should initiate the right scope', function (done) { + expect(this.$scope.profile).toEqual({first_name: 'John', last_name: 'Doe'}) + expect(this.$scope.error).toEqual({}) + done() + }) + + it('can send a successful profile update request', function (done) { + this.$scope.updateProfile() + + expect(this.AppUsersManager.saveApiUser).toHaveBeenCalled() + expect(this.$modalInstance.close).toHaveBeenCalled() + done() + }) + + it('can handle empty name/surname', function (done) { + delete this.$scope.profile.first_name + delete this.$scope.profile.last_name + this.$scope.updateProfile() + + expect(this.AppUsersManager.saveApiUser).toHaveBeenCalled() + expect(this.$modalInstance.close).toHaveBeenCalled() + done() + }) + + it('can handle an invalid first name error', function (done) { + this.MtpApiManager.errorField = {type: 'FIRSTNAME_INVALID'} + this.$scope.updateProfile() + + expect(this.$scope.error.field).toEqual('first_name') + done() + }) + + it('can handle an invalid last name error', function (done) { + this.MtpApiManager.errorField = {type: 'LASTNAME_INVALID'} + this.$scope.updateProfile() + + expect(this.$scope.error.field).toEqual('last_name') + done() + }) + + it('can handle an unmodified name error', function (done) { + this.MtpApiManager.errorField = {type: 'NAME_NOT_MODIFIED'} + this.$scope.updateProfile() + + expect(this.$modalInstance.close).toHaveBeenCalled() + done() + }) +}) diff --git a/test/unit/controllers/UsernameEditModalControllerSpec.js b/test/unit/controllers/UsernameEditModalControllerSpec.js new file mode 100644 index 00000000..b09a26f4 --- /dev/null +++ b/test/unit/controllers/UsernameEditModalControllerSpec.js @@ -0,0 +1,146 @@ +'use strict' +/* global describe, it, inject, expect, beforeEach, jasmine */ + +describe('UsernameEditModalController', function () { + beforeEach(module('myApp.controllers')) + + beforeEach(function () { + this.MtpApiManager = { + errorField: false, + isValid: true, + invokeApi: function () { + return this + }, + getUserID: function () { + return this + }, + then: function (callback, error) { + if (!this.errorField) { + callback(this.isValid) + } else { + error(this.errorField) + } + return { + finally: function (final) { + final() + } + } + } + } + + this.AppUsersManager = { + saveApiUser: jasmine.createSpy('saveApiUser'), + getUser: function (id) { + return { username: 'bob' } + } + } + + this.modalInstance = { + close: jasmine.createSpy('close') + } + + inject(function (_$controller_, _$rootScope_) { + this.$controller = _$controller_ + this.$scope = _$rootScope_.$new() + + this.$controller('UsernameEditModalController', { + $scope: this.$scope, + $modalInstance: this.modalInstance, + AppUsersManager: this.AppUsersManager, + MtpApiManager: this.MtpApiManager + }) + }) + }) + + it('constructs the information for the modal', function (done) { + var expected = { + username: 'bob' + } + expect(this.$scope.profile).toEqual(expected) + expect(this.$scope.error).toEqual({}) + done() + }) + + it('can handle a successful update of the username', function (done) { + this.$scope.updateUsername() + + expect(this.$scope.checked).toEqual({}) + expect(this.AppUsersManager.saveApiUser).toHaveBeenCalled() + expect(this.modalInstance.close).toHaveBeenCalled() + done() + }) + + it('can handle a successful update of an empty/undefined username', function (done) { + delete this.$scope.profile.username + this.$scope.updateUsername() + + expect(this.$scope.checked).toEqual({}) + expect(this.AppUsersManager.saveApiUser).toHaveBeenCalled() + expect(this.modalInstance.close).toHaveBeenCalled() + done() + }) + + it('can handle an unsuccessful update of an unmodified username', function (done) { + this.MtpApiManager.errorField = { type: 'USERNAME_NOT_MODIFIED' } + this.$scope.updateUsername() + + expect(this.$scope.checked).not.toBeDefined() + expect(this.AppUsersManager.saveApiUser).not.toHaveBeenCalled() + expect(this.modalInstance.close).toHaveBeenCalled() + done() + }) + + it('can check an empty username on change', function (done) { + this.$scope.profile.username = {} + var expected = {} + + this.$scope.$digest() + expect(this.$scope.checked).toEqual(expected) + done() + }) + + it('can check an empty string as username', function (done) { + this.$scope.profile.username = '' + var expected = {} + + this.$scope.$digest() + expect(this.$scope.checked).toEqual(expected) + done() + }) + + it('can check the initial username', function (done) { + // Previous username is expected to be valid + this.$scope.$digest() + var expected = true + + expect(this.$scope.checked.success).toBe(expected) + done() + }) + + it('does not check anything when the name is not changed', function (done) { + this.$scope.$digest() + delete this.$scope.checked.success + this.$scope.$digest() + + expect(this.$scope.checked.success).not.toBeDefined() + done() + }) + + it('can check an invalid username submission', function (done) { + this.MtpApiManager.isValid = false + this.$scope.$digest() + var expected = true + + expect(this.$scope.checked.error).toBe(expected) + done() + }) + + it('can check an invalid username submission 2', function (done) { + this.MtpApiManager.errorField = { type: 'USERNAME_INVALID' } + this.$scope.$digest() + var expected = true + + expect(this.$scope.checked.error).toBe(expected) + done() + }) +}) From d4f07a714ec9e4d869b9787ca47e892ade146295 Mon Sep 17 00:00:00 2001 From: Bakyt Date: Wed, 28 Jun 2017 18:06:48 +0300 Subject: [PATCH 10/49] license url updated for nanoScrollerJS (#1392) --- app/vendor/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/vendor/README.md b/app/vendor/README.md index 79946f76..603a57de 100644 --- a/app/vendor/README.md +++ b/app/vendor/README.md @@ -46,7 +46,7 @@ Normalize, CSS-framework ### [nanoScrollerJS](https://github.com/jamesflorentino/nanoScrollerJS) **Author**: James Florentino -**License**: MIT, https://github.com/jamesflorentino/nanoScrollerJS/blob/master/LICENSE-MIT +**License**: MIT, https://github.com/jamesflorentino/nanoScrollerJS/blob/master/LICENSE Beautiful OS X Lion-like scrollbars From 8bd4651f7c635951b75734f36b114846082e6744 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Wed, 28 Jun 2017 20:44:26 +0300 Subject: [PATCH 11/49] Migrate static maps to Yandex Yandex Static Maps API is free Closes #1415 --- app/js/directives.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/app/js/directives.js b/app/js/directives.js index d039e02a..c2e117a1 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -2411,18 +2411,23 @@ angular.module('myApp.directives', ['myApp.filters']) function link ($scope, element, attrs) { var width = element.attr('width') || 200 var height = element.attr('height') || 200 - var apiKey = Config.ExtCredentials.gmaps.api_key var zoom = width > 200 ? 15 : 13 + var useGoogle = false + var src - element.attr('src', 'img/blank.gif') - - var src = 'https://maps.googleapis.com/maps/api/staticmap?sensor=false¢er=' + $scope.point['lat'] + ',' + $scope.point['long'] + '&zoom=' + zoom + '&size=' + width + 'x' + height + '&scale=2&markers=color:red|size:big|' + $scope.point['lat'] + ',' + $scope.point['long'] - var useApiKey = true - - if (useApiKey) { - src += '&key=' + apiKey + if (useGoogle) { + var apiKey = Config.ExtCredentials.gmaps.api_key + var useApiKey = true + src = 'https://maps.googleapis.com/maps/api/staticmap?sensor=false¢er=' + $scope.point['lat'] + ',' + $scope.point['long'] + '&zoom=' + zoom + '&size=' + width + 'x' + height + '&scale=2&markers=color:red|size:big|' + $scope.point['lat'] + ',' + $scope.point['long'] + if (useApiKey) { + src += '&key=' + apiKey + } + } else { + src = 'https://static-maps.yandex.ru/1.x/?l=map&ll=' + $scope.point['long'] + ',' + $scope.point['lat'] + '&z=' + zoom + '&size=' + width + ',' + height + '&scale=1&pt=' + $scope.point['long'] + ',' + $scope.point['lat'] + ',pm2rdm&lang=en_US' } + element.attr('src', 'img/blank.gif') + ExternalResourcesManager.downloadByURL(src).then(function (url) { element.attr('src', url.valueOf()) }) From 60ac9a942eeaf54e55d618bdadef8baff1d246f4 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Wed, 28 Jun 2017 20:55:03 +0300 Subject: [PATCH 12/49] Allow edit cloud storage old messages Closes #1424 --- app/js/messages_manager.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/js/messages_manager.js b/app/js/messages_manager.js index 718a4622..bbc2c830 100644 --- a/app/js/messages_manager.js +++ b/app/js/messages_manager.js @@ -937,16 +937,16 @@ angular.module('myApp.services') } var message = messagesStorage[messageID] if (!message || - !message.canBeEdited || - message.date < tsNow(true) - 2 * 86400) { + !message.canBeEdited) { return false } - var peerID = getMessagePeer(message) - if (!message.pFlags.out && - message.peerID != AppUsersManager.getSelf().id) { + if (getMessagePeer(message) == AppUsersManager.getSelf().id) { + return true + } + if (message.date < tsNow(true) - 2 * 86400 || + !message.pFlags.out) { return false } - return true } From fb9bd8f1ec76485951d82dda8b8bd31e19dd6ee7 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Thu, 29 Jun 2017 21:30:19 +0300 Subject: [PATCH 13/49] Upgrade to layer 66 Supported Telescope videos Closes #1416 Fixed bug with frozen sent messages --- app/js/directives.js | 94 ++++++++++++- app/js/lib/config.js | 4 +- app/js/lib/ng_utils.js | 8 +- app/js/lib/schema.tl.txt | 133 +++++++++++++++--- app/js/locales/en-us.json | 3 + app/js/messages_manager.js | 33 ++++- app/js/services.js | 13 +- app/less/app.less | 75 ++++++++++ app/partials/desktop/full_round.html | 27 ++++ .../desktop/message_attach_document.html | 2 + app/partials/desktop/message_service.html | 1 + app/partials/desktop/short_message.html | 3 + .../mobile/message_attach_document.html | 2 + app/partials/mobile/message_service.html | 2 + 14 files changed, 363 insertions(+), 37 deletions(-) create mode 100644 app/partials/desktop/full_round.html diff --git a/app/js/directives.js b/app/js/directives.js index c2e117a1..7380f259 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -2195,13 +2195,95 @@ angular.module('myApp.directives', ['myApp.filters']) }, 200) }) } + } + }) + + .directive('myLoadRound', function (AppDocsManager, $timeout) { + + var currentPlayer = false + var currentPlayerScope = false + + return { + link: link, + templateUrl: templateUrl('full_round'), + scope: { + document: '=' + } + } + + function checkPlayer(newPlayer, newScope) { + if (currentPlayer === newPlayer) { + return false + } + if (currentPlayer) { + currentPlayer.pause() + currentPlayer.currentTime = 0 + currentPlayerScope.isActive = false + } + currentPlayer = newPlayer + currentPlayerScope = newScope + } + + function link ($scope, element, attrs) { + var imgWrap = $('.img_round_image_wrap', element) + imgWrap.css({width: $scope.document.thumb.width, height: $scope.document.thumb.height}) + + var downloadPromise = false + + $scope.isActive = false - // Autoplay small GIFs - // if (!Config.Mobile && - // $scope.document.size && - // $scope.document.size < 1024 * 1024) { - // $scope.toggle() - // } + $scope.toggle = function (e) { + if (e && checkClick(e, true)) { + AppDocsManager.saveDocFile($scope.document.id) + return false + } + + if ($scope.document.url) { + $scope.isActive = !$scope.isActive + onContentLoaded(function () { + $scope.$emit('ui_height') + + var video = $('video', element)[0] + if (video) { + if (!$scope.isActive) { + video.pause() + video.currentTime = 0 + } else { + checkPlayer(video, $scope) + video.play() + } + } + }) + return + } + + if (downloadPromise) { + downloadPromise.cancel() + downloadPromise = false + return + } + + downloadPromise = AppDocsManager.downloadDoc($scope.document.id) + + downloadPromise.then(function () { + $timeout(function () { + var video = $('video', element)[0] + checkPlayer(video, $scope) + $(video).on('ended', function () { + if ($scope.isActive) { + $scope.toggle() + } + }) + $scope.isActive = true + }, 200) + }) + } + + $scope.$on('ui_history_change', function () { + if ($scope.isActive) { + $scope.toggle() + } + }) } }) diff --git a/app/js/lib/config.js b/app/js/lib/config.js index 1d3a27f9..e0a5b02f 100644 --- a/app/js/lib/config.js +++ b/app/js/lib/config.js @@ -100,9 +100,9 @@ Config.Schema.MTProto = {'constructors': [{'id': '481674261','predicate': 'vecto // From https://github.com/stephenmathieson/node-tlds/blob/master/index.js Config.TLD = ['abogado', 'ac', 'academy', 'accountants', 'active', 'actor', 'ad', 'adult', 'ae', 'aero', 'af', 'ag', 'agency', 'ai', 'airforce', 'al', 'allfinanz', 'alsace', 'am', 'amsterdam', 'an', 'android', 'ao', 'apartments', 'aq', 'aquarelle', 'ar', 'archi', 'army', 'arpa', 'as', 'asia', 'associates', 'at', 'attorney', 'au', 'auction', 'audio', 'autos', 'aw', 'ax', 'axa', 'az', 'ba', 'band', 'bank', 'bar', 'barclaycard', 'barclays', 'bargains', 'bayern', 'bb', 'bd', 'be', 'beer', 'berlin', 'best', 'bf', 'bg', 'bh', 'bi', 'bid', 'bike', 'bingo', 'bio', 'biz', 'bj', 'black', 'blackfriday', 'bloomberg', 'blue', 'bm', 'bmw', 'bn', 'bnpparibas', 'bo', 'boo', 'boutique', 'br', 'brussels', 'bs', 'bt', 'budapest', 'build', 'builders', 'business', 'buzz', 'bv', 'bw', 'by', 'bz', 'bzh', 'ca', 'cab', 'cal', 'camera', 'camp', 'cancerresearch', 'canon', 'capetown', 'capital', 'caravan', 'cards', 'care', 'career', 'careers', 'cartier', 'casa', 'cash', 'cat', 'catering', 'cc', 'cd', 'center', 'ceo', 'cern', 'cf', 'cg', 'ch', 'channel', 'chat', 'cheap', 'christmas', 'chrome', 'church', 'ci', 'citic', 'city', 'ck', 'cl', 'claims', 'cleaning', 'click', 'clinic', 'clothing', 'club', 'cm', 'cn', 'co', 'coach', 'codes', 'coffee', 'college', 'cologne', 'com', 'community', 'company', 'computer', 'condos', 'construction', 'consulting', 'contractors', 'cooking', 'cool', 'coop', 'country', 'cr', 'credit', 'creditcard', 'cricket', 'crs', 'cruises', 'cu', 'cuisinella', 'cv', 'cw', 'cx', 'cy', 'cymru', 'cz', 'dabur', 'dad', 'dance', 'dating', 'day', 'dclk', 'de', 'deals', 'degree', 'delivery', 'democrat', 'dental', 'dentist', 'desi', 'design', 'dev', 'diamonds', 'diet', 'digital', 'direct', 'directory', 'discount', 'dj', 'dk', 'dm', 'dnp', 'do', 'docs', 'domains', 'doosan', 'durban', 'dvag', 'dz', 'eat', 'ec', 'edu', 'education', 'ee', 'eg', 'email', 'emerck', 'energy', 'engineer', 'engineering', 'enterprises', 'equipment', 'er', 'es', 'esq', 'estate', 'et', 'eu', 'eurovision', 'eus', 'events', 'everbank', 'exchange', 'expert', 'exposed', 'fail', 'farm', 'fashion', 'feedback', 'fi', 'finance', 'financial', 'firmdale', 'fish', 'fishing', 'fit', 'fitness', 'fj', 'fk', 'flights', 'florist', 'flowers', 'flsmidth', 'fly', 'fm', 'fo', 'foo', 'forsale', 'foundation', 'fr', 'frl', 'frogans', 'fund', 'furniture', 'futbol', 'ga', 'gal', 'gallery', 'garden', 'gb', 'gbiz', 'gd', 'ge', 'gent', 'gf', 'gg', 'ggee', 'gh', 'gi', 'gift', 'gifts', 'gives', 'gl', 'glass', 'gle', 'global', 'globo', 'gm', 'gmail', 'gmo', 'gmx', 'gn', 'goog', 'google', 'gop', 'gov', 'gp', 'gq', 'gr', 'graphics', 'gratis', 'green', 'gripe', 'gs', 'gt', 'gu', 'guide', 'guitars', 'guru', 'gw', 'gy', 'hamburg', 'hangout', 'haus', 'healthcare', 'help', 'here', 'hermes', 'hiphop', 'hiv', 'hk', 'hm', 'hn', 'holdings', 'holiday', 'homes', 'horse', 'host', 'hosting', 'house', 'how', 'hr', 'ht', 'hu', 'ibm', 'id', 'ie', 'ifm', 'il', 'im', 'immo', 'immobilien', 'in', 'industries', 'info', 'ing', 'ink', 'institute', 'insure', 'int', 'international', 'investments', 'io', 'iq', 'ir', 'irish', 'is', 'it', 'iwc', 'jcb', 'je', 'jetzt', 'jm', 'jo', 'jobs', 'joburg', 'jp', 'juegos', 'kaufen', 'kddi', 'ke', 'kg', 'kh', 'ki', 'kim', 'kitchen', 'kiwi', 'km', 'kn', 'koeln', 'kp', 'kr', 'krd', 'kred', 'kw', 'ky', 'kyoto', 'kz', 'la', 'lacaixa', 'land', 'lat', 'latrobe', 'lawyer', 'lb', 'lc', 'lds', 'lease', 'legal', 'lgbt', 'li', 'lidl', 'life', 'lighting', 'limited', 'limo', 'link', 'lk', 'loans', 'london', 'lotte', 'lotto', 'lr', 'ls', 'lt', 'ltda', 'lu', 'luxe', 'luxury', 'lv', 'ly', 'ma', 'madrid', 'maison', 'management', 'mango', 'market', 'marketing', 'marriott', 'mc', 'md', 'me', 'media', 'meet', 'melbourne', 'meme', 'memorial', 'menu', 'mg', 'mh', 'miami', 'mil', 'mini', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'moda', 'moe', 'monash', 'money', 'mormon', 'mortgage', 'moscow', 'motorcycles', 'mov', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nagoya', 'name', 'navy', 'nc', 'ne', 'net', 'network', 'neustar', 'new', 'nexus', 'nf', 'ng', 'ngo', 'nhk', 'ni', 'nico', 'ninja', 'nl', 'no', 'np', 'nr', 'nra', 'nrw', 'ntt', 'nu', 'nyc', 'nz', 'okinawa', 'om', 'one', 'ong', 'onl', 'ooo', 'org', 'organic', 'osaka', 'otsuka', 'ovh', 'pa', 'paris', 'partners', 'parts', 'party', 'pe', 'pf', 'pg', 'ph', 'pharmacy', 'photo', 'photography', 'photos', 'physio', 'pics', 'pictures', 'pink', 'pizza', 'pk', 'pl', 'place', 'plumbing', 'pm', 'pn', 'pohl', 'poker', 'porn', 'post', 'pr', 'praxi', 'press', 'pro', 'prod', 'productions', 'prof', 'properties', 'property', 'ps', 'pt', 'pub', 'pw', 'py', 'qa', 'qpon', 'quebec', 're', 'realtor', 'recipes', 'red', 'rehab', 'reise', 'reisen', 'reit', 'ren', 'rentals', 'repair', 'report', 'republican', 'rest', 'restaurant', 'reviews', 'rich', 'rio', 'rip', 'ro', 'rocks', 'rodeo', 'rs', 'rsvp', 'ru', 'ruhr', 'rw', 'ryukyu', 'sa', 'saarland', 'sale', 'samsung', 'sarl', 'saxo', 'sb', 'sc', 'sca', 'scb', 'schmidt', 'schule', 'schwarz', 'science', 'scot', 'sd', 'se', 'services', 'sew', 'sexy', 'sg', 'sh', 'shiksha', 'shoes', 'shriram', 'si', 'singles', 'sj', 'sk', 'sky', 'sl', 'sm', 'sn', 'so', 'social', 'software', 'sohu', 'solar', 'solutions', 'soy', 'space', 'spiegel', 'sr', 'st', 'style', 'su', 'supplies', 'supply', 'support', 'surf', 'surgery', 'suzuki', 'sv', 'sx', 'sy', 'sydney', 'systems', 'sz', 'taipei', 'tatar', 'tattoo', 'tax', 'tc', 'td', 'technology', 'tel', 'temasek', 'tennis', 'tf', 'tg', 'th', 'tienda', 'tips', 'tires', 'tirol', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'today', 'tokyo', 'tools', 'top', 'toshiba', 'town', 'toys', 'tp', 'tr', 'trade', 'training', 'travel', 'trust', 'tt', 'tui', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'university', 'uno', 'uol', 'us', 'uy', 'uz', 'va', 'vacations', 'vc', 've', 'vegas', 'ventures', 'versicherung', 'vet', 'vg', 'vi', 'viajes', 'video', 'villas', 'vision', 'vlaanderen', 'vn', 'vodka', 'vote', 'voting', 'voto', 'voyage', 'vu', 'wales', 'wang', 'watch', 'webcam', 'website', 'wed', 'wedding', 'wf', 'whoswho', 'wien', 'wiki', 'williamhill', 'wme', 'work', 'works', 'world', 'ws', 'wtc', 'wtf', '佛山', '集团', '在线', '한국', 'ভারত', '八卦', 'موقع', '公益', '公司', '移动', '我爱你', 'москва', 'қаз', 'онлайн', 'сайт', 'срб', '淡马锡', 'орг', '삼성', 'சிங்கப்பூர்', '商标', '商店', '商城', 'дети', 'мкд', '中文网', '中信', '中国', '中國', '谷歌', 'భారత్', 'ලංකා', 'ભારત', 'भारत', '网店', 'संगठन', '网络', 'укр', '香港', '台湾', '台灣', '手机', 'мон', 'الجزائر', 'عمان', 'ایران', 'امارات', 'بازار', 'الاردن', 'بھارت', 'المغرب', 'السعودية', 'مليسيا', 'شبكة', 'გე', '机构', '组织机构', 'ไทย', 'سورية', 'рус', 'рф', 'تونس', 'みんな', 'グーグル', '世界', 'ਭਾਰਤ', '网址', '游戏', 'vermögensberater', 'vermögensberatung', '企业', 'مصر', 'قطر', '广东', 'இலங்கை', 'இந்தியா', '新加坡', 'فلسطين', '政务', 'xxx', 'xyz', 'yachts', 'yandex', 'ye', 'yoga', 'yokohama', 'youtube', 'yt', 'za', 'zip', 'zm', 'zone', 'zuerich', 'zw'] -Config.Schema.API = {"constructors":[{"id":"-1132882121","predicate":"boolFalse","params":[],"type":"Bool"},{"id":"-1720552011","predicate":"boolTrue","params":[],"type":"Bool"},{"id":"1072550713","predicate":"true","params":[],"type":"True"},{"id":"481674261","predicate":"vector","params":[],"type":"Vector t"},{"id":"-994444869","predicate":"error","params":[{"name":"code","type":"int"},{"name":"text","type":"string"}],"type":"Error"},{"id":"1450380236","predicate":"null","params":[],"type":"Null"},{"id":"2134579434","predicate":"inputPeerEmpty","params":[],"type":"InputPeer"},{"id":"2107670217","predicate":"inputPeerSelf","params":[],"type":"InputPeer"},{"id":"396093539","predicate":"inputPeerChat","params":[{"name":"chat_id","type":"int"}],"type":"InputPeer"},{"id":"-1182234929","predicate":"inputUserEmpty","params":[],"type":"InputUser"},{"id":"-138301121","predicate":"inputUserSelf","params":[],"type":"InputUser"},{"id":"-208488460","predicate":"inputPhoneContact","params":[{"name":"client_id","type":"long"},{"name":"phone","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"}],"type":"InputContact"},{"id":"-181407105","predicate":"inputFile","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"name","type":"string"},{"name":"md5_checksum","type":"string"}],"type":"InputFile"},{"id":"-1771768449","predicate":"inputMediaEmpty","params":[],"type":"InputMedia"},{"id":"1661770481","predicate":"inputMediaUploadedPhoto","params":[{"name":"flags","type":"#"},{"name":"file","type":"InputFile"},{"name":"caption","type":"string"},{"name":"stickers","type":"flags.0?Vector"}],"type":"InputMedia"},{"id":"-373312269","predicate":"inputMediaPhoto","params":[{"name":"id","type":"InputPhoto"},{"name":"caption","type":"string"}],"type":"InputMedia"},{"id":"-104578748","predicate":"inputMediaGeoPoint","params":[{"name":"geo_point","type":"InputGeoPoint"}],"type":"InputMedia"},{"id":"-1494984313","predicate":"inputMediaContact","params":[{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"}],"type":"InputMedia"},{"id":"480546647","predicate":"inputChatPhotoEmpty","params":[],"type":"InputChatPhoto"},{"id":"-1837345356","predicate":"inputChatUploadedPhoto","params":[{"name":"file","type":"InputFile"}],"type":"InputChatPhoto"},{"id":"-1991004873","predicate":"inputChatPhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"InputChatPhoto"},{"id":"-457104426","predicate":"inputGeoPointEmpty","params":[],"type":"InputGeoPoint"},{"id":"-206066487","predicate":"inputGeoPoint","params":[{"name":"lat","type":"double"},{"name":"long","type":"double"}],"type":"InputGeoPoint"},{"id":"483901197","predicate":"inputPhotoEmpty","params":[],"type":"InputPhoto"},{"id":"-74070332","predicate":"inputPhoto","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputPhoto"},{"id":"342061462","predicate":"inputFileLocation","params":[{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"},{"name":"secret","type":"long"}],"type":"InputFileLocation"},{"id":"1996904104","predicate":"inputAppEvent","params":[{"name":"time","type":"double"},{"name":"type","type":"string"},{"name":"peer","type":"long"},{"name":"data","type":"string"}],"type":"InputAppEvent"},{"id":"-1649296275","predicate":"peerUser","params":[{"name":"user_id","type":"int"}],"type":"Peer"},{"id":"-1160714821","predicate":"peerChat","params":[{"name":"chat_id","type":"int"}],"type":"Peer"},{"id":"-1432995067","predicate":"storage.fileUnknown","params":[],"type":"storage.FileType"},{"id":"8322574","predicate":"storage.fileJpeg","params":[],"type":"storage.FileType"},{"id":"-891180321","predicate":"storage.fileGif","params":[],"type":"storage.FileType"},{"id":"172975040","predicate":"storage.filePng","params":[],"type":"storage.FileType"},{"id":"-1373745011","predicate":"storage.filePdf","params":[],"type":"storage.FileType"},{"id":"1384777335","predicate":"storage.fileMp3","params":[],"type":"storage.FileType"},{"id":"1258941372","predicate":"storage.fileMov","params":[],"type":"storage.FileType"},{"id":"1086091090","predicate":"storage.filePartial","params":[],"type":"storage.FileType"},{"id":"-1278304028","predicate":"storage.fileMp4","params":[],"type":"storage.FileType"},{"id":"276907596","predicate":"storage.fileWebp","params":[],"type":"storage.FileType"},{"id":"2086234950","predicate":"fileLocationUnavailable","params":[{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"},{"name":"secret","type":"long"}],"type":"FileLocation"},{"id":"1406570614","predicate":"fileLocation","params":[{"name":"dc_id","type":"int"},{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"},{"name":"secret","type":"long"}],"type":"FileLocation"},{"id":"537022650","predicate":"userEmpty","params":[{"name":"id","type":"int"}],"type":"User"},{"id":"1326562017","predicate":"userProfilePhotoEmpty","params":[],"type":"UserProfilePhoto"},{"id":"-715532088","predicate":"userProfilePhoto","params":[{"name":"photo_id","type":"long"},{"name":"photo_small","type":"FileLocation"},{"name":"photo_big","type":"FileLocation"}],"type":"UserProfilePhoto"},{"id":"164646985","predicate":"userStatusEmpty","params":[],"type":"UserStatus"},{"id":"-306628279","predicate":"userStatusOnline","params":[{"name":"expires","type":"int"}],"type":"UserStatus"},{"id":"9203775","predicate":"userStatusOffline","params":[{"name":"was_online","type":"int"}],"type":"UserStatus"},{"id":"-1683826688","predicate":"chatEmpty","params":[{"name":"id","type":"int"}],"type":"Chat"},{"id":"-652419756","predicate":"chat","params":[{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"kicked","type":"flags.1?true"},{"name":"left","type":"flags.2?true"},{"name":"admins_enabled","type":"flags.3?true"},{"name":"admin","type":"flags.4?true"},{"name":"deactivated","type":"flags.5?true"},{"name":"id","type":"int"},{"name":"title","type":"string"},{"name":"photo","type":"ChatPhoto"},{"name":"participants_count","type":"int"},{"name":"date","type":"int"},{"name":"version","type":"int"},{"name":"migrated_to","type":"flags.6?InputChannel"}],"type":"Chat"},{"id":"120753115","predicate":"chatForbidden","params":[{"name":"id","type":"int"},{"name":"title","type":"string"}],"type":"Chat"},{"id":"771925524","predicate":"chatFull","params":[{"name":"id","type":"int"},{"name":"participants","type":"ChatParticipants"},{"name":"chat_photo","type":"Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"exported_invite","type":"ExportedChatInvite"},{"name":"bot_info","type":"Vector"}],"type":"ChatFull"},{"id":"-925415106","predicate":"chatParticipant","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChatParticipant"},{"id":"-57668565","predicate":"chatParticipantsForbidden","params":[{"name":"flags","type":"#"},{"name":"chat_id","type":"int"},{"name":"self_participant","type":"flags.0?ChatParticipant"}],"type":"ChatParticipants"},{"id":"1061556205","predicate":"chatParticipants","params":[{"name":"chat_id","type":"int"},{"name":"participants","type":"Vector"},{"name":"version","type":"int"}],"type":"ChatParticipants"},{"id":"935395612","predicate":"chatPhotoEmpty","params":[],"type":"ChatPhoto"},{"id":"1632839530","predicate":"chatPhoto","params":[{"name":"photo_small","type":"FileLocation"},{"name":"photo_big","type":"FileLocation"}],"type":"ChatPhoto"},{"id":"-2082087340","predicate":"messageEmpty","params":[{"name":"id","type":"int"}],"type":"Message"},{"id":"-1063525281","predicate":"message","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"post","type":"flags.14?true"},{"name":"id","type":"int"},{"name":"from_id","type":"flags.8?int"},{"name":"to_id","type":"Peer"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"date","type":"int"},{"name":"message","type":"string"},{"name":"media","type":"flags.9?MessageMedia"},{"name":"reply_markup","type":"flags.6?ReplyMarkup"},{"name":"entities","type":"flags.7?Vector"},{"name":"views","type":"flags.10?int"},{"name":"edit_date","type":"flags.15?int"}],"type":"Message"},{"id":"-1642487306","predicate":"messageService","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"post","type":"flags.14?true"},{"name":"id","type":"int"},{"name":"from_id","type":"flags.8?int"},{"name":"to_id","type":"Peer"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"date","type":"int"},{"name":"action","type":"MessageAction"}],"type":"Message"},{"id":"1038967584","predicate":"messageMediaEmpty","params":[],"type":"MessageMedia"},{"id":"1032643901","predicate":"messageMediaPhoto","params":[{"name":"photo","type":"Photo"},{"name":"caption","type":"string"}],"type":"MessageMedia"},{"id":"1457575028","predicate":"messageMediaGeo","params":[{"name":"geo","type":"GeoPoint"}],"type":"MessageMedia"},{"id":"1585262393","predicate":"messageMediaContact","params":[{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"user_id","type":"int"}],"type":"MessageMedia"},{"id":"-1618676578","predicate":"messageMediaUnsupported","params":[],"type":"MessageMedia"},{"id":"-1230047312","predicate":"messageActionEmpty","params":[],"type":"MessageAction"},{"id":"-1503425638","predicate":"messageActionChatCreate","params":[{"name":"title","type":"string"},{"name":"users","type":"Vector"}],"type":"MessageAction"},{"id":"-1247687078","predicate":"messageActionChatEditTitle","params":[{"name":"title","type":"string"}],"type":"MessageAction"},{"id":"2144015272","predicate":"messageActionChatEditPhoto","params":[{"name":"photo","type":"Photo"}],"type":"MessageAction"},{"id":"-1780220945","predicate":"messageActionChatDeletePhoto","params":[],"type":"MessageAction"},{"id":"1217033015","predicate":"messageActionChatAddUser","params":[{"name":"users","type":"Vector"}],"type":"MessageAction"},{"id":"-1297179892","predicate":"messageActionChatDeleteUser","params":[{"name":"user_id","type":"int"}],"type":"MessageAction"},{"id":"1728035348","predicate":"dialog","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.2?true"},{"name":"peer","type":"Peer"},{"name":"top_message","type":"int"},{"name":"read_inbox_max_id","type":"int"},{"name":"read_outbox_max_id","type":"int"},{"name":"unread_count","type":"int"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"pts","type":"flags.0?int"},{"name":"draft","type":"flags.1?DraftMessage"}],"type":"Dialog"},{"id":"590459437","predicate":"photoEmpty","params":[{"name":"id","type":"long"}],"type":"Photo"},{"id":"-1836524247","predicate":"photo","params":[{"name":"flags","type":"#"},{"name":"has_stickers","type":"flags.0?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"sizes","type":"Vector"}],"type":"Photo"},{"id":"236446268","predicate":"photoSizeEmpty","params":[{"name":"type","type":"string"}],"type":"PhotoSize"},{"id":"2009052699","predicate":"photoSize","params":[{"name":"type","type":"string"},{"name":"location","type":"FileLocation"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"size","type":"int"}],"type":"PhotoSize"},{"id":"-374917894","predicate":"photoCachedSize","params":[{"name":"type","type":"string"},{"name":"location","type":"FileLocation"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"bytes","type":"bytes"}],"type":"PhotoSize"},{"id":"286776671","predicate":"geoPointEmpty","params":[],"type":"GeoPoint"},{"id":"541710092","predicate":"geoPoint","params":[{"name":"long","type":"double"},{"name":"lat","type":"double"}],"type":"GeoPoint"},{"id":"-2128698738","predicate":"auth.checkedPhone","params":[{"name":"phone_registered","type":"Bool"}],"type":"auth.CheckedPhone"},{"id":"1577067778","predicate":"auth.sentCode","params":[{"name":"flags","type":"#"},{"name":"phone_registered","type":"flags.0?true"},{"name":"type","type":"auth.SentCodeType"},{"name":"phone_code_hash","type":"string"},{"name":"next_type","type":"flags.1?auth.CodeType"},{"name":"timeout","type":"flags.2?int"}],"type":"auth.SentCode"},{"id":"-855308010","predicate":"auth.authorization","params":[{"name":"flags","type":"#"},{"name":"tmp_sessions","type":"flags.0?int"},{"name":"user","type":"User"}],"type":"auth.Authorization"},{"id":"-543777747","predicate":"auth.exportedAuthorization","params":[{"name":"id","type":"int"},{"name":"bytes","type":"bytes"}],"type":"auth.ExportedAuthorization"},{"id":"-1195615476","predicate":"inputNotifyPeer","params":[{"name":"peer","type":"InputPeer"}],"type":"InputNotifyPeer"},{"id":"423314455","predicate":"inputNotifyUsers","params":[],"type":"InputNotifyPeer"},{"id":"1251338318","predicate":"inputNotifyChats","params":[],"type":"InputNotifyPeer"},{"id":"-1540769658","predicate":"inputNotifyAll","params":[],"type":"InputNotifyPeer"},{"id":"-265263912","predicate":"inputPeerNotifyEventsEmpty","params":[],"type":"InputPeerNotifyEvents"},{"id":"-395694988","predicate":"inputPeerNotifyEventsAll","params":[],"type":"InputPeerNotifyEvents"},{"id":"949182130","predicate":"inputPeerNotifySettings","params":[{"name":"flags","type":"#"},{"name":"show_previews","type":"flags.0?true"},{"name":"silent","type":"flags.1?true"},{"name":"mute_until","type":"int"},{"name":"sound","type":"string"}],"type":"InputPeerNotifySettings"},{"id":"-1378534221","predicate":"peerNotifyEventsEmpty","params":[],"type":"PeerNotifyEvents"},{"id":"1830677896","predicate":"peerNotifyEventsAll","params":[],"type":"PeerNotifyEvents"},{"id":"1889961234","predicate":"peerNotifySettingsEmpty","params":[],"type":"PeerNotifySettings"},{"id":"-1697798976","predicate":"peerNotifySettings","params":[{"name":"flags","type":"#"},{"name":"show_previews","type":"flags.0?true"},{"name":"silent","type":"flags.1?true"},{"name":"mute_until","type":"int"},{"name":"sound","type":"string"}],"type":"PeerNotifySettings"},{"id":"-2122045747","predicate":"peerSettings","params":[{"name":"flags","type":"#"},{"name":"report_spam","type":"flags.0?true"}],"type":"PeerSettings"},{"id":"-860866985","predicate":"wallPaper","params":[{"name":"id","type":"int"},{"name":"title","type":"string"},{"name":"sizes","type":"Vector"},{"name":"color","type":"int"}],"type":"WallPaper"},{"id":"1490799288","predicate":"inputReportReasonSpam","params":[],"type":"ReportReason"},{"id":"505595789","predicate":"inputReportReasonViolence","params":[],"type":"ReportReason"},{"id":"777640226","predicate":"inputReportReasonPornography","params":[],"type":"ReportReason"},{"id":"-512463606","predicate":"inputReportReasonOther","params":[{"name":"text","type":"string"}],"type":"ReportReason"},{"id":"253890367","predicate":"userFull","params":[{"name":"flags","type":"#"},{"name":"blocked","type":"flags.0?true"},{"name":"phone_calls_available","type":"flags.4?true"},{"name":"user","type":"User"},{"name":"about","type":"flags.1?string"},{"name":"link","type":"contacts.Link"},{"name":"profile_photo","type":"flags.2?Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"bot_info","type":"flags.3?BotInfo"},{"name":"common_chats_count","type":"int"}],"type":"UserFull"},{"id":"-116274796","predicate":"contact","params":[{"name":"user_id","type":"int"},{"name":"mutual","type":"Bool"}],"type":"Contact"},{"id":"-805141448","predicate":"importedContact","params":[{"name":"user_id","type":"int"},{"name":"client_id","type":"long"}],"type":"ImportedContact"},{"id":"1444661369","predicate":"contactBlocked","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"}],"type":"ContactBlocked"},{"id":"-748155807","predicate":"contactStatus","params":[{"name":"user_id","type":"int"},{"name":"status","type":"UserStatus"}],"type":"ContactStatus"},{"id":"986597452","predicate":"contacts.link","params":[{"name":"my_link","type":"ContactLink"},{"name":"foreign_link","type":"ContactLink"},{"name":"user","type":"User"}],"type":"contacts.Link"},{"id":"-1219778094","predicate":"contacts.contactsNotModified","params":[],"type":"contacts.Contacts"},{"id":"1871416498","predicate":"contacts.contacts","params":[{"name":"contacts","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Contacts"},{"id":"-1387117803","predicate":"contacts.importedContacts","params":[{"name":"imported","type":"Vector"},{"name":"retry_contacts","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.ImportedContacts"},{"id":"471043349","predicate":"contacts.blocked","params":[{"name":"blocked","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Blocked"},{"id":"-1878523231","predicate":"contacts.blockedSlice","params":[{"name":"count","type":"int"},{"name":"blocked","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Blocked"},{"id":"364538944","predicate":"messages.dialogs","params":[{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Dialogs"},{"id":"1910543603","predicate":"messages.dialogsSlice","params":[{"name":"count","type":"int"},{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Dialogs"},{"id":"-1938715001","predicate":"messages.messages","params":[{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"189033187","predicate":"messages.messagesSlice","params":[{"name":"count","type":"int"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"1694474197","predicate":"messages.chats","params":[{"name":"chats","type":"Vector"}],"type":"messages.Chats"},{"id":"-438840932","predicate":"messages.chatFull","params":[{"name":"full_chat","type":"ChatFull"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.ChatFull"},{"id":"-1269012015","predicate":"messages.affectedHistory","params":[{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"offset","type":"int"}],"type":"messages.AffectedHistory"},{"id":"1474492012","predicate":"inputMessagesFilterEmpty","params":[],"type":"MessagesFilter"},{"id":"-1777752804","predicate":"inputMessagesFilterPhotos","params":[],"type":"MessagesFilter"},{"id":"-1614803355","predicate":"inputMessagesFilterVideo","params":[],"type":"MessagesFilter"},{"id":"1458172132","predicate":"inputMessagesFilterPhotoVideo","params":[],"type":"MessagesFilter"},{"id":"-648121413","predicate":"inputMessagesFilterPhotoVideoDocuments","params":[],"type":"MessagesFilter"},{"id":"-1629621880","predicate":"inputMessagesFilterDocument","params":[],"type":"MessagesFilter"},{"id":"2129714567","predicate":"inputMessagesFilterUrl","params":[],"type":"MessagesFilter"},{"id":"-3644025","predicate":"inputMessagesFilterGif","params":[],"type":"MessagesFilter"},{"id":"522914557","predicate":"updateNewMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"1318109142","predicate":"updateMessageID","params":[{"name":"id","type":"int"},{"name":"random_id","type":"long"}],"type":"Update"},{"id":"-1576161051","predicate":"updateDeleteMessages","params":[{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"1548249383","predicate":"updateUserTyping","params":[{"name":"user_id","type":"int"},{"name":"action","type":"SendMessageAction"}],"type":"Update"},{"id":"-1704596961","predicate":"updateChatUserTyping","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"action","type":"SendMessageAction"}],"type":"Update"},{"id":"125178264","predicate":"updateChatParticipants","params":[{"name":"participants","type":"ChatParticipants"}],"type":"Update"},{"id":"469489699","predicate":"updateUserStatus","params":[{"name":"user_id","type":"int"},{"name":"status","type":"UserStatus"}],"type":"Update"},{"id":"-1489818765","predicate":"updateUserName","params":[{"name":"user_id","type":"int"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"username","type":"string"}],"type":"Update"},{"id":"-1791935732","predicate":"updateUserPhoto","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"},{"name":"photo","type":"UserProfilePhoto"},{"name":"previous","type":"Bool"}],"type":"Update"},{"id":"628472761","predicate":"updateContactRegistered","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"}],"type":"Update"},{"id":"-1657903163","predicate":"updateContactLink","params":[{"name":"user_id","type":"int"},{"name":"my_link","type":"ContactLink"},{"name":"foreign_link","type":"ContactLink"}],"type":"Update"},{"id":"-1519637954","predicate":"updates.state","params":[{"name":"pts","type":"int"},{"name":"qts","type":"int"},{"name":"date","type":"int"},{"name":"seq","type":"int"},{"name":"unread_count","type":"int"}],"type":"updates.State"},{"id":"1567990072","predicate":"updates.differenceEmpty","params":[{"name":"date","type":"int"},{"name":"seq","type":"int"}],"type":"updates.Difference"},{"id":"16030880","predicate":"updates.difference","params":[{"name":"new_messages","type":"Vector"},{"name":"new_encrypted_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"state","type":"updates.State"}],"type":"updates.Difference"},{"id":"-1459938943","predicate":"updates.differenceSlice","params":[{"name":"new_messages","type":"Vector"},{"name":"new_encrypted_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"intermediate_state","type":"updates.State"}],"type":"updates.Difference"},{"id":"-484987010","predicate":"updatesTooLong","params":[],"type":"Updates"},{"id":"-1857044719","predicate":"updateShortMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"id","type":"int"},{"name":"user_id","type":"int"},{"name":"message","type":"string"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"377562760","predicate":"updateShortChatMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"id","type":"int"},{"name":"from_id","type":"int"},{"name":"chat_id","type":"int"},{"name":"message","type":"string"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"2027216577","predicate":"updateShort","params":[{"name":"update","type":"Update"},{"name":"date","type":"int"}],"type":"Updates"},{"id":"1918567619","predicate":"updatesCombined","params":[{"name":"updates","type":"Vector"},{"name":"users","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"date","type":"int"},{"name":"seq_start","type":"int"},{"name":"seq","type":"int"}],"type":"Updates"},{"id":"1957577280","predicate":"updates","params":[{"name":"updates","type":"Vector"},{"name":"users","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"date","type":"int"},{"name":"seq","type":"int"}],"type":"Updates"},{"id":"-1916114267","predicate":"photos.photos","params":[{"name":"photos","type":"Vector"},{"name":"users","type":"Vector"}],"type":"photos.Photos"},{"id":"352657236","predicate":"photos.photosSlice","params":[{"name":"count","type":"int"},{"name":"photos","type":"Vector"},{"name":"users","type":"Vector"}],"type":"photos.Photos"},{"id":"539045032","predicate":"photos.photo","params":[{"name":"photo","type":"Photo"},{"name":"users","type":"Vector"}],"type":"photos.Photo"},{"id":"157948117","predicate":"upload.file","params":[{"name":"type","type":"storage.FileType"},{"name":"mtime","type":"int"},{"name":"bytes","type":"bytes"}],"type":"upload.File"},{"id":"98092748","predicate":"dcOption","params":[{"name":"flags","type":"#"},{"name":"ipv6","type":"flags.0?true"},{"name":"media_only","type":"flags.1?true"},{"name":"tcpo_only","type":"flags.2?true"},{"name":"id","type":"int"},{"name":"ip_address","type":"string"},{"name":"port","type":"int"}],"type":"DcOption"},{"id":"989264735","predicate":"config","params":[{"name":"flags","type":"#"},{"name":"phonecalls_enabled","type":"flags.1?true"},{"name":"date","type":"int"},{"name":"expires","type":"int"},{"name":"test_mode","type":"Bool"},{"name":"this_dc","type":"int"},{"name":"dc_options","type":"Vector"},{"name":"chat_size_max","type":"int"},{"name":"megagroup_size_max","type":"int"},{"name":"forwarded_count_max","type":"int"},{"name":"online_update_period_ms","type":"int"},{"name":"offline_blur_timeout_ms","type":"int"},{"name":"offline_idle_timeout_ms","type":"int"},{"name":"online_cloud_timeout_ms","type":"int"},{"name":"notify_cloud_delay_ms","type":"int"},{"name":"notify_default_delay_ms","type":"int"},{"name":"chat_big_size","type":"int"},{"name":"push_chat_period_ms","type":"int"},{"name":"push_chat_limit","type":"int"},{"name":"saved_gifs_limit","type":"int"},{"name":"edit_time_limit","type":"int"},{"name":"rating_e_decay","type":"int"},{"name":"stickers_recent_limit","type":"int"},{"name":"tmp_sessions","type":"flags.0?int"},{"name":"pinned_dialogs_count_max","type":"int"},{"name":"call_receive_timeout_ms","type":"int"},{"name":"call_ring_timeout_ms","type":"int"},{"name":"call_connect_timeout_ms","type":"int"},{"name":"call_packet_timeout_ms","type":"int"},{"name":"disabled_features","type":"Vector"}],"type":"Config"},{"id":"-1910892683","predicate":"nearestDc","params":[{"name":"country","type":"string"},{"name":"this_dc","type":"int"},{"name":"nearest_dc","type":"int"}],"type":"NearestDc"},{"id":"-1987579119","predicate":"help.appUpdate","params":[{"name":"id","type":"int"},{"name":"critical","type":"Bool"},{"name":"url","type":"string"},{"name":"text","type":"string"}],"type":"help.AppUpdate"},{"id":"-1000708810","predicate":"help.noAppUpdate","params":[],"type":"help.AppUpdate"},{"id":"415997816","predicate":"help.inviteText","params":[{"name":"message","type":"string"}],"type":"help.InviteText"},{"id":"1662091044","predicate":"wallPaperSolid","params":[{"name":"id","type":"int"},{"name":"title","type":"string"},{"name":"bg_color","type":"int"},{"name":"color","type":"int"}],"type":"WallPaper"},{"id":"314359194","predicate":"updateNewEncryptedMessage","params":[{"name":"message","type":"EncryptedMessage"},{"name":"qts","type":"int"}],"type":"Update"},{"id":"386986326","predicate":"updateEncryptedChatTyping","params":[{"name":"chat_id","type":"int"}],"type":"Update"},{"id":"-1264392051","predicate":"updateEncryption","params":[{"name":"chat","type":"EncryptedChat"},{"name":"date","type":"int"}],"type":"Update"},{"id":"956179895","predicate":"updateEncryptedMessagesRead","params":[{"name":"chat_id","type":"int"},{"name":"max_date","type":"int"},{"name":"date","type":"int"}],"type":"Update"},{"id":"-1417756512","predicate":"encryptedChatEmpty","params":[{"name":"id","type":"int"}],"type":"EncryptedChat"},{"id":"1006044124","predicate":"encryptedChatWaiting","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"}],"type":"EncryptedChat"},{"id":"-931638658","predicate":"encryptedChatRequested","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a","type":"bytes"}],"type":"EncryptedChat"},{"id":"-94974410","predicate":"encryptedChat","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a_or_b","type":"bytes"},{"name":"key_fingerprint","type":"long"}],"type":"EncryptedChat"},{"id":"332848423","predicate":"encryptedChatDiscarded","params":[{"name":"id","type":"int"}],"type":"EncryptedChat"},{"id":"-247351839","predicate":"inputEncryptedChat","params":[{"name":"chat_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputEncryptedChat"},{"id":"-1038136962","predicate":"encryptedFileEmpty","params":[],"type":"EncryptedFile"},{"id":"1248893260","predicate":"encryptedFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"size","type":"int"},{"name":"dc_id","type":"int"},{"name":"key_fingerprint","type":"int"}],"type":"EncryptedFile"},{"id":"406307684","predicate":"inputEncryptedFileEmpty","params":[],"type":"InputEncryptedFile"},{"id":"1690108678","predicate":"inputEncryptedFileUploaded","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"md5_checksum","type":"string"},{"name":"key_fingerprint","type":"int"}],"type":"InputEncryptedFile"},{"id":"1511503333","predicate":"inputEncryptedFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputEncryptedFile"},{"id":"-182231723","predicate":"inputEncryptedFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputFileLocation"},{"id":"-317144808","predicate":"encryptedMessage","params":[{"name":"random_id","type":"long"},{"name":"chat_id","type":"int"},{"name":"date","type":"int"},{"name":"bytes","type":"bytes"},{"name":"file","type":"EncryptedFile"}],"type":"EncryptedMessage"},{"id":"594758406","predicate":"encryptedMessageService","params":[{"name":"random_id","type":"long"},{"name":"chat_id","type":"int"},{"name":"date","type":"int"},{"name":"bytes","type":"bytes"}],"type":"EncryptedMessage"},{"id":"-1058912715","predicate":"messages.dhConfigNotModified","params":[{"name":"random","type":"bytes"}],"type":"messages.DhConfig"},{"id":"740433629","predicate":"messages.dhConfig","params":[{"name":"g","type":"int"},{"name":"p","type":"bytes"},{"name":"version","type":"int"},{"name":"random","type":"bytes"}],"type":"messages.DhConfig"},{"id":"1443858741","predicate":"messages.sentEncryptedMessage","params":[{"name":"date","type":"int"}],"type":"messages.SentEncryptedMessage"},{"id":"-1802240206","predicate":"messages.sentEncryptedFile","params":[{"name":"date","type":"int"},{"name":"file","type":"EncryptedFile"}],"type":"messages.SentEncryptedMessage"},{"id":"-95482955","predicate":"inputFileBig","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"name","type":"string"}],"type":"InputFile"},{"id":"767652808","predicate":"inputEncryptedFileBigUploaded","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"key_fingerprint","type":"int"}],"type":"InputEncryptedFile"},{"id":"-364179876","predicate":"updateChatParticipantAdd","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"},{"name":"version","type":"int"}],"type":"Update"},{"id":"1851755554","predicate":"updateChatParticipantDelete","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"version","type":"int"}],"type":"Update"},{"id":"-1906403213","predicate":"updateDcOptions","params":[{"name":"dc_options","type":"Vector"}],"type":"Update"},{"id":"-797904407","predicate":"inputMediaUploadedDocument","params":[{"name":"flags","type":"#"},{"name":"file","type":"InputFile"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"},{"name":"caption","type":"string"},{"name":"stickers","type":"flags.0?Vector"}],"type":"InputMedia"},{"id":"1356369070","predicate":"inputMediaUploadedThumbDocument","params":[{"name":"flags","type":"#"},{"name":"file","type":"InputFile"},{"name":"thumb","type":"InputFile"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"},{"name":"caption","type":"string"},{"name":"stickers","type":"flags.0?Vector"}],"type":"InputMedia"},{"id":"444068508","predicate":"inputMediaDocument","params":[{"name":"id","type":"InputDocument"},{"name":"caption","type":"string"}],"type":"InputMedia"},{"id":"-203411800","predicate":"messageMediaDocument","params":[{"name":"document","type":"Document"},{"name":"caption","type":"string"}],"type":"MessageMedia"},{"id":"1928391342","predicate":"inputDocumentEmpty","params":[],"type":"InputDocument"},{"id":"410618194","predicate":"inputDocument","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputDocument"},{"id":"1125058340","predicate":"inputDocumentFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"version","type":"int"}],"type":"InputFileLocation"},{"id":"922273905","predicate":"documentEmpty","params":[{"name":"id","type":"long"}],"type":"Document"},{"id":"-2027738169","predicate":"document","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"mime_type","type":"string"},{"name":"size","type":"int"},{"name":"thumb","type":"PhotoSize"},{"name":"dc_id","type":"int"},{"name":"version","type":"int"},{"name":"attributes","type":"Vector"}],"type":"Document"},{"id":"398898678","predicate":"help.support","params":[{"name":"phone_number","type":"string"},{"name":"user","type":"User"}],"type":"help.Support"},{"id":"-1613493288","predicate":"notifyPeer","params":[{"name":"peer","type":"Peer"}],"type":"NotifyPeer"},{"id":"-1261946036","predicate":"notifyUsers","params":[],"type":"NotifyPeer"},{"id":"-1073230141","predicate":"notifyChats","params":[],"type":"NotifyPeer"},{"id":"1959820384","predicate":"notifyAll","params":[],"type":"NotifyPeer"},{"id":"-2131957734","predicate":"updateUserBlocked","params":[{"name":"user_id","type":"int"},{"name":"blocked","type":"Bool"}],"type":"Update"},{"id":"-1094555409","predicate":"updateNotifySettings","params":[{"name":"peer","type":"NotifyPeer"},{"name":"notify_settings","type":"PeerNotifySettings"}],"type":"Update"},{"id":"381645902","predicate":"sendMessageTypingAction","params":[],"type":"SendMessageAction"},{"id":"-44119819","predicate":"sendMessageCancelAction","params":[],"type":"SendMessageAction"},{"id":"-1584933265","predicate":"sendMessageRecordVideoAction","params":[],"type":"SendMessageAction"},{"id":"-378127636","predicate":"sendMessageUploadVideoAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-718310409","predicate":"sendMessageRecordAudioAction","params":[],"type":"SendMessageAction"},{"id":"-212740181","predicate":"sendMessageUploadAudioAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-774682074","predicate":"sendMessageUploadPhotoAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-1441998364","predicate":"sendMessageUploadDocumentAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"393186209","predicate":"sendMessageGeoLocationAction","params":[],"type":"SendMessageAction"},{"id":"1653390447","predicate":"sendMessageChooseContactAction","params":[],"type":"SendMessageAction"},{"id":"446822276","predicate":"contacts.found","params":[{"name":"results","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Found"},{"id":"-337352679","predicate":"updateServiceNotification","params":[{"name":"flags","type":"#"},{"name":"popup","type":"flags.0?true"},{"name":"inbox_date","type":"flags.1?int"},{"name":"type","type":"string"},{"name":"message","type":"string"},{"name":"media","type":"MessageMedia"},{"name":"entities","type":"Vector"}],"type":"Update"},{"id":"-496024847","predicate":"userStatusRecently","params":[],"type":"UserStatus"},{"id":"129960444","predicate":"userStatusLastWeek","params":[],"type":"UserStatus"},{"id":"2011940674","predicate":"userStatusLastMonth","params":[],"type":"UserStatus"},{"id":"-298113238","predicate":"updatePrivacy","params":[{"name":"key","type":"PrivacyKey"},{"name":"rules","type":"Vector"}],"type":"Update"},{"id":"1335282456","predicate":"inputPrivacyKeyStatusTimestamp","params":[],"type":"InputPrivacyKey"},{"id":"-1137792208","predicate":"privacyKeyStatusTimestamp","params":[],"type":"PrivacyKey"},{"id":"218751099","predicate":"inputPrivacyValueAllowContacts","params":[],"type":"InputPrivacyRule"},{"id":"407582158","predicate":"inputPrivacyValueAllowAll","params":[],"type":"InputPrivacyRule"},{"id":"320652927","predicate":"inputPrivacyValueAllowUsers","params":[{"name":"users","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"195371015","predicate":"inputPrivacyValueDisallowContacts","params":[],"type":"InputPrivacyRule"},{"id":"-697604407","predicate":"inputPrivacyValueDisallowAll","params":[],"type":"InputPrivacyRule"},{"id":"-1877932953","predicate":"inputPrivacyValueDisallowUsers","params":[{"name":"users","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"-123988","predicate":"privacyValueAllowContacts","params":[],"type":"PrivacyRule"},{"id":"1698855810","predicate":"privacyValueAllowAll","params":[],"type":"PrivacyRule"},{"id":"1297858060","predicate":"privacyValueAllowUsers","params":[{"name":"users","type":"Vector"}],"type":"PrivacyRule"},{"id":"-125240806","predicate":"privacyValueDisallowContacts","params":[],"type":"PrivacyRule"},{"id":"-1955338397","predicate":"privacyValueDisallowAll","params":[],"type":"PrivacyRule"},{"id":"209668535","predicate":"privacyValueDisallowUsers","params":[{"name":"users","type":"Vector"}],"type":"PrivacyRule"},{"id":"1430961007","predicate":"account.privacyRules","params":[{"name":"rules","type":"Vector"},{"name":"users","type":"Vector"}],"type":"account.PrivacyRules"},{"id":"-1194283041","predicate":"accountDaysTTL","params":[{"name":"days","type":"int"}],"type":"AccountDaysTTL"},{"id":"314130811","predicate":"updateUserPhone","params":[{"name":"user_id","type":"int"},{"name":"phone","type":"string"}],"type":"Update"},{"id":"1815593308","predicate":"documentAttributeImageSize","params":[{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"DocumentAttribute"},{"id":"297109817","predicate":"documentAttributeAnimated","params":[],"type":"DocumentAttribute"},{"id":"1662637586","predicate":"documentAttributeSticker","params":[{"name":"flags","type":"#"},{"name":"mask","type":"flags.1?true"},{"name":"alt","type":"string"},{"name":"stickerset","type":"InputStickerSet"},{"name":"mask_coords","type":"flags.0?MaskCoords"}],"type":"DocumentAttribute"},{"id":"1494273227","predicate":"documentAttributeVideo","params":[{"name":"duration","type":"int"},{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"DocumentAttribute"},{"id":"-1739392570","predicate":"documentAttributeAudio","params":[{"name":"flags","type":"#"},{"name":"voice","type":"flags.10?true"},{"name":"duration","type":"int"},{"name":"title","type":"flags.0?string"},{"name":"performer","type":"flags.1?string"},{"name":"waveform","type":"flags.2?bytes"}],"type":"DocumentAttribute"},{"id":"358154344","predicate":"documentAttributeFilename","params":[{"name":"file_name","type":"string"}],"type":"DocumentAttribute"},{"id":"-244016606","predicate":"messages.stickersNotModified","params":[],"type":"messages.Stickers"},{"id":"-1970352846","predicate":"messages.stickers","params":[{"name":"hash","type":"string"},{"name":"stickers","type":"Vector"}],"type":"messages.Stickers"},{"id":"313694676","predicate":"stickerPack","params":[{"name":"emoticon","type":"string"},{"name":"documents","type":"Vector"}],"type":"StickerPack"},{"id":"-395967805","predicate":"messages.allStickersNotModified","params":[],"type":"messages.AllStickers"},{"id":"-302170017","predicate":"messages.allStickers","params":[{"name":"hash","type":"int"},{"name":"sets","type":"Vector"}],"type":"messages.AllStickers"},{"id":"-1369215196","predicate":"disabledFeature","params":[{"name":"feature","type":"string"},{"name":"description","type":"string"}],"type":"DisabledFeature"},{"id":"-1721631396","predicate":"updateReadHistoryInbox","params":[{"name":"peer","type":"Peer"},{"name":"max_id","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"791617983","predicate":"updateReadHistoryOutbox","params":[{"name":"peer","type":"Peer"},{"name":"max_id","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-2066640507","predicate":"messages.affectedMessages","params":[{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"messages.AffectedMessages"},{"id":"1599050311","predicate":"contactLinkUnknown","params":[],"type":"ContactLink"},{"id":"-17968211","predicate":"contactLinkNone","params":[],"type":"ContactLink"},{"id":"646922073","predicate":"contactLinkHasPhone","params":[],"type":"ContactLink"},{"id":"-721239344","predicate":"contactLinkContact","params":[],"type":"ContactLink"},{"id":"2139689491","predicate":"updateWebPage","params":[{"name":"webpage","type":"WebPage"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-350980120","predicate":"webPageEmpty","params":[{"name":"id","type":"long"}],"type":"WebPage"},{"id":"-981018084","predicate":"webPagePending","params":[{"name":"id","type":"long"},{"name":"date","type":"int"}],"type":"WebPage"},{"id":"1594340540","predicate":"webPage","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"url","type":"string"},{"name":"display_url","type":"string"},{"name":"hash","type":"int"},{"name":"type","type":"flags.0?string"},{"name":"site_name","type":"flags.1?string"},{"name":"title","type":"flags.2?string"},{"name":"description","type":"flags.3?string"},{"name":"photo","type":"flags.4?Photo"},{"name":"embed_url","type":"flags.5?string"},{"name":"embed_type","type":"flags.5?string"},{"name":"embed_width","type":"flags.6?int"},{"name":"embed_height","type":"flags.6?int"},{"name":"duration","type":"flags.7?int"},{"name":"author","type":"flags.8?string"},{"name":"document","type":"flags.9?Document"},{"name":"cached_page","type":"flags.10?Page"}],"type":"WebPage"},{"id":"-1557277184","predicate":"messageMediaWebPage","params":[{"name":"webpage","type":"WebPage"}],"type":"MessageMedia"},{"id":"2079516406","predicate":"authorization","params":[{"name":"hash","type":"long"},{"name":"flags","type":"int"},{"name":"device_model","type":"string"},{"name":"platform","type":"string"},{"name":"system_version","type":"string"},{"name":"api_id","type":"int"},{"name":"app_name","type":"string"},{"name":"app_version","type":"string"},{"name":"date_created","type":"int"},{"name":"date_active","type":"int"},{"name":"ip","type":"string"},{"name":"country","type":"string"},{"name":"region","type":"string"}],"type":"Authorization"},{"id":"307276766","predicate":"account.authorizations","params":[{"name":"authorizations","type":"Vector"}],"type":"account.Authorizations"},{"id":"-1764049896","predicate":"account.noPassword","params":[{"name":"new_salt","type":"bytes"},{"name":"email_unconfirmed_pattern","type":"string"}],"type":"account.Password"},{"id":"2081952796","predicate":"account.password","params":[{"name":"current_salt","type":"bytes"},{"name":"new_salt","type":"bytes"},{"name":"hint","type":"string"},{"name":"has_recovery","type":"Bool"},{"name":"email_unconfirmed_pattern","type":"string"}],"type":"account.Password"},{"id":"-1212732749","predicate":"account.passwordSettings","params":[{"name":"email","type":"string"}],"type":"account.PasswordSettings"},{"id":"-2037289493","predicate":"account.passwordInputSettings","params":[{"name":"flags","type":"#"},{"name":"new_salt","type":"flags.0?bytes"},{"name":"new_password_hash","type":"flags.0?bytes"},{"name":"hint","type":"flags.0?string"},{"name":"email","type":"flags.1?string"}],"type":"account.PasswordInputSettings"},{"id":"326715557","predicate":"auth.passwordRecovery","params":[{"name":"email_pattern","type":"string"}],"type":"auth.PasswordRecovery"},{"id":"673687578","predicate":"inputMediaVenue","params":[{"name":"geo_point","type":"InputGeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"}],"type":"InputMedia"},{"id":"2031269663","predicate":"messageMediaVenue","params":[{"name":"geo","type":"GeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"}],"type":"MessageMedia"},{"id":"-1551583367","predicate":"receivedNotifyMessage","params":[{"name":"id","type":"int"},{"name":"flags","type":"int"}],"type":"ReceivedNotifyMessage"},{"id":"1776236393","predicate":"chatInviteEmpty","params":[],"type":"ExportedChatInvite"},{"id":"-64092740","predicate":"chatInviteExported","params":[{"name":"link","type":"string"}],"type":"ExportedChatInvite"},{"id":"1516793212","predicate":"chatInviteAlready","params":[{"name":"chat","type":"Chat"}],"type":"ChatInvite"},{"id":"-613092008","predicate":"chatInvite","params":[{"name":"flags","type":"#"},{"name":"channel","type":"flags.0?true"},{"name":"broadcast","type":"flags.1?true"},{"name":"public","type":"flags.2?true"},{"name":"megagroup","type":"flags.3?true"},{"name":"title","type":"string"},{"name":"photo","type":"ChatPhoto"},{"name":"participants_count","type":"int"},{"name":"participants","type":"flags.4?Vector"}],"type":"ChatInvite"},{"id":"-123931160","predicate":"messageActionChatJoinedByLink","params":[{"name":"inviter_id","type":"int"}],"type":"MessageAction"},{"id":"1757493555","predicate":"updateReadMessagesContents","params":[{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-4838507","predicate":"inputStickerSetEmpty","params":[],"type":"InputStickerSet"},{"id":"-1645763991","predicate":"inputStickerSetID","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputStickerSet"},{"id":"-2044933984","predicate":"inputStickerSetShortName","params":[{"name":"short_name","type":"string"}],"type":"InputStickerSet"},{"id":"-852477119","predicate":"stickerSet","params":[{"name":"flags","type":"#"},{"name":"installed","type":"flags.0?true"},{"name":"archived","type":"flags.1?true"},{"name":"official","type":"flags.2?true"},{"name":"masks","type":"flags.3?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"title","type":"string"},{"name":"short_name","type":"string"},{"name":"count","type":"int"},{"name":"hash","type":"int"}],"type":"StickerSet"},{"id":"-1240849242","predicate":"messages.stickerSet","params":[{"name":"set","type":"StickerSet"},{"name":"packs","type":"Vector"},{"name":"documents","type":"Vector"}],"type":"messages.StickerSet"},{"id":"-787638374","predicate":"user","params":[{"name":"flags","type":"#"},{"name":"self","type":"flags.10?true"},{"name":"contact","type":"flags.11?true"},{"name":"mutual_contact","type":"flags.12?true"},{"name":"deleted","type":"flags.13?true"},{"name":"bot","type":"flags.14?true"},{"name":"bot_chat_history","type":"flags.15?true"},{"name":"bot_nochats","type":"flags.16?true"},{"name":"verified","type":"flags.17?true"},{"name":"restricted","type":"flags.18?true"},{"name":"min","type":"flags.20?true"},{"name":"bot_inline_geo","type":"flags.21?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"flags.0?long"},{"name":"first_name","type":"flags.1?string"},{"name":"last_name","type":"flags.2?string"},{"name":"username","type":"flags.3?string"},{"name":"phone","type":"flags.4?string"},{"name":"photo","type":"flags.5?UserProfilePhoto"},{"name":"status","type":"flags.6?UserStatus"},{"name":"bot_info_version","type":"flags.14?int"},{"name":"restriction_reason","type":"flags.18?string"},{"name":"bot_inline_placeholder","type":"flags.19?string"}],"type":"User"},{"id":"-1032140601","predicate":"botCommand","params":[{"name":"command","type":"string"},{"name":"description","type":"string"}],"type":"BotCommand"},{"id":"-1729618630","predicate":"botInfo","params":[{"name":"user_id","type":"int"},{"name":"description","type":"string"},{"name":"commands","type":"Vector"}],"type":"BotInfo"},{"id":"-1560655744","predicate":"keyboardButton","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"2002815875","predicate":"keyboardButtonRow","params":[{"name":"buttons","type":"Vector"}],"type":"KeyboardButtonRow"},{"id":"-1606526075","predicate":"replyKeyboardHide","params":[{"name":"flags","type":"#"},{"name":"selective","type":"flags.2?true"}],"type":"ReplyMarkup"},{"id":"-200242528","predicate":"replyKeyboardForceReply","params":[{"name":"flags","type":"#"},{"name":"single_use","type":"flags.1?true"},{"name":"selective","type":"flags.2?true"}],"type":"ReplyMarkup"},{"id":"889353612","predicate":"replyKeyboardMarkup","params":[{"name":"flags","type":"#"},{"name":"resize","type":"flags.0?true"},{"name":"single_use","type":"flags.1?true"},{"name":"selective","type":"flags.2?true"},{"name":"rows","type":"Vector"}],"type":"ReplyMarkup"},{"id":"2072935910","predicate":"inputPeerUser","params":[{"name":"user_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputPeer"},{"id":"-668391402","predicate":"inputUser","params":[{"name":"user_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputUser"},{"id":"-1350696044","predicate":"help.appChangelogEmpty","params":[],"type":"help.AppChangelog"},{"id":"705920636","predicate":"help.appChangelog","params":[{"name":"message","type":"string"},{"name":"media","type":"MessageMedia"},{"name":"entities","type":"Vector"}],"type":"help.AppChangelog"},{"id":"-1148011883","predicate":"messageEntityUnknown","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-100378723","predicate":"messageEntityMention","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1868782349","predicate":"messageEntityHashtag","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1827637959","predicate":"messageEntityBotCommand","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1859134776","predicate":"messageEntityUrl","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1692693954","predicate":"messageEntityEmail","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-1117713463","predicate":"messageEntityBold","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-2106619040","predicate":"messageEntityItalic","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"681706865","predicate":"messageEntityCode","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1938967520","predicate":"messageEntityPre","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"language","type":"string"}],"type":"MessageEntity"},{"id":"1990644519","predicate":"messageEntityTextUrl","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"url","type":"string"}],"type":"MessageEntity"},{"id":"301019932","predicate":"updateShortSentMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"id","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"media","type":"flags.9?MessageMedia"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"-292807034","predicate":"inputChannelEmpty","params":[],"type":"InputChannel"},{"id":"-1343524562","predicate":"inputChannel","params":[{"name":"channel_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputChannel"},{"id":"-1109531342","predicate":"peerChannel","params":[{"name":"channel_id","type":"int"}],"type":"Peer"},{"id":"548253432","predicate":"inputPeerChannel","params":[{"name":"channel_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputPeer"},{"id":"-1588737454","predicate":"channel","params":[{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"kicked","type":"flags.1?true"},{"name":"left","type":"flags.2?true"},{"name":"editor","type":"flags.3?true"},{"name":"moderator","type":"flags.4?true"},{"name":"broadcast","type":"flags.5?true"},{"name":"verified","type":"flags.7?true"},{"name":"megagroup","type":"flags.8?true"},{"name":"restricted","type":"flags.9?true"},{"name":"democracy","type":"flags.10?true"},{"name":"signatures","type":"flags.11?true"},{"name":"min","type":"flags.12?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"flags.13?long"},{"name":"title","type":"string"},{"name":"username","type":"flags.6?string"},{"name":"photo","type":"ChatPhoto"},{"name":"date","type":"int"},{"name":"version","type":"int"},{"name":"restriction_reason","type":"flags.9?string"}],"type":"Chat"},{"id":"-2059962289","predicate":"channelForbidden","params":[{"name":"flags","type":"#"},{"name":"broadcast","type":"flags.5?true"},{"name":"megagroup","type":"flags.8?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"title","type":"string"}],"type":"Chat"},{"id":"2131196633","predicate":"contacts.resolvedPeer","params":[{"name":"peer","type":"Peer"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.ResolvedPeer"},{"id":"-1009430225","predicate":"channelFull","params":[{"name":"flags","type":"#"},{"name":"can_view_participants","type":"flags.3?true"},{"name":"can_set_username","type":"flags.6?true"},{"name":"id","type":"int"},{"name":"about","type":"string"},{"name":"participants_count","type":"flags.0?int"},{"name":"admins_count","type":"flags.1?int"},{"name":"kicked_count","type":"flags.2?int"},{"name":"read_inbox_max_id","type":"int"},{"name":"read_outbox_max_id","type":"int"},{"name":"unread_count","type":"int"},{"name":"chat_photo","type":"Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"exported_invite","type":"ExportedChatInvite"},{"name":"bot_info","type":"Vector"},{"name":"migrated_from_chat_id","type":"flags.4?int"},{"name":"migrated_from_max_id","type":"flags.4?int"},{"name":"pinned_msg_id","type":"flags.5?int"}],"type":"ChatFull"},{"id":"182649427","predicate":"messageRange","params":[{"name":"min_id","type":"int"},{"name":"max_id","type":"int"}],"type":"MessageRange"},{"id":"-1725551049","predicate":"messages.channelMessages","params":[{"name":"flags","type":"#"},{"name":"pts","type":"int"},{"name":"count","type":"int"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"-1781355374","predicate":"messageActionChannelCreate","params":[{"name":"title","type":"string"}],"type":"MessageAction"},{"id":"-352032773","predicate":"updateChannelTooLong","params":[{"name":"flags","type":"#"},{"name":"channel_id","type":"int"},{"name":"pts","type":"flags.0?int"}],"type":"Update"},{"id":"-1227598250","predicate":"updateChannel","params":[{"name":"channel_id","type":"int"}],"type":"Update"},{"id":"1656358105","predicate":"updateNewChannelMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"1108669311","predicate":"updateReadChannelInbox","params":[{"name":"channel_id","type":"int"},{"name":"max_id","type":"int"}],"type":"Update"},{"id":"-1015733815","predicate":"updateDeleteChannelMessages","params":[{"name":"channel_id","type":"int"},{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1734268085","predicate":"updateChannelMessageViews","params":[{"name":"channel_id","type":"int"},{"name":"id","type":"int"},{"name":"views","type":"int"}],"type":"Update"},{"id":"1041346555","predicate":"updates.channelDifferenceEmpty","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"pts","type":"int"},{"name":"timeout","type":"flags.1?int"}],"type":"updates.ChannelDifference"},{"id":"1091431943","predicate":"updates.channelDifferenceTooLong","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"pts","type":"int"},{"name":"timeout","type":"flags.1?int"},{"name":"top_message","type":"int"},{"name":"read_inbox_max_id","type":"int"},{"name":"read_outbox_max_id","type":"int"},{"name":"unread_count","type":"int"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"updates.ChannelDifference"},{"id":"543450958","predicate":"updates.channelDifference","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"pts","type":"int"},{"name":"timeout","type":"flags.1?int"},{"name":"new_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"updates.ChannelDifference"},{"id":"-1798033689","predicate":"channelMessagesFilterEmpty","params":[],"type":"ChannelMessagesFilter"},{"id":"-847783593","predicate":"channelMessagesFilter","params":[{"name":"flags","type":"#"},{"name":"exclude_new_messages","type":"flags.1?true"},{"name":"ranges","type":"Vector"}],"type":"ChannelMessagesFilter"},{"id":"367766557","predicate":"channelParticipant","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-1557620115","predicate":"channelParticipantSelf","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-1861910545","predicate":"channelParticipantModerator","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-1743180447","predicate":"channelParticipantEditor","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-1933187430","predicate":"channelParticipantKicked","params":[{"name":"user_id","type":"int"},{"name":"kicked_by","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-471670279","predicate":"channelParticipantCreator","params":[{"name":"user_id","type":"int"}],"type":"ChannelParticipant"},{"id":"-566281095","predicate":"channelParticipantsRecent","params":[],"type":"ChannelParticipantsFilter"},{"id":"-1268741783","predicate":"channelParticipantsAdmins","params":[],"type":"ChannelParticipantsFilter"},{"id":"1010285434","predicate":"channelParticipantsKicked","params":[],"type":"ChannelParticipantsFilter"},{"id":"-1299865402","predicate":"channelRoleEmpty","params":[],"type":"ChannelParticipantRole"},{"id":"-1776756363","predicate":"channelRoleModerator","params":[],"type":"ChannelParticipantRole"},{"id":"-2113143156","predicate":"channelRoleEditor","params":[],"type":"ChannelParticipantRole"},{"id":"-177282392","predicate":"channels.channelParticipants","params":[{"name":"count","type":"int"},{"name":"participants","type":"Vector"},{"name":"users","type":"Vector"}],"type":"channels.ChannelParticipants"},{"id":"-791039645","predicate":"channels.channelParticipant","params":[{"name":"participant","type":"ChannelParticipant"},{"name":"users","type":"Vector"}],"type":"channels.ChannelParticipant"},{"id":"-636267638","predicate":"chatParticipantCreator","params":[{"name":"user_id","type":"int"}],"type":"ChatParticipant"},{"id":"-489233354","predicate":"chatParticipantAdmin","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChatParticipant"},{"id":"1855224129","predicate":"updateChatAdmins","params":[{"name":"chat_id","type":"int"},{"name":"enabled","type":"Bool"},{"name":"version","type":"int"}],"type":"Update"},{"id":"-1232070311","predicate":"updateChatParticipantAdmin","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"is_admin","type":"Bool"},{"name":"version","type":"int"}],"type":"Update"},{"id":"1371385889","predicate":"messageActionChatMigrateTo","params":[{"name":"channel_id","type":"int"}],"type":"MessageAction"},{"id":"-1336546578","predicate":"messageActionChannelMigrateFrom","params":[{"name":"title","type":"string"},{"name":"chat_id","type":"int"}],"type":"MessageAction"},{"id":"-1328445861","predicate":"channelParticipantsBots","params":[],"type":"ChannelParticipantsFilter"},{"id":"-236044656","predicate":"help.termsOfService","params":[{"name":"text","type":"string"}],"type":"help.TermsOfService"},{"id":"1753886890","predicate":"updateNewStickerSet","params":[{"name":"stickerset","type":"messages.StickerSet"}],"type":"Update"},{"id":"196268545","predicate":"updateStickerSetsOrder","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"order","type":"Vector"}],"type":"Update"},{"id":"1135492588","predicate":"updateStickerSets","params":[],"type":"Update"},{"id":"372165663","predicate":"foundGif","params":[{"name":"url","type":"string"},{"name":"thumb_url","type":"string"},{"name":"content_url","type":"string"},{"name":"content_type","type":"string"},{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"FoundGif"},{"id":"-1670052855","predicate":"foundGifCached","params":[{"name":"url","type":"string"},{"name":"photo","type":"Photo"},{"name":"document","type":"Document"}],"type":"FoundGif"},{"id":"1212395773","predicate":"inputMediaGifExternal","params":[{"name":"url","type":"string"},{"name":"q","type":"string"}],"type":"InputMedia"},{"id":"1158290442","predicate":"messages.foundGifs","params":[{"name":"next_offset","type":"int"},{"name":"results","type":"Vector"}],"type":"messages.FoundGifs"},{"id":"-402498398","predicate":"messages.savedGifsNotModified","params":[],"type":"messages.SavedGifs"},{"id":"772213157","predicate":"messages.savedGifs","params":[{"name":"hash","type":"int"},{"name":"gifs","type":"Vector"}],"type":"messages.SavedGifs"},{"id":"-1821035490","predicate":"updateSavedGifs","params":[],"type":"Update"},{"id":"691006739","predicate":"inputBotInlineMessageMediaAuto","params":[{"name":"flags","type":"#"},{"name":"caption","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"1036876423","predicate":"inputBotInlineMessageText","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.0?true"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"750510426","predicate":"inputBotInlineResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"url","type":"flags.3?string"},{"name":"thumb_url","type":"flags.4?string"},{"name":"content_url","type":"flags.5?string"},{"name":"content_type","type":"flags.5?string"},{"name":"w","type":"flags.6?int"},{"name":"h","type":"flags.6?int"},{"name":"duration","type":"flags.7?int"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"175419739","predicate":"botInlineMessageMediaAuto","params":[{"name":"flags","type":"#"},{"name":"caption","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1937807902","predicate":"botInlineMessageText","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.0?true"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1679053127","predicate":"botInlineResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"url","type":"flags.3?string"},{"name":"thumb_url","type":"flags.4?string"},{"name":"content_url","type":"flags.5?string"},{"name":"content_type","type":"flags.5?string"},{"name":"w","type":"flags.6?int"},{"name":"h","type":"flags.6?int"},{"name":"duration","type":"flags.7?int"},{"name":"send_message","type":"BotInlineMessage"}],"type":"BotInlineResult"},{"id":"-858565059","predicate":"messages.botResults","params":[{"name":"flags","type":"#"},{"name":"gallery","type":"flags.0?true"},{"name":"query_id","type":"long"},{"name":"next_offset","type":"flags.1?string"},{"name":"switch_pm","type":"flags.2?InlineBotSwitchPM"},{"name":"results","type":"Vector"},{"name":"cache_time","type":"int"}],"type":"messages.BotResults"},{"id":"1417832080","predicate":"updateBotInlineQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"query","type":"string"},{"name":"geo","type":"flags.0?GeoPoint"},{"name":"offset","type":"string"}],"type":"Update"},{"id":"239663460","predicate":"updateBotInlineSend","params":[{"name":"flags","type":"#"},{"name":"user_id","type":"int"},{"name":"query","type":"string"},{"name":"geo","type":"flags.0?GeoPoint"},{"name":"id","type":"string"},{"name":"msg_id","type":"flags.1?InputBotInlineMessageID"}],"type":"Update"},{"id":"1358283666","predicate":"inputMessagesFilterVoice","params":[],"type":"MessagesFilter"},{"id":"928101534","predicate":"inputMessagesFilterMusic","params":[],"type":"MessagesFilter"},{"id":"-1107622874","predicate":"inputPrivacyKeyChatInvite","params":[],"type":"InputPrivacyKey"},{"id":"1343122938","predicate":"privacyKeyChatInvite","params":[],"type":"PrivacyKey"},{"id":"524838915","predicate":"exportedMessageLink","params":[{"name":"link","type":"string"}],"type":"ExportedMessageLink"},{"id":"-947462709","predicate":"messageFwdHeader","params":[{"name":"flags","type":"#"},{"name":"from_id","type":"flags.0?int"},{"name":"date","type":"int"},{"name":"channel_id","type":"flags.1?int"},{"name":"channel_post","type":"flags.2?int"}],"type":"MessageFwdHeader"},{"id":"457133559","predicate":"updateEditChannelMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1738988427","predicate":"updateChannelPinnedMessage","params":[{"name":"channel_id","type":"int"},{"name":"id","type":"int"}],"type":"Update"},{"id":"-1799538451","predicate":"messageActionPinMessage","params":[],"type":"MessageAction"},{"id":"1923290508","predicate":"auth.codeTypeSms","params":[],"type":"auth.CodeType"},{"id":"1948046307","predicate":"auth.codeTypeCall","params":[],"type":"auth.CodeType"},{"id":"577556219","predicate":"auth.codeTypeFlashCall","params":[],"type":"auth.CodeType"},{"id":"1035688326","predicate":"auth.sentCodeTypeApp","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"-1073693790","predicate":"auth.sentCodeTypeSms","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"1398007207","predicate":"auth.sentCodeTypeCall","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"-1425815847","predicate":"auth.sentCodeTypeFlashCall","params":[{"name":"pattern","type":"string"}],"type":"auth.SentCodeType"},{"id":"629866245","predicate":"keyboardButtonUrl","params":[{"name":"text","type":"string"},{"name":"url","type":"string"}],"type":"KeyboardButton"},{"id":"1748655686","predicate":"keyboardButtonCallback","params":[{"name":"text","type":"string"},{"name":"data","type":"bytes"}],"type":"KeyboardButton"},{"id":"-1318425559","predicate":"keyboardButtonRequestPhone","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"-59151553","predicate":"keyboardButtonRequestGeoLocation","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"90744648","predicate":"keyboardButtonSwitchInline","params":[{"name":"flags","type":"#"},{"name":"same_peer","type":"flags.0?true"},{"name":"text","type":"string"},{"name":"query","type":"string"}],"type":"KeyboardButton"},{"id":"1218642516","predicate":"replyInlineMarkup","params":[{"name":"rows","type":"Vector"}],"type":"ReplyMarkup"},{"id":"911761060","predicate":"messages.botCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"alert","type":"flags.1?true"},{"name":"has_url","type":"flags.3?true"},{"name":"message","type":"flags.0?string"},{"name":"url","type":"flags.2?string"},{"name":"cache_time","type":"int"}],"type":"messages.BotCallbackAnswer"},{"id":"-415938591","predicate":"updateBotCallbackQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"peer","type":"Peer"},{"name":"msg_id","type":"int"},{"name":"chat_instance","type":"long"},{"name":"data","type":"flags.0?bytes"},{"name":"game_short_name","type":"flags.1?string"}],"type":"Update"},{"id":"649453030","predicate":"messages.messageEditData","params":[{"name":"flags","type":"#"},{"name":"caption","type":"flags.0?true"}],"type":"messages.MessageEditData"},{"id":"-469536605","predicate":"updateEditMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-190472735","predicate":"inputBotInlineMessageMediaGeo","params":[{"name":"flags","type":"#"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-1431327288","predicate":"inputBotInlineMessageMediaVenue","params":[{"name":"flags","type":"#"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"766443943","predicate":"inputBotInlineMessageMediaContact","params":[{"name":"flags","type":"#"},{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"982505656","predicate":"botInlineMessageMediaGeo","params":[{"name":"flags","type":"#"},{"name":"geo","type":"GeoPoint"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"1130767150","predicate":"botInlineMessageMediaVenue","params":[{"name":"flags","type":"#"},{"name":"geo","type":"GeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"904770772","predicate":"botInlineMessageMediaContact","params":[{"name":"flags","type":"#"},{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1462213465","predicate":"inputBotInlineResultPhoto","params":[{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"photo","type":"InputPhoto"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"-459324","predicate":"inputBotInlineResultDocument","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"document","type":"InputDocument"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"400266251","predicate":"botInlineMediaResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"photo","type":"flags.0?Photo"},{"name":"document","type":"flags.1?Document"},{"name":"title","type":"flags.2?string"},{"name":"description","type":"flags.3?string"},{"name":"send_message","type":"BotInlineMessage"}],"type":"BotInlineResult"},{"id":"-1995686519","predicate":"inputBotInlineMessageID","params":[{"name":"dc_id","type":"int"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputBotInlineMessageID"},{"id":"-103646630","predicate":"updateInlineBotCallbackQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"msg_id","type":"InputBotInlineMessageID"},{"name":"chat_instance","type":"long"},{"name":"data","type":"flags.0?bytes"},{"name":"game_short_name","type":"flags.1?string"}],"type":"Update"},{"id":"1008755359","predicate":"inlineBotSwitchPM","params":[{"name":"text","type":"string"},{"name":"start_param","type":"string"}],"type":"InlineBotSwitchPM"},{"id":"863093588","predicate":"messages.peerDialogs","params":[{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"state","type":"updates.State"}],"type":"messages.PeerDialogs"},{"id":"-305282981","predicate":"topPeer","params":[{"name":"peer","type":"Peer"},{"name":"rating","type":"double"}],"type":"TopPeer"},{"id":"-1419371685","predicate":"topPeerCategoryBotsPM","params":[],"type":"TopPeerCategory"},{"id":"344356834","predicate":"topPeerCategoryBotsInline","params":[],"type":"TopPeerCategory"},{"id":"104314861","predicate":"topPeerCategoryCorrespondents","params":[],"type":"TopPeerCategory"},{"id":"-1122524854","predicate":"topPeerCategoryGroups","params":[],"type":"TopPeerCategory"},{"id":"371037736","predicate":"topPeerCategoryChannels","params":[],"type":"TopPeerCategory"},{"id":"-75283823","predicate":"topPeerCategoryPeers","params":[{"name":"category","type":"TopPeerCategory"},{"name":"count","type":"int"},{"name":"peers","type":"Vector"}],"type":"TopPeerCategoryPeers"},{"id":"-567906571","predicate":"contacts.topPeersNotModified","params":[],"type":"contacts.TopPeers"},{"id":"1891070632","predicate":"contacts.topPeers","params":[{"name":"categories","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.TopPeers"},{"id":"892193368","predicate":"messageEntityMentionName","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"user_id","type":"int"}],"type":"MessageEntity"},{"id":"546203849","predicate":"inputMessageEntityMentionName","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"MessageEntity"},{"id":"975236280","predicate":"inputMessagesFilterChatPhotos","params":[],"type":"MessagesFilter"},{"id":"634833351","predicate":"updateReadChannelOutbox","params":[{"name":"channel_id","type":"int"},{"name":"max_id","type":"int"}],"type":"Update"},{"id":"-299124375","predicate":"updateDraftMessage","params":[{"name":"peer","type":"Peer"},{"name":"draft","type":"DraftMessage"}],"type":"Update"},{"id":"-1169445179","predicate":"draftMessageEmpty","params":[],"type":"DraftMessage"},{"id":"-40996577","predicate":"draftMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"message","type":"string"},{"name":"entities","type":"flags.3?Vector"},{"name":"date","type":"int"}],"type":"DraftMessage"},{"id":"-1615153660","predicate":"messageActionHistoryClear","params":[],"type":"MessageAction"},{"id":"82699215","predicate":"messages.featuredStickersNotModified","params":[],"type":"messages.FeaturedStickers"},{"id":"-123893531","predicate":"messages.featuredStickers","params":[{"name":"hash","type":"int"},{"name":"sets","type":"Vector"},{"name":"unread","type":"Vector"}],"type":"messages.FeaturedStickers"},{"id":"1461528386","predicate":"updateReadFeaturedStickers","params":[],"type":"Update"},{"id":"186120336","predicate":"messages.recentStickersNotModified","params":[],"type":"messages.RecentStickers"},{"id":"1558317424","predicate":"messages.recentStickers","params":[{"name":"hash","type":"int"},{"name":"stickers","type":"Vector"}],"type":"messages.RecentStickers"},{"id":"-1706939360","predicate":"updateRecentStickers","params":[],"type":"Update"},{"id":"1338747336","predicate":"messages.archivedStickers","params":[{"name":"count","type":"int"},{"name":"sets","type":"Vector"}],"type":"messages.ArchivedStickers"},{"id":"946083368","predicate":"messages.stickerSetInstallResultSuccess","params":[],"type":"messages.StickerSetInstallResult"},{"id":"904138920","predicate":"messages.stickerSetInstallResultArchive","params":[{"name":"sets","type":"Vector"}],"type":"messages.StickerSetInstallResult"},{"id":"1678812626","predicate":"stickerSetCovered","params":[{"name":"set","type":"StickerSet"},{"name":"cover","type":"Document"}],"type":"StickerSetCovered"},{"id":"-1574314746","predicate":"updateConfig","params":[],"type":"Update"},{"id":"861169551","predicate":"updatePtsChanged","params":[],"type":"Update"},{"id":"-1252045032","predicate":"inputMediaPhotoExternal","params":[{"name":"url","type":"string"},{"name":"caption","type":"string"}],"type":"InputMedia"},{"id":"-437690244","predicate":"inputMediaDocumentExternal","params":[{"name":"url","type":"string"},{"name":"caption","type":"string"}],"type":"InputMedia"},{"id":"872932635","predicate":"stickerSetMultiCovered","params":[{"name":"set","type":"StickerSet"},{"name":"covers","type":"Vector"}],"type":"StickerSetCovered"},{"id":"-1361650766","predicate":"maskCoords","params":[{"name":"n","type":"int"},{"name":"x","type":"double"},{"name":"y","type":"double"},{"name":"zoom","type":"double"}],"type":"MaskCoords"},{"id":"-1744710921","predicate":"documentAttributeHasStickers","params":[],"type":"DocumentAttribute"},{"id":"1251549527","predicate":"inputStickeredMediaPhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"InputStickeredMedia"},{"id":"70813275","predicate":"inputStickeredMediaDocument","params":[{"name":"id","type":"InputDocument"}],"type":"InputStickeredMedia"},{"id":"-1107729093","predicate":"game","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"short_name","type":"string"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"photo","type":"Photo"},{"name":"document","type":"flags.0?Document"}],"type":"Game"},{"id":"1336154098","predicate":"inputBotInlineResultGame","params":[{"name":"id","type":"string"},{"name":"short_name","type":"string"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"1262639204","predicate":"inputBotInlineMessageGame","params":[{"name":"flags","type":"#"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-38694904","predicate":"messageMediaGame","params":[{"name":"game","type":"Game"}],"type":"MessageMedia"},{"id":"-750828557","predicate":"inputMediaGame","params":[{"name":"id","type":"InputGame"}],"type":"InputMedia"},{"id":"53231223","predicate":"inputGameID","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputGame"},{"id":"-1020139510","predicate":"inputGameShortName","params":[{"name":"bot_id","type":"InputUser"},{"name":"short_name","type":"string"}],"type":"InputGame"},{"id":"1358175439","predicate":"keyboardButtonGame","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"-1834538890","predicate":"messageActionGameScore","params":[{"name":"game_id","type":"long"},{"name":"score","type":"int"}],"type":"MessageAction"},{"id":"1493171408","predicate":"highScore","params":[{"name":"pos","type":"int"},{"name":"user_id","type":"int"},{"name":"score","type":"int"}],"type":"HighScore"},{"id":"-1707344487","predicate":"messages.highScores","params":[{"name":"scores","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.HighScores"},{"id":"1258196845","predicate":"updates.differenceTooLong","params":[{"name":"pts","type":"int"}],"type":"updates.Difference"},{"id":"1081547008","predicate":"updateChannelWebPage","params":[{"name":"channel_id","type":"int"},{"name":"webpage","type":"WebPage"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1663561404","predicate":"messages.chatsSlice","params":[{"name":"count","type":"int"},{"name":"chats","type":"Vector"}],"type":"messages.Chats"},{"id":"-599948721","predicate":"textEmpty","params":[],"type":"RichText"},{"id":"1950782688","predicate":"textPlain","params":[{"name":"text","type":"string"}],"type":"RichText"},{"id":"1730456516","predicate":"textBold","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-653089380","predicate":"textItalic","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-1054465340","predicate":"textUnderline","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-1678197867","predicate":"textStrike","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"1816074681","predicate":"textFixed","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"1009288385","predicate":"textUrl","params":[{"name":"text","type":"RichText"},{"name":"url","type":"string"},{"name":"webpage_id","type":"long"}],"type":"RichText"},{"id":"-564523562","predicate":"textEmail","params":[{"name":"text","type":"RichText"},{"name":"email","type":"string"}],"type":"RichText"},{"id":"2120376535","predicate":"textConcat","params":[{"name":"texts","type":"Vector"}],"type":"RichText"},{"id":"324435594","predicate":"pageBlockUnsupported","params":[],"type":"PageBlock"},{"id":"1890305021","predicate":"pageBlockTitle","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1879401953","predicate":"pageBlockSubtitle","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1162877472","predicate":"pageBlockAuthorDate","params":[{"name":"author","type":"RichText"},{"name":"published_date","type":"int"}],"type":"PageBlock"},{"id":"-1076861716","predicate":"pageBlockHeader","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-248793375","predicate":"pageBlockSubheader","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"1182402406","predicate":"pageBlockParagraph","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1066346178","predicate":"pageBlockPreformatted","params":[{"name":"text","type":"RichText"},{"name":"language","type":"string"}],"type":"PageBlock"},{"id":"1216809369","predicate":"pageBlockFooter","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-618614392","predicate":"pageBlockDivider","params":[],"type":"PageBlock"},{"id":"-837994576","predicate":"pageBlockAnchor","params":[{"name":"name","type":"string"}],"type":"PageBlock"},{"id":"978896884","predicate":"pageBlockList","params":[{"name":"ordered","type":"Bool"},{"name":"items","type":"Vector"}],"type":"PageBlock"},{"id":"641563686","predicate":"pageBlockBlockquote","params":[{"name":"text","type":"RichText"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"1329878739","predicate":"pageBlockPullquote","params":[{"name":"text","type":"RichText"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"-372860542","predicate":"pageBlockPhoto","params":[{"name":"photo_id","type":"long"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"-640214938","predicate":"pageBlockVideo","params":[{"name":"flags","type":"#"},{"name":"autoplay","type":"flags.0?true"},{"name":"loop","type":"flags.1?true"},{"name":"video_id","type":"long"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"972174080","predicate":"pageBlockCover","params":[{"name":"cover","type":"PageBlock"}],"type":"PageBlock"},{"id":"-840826671","predicate":"pageBlockEmbed","params":[{"name":"flags","type":"#"},{"name":"full_width","type":"flags.0?true"},{"name":"allow_scrolling","type":"flags.3?true"},{"name":"url","type":"flags.1?string"},{"name":"html","type":"flags.2?string"},{"name":"poster_photo_id","type":"flags.4?long"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"690781161","predicate":"pageBlockEmbedPost","params":[{"name":"url","type":"string"},{"name":"webpage_id","type":"long"},{"name":"author_photo_id","type":"long"},{"name":"author","type":"string"},{"name":"date","type":"int"},{"name":"blocks","type":"Vector"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"145955919","predicate":"pageBlockCollage","params":[{"name":"items","type":"Vector"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"319588707","predicate":"pageBlockSlideshow","params":[{"name":"items","type":"Vector"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"-1913754556","predicate":"pagePart","params":[{"name":"blocks","type":"Vector"},{"name":"photos","type":"Vector"},{"name":"videos","type":"Vector"}],"type":"Page"},{"id":"-677274263","predicate":"pageFull","params":[{"name":"blocks","type":"Vector"},{"name":"photos","type":"Vector"},{"name":"videos","type":"Vector"}],"type":"Page"},{"id":"-2054908813","predicate":"webPageNotModified","params":[],"type":"WebPage"},{"id":"506920429","predicate":"inputPhoneCall","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputPhoneCall"},{"id":"1399245077","predicate":"phoneCallEmpty","params":[{"name":"id","type":"long"}],"type":"PhoneCall"},{"id":"462375633","predicate":"phoneCallWaiting","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"protocol","type":"PhoneCallProtocol"},{"name":"receive_date","type":"flags.0?int"}],"type":"PhoneCall"},{"id":"1816431336","predicate":"phoneCallRequested","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"PhoneCall"},{"id":"-1660057","predicate":"phoneCall","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a_or_b","type":"bytes"},{"name":"key_fingerprint","type":"long"},{"name":"protocol","type":"PhoneCallProtocol"},{"name":"connection","type":"PhoneConnection"},{"name":"alternative_connections","type":"Vector"},{"name":"start_date","type":"int"}],"type":"PhoneCall"},{"id":"1355435489","predicate":"phoneCallDiscarded","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"reason","type":"flags.0?PhoneCallDiscardReason"},{"name":"duration","type":"flags.1?int"}],"type":"PhoneCall"},{"id":"-1655957568","predicate":"phoneConnection","params":[{"name":"id","type":"long"},{"name":"ip","type":"string"},{"name":"ipv6","type":"string"},{"name":"port","type":"int"},{"name":"peer_tag","type":"bytes"}],"type":"PhoneConnection"},{"id":"-1564789301","predicate":"phoneCallProtocol","params":[{"name":"flags","type":"#"},{"name":"udp_p2p","type":"flags.0?true"},{"name":"udp_reflector","type":"flags.1?true"},{"name":"min_layer","type":"int"},{"name":"max_layer","type":"int"}],"type":"PhoneCallProtocol"},{"id":"-1425052898","predicate":"updatePhoneCall","params":[{"name":"phone_call","type":"PhoneCall"}],"type":"Update"},{"id":"-326966976","predicate":"phone.phoneCall","params":[{"name":"phone_call","type":"PhoneCall"},{"name":"users","type":"Vector"}],"type":"phone.PhoneCall"},{"id":"-88417185","predicate":"inputPrivacyKeyPhoneCall","params":[],"type":"InputPrivacyKey"},{"id":"1030105979","predicate":"privacyKeyPhoneCall","params":[],"type":"PrivacyKey"},{"id":"-580219064","predicate":"sendMessageGamePlayAction","params":[],"type":"SendMessageAction"},{"id":"-2048646399","predicate":"phoneCallDiscardReasonMissed","params":[],"type":"PhoneCallDiscardReason"},{"id":"-527056480","predicate":"phoneCallDiscardReasonDisconnect","params":[],"type":"PhoneCallDiscardReason"},{"id":"1471006352","predicate":"phoneCallDiscardReasonHangup","params":[],"type":"PhoneCallDiscardReason"},{"id":"-84416311","predicate":"phoneCallDiscardReasonBusy","params":[],"type":"PhoneCallDiscardReason"},{"id":"-686710068","predicate":"updateDialogPinned","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.0?true"},{"name":"peer","type":"Peer"}],"type":"Update"},{"id":"-657787251","predicate":"updatePinnedDialogs","params":[{"name":"flags","type":"#"},{"name":"order","type":"flags.0?Vector"}],"type":"Update"},{"id":"-2134272152","predicate":"inputMessagesFilterPhoneCalls","params":[{"name":"flags","type":"#"},{"name":"missed","type":"flags.0?true"}],"type":"MessagesFilter"},{"id":"-2132731265","predicate":"messageActionPhoneCall","params":[{"name":"flags","type":"#"},{"name":"call_id","type":"long"},{"name":"reason","type":"flags.0?PhoneCallDiscardReason"},{"name":"duration","type":"flags.1?int"}],"type":"MessageAction"},],"methods":[{"id":"-878758099","method":"invokeAfterMsg","params":[{"name":"msg_id","type":"long"},{"name":"query","type":"!X"}],"type":"X"},{"id":"1036301552","method":"invokeAfterMsgs","params":[{"name":"msg_ids","type":"Vector"},{"name":"query","type":"!X"}],"type":"X"},{"id":"1877286395","method":"auth.checkPhone","params":[{"name":"phone_number","type":"string"}],"type":"auth.CheckedPhone"},{"id":"-2035355412","method":"auth.sendCode","params":[{"name":"flags","type":"#"},{"name":"allow_flashcall","type":"flags.0?true"},{"name":"phone_number","type":"string"},{"name":"current_number","type":"flags.0?Bool"},{"name":"api_id","type":"int"},{"name":"api_hash","type":"string"}],"type":"auth.SentCode"},{"id":"453408308","method":"auth.signUp","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"}],"type":"auth.Authorization"},{"id":"-1126886015","method":"auth.signIn","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"auth.Authorization"},{"id":"1461180992","method":"auth.logOut","params":[],"type":"Bool"},{"id":"-1616179942","method":"auth.resetAuthorizations","params":[],"type":"Bool"},{"id":"1998331287","method":"auth.sendInvites","params":[{"name":"phone_numbers","type":"Vector"},{"name":"message","type":"string"}],"type":"Bool"},{"id":"-440401971","method":"auth.exportAuthorization","params":[{"name":"dc_id","type":"int"}],"type":"auth.ExportedAuthorization"},{"id":"-470837741","method":"auth.importAuthorization","params":[{"name":"id","type":"int"},{"name":"bytes","type":"bytes"}],"type":"auth.Authorization"},{"id":"-841733627","method":"auth.bindTempAuthKey","params":[{"name":"perm_auth_key_id","type":"long"},{"name":"nonce","type":"long"},{"name":"expires_at","type":"int"},{"name":"encrypted_message","type":"bytes"}],"type":"Bool"},{"id":"1669245048","method":"account.registerDevice","params":[{"name":"token_type","type":"int"},{"name":"token","type":"string"}],"type":"Bool"},{"id":"1707432768","method":"account.unregisterDevice","params":[{"name":"token_type","type":"int"},{"name":"token","type":"string"}],"type":"Bool"},{"id":"-2067899501","method":"account.updateNotifySettings","params":[{"name":"peer","type":"InputNotifyPeer"},{"name":"settings","type":"InputPeerNotifySettings"}],"type":"Bool"},{"id":"313765169","method":"account.getNotifySettings","params":[{"name":"peer","type":"InputNotifyPeer"}],"type":"PeerNotifySettings"},{"id":"-612493497","method":"account.resetNotifySettings","params":[],"type":"Bool"},{"id":"2018596725","method":"account.updateProfile","params":[{"name":"flags","type":"#"},{"name":"first_name","type":"flags.0?string"},{"name":"last_name","type":"flags.1?string"},{"name":"about","type":"flags.2?string"}],"type":"User"},{"id":"1713919532","method":"account.updateStatus","params":[{"name":"offline","type":"Bool"}],"type":"Bool"},{"id":"-1068696894","method":"account.getWallPapers","params":[],"type":"Vector"},{"id":"-1374118561","method":"account.reportPeer","params":[{"name":"peer","type":"InputPeer"},{"name":"reason","type":"ReportReason"}],"type":"Bool"},{"id":"227648840","method":"users.getUsers","params":[{"name":"id","type":"Vector"}],"type":"Vector"},{"id":"-902781519","method":"users.getFullUser","params":[{"name":"id","type":"InputUser"}],"type":"UserFull"},{"id":"-995929106","method":"contacts.getStatuses","params":[],"type":"Vector"},{"id":"583445000","method":"contacts.getContacts","params":[{"name":"hash","type":"string"}],"type":"contacts.Contacts"},{"id":"-634342611","method":"contacts.importContacts","params":[{"name":"contacts","type":"Vector"},{"name":"replace","type":"Bool"}],"type":"contacts.ImportedContacts"},{"id":"-1902823612","method":"contacts.deleteContact","params":[{"name":"id","type":"InputUser"}],"type":"contacts.Link"},{"id":"1504393374","method":"contacts.deleteContacts","params":[{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"858475004","method":"contacts.block","params":[{"name":"id","type":"InputUser"}],"type":"Bool"},{"id":"-448724803","method":"contacts.unblock","params":[{"name":"id","type":"InputUser"}],"type":"Bool"},{"id":"-176409329","method":"contacts.getBlocked","params":[{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"contacts.Blocked"},{"id":"-2065352905","method":"contacts.exportCard","params":[],"type":"Vector"},{"id":"1340184318","method":"contacts.importCard","params":[{"name":"export_card","type":"Vector"}],"type":"User"},{"id":"1109588596","method":"messages.getMessages","params":[{"name":"id","type":"Vector"}],"type":"messages.Messages"},{"id":"421243333","method":"messages.getDialogs","params":[{"name":"flags","type":"#"},{"name":"exclude_pinned","type":"flags.0?true"},{"name":"offset_date","type":"int"},{"name":"offset_id","type":"int"},{"name":"offset_peer","type":"InputPeer"},{"name":"limit","type":"int"}],"type":"messages.Dialogs"},{"id":"-1347868602","method":"messages.getHistory","params":[{"name":"peer","type":"InputPeer"},{"name":"offset_id","type":"int"},{"name":"offset_date","type":"int"},{"name":"add_offset","type":"int"},{"name":"limit","type":"int"},{"name":"max_id","type":"int"},{"name":"min_id","type":"int"}],"type":"messages.Messages"},{"id":"-732523960","method":"messages.search","params":[{"name":"flags","type":"#"},{"name":"peer","type":"InputPeer"},{"name":"q","type":"string"},{"name":"filter","type":"MessagesFilter"},{"name":"min_date","type":"int"},{"name":"max_date","type":"int"},{"name":"offset","type":"int"},{"name":"max_id","type":"int"},{"name":"limit","type":"int"}],"type":"messages.Messages"},{"id":"238054714","method":"messages.readHistory","params":[{"name":"peer","type":"InputPeer"},{"name":"max_id","type":"int"}],"type":"messages.AffectedMessages"},{"id":"469850889","method":"messages.deleteHistory","params":[{"name":"flags","type":"#"},{"name":"just_clear","type":"flags.0?true"},{"name":"peer","type":"InputPeer"},{"name":"max_id","type":"int"}],"type":"messages.AffectedHistory"},{"id":"-443640366","method":"messages.deleteMessages","params":[{"name":"flags","type":"#"},{"name":"revoke","type":"flags.0?true"},{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"94983360","method":"messages.receivedMessages","params":[{"name":"max_id","type":"int"}],"type":"Vector"},{"id":"-1551737264","method":"messages.setTyping","params":[{"name":"peer","type":"InputPeer"},{"name":"action","type":"SendMessageAction"}],"type":"Bool"},{"id":"-91733382","method":"messages.sendMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"message","type":"string"},{"name":"random_id","type":"long"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"}],"type":"Updates"},{"id":"-923703407","method":"messages.sendMedia","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"media","type":"InputMedia"},{"name":"random_id","type":"long"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"Updates"},{"id":"1888354709","method":"messages.forwardMessages","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"with_my_score","type":"flags.8?true"},{"name":"from_peer","type":"InputPeer"},{"name":"id","type":"Vector"},{"name":"random_id","type":"Vector"},{"name":"to_peer","type":"InputPeer"}],"type":"Updates"},{"id":"-820669733","method":"messages.reportSpam","params":[{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"-1460572005","method":"messages.hideReportSpam","params":[{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"913498268","method":"messages.getPeerSettings","params":[{"name":"peer","type":"InputPeer"}],"type":"PeerSettings"},{"id":"1013621127","method":"messages.getChats","params":[{"name":"id","type":"Vector"}],"type":"messages.Chats"},{"id":"998448230","method":"messages.getFullChat","params":[{"name":"chat_id","type":"int"}],"type":"messages.ChatFull"},{"id":"-599447467","method":"messages.editChatTitle","params":[{"name":"chat_id","type":"int"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-900957736","method":"messages.editChatPhoto","params":[{"name":"chat_id","type":"int"},{"name":"photo","type":"InputChatPhoto"}],"type":"Updates"},{"id":"-106911223","method":"messages.addChatUser","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"fwd_limit","type":"int"}],"type":"Updates"},{"id":"-530505962","method":"messages.deleteChatUser","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"Updates"},{"id":"164303470","method":"messages.createChat","params":[{"name":"users","type":"Vector"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-304838614","method":"updates.getState","params":[],"type":"updates.State"},{"id":"630429265","method":"updates.getDifference","params":[{"name":"flags","type":"#"},{"name":"pts","type":"int"},{"name":"pts_total_limit","type":"flags.0?int"},{"name":"date","type":"int"},{"name":"qts","type":"int"}],"type":"updates.Difference"},{"id":"-256159406","method":"photos.updateProfilePhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"UserProfilePhoto"},{"id":"1328726168","method":"photos.uploadProfilePhoto","params":[{"name":"file","type":"InputFile"}],"type":"photos.Photo"},{"id":"-2016444625","method":"photos.deletePhotos","params":[{"name":"id","type":"Vector"}],"type":"Vector"},{"id":"-1291540959","method":"upload.saveFilePart","params":[{"name":"file_id","type":"long"},{"name":"file_part","type":"int"},{"name":"bytes","type":"bytes"}],"type":"Bool"},{"id":"-475607115","method":"upload.getFile","params":[{"name":"location","type":"InputFileLocation"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"upload.File"},{"id":"-990308245","method":"help.getConfig","params":[],"type":"Config"},{"id":"531836966","method":"help.getNearestDc","params":[],"type":"NearestDc"},{"id":"-1372724842","method":"help.getAppUpdate","params":[],"type":"help.AppUpdate"},{"id":"1862465352","method":"help.saveAppLog","params":[{"name":"events","type":"Vector"}],"type":"Bool"},{"id":"1295590211","method":"help.getInviteText","params":[],"type":"help.InviteText"},{"id":"-1848823128","method":"photos.getUserPhotos","params":[{"name":"user_id","type":"InputUser"},{"name":"offset","type":"int"},{"name":"max_id","type":"long"},{"name":"limit","type":"int"}],"type":"photos.Photos"},{"id":"865483769","method":"messages.forwardMessage","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"random_id","type":"long"}],"type":"Updates"},{"id":"651135312","method":"messages.getDhConfig","params":[{"name":"version","type":"int"},{"name":"random_length","type":"int"}],"type":"messages.DhConfig"},{"id":"-162681021","method":"messages.requestEncryption","params":[{"name":"user_id","type":"InputUser"},{"name":"random_id","type":"int"},{"name":"g_a","type":"bytes"}],"type":"EncryptedChat"},{"id":"1035731989","method":"messages.acceptEncryption","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"g_b","type":"bytes"},{"name":"key_fingerprint","type":"long"}],"type":"EncryptedChat"},{"id":"-304536635","method":"messages.discardEncryption","params":[{"name":"chat_id","type":"int"}],"type":"Bool"},{"id":"2031374829","method":"messages.setEncryptedTyping","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"typing","type":"Bool"}],"type":"Bool"},{"id":"2135648522","method":"messages.readEncryptedHistory","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"max_date","type":"int"}],"type":"Bool"},{"id":"-1451792525","method":"messages.sendEncrypted","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"}],"type":"messages.SentEncryptedMessage"},{"id":"-1701831834","method":"messages.sendEncryptedFile","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"},{"name":"file","type":"InputEncryptedFile"}],"type":"messages.SentEncryptedMessage"},{"id":"852769188","method":"messages.sendEncryptedService","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"}],"type":"messages.SentEncryptedMessage"},{"id":"1436924774","method":"messages.receivedQueue","params":[{"name":"max_qts","type":"int"}],"type":"Vector"},{"id":"1259113487","method":"messages.reportEncryptedSpam","params":[{"name":"peer","type":"InputEncryptedChat"}],"type":"Bool"},{"id":"-562337987","method":"upload.saveBigFilePart","params":[{"name":"file_id","type":"long"},{"name":"file_part","type":"int"},{"name":"file_total_parts","type":"int"},{"name":"bytes","type":"bytes"}],"type":"Bool"},{"id":"1769565673","method":"initConnection","params":[{"name":"api_id","type":"int"},{"name":"device_model","type":"string"},{"name":"system_version","type":"string"},{"name":"app_version","type":"string"},{"name":"lang_code","type":"string"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-1663104819","method":"help.getSupport","params":[],"type":"help.Support"},{"id":"916930423","method":"messages.readMessageContents","params":[{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"655677548","method":"account.checkUsername","params":[{"name":"username","type":"string"}],"type":"Bool"},{"id":"1040964988","method":"account.updateUsername","params":[{"name":"username","type":"string"}],"type":"User"},{"id":"301470424","method":"contacts.search","params":[{"name":"q","type":"string"},{"name":"limit","type":"int"}],"type":"contacts.Found"},{"id":"-623130288","method":"account.getPrivacy","params":[{"name":"key","type":"InputPrivacyKey"}],"type":"account.PrivacyRules"},{"id":"-906486552","method":"account.setPrivacy","params":[{"name":"key","type":"InputPrivacyKey"},{"name":"rules","type":"Vector"}],"type":"account.PrivacyRules"},{"id":"1099779595","method":"account.deleteAccount","params":[{"name":"reason","type":"string"}],"type":"Bool"},{"id":"150761757","method":"account.getAccountTTL","params":[],"type":"AccountDaysTTL"},{"id":"608323678","method":"account.setAccountTTL","params":[{"name":"ttl","type":"AccountDaysTTL"}],"type":"Bool"},{"id":"-627372787","method":"invokeWithLayer","params":[{"name":"layer","type":"int"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-113456221","method":"contacts.resolveUsername","params":[{"name":"username","type":"string"}],"type":"contacts.ResolvedPeer"},{"id":"149257707","method":"account.sendChangePhoneCode","params":[{"name":"flags","type":"#"},{"name":"allow_flashcall","type":"flags.0?true"},{"name":"phone_number","type":"string"},{"name":"current_number","type":"flags.0?Bool"}],"type":"auth.SentCode"},{"id":"1891839707","method":"account.changePhone","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"User"},{"id":"479598769","method":"messages.getAllStickers","params":[{"name":"hash","type":"int"}],"type":"messages.AllStickers"},{"id":"954152242","method":"account.updateDeviceLocked","params":[{"name":"period","type":"int"}],"type":"Bool"},{"id":"1738800940","method":"auth.importBotAuthorization","params":[{"name":"flags","type":"int"},{"name":"api_id","type":"int"},{"name":"api_hash","type":"string"},{"name":"bot_auth_token","type":"string"}],"type":"auth.Authorization"},{"id":"623001124","method":"messages.getWebPagePreview","params":[{"name":"message","type":"string"}],"type":"MessageMedia"},{"id":"-484392616","method":"account.getAuthorizations","params":[],"type":"account.Authorizations"},{"id":"-545786948","method":"account.resetAuthorization","params":[{"name":"hash","type":"long"}],"type":"Bool"},{"id":"1418342645","method":"account.getPassword","params":[],"type":"account.Password"},{"id":"-1131605573","method":"account.getPasswordSettings","params":[{"name":"current_password_hash","type":"bytes"}],"type":"account.PasswordSettings"},{"id":"-92517498","method":"account.updatePasswordSettings","params":[{"name":"current_password_hash","type":"bytes"},{"name":"new_settings","type":"account.PasswordInputSettings"}],"type":"Bool"},{"id":"174260510","method":"auth.checkPassword","params":[{"name":"password_hash","type":"bytes"}],"type":"auth.Authorization"},{"id":"-661144474","method":"auth.requestPasswordRecovery","params":[],"type":"auth.PasswordRecovery"},{"id":"1319464594","method":"auth.recoverPassword","params":[{"name":"code","type":"string"}],"type":"auth.Authorization"},{"id":"-1080796745","method":"invokeWithoutUpdates","params":[{"name":"query","type":"!X"}],"type":"X"},{"id":"2106086025","method":"messages.exportChatInvite","params":[{"name":"chat_id","type":"int"}],"type":"ExportedChatInvite"},{"id":"1051570619","method":"messages.checkChatInvite","params":[{"name":"hash","type":"string"}],"type":"ChatInvite"},{"id":"1817183516","method":"messages.importChatInvite","params":[{"name":"hash","type":"string"}],"type":"Updates"},{"id":"639215886","method":"messages.getStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"}],"type":"messages.StickerSet"},{"id":"-946871200","method":"messages.installStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"},{"name":"archived","type":"Bool"}],"type":"messages.StickerSetInstallResult"},{"id":"-110209570","method":"messages.uninstallStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"}],"type":"Bool"},{"id":"-421563528","method":"messages.startBot","params":[{"name":"bot","type":"InputUser"},{"name":"peer","type":"InputPeer"},{"name":"random_id","type":"long"},{"name":"start_param","type":"string"}],"type":"Updates"},{"id":"-1189013126","method":"help.getAppChangelog","params":[],"type":"help.AppChangelog"},{"id":"-993483427","method":"messages.getMessagesViews","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"},{"name":"increment","type":"Bool"}],"type":"Vector"},{"id":"-871347913","method":"channels.readHistory","params":[{"name":"channel","type":"InputChannel"},{"name":"max_id","type":"int"}],"type":"Bool"},{"id":"-2067661490","method":"channels.deleteMessages","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"-787622117","method":"channels.deleteUserHistory","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"}],"type":"messages.AffectedHistory"},{"id":"-32999408","method":"channels.reportSpam","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"-1814580409","method":"channels.getMessages","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"Vector"}],"type":"messages.Messages"},{"id":"618237842","method":"channels.getParticipants","params":[{"name":"channel","type":"InputChannel"},{"name":"filter","type":"ChannelParticipantsFilter"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"channels.ChannelParticipants"},{"id":"1416484774","method":"channels.getParticipant","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"}],"type":"channels.ChannelParticipant"},{"id":"176122811","method":"channels.getChannels","params":[{"name":"id","type":"Vector"}],"type":"messages.Chats"},{"id":"141781513","method":"channels.getFullChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"messages.ChatFull"},{"id":"-192332417","method":"channels.createChannel","params":[{"name":"flags","type":"#"},{"name":"broadcast","type":"flags.0?true"},{"name":"megagroup","type":"flags.1?true"},{"name":"title","type":"string"},{"name":"about","type":"string"}],"type":"Updates"},{"id":"333610782","method":"channels.editAbout","params":[{"name":"channel","type":"InputChannel"},{"name":"about","type":"string"}],"type":"Bool"},{"id":"-344583728","method":"channels.editAdmin","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"role","type":"ChannelParticipantRole"}],"type":"Updates"},{"id":"1450044624","method":"channels.editTitle","params":[{"name":"channel","type":"InputChannel"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-248621111","method":"channels.editPhoto","params":[{"name":"channel","type":"InputChannel"},{"name":"photo","type":"InputChatPhoto"}],"type":"Updates"},{"id":"283557164","method":"channels.checkUsername","params":[{"name":"channel","type":"InputChannel"},{"name":"username","type":"string"}],"type":"Bool"},{"id":"890549214","method":"channels.updateUsername","params":[{"name":"channel","type":"InputChannel"},{"name":"username","type":"string"}],"type":"Bool"},{"id":"615851205","method":"channels.joinChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"-130635115","method":"channels.leaveChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"429865580","method":"channels.inviteToChannel","params":[{"name":"channel","type":"InputChannel"},{"name":"users","type":"Vector"}],"type":"Updates"},{"id":"-1502421484","method":"channels.kickFromChannel","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"kicked","type":"Bool"}],"type":"Updates"},{"id":"-950663035","method":"channels.exportInvite","params":[{"name":"channel","type":"InputChannel"}],"type":"ExportedChatInvite"},{"id":"-1072619549","method":"channels.deleteChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"51854712","method":"updates.getChannelDifference","params":[{"name":"flags","type":"#"},{"name":"force","type":"flags.0?true"},{"name":"channel","type":"InputChannel"},{"name":"filter","type":"ChannelMessagesFilter"},{"name":"pts","type":"int"},{"name":"limit","type":"int"}],"type":"updates.ChannelDifference"},{"id":"-326379039","method":"messages.toggleChatAdmins","params":[{"name":"chat_id","type":"int"},{"name":"enabled","type":"Bool"}],"type":"Updates"},{"id":"-1444503762","method":"messages.editChatAdmin","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"is_admin","type":"Bool"}],"type":"Bool"},{"id":"363051235","method":"messages.migrateChat","params":[{"name":"chat_id","type":"int"}],"type":"Updates"},{"id":"-1640190800","method":"messages.searchGlobal","params":[{"name":"q","type":"string"},{"name":"offset_date","type":"int"},{"name":"offset_peer","type":"InputPeer"},{"name":"offset_id","type":"int"},{"name":"limit","type":"int"}],"type":"messages.Messages"},{"id":"889286899","method":"help.getTermsOfService","params":[],"type":"help.TermsOfService"},{"id":"2016638777","method":"messages.reorderStickerSets","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"order","type":"Vector"}],"type":"Bool"},{"id":"864953444","method":"messages.getDocumentByHash","params":[{"name":"sha256","type":"bytes"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"}],"type":"Document"},{"id":"-1080395925","method":"messages.searchGifs","params":[{"name":"q","type":"string"},{"name":"offset","type":"int"}],"type":"messages.FoundGifs"},{"id":"-2084618926","method":"messages.getSavedGifs","params":[{"name":"hash","type":"int"}],"type":"messages.SavedGifs"},{"id":"846868683","method":"messages.saveGif","params":[{"name":"id","type":"InputDocument"},{"name":"unsave","type":"Bool"}],"type":"Bool"},{"id":"1364105629","method":"messages.getInlineBotResults","params":[{"name":"flags","type":"#"},{"name":"bot","type":"InputUser"},{"name":"peer","type":"InputPeer"},{"name":"geo_point","type":"flags.0?InputGeoPoint"},{"name":"query","type":"string"},{"name":"offset","type":"string"}],"type":"messages.BotResults"},{"id":"-346119674","method":"messages.setInlineBotResults","params":[{"name":"flags","type":"#"},{"name":"gallery","type":"flags.0?true"},{"name":"private","type":"flags.1?true"},{"name":"query_id","type":"long"},{"name":"results","type":"Vector"},{"name":"cache_time","type":"int"},{"name":"next_offset","type":"flags.2?string"},{"name":"switch_pm","type":"flags.3?InlineBotSwitchPM"}],"type":"Bool"},{"id":"-1318189314","method":"messages.sendInlineBotResult","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"random_id","type":"long"},{"name":"query_id","type":"long"},{"name":"id","type":"string"}],"type":"Updates"},{"id":"1231065863","method":"channels.toggleInvites","params":[{"name":"channel","type":"InputChannel"},{"name":"enabled","type":"Bool"}],"type":"Updates"},{"id":"-934882771","method":"channels.exportMessageLink","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"int"}],"type":"ExportedMessageLink"},{"id":"527021574","method":"channels.toggleSignatures","params":[{"name":"channel","type":"InputChannel"},{"name":"enabled","type":"Bool"}],"type":"Updates"},{"id":"-1490162350","method":"channels.updatePinnedMessage","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.0?true"},{"name":"channel","type":"InputChannel"},{"name":"id","type":"int"}],"type":"Updates"},{"id":"1056025023","method":"auth.resendCode","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"}],"type":"auth.SentCode"},{"id":"520357240","method":"auth.cancelCode","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"}],"type":"Bool"},{"id":"-39416522","method":"messages.getMessageEditData","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"}],"type":"messages.MessageEditData"},{"id":"-829299510","method":"messages.editMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"message","type":"flags.11?string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"}],"type":"Updates"},{"id":"319564933","method":"messages.editInlineBotMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"id","type":"InputBotInlineMessageID"},{"name":"message","type":"flags.11?string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"}],"type":"Bool"},{"id":"-2130010132","method":"messages.getBotCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"game","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"data","type":"flags.0?bytes"}],"type":"messages.BotCallbackAnswer"},{"id":"-712043766","method":"messages.setBotCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"alert","type":"flags.1?true"},{"name":"query_id","type":"long"},{"name":"message","type":"flags.0?string"},{"name":"url","type":"flags.2?string"},{"name":"cache_time","type":"int"}],"type":"Bool"},{"id":"-728224331","method":"contacts.getTopPeers","params":[{"name":"flags","type":"#"},{"name":"correspondents","type":"flags.0?true"},{"name":"bots_pm","type":"flags.1?true"},{"name":"bots_inline","type":"flags.2?true"},{"name":"groups","type":"flags.10?true"},{"name":"channels","type":"flags.15?true"},{"name":"offset","type":"int"},{"name":"limit","type":"int"},{"name":"hash","type":"int"}],"type":"contacts.TopPeers"},{"id":"451113900","method":"contacts.resetTopPeerRating","params":[{"name":"category","type":"TopPeerCategory"},{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"764901049","method":"messages.getPeerDialogs","params":[{"name":"peers","type":"Vector"}],"type":"messages.PeerDialogs"},{"id":"-1137057461","method":"messages.saveDraft","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"peer","type":"InputPeer"},{"name":"message","type":"string"},{"name":"entities","type":"flags.3?Vector"}],"type":"Bool"},{"id":"1782549861","method":"messages.getAllDrafts","params":[],"type":"Updates"},{"id":"766298703","method":"messages.getFeaturedStickers","params":[{"name":"hash","type":"int"}],"type":"messages.FeaturedStickers"},{"id":"1527873830","method":"messages.readFeaturedStickers","params":[{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"1587647177","method":"messages.getRecentStickers","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"},{"name":"hash","type":"int"}],"type":"messages.RecentStickers"},{"id":"958863608","method":"messages.saveRecentSticker","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"},{"name":"id","type":"InputDocument"},{"name":"unsave","type":"Bool"}],"type":"Bool"},{"id":"-1986437075","method":"messages.clearRecentStickers","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"}],"type":"Bool"},{"id":"1475442322","method":"messages.getArchivedStickers","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"offset_id","type":"long"},{"name":"limit","type":"int"}],"type":"messages.ArchivedStickers"},{"id":"353818557","method":"account.sendConfirmPhoneCode","params":[{"name":"flags","type":"#"},{"name":"allow_flashcall","type":"flags.0?true"},{"name":"hash","type":"string"},{"name":"current_number","type":"flags.0?Bool"}],"type":"auth.SentCode"},{"id":"1596029123","method":"account.confirmPhone","params":[{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"Bool"},{"id":"-1920105769","method":"channels.getAdminedPublicChannels","params":[],"type":"messages.Chats"},{"id":"1706608543","method":"messages.getMaskStickers","params":[{"name":"hash","type":"int"}],"type":"messages.AllStickers"},{"id":"-866424884","method":"messages.getAttachedStickers","params":[{"name":"media","type":"InputStickeredMedia"}],"type":"Vector"},{"id":"-1907842680","method":"auth.dropTempAuthKeys","params":[{"name":"except_auth_keys","type":"Vector"}],"type":"Bool"},{"id":"-1896289088","method":"messages.setGameScore","params":[{"name":"flags","type":"#"},{"name":"edit_message","type":"flags.0?true"},{"name":"force","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"score","type":"int"}],"type":"Updates"},{"id":"363700068","method":"messages.setInlineGameScore","params":[{"name":"flags","type":"#"},{"name":"edit_message","type":"flags.0?true"},{"name":"force","type":"flags.1?true"},{"name":"id","type":"InputBotInlineMessageID"},{"name":"user_id","type":"InputUser"},{"name":"score","type":"int"}],"type":"Bool"},{"id":"-400399203","method":"messages.getGameHighScores","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"messages.HighScores"},{"id":"258170395","method":"messages.getInlineGameHighScores","params":[{"name":"id","type":"InputBotInlineMessageID"},{"name":"user_id","type":"InputUser"}],"type":"messages.HighScores"},{"id":"218777796","method":"messages.getCommonChats","params":[{"name":"user_id","type":"InputUser"},{"name":"max_id","type":"int"},{"name":"limit","type":"int"}],"type":"messages.Chats"},{"id":"-341307408","method":"messages.getAllChats","params":[{"name":"except_ids","type":"Vector"}],"type":"messages.Chats"},{"id":"-333262899","method":"help.setBotUpdatesStatus","params":[{"name":"pending_updates_count","type":"int"},{"name":"message","type":"string"}],"type":"Bool"},{"id":"852135825","method":"messages.getWebPage","params":[{"name":"url","type":"string"},{"name":"hash","type":"int"}],"type":"WebPage"},{"id":"-1541757468","method":"phone.requestCall","params":[{"name":"user_id","type":"InputUser"},{"name":"random_id","type":"int"},{"name":"g_a","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"phone.PhoneCall"},{"id":"571411232","method":"phone.acceptCall","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"g_b","type":"bytes"},{"name":"key_fingerprint","type":"long"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"phone.PhoneCall"},{"id":"1576783324","method":"phone.discardCall","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"duration","type":"int"},{"name":"reason","type":"PhoneCallDiscardReason"},{"name":"connection_id","type":"long"}],"type":"Bool"},{"id":"399855457","method":"phone.receivedCall","params":[{"name":"peer","type":"InputPhoneCall"}],"type":"Bool"},{"id":"847887978","method":"messages.toggleDialogPin","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.0?true"},{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"-1784678844","method":"messages.reorderPinnedDialogs","params":[{"name":"flags","type":"#"},{"name":"force","type":"flags.0?true"},{"name":"order","type":"Vector"}],"type":"Bool"},{"id":"-497756594","method":"messages.getPinnedDialogs","params":[],"type":"messages.PeerDialogs"}]} +Config.Schema.API = {"constructors":[{"id":"-1132882121","predicate":"boolFalse","params":[],"type":"Bool"},{"id":"-1720552011","predicate":"boolTrue","params":[],"type":"Bool"},{"id":"1072550713","predicate":"true","params":[],"type":"True"},{"id":"481674261","predicate":"vector","params":[],"type":"Vector t"},{"id":"-994444869","predicate":"error","params":[{"name":"code","type":"int"},{"name":"text","type":"string"}],"type":"Error"},{"id":"1450380236","predicate":"null","params":[],"type":"Null"},{"id":"2134579434","predicate":"inputPeerEmpty","params":[],"type":"InputPeer"},{"id":"2107670217","predicate":"inputPeerSelf","params":[],"type":"InputPeer"},{"id":"396093539","predicate":"inputPeerChat","params":[{"name":"chat_id","type":"int"}],"type":"InputPeer"},{"id":"-1182234929","predicate":"inputUserEmpty","params":[],"type":"InputUser"},{"id":"-138301121","predicate":"inputUserSelf","params":[],"type":"InputUser"},{"id":"-208488460","predicate":"inputPhoneContact","params":[{"name":"client_id","type":"long"},{"name":"phone","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"}],"type":"InputContact"},{"id":"-181407105","predicate":"inputFile","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"name","type":"string"},{"name":"md5_checksum","type":"string"}],"type":"InputFile"},{"id":"-1771768449","predicate":"inputMediaEmpty","params":[],"type":"InputMedia"},{"id":"1661770481","predicate":"inputMediaUploadedPhoto","params":[{"name":"flags","type":"#"},{"name":"file","type":"InputFile"},{"name":"caption","type":"string"},{"name":"stickers","type":"flags.0?Vector"}],"type":"InputMedia"},{"id":"-373312269","predicate":"inputMediaPhoto","params":[{"name":"id","type":"InputPhoto"},{"name":"caption","type":"string"}],"type":"InputMedia"},{"id":"-104578748","predicate":"inputMediaGeoPoint","params":[{"name":"geo_point","type":"InputGeoPoint"}],"type":"InputMedia"},{"id":"-1494984313","predicate":"inputMediaContact","params":[{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"}],"type":"InputMedia"},{"id":"480546647","predicate":"inputChatPhotoEmpty","params":[],"type":"InputChatPhoto"},{"id":"-1837345356","predicate":"inputChatUploadedPhoto","params":[{"name":"file","type":"InputFile"}],"type":"InputChatPhoto"},{"id":"-1991004873","predicate":"inputChatPhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"InputChatPhoto"},{"id":"-457104426","predicate":"inputGeoPointEmpty","params":[],"type":"InputGeoPoint"},{"id":"-206066487","predicate":"inputGeoPoint","params":[{"name":"lat","type":"double"},{"name":"long","type":"double"}],"type":"InputGeoPoint"},{"id":"483901197","predicate":"inputPhotoEmpty","params":[],"type":"InputPhoto"},{"id":"-74070332","predicate":"inputPhoto","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputPhoto"},{"id":"342061462","predicate":"inputFileLocation","params":[{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"},{"name":"secret","type":"long"}],"type":"InputFileLocation"},{"id":"1996904104","predicate":"inputAppEvent","params":[{"name":"time","type":"double"},{"name":"type","type":"string"},{"name":"peer","type":"long"},{"name":"data","type":"string"}],"type":"InputAppEvent"},{"id":"-1649296275","predicate":"peerUser","params":[{"name":"user_id","type":"int"}],"type":"Peer"},{"id":"-1160714821","predicate":"peerChat","params":[{"name":"chat_id","type":"int"}],"type":"Peer"},{"id":"-1432995067","predicate":"storage.fileUnknown","params":[],"type":"storage.FileType"},{"id":"1086091090","predicate":"storage.filePartial","params":[],"type":"storage.FileType"},{"id":"8322574","predicate":"storage.fileJpeg","params":[],"type":"storage.FileType"},{"id":"-891180321","predicate":"storage.fileGif","params":[],"type":"storage.FileType"},{"id":"172975040","predicate":"storage.filePng","params":[],"type":"storage.FileType"},{"id":"-1373745011","predicate":"storage.filePdf","params":[],"type":"storage.FileType"},{"id":"1384777335","predicate":"storage.fileMp3","params":[],"type":"storage.FileType"},{"id":"1258941372","predicate":"storage.fileMov","params":[],"type":"storage.FileType"},{"id":"-1278304028","predicate":"storage.fileMp4","params":[],"type":"storage.FileType"},{"id":"276907596","predicate":"storage.fileWebp","params":[],"type":"storage.FileType"},{"id":"2086234950","predicate":"fileLocationUnavailable","params":[{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"},{"name":"secret","type":"long"}],"type":"FileLocation"},{"id":"1406570614","predicate":"fileLocation","params":[{"name":"dc_id","type":"int"},{"name":"volume_id","type":"long"},{"name":"local_id","type":"int"},{"name":"secret","type":"long"}],"type":"FileLocation"},{"id":"537022650","predicate":"userEmpty","params":[{"name":"id","type":"int"}],"type":"User"},{"id":"1326562017","predicate":"userProfilePhotoEmpty","params":[],"type":"UserProfilePhoto"},{"id":"-715532088","predicate":"userProfilePhoto","params":[{"name":"photo_id","type":"long"},{"name":"photo_small","type":"FileLocation"},{"name":"photo_big","type":"FileLocation"}],"type":"UserProfilePhoto"},{"id":"164646985","predicate":"userStatusEmpty","params":[],"type":"UserStatus"},{"id":"-306628279","predicate":"userStatusOnline","params":[{"name":"expires","type":"int"}],"type":"UserStatus"},{"id":"9203775","predicate":"userStatusOffline","params":[{"name":"was_online","type":"int"}],"type":"UserStatus"},{"id":"-1683826688","predicate":"chatEmpty","params":[{"name":"id","type":"int"}],"type":"Chat"},{"id":"-652419756","predicate":"chat","params":[{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"kicked","type":"flags.1?true"},{"name":"left","type":"flags.2?true"},{"name":"admins_enabled","type":"flags.3?true"},{"name":"admin","type":"flags.4?true"},{"name":"deactivated","type":"flags.5?true"},{"name":"id","type":"int"},{"name":"title","type":"string"},{"name":"photo","type":"ChatPhoto"},{"name":"participants_count","type":"int"},{"name":"date","type":"int"},{"name":"version","type":"int"},{"name":"migrated_to","type":"flags.6?InputChannel"}],"type":"Chat"},{"id":"120753115","predicate":"chatForbidden","params":[{"name":"id","type":"int"},{"name":"title","type":"string"}],"type":"Chat"},{"id":"771925524","predicate":"chatFull","params":[{"name":"id","type":"int"},{"name":"participants","type":"ChatParticipants"},{"name":"chat_photo","type":"Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"exported_invite","type":"ExportedChatInvite"},{"name":"bot_info","type":"Vector"}],"type":"ChatFull"},{"id":"-925415106","predicate":"chatParticipant","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChatParticipant"},{"id":"-57668565","predicate":"chatParticipantsForbidden","params":[{"name":"flags","type":"#"},{"name":"chat_id","type":"int"},{"name":"self_participant","type":"flags.0?ChatParticipant"}],"type":"ChatParticipants"},{"id":"1061556205","predicate":"chatParticipants","params":[{"name":"chat_id","type":"int"},{"name":"participants","type":"Vector"},{"name":"version","type":"int"}],"type":"ChatParticipants"},{"id":"935395612","predicate":"chatPhotoEmpty","params":[],"type":"ChatPhoto"},{"id":"1632839530","predicate":"chatPhoto","params":[{"name":"photo_small","type":"FileLocation"},{"name":"photo_big","type":"FileLocation"}],"type":"ChatPhoto"},{"id":"-2082087340","predicate":"messageEmpty","params":[{"name":"id","type":"int"}],"type":"Message"},{"id":"-1063525281","predicate":"message","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"post","type":"flags.14?true"},{"name":"id","type":"int"},{"name":"from_id","type":"flags.8?int"},{"name":"to_id","type":"Peer"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"date","type":"int"},{"name":"message","type":"string"},{"name":"media","type":"flags.9?MessageMedia"},{"name":"reply_markup","type":"flags.6?ReplyMarkup"},{"name":"entities","type":"flags.7?Vector"},{"name":"views","type":"flags.10?int"},{"name":"edit_date","type":"flags.15?int"}],"type":"Message"},{"id":"-1642487306","predicate":"messageService","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"post","type":"flags.14?true"},{"name":"id","type":"int"},{"name":"from_id","type":"flags.8?int"},{"name":"to_id","type":"Peer"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"date","type":"int"},{"name":"action","type":"MessageAction"}],"type":"Message"},{"id":"1038967584","predicate":"messageMediaEmpty","params":[],"type":"MessageMedia"},{"id":"1032643901","predicate":"messageMediaPhoto","params":[{"name":"photo","type":"Photo"},{"name":"caption","type":"string"}],"type":"MessageMedia"},{"id":"1457575028","predicate":"messageMediaGeo","params":[{"name":"geo","type":"GeoPoint"}],"type":"MessageMedia"},{"id":"1585262393","predicate":"messageMediaContact","params":[{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"user_id","type":"int"}],"type":"MessageMedia"},{"id":"-1618676578","predicate":"messageMediaUnsupported","params":[],"type":"MessageMedia"},{"id":"-1230047312","predicate":"messageActionEmpty","params":[],"type":"MessageAction"},{"id":"-1503425638","predicate":"messageActionChatCreate","params":[{"name":"title","type":"string"},{"name":"users","type":"Vector"}],"type":"MessageAction"},{"id":"-1247687078","predicate":"messageActionChatEditTitle","params":[{"name":"title","type":"string"}],"type":"MessageAction"},{"id":"2144015272","predicate":"messageActionChatEditPhoto","params":[{"name":"photo","type":"Photo"}],"type":"MessageAction"},{"id":"-1780220945","predicate":"messageActionChatDeletePhoto","params":[],"type":"MessageAction"},{"id":"1217033015","predicate":"messageActionChatAddUser","params":[{"name":"users","type":"Vector"}],"type":"MessageAction"},{"id":"-1297179892","predicate":"messageActionChatDeleteUser","params":[{"name":"user_id","type":"int"}],"type":"MessageAction"},{"id":"1728035348","predicate":"dialog","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.2?true"},{"name":"peer","type":"Peer"},{"name":"top_message","type":"int"},{"name":"read_inbox_max_id","type":"int"},{"name":"read_outbox_max_id","type":"int"},{"name":"unread_count","type":"int"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"pts","type":"flags.0?int"},{"name":"draft","type":"flags.1?DraftMessage"}],"type":"Dialog"},{"id":"590459437","predicate":"photoEmpty","params":[{"name":"id","type":"long"}],"type":"Photo"},{"id":"-1836524247","predicate":"photo","params":[{"name":"flags","type":"#"},{"name":"has_stickers","type":"flags.0?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"sizes","type":"Vector"}],"type":"Photo"},{"id":"236446268","predicate":"photoSizeEmpty","params":[{"name":"type","type":"string"}],"type":"PhotoSize"},{"id":"2009052699","predicate":"photoSize","params":[{"name":"type","type":"string"},{"name":"location","type":"FileLocation"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"size","type":"int"}],"type":"PhotoSize"},{"id":"-374917894","predicate":"photoCachedSize","params":[{"name":"type","type":"string"},{"name":"location","type":"FileLocation"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"bytes","type":"bytes"}],"type":"PhotoSize"},{"id":"286776671","predicate":"geoPointEmpty","params":[],"type":"GeoPoint"},{"id":"541710092","predicate":"geoPoint","params":[{"name":"long","type":"double"},{"name":"lat","type":"double"}],"type":"GeoPoint"},{"id":"-2128698738","predicate":"auth.checkedPhone","params":[{"name":"phone_registered","type":"Bool"}],"type":"auth.CheckedPhone"},{"id":"1577067778","predicate":"auth.sentCode","params":[{"name":"flags","type":"#"},{"name":"phone_registered","type":"flags.0?true"},{"name":"type","type":"auth.SentCodeType"},{"name":"phone_code_hash","type":"string"},{"name":"next_type","type":"flags.1?auth.CodeType"},{"name":"timeout","type":"flags.2?int"}],"type":"auth.SentCode"},{"id":"-855308010","predicate":"auth.authorization","params":[{"name":"flags","type":"#"},{"name":"tmp_sessions","type":"flags.0?int"},{"name":"user","type":"User"}],"type":"auth.Authorization"},{"id":"-543777747","predicate":"auth.exportedAuthorization","params":[{"name":"id","type":"int"},{"name":"bytes","type":"bytes"}],"type":"auth.ExportedAuthorization"},{"id":"-1195615476","predicate":"inputNotifyPeer","params":[{"name":"peer","type":"InputPeer"}],"type":"InputNotifyPeer"},{"id":"423314455","predicate":"inputNotifyUsers","params":[],"type":"InputNotifyPeer"},{"id":"1251338318","predicate":"inputNotifyChats","params":[],"type":"InputNotifyPeer"},{"id":"-1540769658","predicate":"inputNotifyAll","params":[],"type":"InputNotifyPeer"},{"id":"-265263912","predicate":"inputPeerNotifyEventsEmpty","params":[],"type":"InputPeerNotifyEvents"},{"id":"-395694988","predicate":"inputPeerNotifyEventsAll","params":[],"type":"InputPeerNotifyEvents"},{"id":"949182130","predicate":"inputPeerNotifySettings","params":[{"name":"flags","type":"#"},{"name":"show_previews","type":"flags.0?true"},{"name":"silent","type":"flags.1?true"},{"name":"mute_until","type":"int"},{"name":"sound","type":"string"}],"type":"InputPeerNotifySettings"},{"id":"-1378534221","predicate":"peerNotifyEventsEmpty","params":[],"type":"PeerNotifyEvents"},{"id":"1830677896","predicate":"peerNotifyEventsAll","params":[],"type":"PeerNotifyEvents"},{"id":"1889961234","predicate":"peerNotifySettingsEmpty","params":[],"type":"PeerNotifySettings"},{"id":"-1697798976","predicate":"peerNotifySettings","params":[{"name":"flags","type":"#"},{"name":"show_previews","type":"flags.0?true"},{"name":"silent","type":"flags.1?true"},{"name":"mute_until","type":"int"},{"name":"sound","type":"string"}],"type":"PeerNotifySettings"},{"id":"-2122045747","predicate":"peerSettings","params":[{"name":"flags","type":"#"},{"name":"report_spam","type":"flags.0?true"}],"type":"PeerSettings"},{"id":"-860866985","predicate":"wallPaper","params":[{"name":"id","type":"int"},{"name":"title","type":"string"},{"name":"sizes","type":"Vector"},{"name":"color","type":"int"}],"type":"WallPaper"},{"id":"1490799288","predicate":"inputReportReasonSpam","params":[],"type":"ReportReason"},{"id":"505595789","predicate":"inputReportReasonViolence","params":[],"type":"ReportReason"},{"id":"777640226","predicate":"inputReportReasonPornography","params":[],"type":"ReportReason"},{"id":"-512463606","predicate":"inputReportReasonOther","params":[{"name":"text","type":"string"}],"type":"ReportReason"},{"id":"253890367","predicate":"userFull","params":[{"name":"flags","type":"#"},{"name":"blocked","type":"flags.0?true"},{"name":"phone_calls_available","type":"flags.4?true"},{"name":"phone_calls_private","type":"flags.5?true"},{"name":"user","type":"User"},{"name":"about","type":"flags.1?string"},{"name":"link","type":"contacts.Link"},{"name":"profile_photo","type":"flags.2?Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"bot_info","type":"flags.3?BotInfo"},{"name":"common_chats_count","type":"int"}],"type":"UserFull"},{"id":"-116274796","predicate":"contact","params":[{"name":"user_id","type":"int"},{"name":"mutual","type":"Bool"}],"type":"Contact"},{"id":"-805141448","predicate":"importedContact","params":[{"name":"user_id","type":"int"},{"name":"client_id","type":"long"}],"type":"ImportedContact"},{"id":"1444661369","predicate":"contactBlocked","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"}],"type":"ContactBlocked"},{"id":"-748155807","predicate":"contactStatus","params":[{"name":"user_id","type":"int"},{"name":"status","type":"UserStatus"}],"type":"ContactStatus"},{"id":"986597452","predicate":"contacts.link","params":[{"name":"my_link","type":"ContactLink"},{"name":"foreign_link","type":"ContactLink"},{"name":"user","type":"User"}],"type":"contacts.Link"},{"id":"-1219778094","predicate":"contacts.contactsNotModified","params":[],"type":"contacts.Contacts"},{"id":"1871416498","predicate":"contacts.contacts","params":[{"name":"contacts","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Contacts"},{"id":"-1387117803","predicate":"contacts.importedContacts","params":[{"name":"imported","type":"Vector"},{"name":"retry_contacts","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.ImportedContacts"},{"id":"471043349","predicate":"contacts.blocked","params":[{"name":"blocked","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Blocked"},{"id":"-1878523231","predicate":"contacts.blockedSlice","params":[{"name":"count","type":"int"},{"name":"blocked","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Blocked"},{"id":"364538944","predicate":"messages.dialogs","params":[{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Dialogs"},{"id":"1910543603","predicate":"messages.dialogsSlice","params":[{"name":"count","type":"int"},{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Dialogs"},{"id":"-1938715001","predicate":"messages.messages","params":[{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"189033187","predicate":"messages.messagesSlice","params":[{"name":"count","type":"int"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"1694474197","predicate":"messages.chats","params":[{"name":"chats","type":"Vector"}],"type":"messages.Chats"},{"id":"-438840932","predicate":"messages.chatFull","params":[{"name":"full_chat","type":"ChatFull"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.ChatFull"},{"id":"-1269012015","predicate":"messages.affectedHistory","params":[{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"offset","type":"int"}],"type":"messages.AffectedHistory"},{"id":"1474492012","predicate":"inputMessagesFilterEmpty","params":[],"type":"MessagesFilter"},{"id":"-1777752804","predicate":"inputMessagesFilterPhotos","params":[],"type":"MessagesFilter"},{"id":"-1614803355","predicate":"inputMessagesFilterVideo","params":[],"type":"MessagesFilter"},{"id":"1458172132","predicate":"inputMessagesFilterPhotoVideo","params":[],"type":"MessagesFilter"},{"id":"-648121413","predicate":"inputMessagesFilterPhotoVideoDocuments","params":[],"type":"MessagesFilter"},{"id":"-1629621880","predicate":"inputMessagesFilterDocument","params":[],"type":"MessagesFilter"},{"id":"2129714567","predicate":"inputMessagesFilterUrl","params":[],"type":"MessagesFilter"},{"id":"-3644025","predicate":"inputMessagesFilterGif","params":[],"type":"MessagesFilter"},{"id":"522914557","predicate":"updateNewMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"1318109142","predicate":"updateMessageID","params":[{"name":"id","type":"int"},{"name":"random_id","type":"long"}],"type":"Update"},{"id":"-1576161051","predicate":"updateDeleteMessages","params":[{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"1548249383","predicate":"updateUserTyping","params":[{"name":"user_id","type":"int"},{"name":"action","type":"SendMessageAction"}],"type":"Update"},{"id":"-1704596961","predicate":"updateChatUserTyping","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"action","type":"SendMessageAction"}],"type":"Update"},{"id":"125178264","predicate":"updateChatParticipants","params":[{"name":"participants","type":"ChatParticipants"}],"type":"Update"},{"id":"469489699","predicate":"updateUserStatus","params":[{"name":"user_id","type":"int"},{"name":"status","type":"UserStatus"}],"type":"Update"},{"id":"-1489818765","predicate":"updateUserName","params":[{"name":"user_id","type":"int"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"username","type":"string"}],"type":"Update"},{"id":"-1791935732","predicate":"updateUserPhoto","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"},{"name":"photo","type":"UserProfilePhoto"},{"name":"previous","type":"Bool"}],"type":"Update"},{"id":"628472761","predicate":"updateContactRegistered","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"}],"type":"Update"},{"id":"-1657903163","predicate":"updateContactLink","params":[{"name":"user_id","type":"int"},{"name":"my_link","type":"ContactLink"},{"name":"foreign_link","type":"ContactLink"}],"type":"Update"},{"id":"-1519637954","predicate":"updates.state","params":[{"name":"pts","type":"int"},{"name":"qts","type":"int"},{"name":"date","type":"int"},{"name":"seq","type":"int"},{"name":"unread_count","type":"int"}],"type":"updates.State"},{"id":"1567990072","predicate":"updates.differenceEmpty","params":[{"name":"date","type":"int"},{"name":"seq","type":"int"}],"type":"updates.Difference"},{"id":"16030880","predicate":"updates.difference","params":[{"name":"new_messages","type":"Vector"},{"name":"new_encrypted_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"state","type":"updates.State"}],"type":"updates.Difference"},{"id":"-1459938943","predicate":"updates.differenceSlice","params":[{"name":"new_messages","type":"Vector"},{"name":"new_encrypted_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"intermediate_state","type":"updates.State"}],"type":"updates.Difference"},{"id":"-484987010","predicate":"updatesTooLong","params":[],"type":"Updates"},{"id":"-1857044719","predicate":"updateShortMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"id","type":"int"},{"name":"user_id","type":"int"},{"name":"message","type":"string"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"377562760","predicate":"updateShortChatMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"mentioned","type":"flags.4?true"},{"name":"media_unread","type":"flags.5?true"},{"name":"silent","type":"flags.13?true"},{"name":"id","type":"int"},{"name":"from_id","type":"int"},{"name":"chat_id","type":"int"},{"name":"message","type":"string"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"fwd_from","type":"flags.2?MessageFwdHeader"},{"name":"via_bot_id","type":"flags.11?int"},{"name":"reply_to_msg_id","type":"flags.3?int"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"2027216577","predicate":"updateShort","params":[{"name":"update","type":"Update"},{"name":"date","type":"int"}],"type":"Updates"},{"id":"1918567619","predicate":"updatesCombined","params":[{"name":"updates","type":"Vector"},{"name":"users","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"date","type":"int"},{"name":"seq_start","type":"int"},{"name":"seq","type":"int"}],"type":"Updates"},{"id":"1957577280","predicate":"updates","params":[{"name":"updates","type":"Vector"},{"name":"users","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"date","type":"int"},{"name":"seq","type":"int"}],"type":"Updates"},{"id":"-1916114267","predicate":"photos.photos","params":[{"name":"photos","type":"Vector"},{"name":"users","type":"Vector"}],"type":"photos.Photos"},{"id":"352657236","predicate":"photos.photosSlice","params":[{"name":"count","type":"int"},{"name":"photos","type":"Vector"},{"name":"users","type":"Vector"}],"type":"photos.Photos"},{"id":"539045032","predicate":"photos.photo","params":[{"name":"photo","type":"Photo"},{"name":"users","type":"Vector"}],"type":"photos.Photo"},{"id":"157948117","predicate":"upload.file","params":[{"name":"type","type":"storage.FileType"},{"name":"mtime","type":"int"},{"name":"bytes","type":"bytes"}],"type":"upload.File"},{"id":"98092748","predicate":"dcOption","params":[{"name":"flags","type":"#"},{"name":"ipv6","type":"flags.0?true"},{"name":"media_only","type":"flags.1?true"},{"name":"tcpo_only","type":"flags.2?true"},{"name":"cdn","type":"flags.3?true"},{"name":"id","type":"int"},{"name":"ip_address","type":"string"},{"name":"port","type":"int"}],"type":"DcOption"},{"id":"-882895228","predicate":"config","params":[{"name":"flags","type":"#"},{"name":"phonecalls_enabled","type":"flags.1?true"},{"name":"date","type":"int"},{"name":"expires","type":"int"},{"name":"test_mode","type":"Bool"},{"name":"this_dc","type":"int"},{"name":"dc_options","type":"Vector"},{"name":"chat_size_max","type":"int"},{"name":"megagroup_size_max","type":"int"},{"name":"forwarded_count_max","type":"int"},{"name":"online_update_period_ms","type":"int"},{"name":"offline_blur_timeout_ms","type":"int"},{"name":"offline_idle_timeout_ms","type":"int"},{"name":"online_cloud_timeout_ms","type":"int"},{"name":"notify_cloud_delay_ms","type":"int"},{"name":"notify_default_delay_ms","type":"int"},{"name":"chat_big_size","type":"int"},{"name":"push_chat_period_ms","type":"int"},{"name":"push_chat_limit","type":"int"},{"name":"saved_gifs_limit","type":"int"},{"name":"edit_time_limit","type":"int"},{"name":"rating_e_decay","type":"int"},{"name":"stickers_recent_limit","type":"int"},{"name":"tmp_sessions","type":"flags.0?int"},{"name":"pinned_dialogs_count_max","type":"int"},{"name":"call_receive_timeout_ms","type":"int"},{"name":"call_ring_timeout_ms","type":"int"},{"name":"call_connect_timeout_ms","type":"int"},{"name":"call_packet_timeout_ms","type":"int"},{"name":"me_url_prefix","type":"string"},{"name":"disabled_features","type":"Vector"}],"type":"Config"},{"id":"-1910892683","predicate":"nearestDc","params":[{"name":"country","type":"string"},{"name":"this_dc","type":"int"},{"name":"nearest_dc","type":"int"}],"type":"NearestDc"},{"id":"-1987579119","predicate":"help.appUpdate","params":[{"name":"id","type":"int"},{"name":"critical","type":"Bool"},{"name":"url","type":"string"},{"name":"text","type":"string"}],"type":"help.AppUpdate"},{"id":"-1000708810","predicate":"help.noAppUpdate","params":[],"type":"help.AppUpdate"},{"id":"415997816","predicate":"help.inviteText","params":[{"name":"message","type":"string"}],"type":"help.InviteText"},{"id":"1662091044","predicate":"wallPaperSolid","params":[{"name":"id","type":"int"},{"name":"title","type":"string"},{"name":"bg_color","type":"int"},{"name":"color","type":"int"}],"type":"WallPaper"},{"id":"314359194","predicate":"updateNewEncryptedMessage","params":[{"name":"message","type":"EncryptedMessage"},{"name":"qts","type":"int"}],"type":"Update"},{"id":"386986326","predicate":"updateEncryptedChatTyping","params":[{"name":"chat_id","type":"int"}],"type":"Update"},{"id":"-1264392051","predicate":"updateEncryption","params":[{"name":"chat","type":"EncryptedChat"},{"name":"date","type":"int"}],"type":"Update"},{"id":"956179895","predicate":"updateEncryptedMessagesRead","params":[{"name":"chat_id","type":"int"},{"name":"max_date","type":"int"},{"name":"date","type":"int"}],"type":"Update"},{"id":"-1417756512","predicate":"encryptedChatEmpty","params":[{"name":"id","type":"int"}],"type":"EncryptedChat"},{"id":"1006044124","predicate":"encryptedChatWaiting","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"}],"type":"EncryptedChat"},{"id":"-931638658","predicate":"encryptedChatRequested","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a","type":"bytes"}],"type":"EncryptedChat"},{"id":"-94974410","predicate":"encryptedChat","params":[{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a_or_b","type":"bytes"},{"name":"key_fingerprint","type":"long"}],"type":"EncryptedChat"},{"id":"332848423","predicate":"encryptedChatDiscarded","params":[{"name":"id","type":"int"}],"type":"EncryptedChat"},{"id":"-247351839","predicate":"inputEncryptedChat","params":[{"name":"chat_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputEncryptedChat"},{"id":"-1038136962","predicate":"encryptedFileEmpty","params":[],"type":"EncryptedFile"},{"id":"1248893260","predicate":"encryptedFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"size","type":"int"},{"name":"dc_id","type":"int"},{"name":"key_fingerprint","type":"int"}],"type":"EncryptedFile"},{"id":"406307684","predicate":"inputEncryptedFileEmpty","params":[],"type":"InputEncryptedFile"},{"id":"1690108678","predicate":"inputEncryptedFileUploaded","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"md5_checksum","type":"string"},{"name":"key_fingerprint","type":"int"}],"type":"InputEncryptedFile"},{"id":"1511503333","predicate":"inputEncryptedFile","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputEncryptedFile"},{"id":"-182231723","predicate":"inputEncryptedFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputFileLocation"},{"id":"-317144808","predicate":"encryptedMessage","params":[{"name":"random_id","type":"long"},{"name":"chat_id","type":"int"},{"name":"date","type":"int"},{"name":"bytes","type":"bytes"},{"name":"file","type":"EncryptedFile"}],"type":"EncryptedMessage"},{"id":"594758406","predicate":"encryptedMessageService","params":[{"name":"random_id","type":"long"},{"name":"chat_id","type":"int"},{"name":"date","type":"int"},{"name":"bytes","type":"bytes"}],"type":"EncryptedMessage"},{"id":"-1058912715","predicate":"messages.dhConfigNotModified","params":[{"name":"random","type":"bytes"}],"type":"messages.DhConfig"},{"id":"740433629","predicate":"messages.dhConfig","params":[{"name":"g","type":"int"},{"name":"p","type":"bytes"},{"name":"version","type":"int"},{"name":"random","type":"bytes"}],"type":"messages.DhConfig"},{"id":"1443858741","predicate":"messages.sentEncryptedMessage","params":[{"name":"date","type":"int"}],"type":"messages.SentEncryptedMessage"},{"id":"-1802240206","predicate":"messages.sentEncryptedFile","params":[{"name":"date","type":"int"},{"name":"file","type":"EncryptedFile"}],"type":"messages.SentEncryptedMessage"},{"id":"-95482955","predicate":"inputFileBig","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"name","type":"string"}],"type":"InputFile"},{"id":"767652808","predicate":"inputEncryptedFileBigUploaded","params":[{"name":"id","type":"long"},{"name":"parts","type":"int"},{"name":"key_fingerprint","type":"int"}],"type":"InputEncryptedFile"},{"id":"-364179876","predicate":"updateChatParticipantAdd","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"},{"name":"version","type":"int"}],"type":"Update"},{"id":"1851755554","predicate":"updateChatParticipantDelete","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"version","type":"int"}],"type":"Update"},{"id":"-1906403213","predicate":"updateDcOptions","params":[{"name":"dc_options","type":"Vector"}],"type":"Update"},{"id":"-797904407","predicate":"inputMediaUploadedDocument","params":[{"name":"flags","type":"#"},{"name":"file","type":"InputFile"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"},{"name":"caption","type":"string"},{"name":"stickers","type":"flags.0?Vector"}],"type":"InputMedia"},{"id":"1356369070","predicate":"inputMediaUploadedThumbDocument","params":[{"name":"flags","type":"#"},{"name":"file","type":"InputFile"},{"name":"thumb","type":"InputFile"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"},{"name":"caption","type":"string"},{"name":"stickers","type":"flags.0?Vector"}],"type":"InputMedia"},{"id":"444068508","predicate":"inputMediaDocument","params":[{"name":"id","type":"InputDocument"},{"name":"caption","type":"string"}],"type":"InputMedia"},{"id":"-203411800","predicate":"messageMediaDocument","params":[{"name":"document","type":"Document"},{"name":"caption","type":"string"}],"type":"MessageMedia"},{"id":"1928391342","predicate":"inputDocumentEmpty","params":[],"type":"InputDocument"},{"id":"410618194","predicate":"inputDocument","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputDocument"},{"id":"1125058340","predicate":"inputDocumentFileLocation","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"version","type":"int"}],"type":"InputFileLocation"},{"id":"922273905","predicate":"documentEmpty","params":[{"name":"id","type":"long"}],"type":"Document"},{"id":"-2027738169","predicate":"document","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"mime_type","type":"string"},{"name":"size","type":"int"},{"name":"thumb","type":"PhotoSize"},{"name":"dc_id","type":"int"},{"name":"version","type":"int"},{"name":"attributes","type":"Vector"}],"type":"Document"},{"id":"398898678","predicate":"help.support","params":[{"name":"phone_number","type":"string"},{"name":"user","type":"User"}],"type":"help.Support"},{"id":"-1613493288","predicate":"notifyPeer","params":[{"name":"peer","type":"Peer"}],"type":"NotifyPeer"},{"id":"-1261946036","predicate":"notifyUsers","params":[],"type":"NotifyPeer"},{"id":"-1073230141","predicate":"notifyChats","params":[],"type":"NotifyPeer"},{"id":"1959820384","predicate":"notifyAll","params":[],"type":"NotifyPeer"},{"id":"-2131957734","predicate":"updateUserBlocked","params":[{"name":"user_id","type":"int"},{"name":"blocked","type":"Bool"}],"type":"Update"},{"id":"-1094555409","predicate":"updateNotifySettings","params":[{"name":"peer","type":"NotifyPeer"},{"name":"notify_settings","type":"PeerNotifySettings"}],"type":"Update"},{"id":"381645902","predicate":"sendMessageTypingAction","params":[],"type":"SendMessageAction"},{"id":"-44119819","predicate":"sendMessageCancelAction","params":[],"type":"SendMessageAction"},{"id":"-1584933265","predicate":"sendMessageRecordVideoAction","params":[],"type":"SendMessageAction"},{"id":"-378127636","predicate":"sendMessageUploadVideoAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-718310409","predicate":"sendMessageRecordAudioAction","params":[],"type":"SendMessageAction"},{"id":"-212740181","predicate":"sendMessageUploadAudioAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-774682074","predicate":"sendMessageUploadPhotoAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"-1441998364","predicate":"sendMessageUploadDocumentAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"393186209","predicate":"sendMessageGeoLocationAction","params":[],"type":"SendMessageAction"},{"id":"1653390447","predicate":"sendMessageChooseContactAction","params":[],"type":"SendMessageAction"},{"id":"446822276","predicate":"contacts.found","params":[{"name":"results","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.Found"},{"id":"-337352679","predicate":"updateServiceNotification","params":[{"name":"flags","type":"#"},{"name":"popup","type":"flags.0?true"},{"name":"inbox_date","type":"flags.1?int"},{"name":"type","type":"string"},{"name":"message","type":"string"},{"name":"media","type":"MessageMedia"},{"name":"entities","type":"Vector"}],"type":"Update"},{"id":"-496024847","predicate":"userStatusRecently","params":[],"type":"UserStatus"},{"id":"129960444","predicate":"userStatusLastWeek","params":[],"type":"UserStatus"},{"id":"2011940674","predicate":"userStatusLastMonth","params":[],"type":"UserStatus"},{"id":"-298113238","predicate":"updatePrivacy","params":[{"name":"key","type":"PrivacyKey"},{"name":"rules","type":"Vector"}],"type":"Update"},{"id":"1335282456","predicate":"inputPrivacyKeyStatusTimestamp","params":[],"type":"InputPrivacyKey"},{"id":"-1137792208","predicate":"privacyKeyStatusTimestamp","params":[],"type":"PrivacyKey"},{"id":"218751099","predicate":"inputPrivacyValueAllowContacts","params":[],"type":"InputPrivacyRule"},{"id":"407582158","predicate":"inputPrivacyValueAllowAll","params":[],"type":"InputPrivacyRule"},{"id":"320652927","predicate":"inputPrivacyValueAllowUsers","params":[{"name":"users","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"195371015","predicate":"inputPrivacyValueDisallowContacts","params":[],"type":"InputPrivacyRule"},{"id":"-697604407","predicate":"inputPrivacyValueDisallowAll","params":[],"type":"InputPrivacyRule"},{"id":"-1877932953","predicate":"inputPrivacyValueDisallowUsers","params":[{"name":"users","type":"Vector"}],"type":"InputPrivacyRule"},{"id":"-123988","predicate":"privacyValueAllowContacts","params":[],"type":"PrivacyRule"},{"id":"1698855810","predicate":"privacyValueAllowAll","params":[],"type":"PrivacyRule"},{"id":"1297858060","predicate":"privacyValueAllowUsers","params":[{"name":"users","type":"Vector"}],"type":"PrivacyRule"},{"id":"-125240806","predicate":"privacyValueDisallowContacts","params":[],"type":"PrivacyRule"},{"id":"-1955338397","predicate":"privacyValueDisallowAll","params":[],"type":"PrivacyRule"},{"id":"209668535","predicate":"privacyValueDisallowUsers","params":[{"name":"users","type":"Vector"}],"type":"PrivacyRule"},{"id":"1430961007","predicate":"account.privacyRules","params":[{"name":"rules","type":"Vector"},{"name":"users","type":"Vector"}],"type":"account.PrivacyRules"},{"id":"-1194283041","predicate":"accountDaysTTL","params":[{"name":"days","type":"int"}],"type":"AccountDaysTTL"},{"id":"314130811","predicate":"updateUserPhone","params":[{"name":"user_id","type":"int"},{"name":"phone","type":"string"}],"type":"Update"},{"id":"1815593308","predicate":"documentAttributeImageSize","params":[{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"DocumentAttribute"},{"id":"297109817","predicate":"documentAttributeAnimated","params":[],"type":"DocumentAttribute"},{"id":"1662637586","predicate":"documentAttributeSticker","params":[{"name":"flags","type":"#"},{"name":"mask","type":"flags.1?true"},{"name":"alt","type":"string"},{"name":"stickerset","type":"InputStickerSet"},{"name":"mask_coords","type":"flags.0?MaskCoords"}],"type":"DocumentAttribute"},{"id":"250621158","predicate":"documentAttributeVideo","params":[{"name":"flags","type":"#"},{"name":"round_message","type":"flags.0?true"},{"name":"duration","type":"int"},{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"DocumentAttribute"},{"id":"-1739392570","predicate":"documentAttributeAudio","params":[{"name":"flags","type":"#"},{"name":"voice","type":"flags.10?true"},{"name":"duration","type":"int"},{"name":"title","type":"flags.0?string"},{"name":"performer","type":"flags.1?string"},{"name":"waveform","type":"flags.2?bytes"}],"type":"DocumentAttribute"},{"id":"358154344","predicate":"documentAttributeFilename","params":[{"name":"file_name","type":"string"}],"type":"DocumentAttribute"},{"id":"-244016606","predicate":"messages.stickersNotModified","params":[],"type":"messages.Stickers"},{"id":"-1970352846","predicate":"messages.stickers","params":[{"name":"hash","type":"string"},{"name":"stickers","type":"Vector"}],"type":"messages.Stickers"},{"id":"313694676","predicate":"stickerPack","params":[{"name":"emoticon","type":"string"},{"name":"documents","type":"Vector"}],"type":"StickerPack"},{"id":"-395967805","predicate":"messages.allStickersNotModified","params":[],"type":"messages.AllStickers"},{"id":"-302170017","predicate":"messages.allStickers","params":[{"name":"hash","type":"int"},{"name":"sets","type":"Vector"}],"type":"messages.AllStickers"},{"id":"-1369215196","predicate":"disabledFeature","params":[{"name":"feature","type":"string"},{"name":"description","type":"string"}],"type":"DisabledFeature"},{"id":"-1721631396","predicate":"updateReadHistoryInbox","params":[{"name":"peer","type":"Peer"},{"name":"max_id","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"791617983","predicate":"updateReadHistoryOutbox","params":[{"name":"peer","type":"Peer"},{"name":"max_id","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-2066640507","predicate":"messages.affectedMessages","params":[{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"messages.AffectedMessages"},{"id":"1599050311","predicate":"contactLinkUnknown","params":[],"type":"ContactLink"},{"id":"-17968211","predicate":"contactLinkNone","params":[],"type":"ContactLink"},{"id":"646922073","predicate":"contactLinkHasPhone","params":[],"type":"ContactLink"},{"id":"-721239344","predicate":"contactLinkContact","params":[],"type":"ContactLink"},{"id":"2139689491","predicate":"updateWebPage","params":[{"name":"webpage","type":"WebPage"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-350980120","predicate":"webPageEmpty","params":[{"name":"id","type":"long"}],"type":"WebPage"},{"id":"-981018084","predicate":"webPagePending","params":[{"name":"id","type":"long"},{"name":"date","type":"int"}],"type":"WebPage"},{"id":"1594340540","predicate":"webPage","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"url","type":"string"},{"name":"display_url","type":"string"},{"name":"hash","type":"int"},{"name":"type","type":"flags.0?string"},{"name":"site_name","type":"flags.1?string"},{"name":"title","type":"flags.2?string"},{"name":"description","type":"flags.3?string"},{"name":"photo","type":"flags.4?Photo"},{"name":"embed_url","type":"flags.5?string"},{"name":"embed_type","type":"flags.5?string"},{"name":"embed_width","type":"flags.6?int"},{"name":"embed_height","type":"flags.6?int"},{"name":"duration","type":"flags.7?int"},{"name":"author","type":"flags.8?string"},{"name":"document","type":"flags.9?Document"},{"name":"cached_page","type":"flags.10?Page"}],"type":"WebPage"},{"id":"-1557277184","predicate":"messageMediaWebPage","params":[{"name":"webpage","type":"WebPage"}],"type":"MessageMedia"},{"id":"2079516406","predicate":"authorization","params":[{"name":"hash","type":"long"},{"name":"flags","type":"int"},{"name":"device_model","type":"string"},{"name":"platform","type":"string"},{"name":"system_version","type":"string"},{"name":"api_id","type":"int"},{"name":"app_name","type":"string"},{"name":"app_version","type":"string"},{"name":"date_created","type":"int"},{"name":"date_active","type":"int"},{"name":"ip","type":"string"},{"name":"country","type":"string"},{"name":"region","type":"string"}],"type":"Authorization"},{"id":"307276766","predicate":"account.authorizations","params":[{"name":"authorizations","type":"Vector"}],"type":"account.Authorizations"},{"id":"-1764049896","predicate":"account.noPassword","params":[{"name":"new_salt","type":"bytes"},{"name":"email_unconfirmed_pattern","type":"string"}],"type":"account.Password"},{"id":"2081952796","predicate":"account.password","params":[{"name":"current_salt","type":"bytes"},{"name":"new_salt","type":"bytes"},{"name":"hint","type":"string"},{"name":"has_recovery","type":"Bool"},{"name":"email_unconfirmed_pattern","type":"string"}],"type":"account.Password"},{"id":"-1212732749","predicate":"account.passwordSettings","params":[{"name":"email","type":"string"}],"type":"account.PasswordSettings"},{"id":"-2037289493","predicate":"account.passwordInputSettings","params":[{"name":"flags","type":"#"},{"name":"new_salt","type":"flags.0?bytes"},{"name":"new_password_hash","type":"flags.0?bytes"},{"name":"hint","type":"flags.0?string"},{"name":"email","type":"flags.1?string"}],"type":"account.PasswordInputSettings"},{"id":"326715557","predicate":"auth.passwordRecovery","params":[{"name":"email_pattern","type":"string"}],"type":"auth.PasswordRecovery"},{"id":"673687578","predicate":"inputMediaVenue","params":[{"name":"geo_point","type":"InputGeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"}],"type":"InputMedia"},{"id":"2031269663","predicate":"messageMediaVenue","params":[{"name":"geo","type":"GeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"}],"type":"MessageMedia"},{"id":"-1551583367","predicate":"receivedNotifyMessage","params":[{"name":"id","type":"int"},{"name":"flags","type":"int"}],"type":"ReceivedNotifyMessage"},{"id":"1776236393","predicate":"chatInviteEmpty","params":[],"type":"ExportedChatInvite"},{"id":"-64092740","predicate":"chatInviteExported","params":[{"name":"link","type":"string"}],"type":"ExportedChatInvite"},{"id":"1516793212","predicate":"chatInviteAlready","params":[{"name":"chat","type":"Chat"}],"type":"ChatInvite"},{"id":"-613092008","predicate":"chatInvite","params":[{"name":"flags","type":"#"},{"name":"channel","type":"flags.0?true"},{"name":"broadcast","type":"flags.1?true"},{"name":"public","type":"flags.2?true"},{"name":"megagroup","type":"flags.3?true"},{"name":"title","type":"string"},{"name":"photo","type":"ChatPhoto"},{"name":"participants_count","type":"int"},{"name":"participants","type":"flags.4?Vector"}],"type":"ChatInvite"},{"id":"-123931160","predicate":"messageActionChatJoinedByLink","params":[{"name":"inviter_id","type":"int"}],"type":"MessageAction"},{"id":"1757493555","predicate":"updateReadMessagesContents","params":[{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-4838507","predicate":"inputStickerSetEmpty","params":[],"type":"InputStickerSet"},{"id":"-1645763991","predicate":"inputStickerSetID","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputStickerSet"},{"id":"-2044933984","predicate":"inputStickerSetShortName","params":[{"name":"short_name","type":"string"}],"type":"InputStickerSet"},{"id":"-852477119","predicate":"stickerSet","params":[{"name":"flags","type":"#"},{"name":"installed","type":"flags.0?true"},{"name":"archived","type":"flags.1?true"},{"name":"official","type":"flags.2?true"},{"name":"masks","type":"flags.3?true"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"title","type":"string"},{"name":"short_name","type":"string"},{"name":"count","type":"int"},{"name":"hash","type":"int"}],"type":"StickerSet"},{"id":"-1240849242","predicate":"messages.stickerSet","params":[{"name":"set","type":"StickerSet"},{"name":"packs","type":"Vector"},{"name":"documents","type":"Vector"}],"type":"messages.StickerSet"},{"id":"773059779","predicate":"user","params":[{"name":"flags","type":"#"},{"name":"self","type":"flags.10?true"},{"name":"contact","type":"flags.11?true"},{"name":"mutual_contact","type":"flags.12?true"},{"name":"deleted","type":"flags.13?true"},{"name":"bot","type":"flags.14?true"},{"name":"bot_chat_history","type":"flags.15?true"},{"name":"bot_nochats","type":"flags.16?true"},{"name":"verified","type":"flags.17?true"},{"name":"restricted","type":"flags.18?true"},{"name":"min","type":"flags.20?true"},{"name":"bot_inline_geo","type":"flags.21?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"flags.0?long"},{"name":"first_name","type":"flags.1?string"},{"name":"last_name","type":"flags.2?string"},{"name":"username","type":"flags.3?string"},{"name":"phone","type":"flags.4?string"},{"name":"photo","type":"flags.5?UserProfilePhoto"},{"name":"status","type":"flags.6?UserStatus"},{"name":"bot_info_version","type":"flags.14?int"},{"name":"restriction_reason","type":"flags.18?string"},{"name":"bot_inline_placeholder","type":"flags.19?string"},{"name":"lang_code","type":"flags.22?string"}],"type":"User"},{"id":"-1032140601","predicate":"botCommand","params":[{"name":"command","type":"string"},{"name":"description","type":"string"}],"type":"BotCommand"},{"id":"-1729618630","predicate":"botInfo","params":[{"name":"user_id","type":"int"},{"name":"description","type":"string"},{"name":"commands","type":"Vector"}],"type":"BotInfo"},{"id":"-1560655744","predicate":"keyboardButton","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"2002815875","predicate":"keyboardButtonRow","params":[{"name":"buttons","type":"Vector"}],"type":"KeyboardButtonRow"},{"id":"-1606526075","predicate":"replyKeyboardHide","params":[{"name":"flags","type":"#"},{"name":"selective","type":"flags.2?true"}],"type":"ReplyMarkup"},{"id":"-200242528","predicate":"replyKeyboardForceReply","params":[{"name":"flags","type":"#"},{"name":"single_use","type":"flags.1?true"},{"name":"selective","type":"flags.2?true"}],"type":"ReplyMarkup"},{"id":"889353612","predicate":"replyKeyboardMarkup","params":[{"name":"flags","type":"#"},{"name":"resize","type":"flags.0?true"},{"name":"single_use","type":"flags.1?true"},{"name":"selective","type":"flags.2?true"},{"name":"rows","type":"Vector"}],"type":"ReplyMarkup"},{"id":"2072935910","predicate":"inputPeerUser","params":[{"name":"user_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputPeer"},{"id":"-668391402","predicate":"inputUser","params":[{"name":"user_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputUser"},{"id":"-1148011883","predicate":"messageEntityUnknown","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-100378723","predicate":"messageEntityMention","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1868782349","predicate":"messageEntityHashtag","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1827637959","predicate":"messageEntityBotCommand","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1859134776","predicate":"messageEntityUrl","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1692693954","predicate":"messageEntityEmail","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-1117713463","predicate":"messageEntityBold","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"-2106619040","predicate":"messageEntityItalic","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"681706865","predicate":"messageEntityCode","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"}],"type":"MessageEntity"},{"id":"1938967520","predicate":"messageEntityPre","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"language","type":"string"}],"type":"MessageEntity"},{"id":"1990644519","predicate":"messageEntityTextUrl","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"url","type":"string"}],"type":"MessageEntity"},{"id":"301019932","predicate":"updateShortSentMessage","params":[{"name":"flags","type":"#"},{"name":"out","type":"flags.1?true"},{"name":"id","type":"int"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"},{"name":"date","type":"int"},{"name":"media","type":"flags.9?MessageMedia"},{"name":"entities","type":"flags.7?Vector"}],"type":"Updates"},{"id":"-292807034","predicate":"inputChannelEmpty","params":[],"type":"InputChannel"},{"id":"-1343524562","predicate":"inputChannel","params":[{"name":"channel_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputChannel"},{"id":"-1109531342","predicate":"peerChannel","params":[{"name":"channel_id","type":"int"}],"type":"Peer"},{"id":"548253432","predicate":"inputPeerChannel","params":[{"name":"channel_id","type":"int"},{"name":"access_hash","type":"long"}],"type":"InputPeer"},{"id":"-1588737454","predicate":"channel","params":[{"name":"flags","type":"#"},{"name":"creator","type":"flags.0?true"},{"name":"kicked","type":"flags.1?true"},{"name":"left","type":"flags.2?true"},{"name":"editor","type":"flags.3?true"},{"name":"moderator","type":"flags.4?true"},{"name":"broadcast","type":"flags.5?true"},{"name":"verified","type":"flags.7?true"},{"name":"megagroup","type":"flags.8?true"},{"name":"restricted","type":"flags.9?true"},{"name":"democracy","type":"flags.10?true"},{"name":"signatures","type":"flags.11?true"},{"name":"min","type":"flags.12?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"flags.13?long"},{"name":"title","type":"string"},{"name":"username","type":"flags.6?string"},{"name":"photo","type":"ChatPhoto"},{"name":"date","type":"int"},{"name":"version","type":"int"},{"name":"restriction_reason","type":"flags.9?string"}],"type":"Chat"},{"id":"-2059962289","predicate":"channelForbidden","params":[{"name":"flags","type":"#"},{"name":"broadcast","type":"flags.5?true"},{"name":"megagroup","type":"flags.8?true"},{"name":"id","type":"int"},{"name":"access_hash","type":"long"},{"name":"title","type":"string"}],"type":"Chat"},{"id":"2131196633","predicate":"contacts.resolvedPeer","params":[{"name":"peer","type":"Peer"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.ResolvedPeer"},{"id":"-1009430225","predicate":"channelFull","params":[{"name":"flags","type":"#"},{"name":"can_view_participants","type":"flags.3?true"},{"name":"can_set_username","type":"flags.6?true"},{"name":"id","type":"int"},{"name":"about","type":"string"},{"name":"participants_count","type":"flags.0?int"},{"name":"admins_count","type":"flags.1?int"},{"name":"kicked_count","type":"flags.2?int"},{"name":"read_inbox_max_id","type":"int"},{"name":"read_outbox_max_id","type":"int"},{"name":"unread_count","type":"int"},{"name":"chat_photo","type":"Photo"},{"name":"notify_settings","type":"PeerNotifySettings"},{"name":"exported_invite","type":"ExportedChatInvite"},{"name":"bot_info","type":"Vector"},{"name":"migrated_from_chat_id","type":"flags.4?int"},{"name":"migrated_from_max_id","type":"flags.4?int"},{"name":"pinned_msg_id","type":"flags.5?int"}],"type":"ChatFull"},{"id":"182649427","predicate":"messageRange","params":[{"name":"min_id","type":"int"},{"name":"max_id","type":"int"}],"type":"MessageRange"},{"id":"-1725551049","predicate":"messages.channelMessages","params":[{"name":"flags","type":"#"},{"name":"pts","type":"int"},{"name":"count","type":"int"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.Messages"},{"id":"-1781355374","predicate":"messageActionChannelCreate","params":[{"name":"title","type":"string"}],"type":"MessageAction"},{"id":"-352032773","predicate":"updateChannelTooLong","params":[{"name":"flags","type":"#"},{"name":"channel_id","type":"int"},{"name":"pts","type":"flags.0?int"}],"type":"Update"},{"id":"-1227598250","predicate":"updateChannel","params":[{"name":"channel_id","type":"int"}],"type":"Update"},{"id":"1656358105","predicate":"updateNewChannelMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"1108669311","predicate":"updateReadChannelInbox","params":[{"name":"channel_id","type":"int"},{"name":"max_id","type":"int"}],"type":"Update"},{"id":"-1015733815","predicate":"updateDeleteChannelMessages","params":[{"name":"channel_id","type":"int"},{"name":"messages","type":"Vector"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1734268085","predicate":"updateChannelMessageViews","params":[{"name":"channel_id","type":"int"},{"name":"id","type":"int"},{"name":"views","type":"int"}],"type":"Update"},{"id":"1041346555","predicate":"updates.channelDifferenceEmpty","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"pts","type":"int"},{"name":"timeout","type":"flags.1?int"}],"type":"updates.ChannelDifference"},{"id":"1091431943","predicate":"updates.channelDifferenceTooLong","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"pts","type":"int"},{"name":"timeout","type":"flags.1?int"},{"name":"top_message","type":"int"},{"name":"read_inbox_max_id","type":"int"},{"name":"read_outbox_max_id","type":"int"},{"name":"unread_count","type":"int"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"updates.ChannelDifference"},{"id":"543450958","predicate":"updates.channelDifference","params":[{"name":"flags","type":"#"},{"name":"final","type":"flags.0?true"},{"name":"pts","type":"int"},{"name":"timeout","type":"flags.1?int"},{"name":"new_messages","type":"Vector"},{"name":"other_updates","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"updates.ChannelDifference"},{"id":"-1798033689","predicate":"channelMessagesFilterEmpty","params":[],"type":"ChannelMessagesFilter"},{"id":"-847783593","predicate":"channelMessagesFilter","params":[{"name":"flags","type":"#"},{"name":"exclude_new_messages","type":"flags.1?true"},{"name":"ranges","type":"Vector"}],"type":"ChannelMessagesFilter"},{"id":"367766557","predicate":"channelParticipant","params":[{"name":"user_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-1557620115","predicate":"channelParticipantSelf","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-1861910545","predicate":"channelParticipantModerator","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-1743180447","predicate":"channelParticipantEditor","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-1933187430","predicate":"channelParticipantKicked","params":[{"name":"user_id","type":"int"},{"name":"kicked_by","type":"int"},{"name":"date","type":"int"}],"type":"ChannelParticipant"},{"id":"-471670279","predicate":"channelParticipantCreator","params":[{"name":"user_id","type":"int"}],"type":"ChannelParticipant"},{"id":"-566281095","predicate":"channelParticipantsRecent","params":[],"type":"ChannelParticipantsFilter"},{"id":"-1268741783","predicate":"channelParticipantsAdmins","params":[],"type":"ChannelParticipantsFilter"},{"id":"1010285434","predicate":"channelParticipantsKicked","params":[],"type":"ChannelParticipantsFilter"},{"id":"-1299865402","predicate":"channelRoleEmpty","params":[],"type":"ChannelParticipantRole"},{"id":"-1776756363","predicate":"channelRoleModerator","params":[],"type":"ChannelParticipantRole"},{"id":"-2113143156","predicate":"channelRoleEditor","params":[],"type":"ChannelParticipantRole"},{"id":"-177282392","predicate":"channels.channelParticipants","params":[{"name":"count","type":"int"},{"name":"participants","type":"Vector"},{"name":"users","type":"Vector"}],"type":"channels.ChannelParticipants"},{"id":"-791039645","predicate":"channels.channelParticipant","params":[{"name":"participant","type":"ChannelParticipant"},{"name":"users","type":"Vector"}],"type":"channels.ChannelParticipant"},{"id":"-636267638","predicate":"chatParticipantCreator","params":[{"name":"user_id","type":"int"}],"type":"ChatParticipant"},{"id":"-489233354","predicate":"chatParticipantAdmin","params":[{"name":"user_id","type":"int"},{"name":"inviter_id","type":"int"},{"name":"date","type":"int"}],"type":"ChatParticipant"},{"id":"1855224129","predicate":"updateChatAdmins","params":[{"name":"chat_id","type":"int"},{"name":"enabled","type":"Bool"},{"name":"version","type":"int"}],"type":"Update"},{"id":"-1232070311","predicate":"updateChatParticipantAdmin","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"int"},{"name":"is_admin","type":"Bool"},{"name":"version","type":"int"}],"type":"Update"},{"id":"1371385889","predicate":"messageActionChatMigrateTo","params":[{"name":"channel_id","type":"int"}],"type":"MessageAction"},{"id":"-1336546578","predicate":"messageActionChannelMigrateFrom","params":[{"name":"title","type":"string"},{"name":"chat_id","type":"int"}],"type":"MessageAction"},{"id":"-1328445861","predicate":"channelParticipantsBots","params":[],"type":"ChannelParticipantsFilter"},{"id":"-236044656","predicate":"help.termsOfService","params":[{"name":"text","type":"string"}],"type":"help.TermsOfService"},{"id":"1753886890","predicate":"updateNewStickerSet","params":[{"name":"stickerset","type":"messages.StickerSet"}],"type":"Update"},{"id":"196268545","predicate":"updateStickerSetsOrder","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"order","type":"Vector"}],"type":"Update"},{"id":"1135492588","predicate":"updateStickerSets","params":[],"type":"Update"},{"id":"372165663","predicate":"foundGif","params":[{"name":"url","type":"string"},{"name":"thumb_url","type":"string"},{"name":"content_url","type":"string"},{"name":"content_type","type":"string"},{"name":"w","type":"int"},{"name":"h","type":"int"}],"type":"FoundGif"},{"id":"-1670052855","predicate":"foundGifCached","params":[{"name":"url","type":"string"},{"name":"photo","type":"Photo"},{"name":"document","type":"Document"}],"type":"FoundGif"},{"id":"1212395773","predicate":"inputMediaGifExternal","params":[{"name":"url","type":"string"},{"name":"q","type":"string"}],"type":"InputMedia"},{"id":"1158290442","predicate":"messages.foundGifs","params":[{"name":"next_offset","type":"int"},{"name":"results","type":"Vector"}],"type":"messages.FoundGifs"},{"id":"-402498398","predicate":"messages.savedGifsNotModified","params":[],"type":"messages.SavedGifs"},{"id":"772213157","predicate":"messages.savedGifs","params":[{"name":"hash","type":"int"},{"name":"gifs","type":"Vector"}],"type":"messages.SavedGifs"},{"id":"-1821035490","predicate":"updateSavedGifs","params":[],"type":"Update"},{"id":"691006739","predicate":"inputBotInlineMessageMediaAuto","params":[{"name":"flags","type":"#"},{"name":"caption","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"1036876423","predicate":"inputBotInlineMessageText","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.0?true"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"750510426","predicate":"inputBotInlineResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"url","type":"flags.3?string"},{"name":"thumb_url","type":"flags.4?string"},{"name":"content_url","type":"flags.5?string"},{"name":"content_type","type":"flags.5?string"},{"name":"w","type":"flags.6?int"},{"name":"h","type":"flags.6?int"},{"name":"duration","type":"flags.7?int"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"175419739","predicate":"botInlineMessageMediaAuto","params":[{"name":"flags","type":"#"},{"name":"caption","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1937807902","predicate":"botInlineMessageText","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.0?true"},{"name":"message","type":"string"},{"name":"entities","type":"flags.1?Vector"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1679053127","predicate":"botInlineResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"url","type":"flags.3?string"},{"name":"thumb_url","type":"flags.4?string"},{"name":"content_url","type":"flags.5?string"},{"name":"content_type","type":"flags.5?string"},{"name":"w","type":"flags.6?int"},{"name":"h","type":"flags.6?int"},{"name":"duration","type":"flags.7?int"},{"name":"send_message","type":"BotInlineMessage"}],"type":"BotInlineResult"},{"id":"-858565059","predicate":"messages.botResults","params":[{"name":"flags","type":"#"},{"name":"gallery","type":"flags.0?true"},{"name":"query_id","type":"long"},{"name":"next_offset","type":"flags.1?string"},{"name":"switch_pm","type":"flags.2?InlineBotSwitchPM"},{"name":"results","type":"Vector"},{"name":"cache_time","type":"int"}],"type":"messages.BotResults"},{"id":"1417832080","predicate":"updateBotInlineQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"query","type":"string"},{"name":"geo","type":"flags.0?GeoPoint"},{"name":"offset","type":"string"}],"type":"Update"},{"id":"239663460","predicate":"updateBotInlineSend","params":[{"name":"flags","type":"#"},{"name":"user_id","type":"int"},{"name":"query","type":"string"},{"name":"geo","type":"flags.0?GeoPoint"},{"name":"id","type":"string"},{"name":"msg_id","type":"flags.1?InputBotInlineMessageID"}],"type":"Update"},{"id":"1358283666","predicate":"inputMessagesFilterVoice","params":[],"type":"MessagesFilter"},{"id":"928101534","predicate":"inputMessagesFilterMusic","params":[],"type":"MessagesFilter"},{"id":"-1107622874","predicate":"inputPrivacyKeyChatInvite","params":[],"type":"InputPrivacyKey"},{"id":"1343122938","predicate":"privacyKeyChatInvite","params":[],"type":"PrivacyKey"},{"id":"524838915","predicate":"exportedMessageLink","params":[{"name":"link","type":"string"}],"type":"ExportedMessageLink"},{"id":"-947462709","predicate":"messageFwdHeader","params":[{"name":"flags","type":"#"},{"name":"from_id","type":"flags.0?int"},{"name":"date","type":"int"},{"name":"channel_id","type":"flags.1?int"},{"name":"channel_post","type":"flags.2?int"}],"type":"MessageFwdHeader"},{"id":"457133559","predicate":"updateEditChannelMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1738988427","predicate":"updateChannelPinnedMessage","params":[{"name":"channel_id","type":"int"},{"name":"id","type":"int"}],"type":"Update"},{"id":"-1799538451","predicate":"messageActionPinMessage","params":[],"type":"MessageAction"},{"id":"1923290508","predicate":"auth.codeTypeSms","params":[],"type":"auth.CodeType"},{"id":"1948046307","predicate":"auth.codeTypeCall","params":[],"type":"auth.CodeType"},{"id":"577556219","predicate":"auth.codeTypeFlashCall","params":[],"type":"auth.CodeType"},{"id":"1035688326","predicate":"auth.sentCodeTypeApp","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"-1073693790","predicate":"auth.sentCodeTypeSms","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"1398007207","predicate":"auth.sentCodeTypeCall","params":[{"name":"length","type":"int"}],"type":"auth.SentCodeType"},{"id":"-1425815847","predicate":"auth.sentCodeTypeFlashCall","params":[{"name":"pattern","type":"string"}],"type":"auth.SentCodeType"},{"id":"629866245","predicate":"keyboardButtonUrl","params":[{"name":"text","type":"string"},{"name":"url","type":"string"}],"type":"KeyboardButton"},{"id":"1748655686","predicate":"keyboardButtonCallback","params":[{"name":"text","type":"string"},{"name":"data","type":"bytes"}],"type":"KeyboardButton"},{"id":"-1318425559","predicate":"keyboardButtonRequestPhone","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"-59151553","predicate":"keyboardButtonRequestGeoLocation","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"90744648","predicate":"keyboardButtonSwitchInline","params":[{"name":"flags","type":"#"},{"name":"same_peer","type":"flags.0?true"},{"name":"text","type":"string"},{"name":"query","type":"string"}],"type":"KeyboardButton"},{"id":"1218642516","predicate":"replyInlineMarkup","params":[{"name":"rows","type":"Vector"}],"type":"ReplyMarkup"},{"id":"911761060","predicate":"messages.botCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"alert","type":"flags.1?true"},{"name":"has_url","type":"flags.3?true"},{"name":"message","type":"flags.0?string"},{"name":"url","type":"flags.2?string"},{"name":"cache_time","type":"int"}],"type":"messages.BotCallbackAnswer"},{"id":"-415938591","predicate":"updateBotCallbackQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"peer","type":"Peer"},{"name":"msg_id","type":"int"},{"name":"chat_instance","type":"long"},{"name":"data","type":"flags.0?bytes"},{"name":"game_short_name","type":"flags.1?string"}],"type":"Update"},{"id":"649453030","predicate":"messages.messageEditData","params":[{"name":"flags","type":"#"},{"name":"caption","type":"flags.0?true"}],"type":"messages.MessageEditData"},{"id":"-469536605","predicate":"updateEditMessage","params":[{"name":"message","type":"Message"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-190472735","predicate":"inputBotInlineMessageMediaGeo","params":[{"name":"flags","type":"#"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-1431327288","predicate":"inputBotInlineMessageMediaVenue","params":[{"name":"flags","type":"#"},{"name":"geo_point","type":"InputGeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"766443943","predicate":"inputBotInlineMessageMediaContact","params":[{"name":"flags","type":"#"},{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"982505656","predicate":"botInlineMessageMediaGeo","params":[{"name":"flags","type":"#"},{"name":"geo","type":"GeoPoint"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"1130767150","predicate":"botInlineMessageMediaVenue","params":[{"name":"flags","type":"#"},{"name":"geo","type":"GeoPoint"},{"name":"title","type":"string"},{"name":"address","type":"string"},{"name":"provider","type":"string"},{"name":"venue_id","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"904770772","predicate":"botInlineMessageMediaContact","params":[{"name":"flags","type":"#"},{"name":"phone_number","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"BotInlineMessage"},{"id":"-1462213465","predicate":"inputBotInlineResultPhoto","params":[{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"photo","type":"InputPhoto"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"-459324","predicate":"inputBotInlineResultDocument","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"title","type":"flags.1?string"},{"name":"description","type":"flags.2?string"},{"name":"document","type":"InputDocument"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"400266251","predicate":"botInlineMediaResult","params":[{"name":"flags","type":"#"},{"name":"id","type":"string"},{"name":"type","type":"string"},{"name":"photo","type":"flags.0?Photo"},{"name":"document","type":"flags.1?Document"},{"name":"title","type":"flags.2?string"},{"name":"description","type":"flags.3?string"},{"name":"send_message","type":"BotInlineMessage"}],"type":"BotInlineResult"},{"id":"-1995686519","predicate":"inputBotInlineMessageID","params":[{"name":"dc_id","type":"int"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputBotInlineMessageID"},{"id":"-103646630","predicate":"updateInlineBotCallbackQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"msg_id","type":"InputBotInlineMessageID"},{"name":"chat_instance","type":"long"},{"name":"data","type":"flags.0?bytes"},{"name":"game_short_name","type":"flags.1?string"}],"type":"Update"},{"id":"1008755359","predicate":"inlineBotSwitchPM","params":[{"name":"text","type":"string"},{"name":"start_param","type":"string"}],"type":"InlineBotSwitchPM"},{"id":"863093588","predicate":"messages.peerDialogs","params":[{"name":"dialogs","type":"Vector"},{"name":"messages","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"},{"name":"state","type":"updates.State"}],"type":"messages.PeerDialogs"},{"id":"-305282981","predicate":"topPeer","params":[{"name":"peer","type":"Peer"},{"name":"rating","type":"double"}],"type":"TopPeer"},{"id":"-1419371685","predicate":"topPeerCategoryBotsPM","params":[],"type":"TopPeerCategory"},{"id":"344356834","predicate":"topPeerCategoryBotsInline","params":[],"type":"TopPeerCategory"},{"id":"104314861","predicate":"topPeerCategoryCorrespondents","params":[],"type":"TopPeerCategory"},{"id":"-1122524854","predicate":"topPeerCategoryGroups","params":[],"type":"TopPeerCategory"},{"id":"371037736","predicate":"topPeerCategoryChannels","params":[],"type":"TopPeerCategory"},{"id":"-75283823","predicate":"topPeerCategoryPeers","params":[{"name":"category","type":"TopPeerCategory"},{"name":"count","type":"int"},{"name":"peers","type":"Vector"}],"type":"TopPeerCategoryPeers"},{"id":"-567906571","predicate":"contacts.topPeersNotModified","params":[],"type":"contacts.TopPeers"},{"id":"1891070632","predicate":"contacts.topPeers","params":[{"name":"categories","type":"Vector"},{"name":"chats","type":"Vector"},{"name":"users","type":"Vector"}],"type":"contacts.TopPeers"},{"id":"892193368","predicate":"messageEntityMentionName","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"user_id","type":"int"}],"type":"MessageEntity"},{"id":"546203849","predicate":"inputMessageEntityMentionName","params":[{"name":"offset","type":"int"},{"name":"length","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"MessageEntity"},{"id":"975236280","predicate":"inputMessagesFilterChatPhotos","params":[],"type":"MessagesFilter"},{"id":"634833351","predicate":"updateReadChannelOutbox","params":[{"name":"channel_id","type":"int"},{"name":"max_id","type":"int"}],"type":"Update"},{"id":"-299124375","predicate":"updateDraftMessage","params":[{"name":"peer","type":"Peer"},{"name":"draft","type":"DraftMessage"}],"type":"Update"},{"id":"-1169445179","predicate":"draftMessageEmpty","params":[],"type":"DraftMessage"},{"id":"-40996577","predicate":"draftMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"message","type":"string"},{"name":"entities","type":"flags.3?Vector"},{"name":"date","type":"int"}],"type":"DraftMessage"},{"id":"-1615153660","predicate":"messageActionHistoryClear","params":[],"type":"MessageAction"},{"id":"82699215","predicate":"messages.featuredStickersNotModified","params":[],"type":"messages.FeaturedStickers"},{"id":"-123893531","predicate":"messages.featuredStickers","params":[{"name":"hash","type":"int"},{"name":"sets","type":"Vector"},{"name":"unread","type":"Vector"}],"type":"messages.FeaturedStickers"},{"id":"1461528386","predicate":"updateReadFeaturedStickers","params":[],"type":"Update"},{"id":"186120336","predicate":"messages.recentStickersNotModified","params":[],"type":"messages.RecentStickers"},{"id":"1558317424","predicate":"messages.recentStickers","params":[{"name":"hash","type":"int"},{"name":"stickers","type":"Vector"}],"type":"messages.RecentStickers"},{"id":"-1706939360","predicate":"updateRecentStickers","params":[],"type":"Update"},{"id":"1338747336","predicate":"messages.archivedStickers","params":[{"name":"count","type":"int"},{"name":"sets","type":"Vector"}],"type":"messages.ArchivedStickers"},{"id":"946083368","predicate":"messages.stickerSetInstallResultSuccess","params":[],"type":"messages.StickerSetInstallResult"},{"id":"904138920","predicate":"messages.stickerSetInstallResultArchive","params":[{"name":"sets","type":"Vector"}],"type":"messages.StickerSetInstallResult"},{"id":"1678812626","predicate":"stickerSetCovered","params":[{"name":"set","type":"StickerSet"},{"name":"cover","type":"Document"}],"type":"StickerSetCovered"},{"id":"-1574314746","predicate":"updateConfig","params":[],"type":"Update"},{"id":"861169551","predicate":"updatePtsChanged","params":[],"type":"Update"},{"id":"-1252045032","predicate":"inputMediaPhotoExternal","params":[{"name":"url","type":"string"},{"name":"caption","type":"string"}],"type":"InputMedia"},{"id":"-437690244","predicate":"inputMediaDocumentExternal","params":[{"name":"url","type":"string"},{"name":"caption","type":"string"}],"type":"InputMedia"},{"id":"872932635","predicate":"stickerSetMultiCovered","params":[{"name":"set","type":"StickerSet"},{"name":"covers","type":"Vector"}],"type":"StickerSetCovered"},{"id":"-1361650766","predicate":"maskCoords","params":[{"name":"n","type":"int"},{"name":"x","type":"double"},{"name":"y","type":"double"},{"name":"zoom","type":"double"}],"type":"MaskCoords"},{"id":"-1744710921","predicate":"documentAttributeHasStickers","params":[],"type":"DocumentAttribute"},{"id":"1251549527","predicate":"inputStickeredMediaPhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"InputStickeredMedia"},{"id":"70813275","predicate":"inputStickeredMediaDocument","params":[{"name":"id","type":"InputDocument"}],"type":"InputStickeredMedia"},{"id":"-1107729093","predicate":"game","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"short_name","type":"string"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"photo","type":"Photo"},{"name":"document","type":"flags.0?Document"}],"type":"Game"},{"id":"1336154098","predicate":"inputBotInlineResultGame","params":[{"name":"id","type":"string"},{"name":"short_name","type":"string"},{"name":"send_message","type":"InputBotInlineMessage"}],"type":"InputBotInlineResult"},{"id":"1262639204","predicate":"inputBotInlineMessageGame","params":[{"name":"flags","type":"#"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"InputBotInlineMessage"},{"id":"-38694904","predicate":"messageMediaGame","params":[{"name":"game","type":"Game"}],"type":"MessageMedia"},{"id":"-750828557","predicate":"inputMediaGame","params":[{"name":"id","type":"InputGame"}],"type":"InputMedia"},{"id":"53231223","predicate":"inputGameID","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputGame"},{"id":"-1020139510","predicate":"inputGameShortName","params":[{"name":"bot_id","type":"InputUser"},{"name":"short_name","type":"string"}],"type":"InputGame"},{"id":"1358175439","predicate":"keyboardButtonGame","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"-1834538890","predicate":"messageActionGameScore","params":[{"name":"game_id","type":"long"},{"name":"score","type":"int"}],"type":"MessageAction"},{"id":"1493171408","predicate":"highScore","params":[{"name":"pos","type":"int"},{"name":"user_id","type":"int"},{"name":"score","type":"int"}],"type":"HighScore"},{"id":"-1707344487","predicate":"messages.highScores","params":[{"name":"scores","type":"Vector"},{"name":"users","type":"Vector"}],"type":"messages.HighScores"},{"id":"1258196845","predicate":"updates.differenceTooLong","params":[{"name":"pts","type":"int"}],"type":"updates.Difference"},{"id":"1081547008","predicate":"updateChannelWebPage","params":[{"name":"channel_id","type":"int"},{"name":"webpage","type":"WebPage"},{"name":"pts","type":"int"},{"name":"pts_count","type":"int"}],"type":"Update"},{"id":"-1663561404","predicate":"messages.chatsSlice","params":[{"name":"count","type":"int"},{"name":"chats","type":"Vector"}],"type":"messages.Chats"},{"id":"-599948721","predicate":"textEmpty","params":[],"type":"RichText"},{"id":"1950782688","predicate":"textPlain","params":[{"name":"text","type":"string"}],"type":"RichText"},{"id":"1730456516","predicate":"textBold","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-653089380","predicate":"textItalic","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-1054465340","predicate":"textUnderline","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"-1678197867","predicate":"textStrike","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"1816074681","predicate":"textFixed","params":[{"name":"text","type":"RichText"}],"type":"RichText"},{"id":"1009288385","predicate":"textUrl","params":[{"name":"text","type":"RichText"},{"name":"url","type":"string"},{"name":"webpage_id","type":"long"}],"type":"RichText"},{"id":"-564523562","predicate":"textEmail","params":[{"name":"text","type":"RichText"},{"name":"email","type":"string"}],"type":"RichText"},{"id":"2120376535","predicate":"textConcat","params":[{"name":"texts","type":"Vector"}],"type":"RichText"},{"id":"324435594","predicate":"pageBlockUnsupported","params":[],"type":"PageBlock"},{"id":"1890305021","predicate":"pageBlockTitle","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1879401953","predicate":"pageBlockSubtitle","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1162877472","predicate":"pageBlockAuthorDate","params":[{"name":"author","type":"RichText"},{"name":"published_date","type":"int"}],"type":"PageBlock"},{"id":"-1076861716","predicate":"pageBlockHeader","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-248793375","predicate":"pageBlockSubheader","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"1182402406","predicate":"pageBlockParagraph","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-1066346178","predicate":"pageBlockPreformatted","params":[{"name":"text","type":"RichText"},{"name":"language","type":"string"}],"type":"PageBlock"},{"id":"1216809369","predicate":"pageBlockFooter","params":[{"name":"text","type":"RichText"}],"type":"PageBlock"},{"id":"-618614392","predicate":"pageBlockDivider","params":[],"type":"PageBlock"},{"id":"-837994576","predicate":"pageBlockAnchor","params":[{"name":"name","type":"string"}],"type":"PageBlock"},{"id":"978896884","predicate":"pageBlockList","params":[{"name":"ordered","type":"Bool"},{"name":"items","type":"Vector"}],"type":"PageBlock"},{"id":"641563686","predicate":"pageBlockBlockquote","params":[{"name":"text","type":"RichText"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"1329878739","predicate":"pageBlockPullquote","params":[{"name":"text","type":"RichText"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"-372860542","predicate":"pageBlockPhoto","params":[{"name":"photo_id","type":"long"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"-640214938","predicate":"pageBlockVideo","params":[{"name":"flags","type":"#"},{"name":"autoplay","type":"flags.0?true"},{"name":"loop","type":"flags.1?true"},{"name":"video_id","type":"long"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"972174080","predicate":"pageBlockCover","params":[{"name":"cover","type":"PageBlock"}],"type":"PageBlock"},{"id":"-840826671","predicate":"pageBlockEmbed","params":[{"name":"flags","type":"#"},{"name":"full_width","type":"flags.0?true"},{"name":"allow_scrolling","type":"flags.3?true"},{"name":"url","type":"flags.1?string"},{"name":"html","type":"flags.2?string"},{"name":"poster_photo_id","type":"flags.4?long"},{"name":"w","type":"int"},{"name":"h","type":"int"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"690781161","predicate":"pageBlockEmbedPost","params":[{"name":"url","type":"string"},{"name":"webpage_id","type":"long"},{"name":"author_photo_id","type":"long"},{"name":"author","type":"string"},{"name":"date","type":"int"},{"name":"blocks","type":"Vector"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"145955919","predicate":"pageBlockCollage","params":[{"name":"items","type":"Vector"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"319588707","predicate":"pageBlockSlideshow","params":[{"name":"items","type":"Vector"},{"name":"caption","type":"RichText"}],"type":"PageBlock"},{"id":"-1913754556","predicate":"pagePart","params":[{"name":"blocks","type":"Vector"},{"name":"photos","type":"Vector"},{"name":"videos","type":"Vector"}],"type":"Page"},{"id":"-677274263","predicate":"pageFull","params":[{"name":"blocks","type":"Vector"},{"name":"photos","type":"Vector"},{"name":"videos","type":"Vector"}],"type":"Page"},{"id":"-2054908813","predicate":"webPageNotModified","params":[],"type":"WebPage"},{"id":"-88417185","predicate":"inputPrivacyKeyPhoneCall","params":[],"type":"InputPrivacyKey"},{"id":"1030105979","predicate":"privacyKeyPhoneCall","params":[],"type":"PrivacyKey"},{"id":"-580219064","predicate":"sendMessageGamePlayAction","params":[],"type":"SendMessageAction"},{"id":"-2048646399","predicate":"phoneCallDiscardReasonMissed","params":[],"type":"PhoneCallDiscardReason"},{"id":"-527056480","predicate":"phoneCallDiscardReasonDisconnect","params":[],"type":"PhoneCallDiscardReason"},{"id":"1471006352","predicate":"phoneCallDiscardReasonHangup","params":[],"type":"PhoneCallDiscardReason"},{"id":"-84416311","predicate":"phoneCallDiscardReasonBusy","params":[],"type":"PhoneCallDiscardReason"},{"id":"-686710068","predicate":"updateDialogPinned","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.0?true"},{"name":"peer","type":"Peer"}],"type":"Update"},{"id":"-657787251","predicate":"updatePinnedDialogs","params":[{"name":"flags","type":"#"},{"name":"order","type":"flags.0?Vector"}],"type":"Update"},{"id":"2104790276","predicate":"dataJSON","params":[{"name":"data","type":"string"}],"type":"DataJSON"},{"id":"-2095595325","predicate":"updateBotWebhookJSON","params":[{"name":"data","type":"DataJSON"}],"type":"Update"},{"id":"-1684914010","predicate":"updateBotWebhookJSONQuery","params":[{"name":"query_id","type":"long"},{"name":"data","type":"DataJSON"},{"name":"timeout","type":"int"}],"type":"Update"},{"id":"-886477832","predicate":"labeledPrice","params":[{"name":"label","type":"string"},{"name":"amount","type":"long"}],"type":"LabeledPrice"},{"id":"-1022713000","predicate":"invoice","params":[{"name":"flags","type":"#"},{"name":"test","type":"flags.0?true"},{"name":"name_requested","type":"flags.1?true"},{"name":"phone_requested","type":"flags.2?true"},{"name":"email_requested","type":"flags.3?true"},{"name":"shipping_address_requested","type":"flags.4?true"},{"name":"flexible","type":"flags.5?true"},{"name":"currency","type":"string"},{"name":"prices","type":"Vector"}],"type":"Invoice"},{"id":"-1844103547","predicate":"inputMediaInvoice","params":[{"name":"flags","type":"#"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"photo","type":"flags.0?InputWebDocument"},{"name":"invoice","type":"Invoice"},{"name":"payload","type":"bytes"},{"name":"provider","type":"string"},{"name":"start_param","type":"string"}],"type":"InputMedia"},{"id":"-368917890","predicate":"paymentCharge","params":[{"name":"id","type":"string"},{"name":"provider_charge_id","type":"string"}],"type":"PaymentCharge"},{"id":"-1892568281","predicate":"messageActionPaymentSentMe","params":[{"name":"flags","type":"#"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"},{"name":"payload","type":"bytes"},{"name":"info","type":"flags.0?PaymentRequestedInfo"},{"name":"shipping_option_id","type":"flags.1?string"},{"name":"charge","type":"PaymentCharge"}],"type":"MessageAction"},{"id":"-2074799289","predicate":"messageMediaInvoice","params":[{"name":"flags","type":"#"},{"name":"shipping_address_requested","type":"flags.1?true"},{"name":"test","type":"flags.3?true"},{"name":"title","type":"string"},{"name":"description","type":"string"},{"name":"photo","type":"flags.0?WebDocument"},{"name":"receipt_msg_id","type":"flags.2?int"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"},{"name":"start_param","type":"string"}],"type":"MessageMedia"},{"id":"512535275","predicate":"postAddress","params":[{"name":"street_line1","type":"string"},{"name":"street_line2","type":"string"},{"name":"city","type":"string"},{"name":"state","type":"string"},{"name":"country_iso2","type":"string"},{"name":"post_code","type":"string"}],"type":"PostAddress"},{"id":"-1868808300","predicate":"paymentRequestedInfo","params":[{"name":"flags","type":"#"},{"name":"name","type":"flags.0?string"},{"name":"phone","type":"flags.1?string"},{"name":"email","type":"flags.2?string"},{"name":"shipping_address","type":"flags.3?PostAddress"}],"type":"PaymentRequestedInfo"},{"id":"-1344716869","predicate":"keyboardButtonBuy","params":[{"name":"text","type":"string"}],"type":"KeyboardButton"},{"id":"1080663248","predicate":"messageActionPaymentSent","params":[{"name":"currency","type":"string"},{"name":"total_amount","type":"long"}],"type":"MessageAction"},{"id":"-842892769","predicate":"paymentSavedCredentialsCard","params":[{"name":"id","type":"string"},{"name":"title","type":"string"}],"type":"PaymentSavedCredentials"},{"id":"-971322408","predicate":"webDocument","params":[{"name":"url","type":"string"},{"name":"access_hash","type":"long"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"},{"name":"dc_id","type":"int"}],"type":"WebDocument"},{"id":"-1678949555","predicate":"inputWebDocument","params":[{"name":"url","type":"string"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"},{"name":"attributes","type":"Vector"}],"type":"InputWebDocument"},{"id":"-1036396922","predicate":"inputWebFileLocation","params":[{"name":"url","type":"string"},{"name":"access_hash","type":"long"}],"type":"InputWebFileLocation"},{"id":"568808380","predicate":"upload.webFile","params":[{"name":"size","type":"int"},{"name":"mime_type","type":"string"},{"name":"file_type","type":"storage.FileType"},{"name":"mtime","type":"int"},{"name":"bytes","type":"bytes"}],"type":"upload.WebFile"},{"id":"1062645411","predicate":"payments.paymentForm","params":[{"name":"flags","type":"#"},{"name":"can_save_credentials","type":"flags.2?true"},{"name":"password_missing","type":"flags.3?true"},{"name":"bot_id","type":"int"},{"name":"invoice","type":"Invoice"},{"name":"provider_id","type":"int"},{"name":"url","type":"string"},{"name":"native_provider","type":"flags.4?string"},{"name":"native_params","type":"flags.4?DataJSON"},{"name":"saved_info","type":"flags.0?PaymentRequestedInfo"},{"name":"saved_credentials","type":"flags.1?PaymentSavedCredentials"},{"name":"users","type":"Vector"}],"type":"payments.PaymentForm"},{"id":"-784000893","predicate":"payments.validatedRequestedInfo","params":[{"name":"flags","type":"#"},{"name":"id","type":"flags.0?string"},{"name":"shipping_options","type":"flags.1?Vector"}],"type":"payments.ValidatedRequestedInfo"},{"id":"1314881805","predicate":"payments.paymentResult","params":[{"name":"updates","type":"Updates"}],"type":"payments.PaymentResult"},{"id":"1800845601","predicate":"payments.paymentVerficationNeeded","params":[{"name":"url","type":"string"}],"type":"payments.PaymentResult"},{"id":"1342771681","predicate":"payments.paymentReceipt","params":[{"name":"flags","type":"#"},{"name":"date","type":"int"},{"name":"bot_id","type":"int"},{"name":"invoice","type":"Invoice"},{"name":"provider_id","type":"int"},{"name":"info","type":"flags.0?PaymentRequestedInfo"},{"name":"shipping","type":"flags.1?ShippingOption"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"},{"name":"credentials_title","type":"string"},{"name":"users","type":"Vector"}],"type":"payments.PaymentReceipt"},{"id":"-74456004","predicate":"payments.savedInfo","params":[{"name":"flags","type":"#"},{"name":"has_saved_credentials","type":"flags.1?true"},{"name":"saved_info","type":"flags.0?PaymentRequestedInfo"}],"type":"payments.SavedInfo"},{"id":"-1056001329","predicate":"inputPaymentCredentialsSaved","params":[{"name":"id","type":"string"},{"name":"tmp_password","type":"bytes"}],"type":"InputPaymentCredentials"},{"id":"873977640","predicate":"inputPaymentCredentials","params":[{"name":"flags","type":"#"},{"name":"save","type":"flags.0?true"},{"name":"data","type":"DataJSON"}],"type":"InputPaymentCredentials"},{"id":"-614138572","predicate":"account.tmpPassword","params":[{"name":"tmp_password","type":"bytes"},{"name":"valid_until","type":"int"}],"type":"account.TmpPassword"},{"id":"-1239335713","predicate":"shippingOption","params":[{"name":"id","type":"string"},{"name":"title","type":"string"},{"name":"prices","type":"Vector"}],"type":"ShippingOption"},{"id":"-523384512","predicate":"updateBotShippingQuery","params":[{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"payload","type":"bytes"},{"name":"shipping_address","type":"PostAddress"}],"type":"Update"},{"id":"1563376297","predicate":"updateBotPrecheckoutQuery","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"user_id","type":"int"},{"name":"payload","type":"bytes"},{"name":"info","type":"flags.0?PaymentRequestedInfo"},{"name":"shipping_option_id","type":"flags.1?string"},{"name":"currency","type":"string"},{"name":"total_amount","type":"long"}],"type":"Update"},{"id":"-6249322","predicate":"inputStickerSetItem","params":[{"name":"flags","type":"#"},{"name":"document","type":"InputDocument"},{"name":"emoji","type":"string"},{"name":"mask_coords","type":"flags.0?MaskCoords"}],"type":"InputStickerSetItem"},{"id":"-1425052898","predicate":"updatePhoneCall","params":[{"name":"phone_call","type":"PhoneCall"}],"type":"Update"},{"id":"506920429","predicate":"inputPhoneCall","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"}],"type":"InputPhoneCall"},{"id":"1399245077","predicate":"phoneCallEmpty","params":[{"name":"id","type":"long"}],"type":"PhoneCall"},{"id":"462375633","predicate":"phoneCallWaiting","params":[{"name":"flags","type":"#"},{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"protocol","type":"PhoneCallProtocol"},{"name":"receive_date","type":"flags.0?int"}],"type":"PhoneCall"},{"id":"-2089411356","predicate":"phoneCallRequested","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a_hash","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"PhoneCall"},{"id":"1828732223","predicate":"phoneCallAccepted","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_b","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"PhoneCall"},{"id":"-1660057","predicate":"phoneCall","params":[{"name":"id","type":"long"},{"name":"access_hash","type":"long"},{"name":"date","type":"int"},{"name":"admin_id","type":"int"},{"name":"participant_id","type":"int"},{"name":"g_a_or_b","type":"bytes"},{"name":"key_fingerprint","type":"long"},{"name":"protocol","type":"PhoneCallProtocol"},{"name":"connection","type":"PhoneConnection"},{"name":"alternative_connections","type":"Vector"},{"name":"start_date","type":"int"}],"type":"PhoneCall"},{"id":"1355435489","predicate":"phoneCallDiscarded","params":[{"name":"flags","type":"#"},{"name":"need_rating","type":"flags.2?true"},{"name":"need_debug","type":"flags.3?true"},{"name":"id","type":"long"},{"name":"reason","type":"flags.0?PhoneCallDiscardReason"},{"name":"duration","type":"flags.1?int"}],"type":"PhoneCall"},{"id":"-1655957568","predicate":"phoneConnection","params":[{"name":"id","type":"long"},{"name":"ip","type":"string"},{"name":"ipv6","type":"string"},{"name":"port","type":"int"},{"name":"peer_tag","type":"bytes"}],"type":"PhoneConnection"},{"id":"-1564789301","predicate":"phoneCallProtocol","params":[{"name":"flags","type":"#"},{"name":"udp_p2p","type":"flags.0?true"},{"name":"udp_reflector","type":"flags.1?true"},{"name":"min_layer","type":"int"},{"name":"max_layer","type":"int"}],"type":"PhoneCallProtocol"},{"id":"-326966976","predicate":"phone.phoneCall","params":[{"name":"phone_call","type":"PhoneCall"},{"name":"users","type":"Vector"}],"type":"phone.PhoneCall"},{"id":"-2134272152","predicate":"inputMessagesFilterPhoneCalls","params":[{"name":"flags","type":"#"},{"name":"missed","type":"flags.0?true"}],"type":"MessagesFilter"},{"id":"-2132731265","predicate":"messageActionPhoneCall","params":[{"name":"flags","type":"#"},{"name":"call_id","type":"long"},{"name":"reason","type":"flags.0?PhoneCallDiscardReason"},{"name":"duration","type":"flags.1?int"}],"type":"MessageAction"},{"id":"2054952868","predicate":"inputMessagesFilterRoundVoice","params":[],"type":"MessagesFilter"},{"id":"-1253451181","predicate":"inputMessagesFilterRoundVideo","params":[],"type":"MessagesFilter"},{"id":"-1997373508","predicate":"sendMessageRecordRoundAction","params":[],"type":"SendMessageAction"},{"id":"608050278","predicate":"sendMessageUploadRoundAction","params":[{"name":"progress","type":"int"}],"type":"SendMessageAction"},{"id":"352864346","predicate":"upload.fileCdnRedirect","params":[{"name":"dc_id","type":"int"},{"name":"file_token","type":"bytes"},{"name":"encryption_key","type":"bytes"},{"name":"encryption_iv","type":"bytes"}],"type":"upload.File"},{"id":"-290921362","predicate":"upload.cdnFileReuploadNeeded","params":[{"name":"request_token","type":"bytes"}],"type":"upload.CdnFile"},{"id":"-1449145777","predicate":"upload.cdnFile","params":[{"name":"bytes","type":"bytes"}],"type":"upload.CdnFile"},{"id":"-914167110","predicate":"cdnPublicKey","params":[{"name":"dc_id","type":"int"},{"name":"public_key","type":"string"}],"type":"CdnPublicKey"},{"id":"1462101002","predicate":"cdnConfig","params":[{"name":"public_keys","type":"Vector"}],"type":"CdnConfig"},{"id":"-283684427","predicate":"pageBlockChannel","params":[{"name":"channel","type":"Chat"}],"type":"PageBlock"}],"methods":[{"id":"-878758099","method":"invokeAfterMsg","params":[{"name":"msg_id","type":"long"},{"name":"query","type":"!X"}],"type":"X"},{"id":"1036301552","method":"invokeAfterMsgs","params":[{"name":"msg_ids","type":"Vector"},{"name":"query","type":"!X"}],"type":"X"},{"id":"1877286395","method":"auth.checkPhone","params":[{"name":"phone_number","type":"string"}],"type":"auth.CheckedPhone"},{"id":"-2035355412","method":"auth.sendCode","params":[{"name":"flags","type":"#"},{"name":"allow_flashcall","type":"flags.0?true"},{"name":"phone_number","type":"string"},{"name":"current_number","type":"flags.0?Bool"},{"name":"api_id","type":"int"},{"name":"api_hash","type":"string"}],"type":"auth.SentCode"},{"id":"453408308","method":"auth.signUp","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"},{"name":"first_name","type":"string"},{"name":"last_name","type":"string"}],"type":"auth.Authorization"},{"id":"-1126886015","method":"auth.signIn","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"auth.Authorization"},{"id":"1461180992","method":"auth.logOut","params":[],"type":"Bool"},{"id":"-1616179942","method":"auth.resetAuthorizations","params":[],"type":"Bool"},{"id":"1998331287","method":"auth.sendInvites","params":[{"name":"phone_numbers","type":"Vector"},{"name":"message","type":"string"}],"type":"Bool"},{"id":"-440401971","method":"auth.exportAuthorization","params":[{"name":"dc_id","type":"int"}],"type":"auth.ExportedAuthorization"},{"id":"-470837741","method":"auth.importAuthorization","params":[{"name":"id","type":"int"},{"name":"bytes","type":"bytes"}],"type":"auth.Authorization"},{"id":"-841733627","method":"auth.bindTempAuthKey","params":[{"name":"perm_auth_key_id","type":"long"},{"name":"nonce","type":"long"},{"name":"expires_at","type":"int"},{"name":"encrypted_message","type":"bytes"}],"type":"Bool"},{"id":"1669245048","method":"account.registerDevice","params":[{"name":"token_type","type":"int"},{"name":"token","type":"string"}],"type":"Bool"},{"id":"1707432768","method":"account.unregisterDevice","params":[{"name":"token_type","type":"int"},{"name":"token","type":"string"}],"type":"Bool"},{"id":"-2067899501","method":"account.updateNotifySettings","params":[{"name":"peer","type":"InputNotifyPeer"},{"name":"settings","type":"InputPeerNotifySettings"}],"type":"Bool"},{"id":"313765169","method":"account.getNotifySettings","params":[{"name":"peer","type":"InputNotifyPeer"}],"type":"PeerNotifySettings"},{"id":"-612493497","method":"account.resetNotifySettings","params":[],"type":"Bool"},{"id":"2018596725","method":"account.updateProfile","params":[{"name":"flags","type":"#"},{"name":"first_name","type":"flags.0?string"},{"name":"last_name","type":"flags.1?string"},{"name":"about","type":"flags.2?string"}],"type":"User"},{"id":"1713919532","method":"account.updateStatus","params":[{"name":"offline","type":"Bool"}],"type":"Bool"},{"id":"-1068696894","method":"account.getWallPapers","params":[],"type":"Vector"},{"id":"-1374118561","method":"account.reportPeer","params":[{"name":"peer","type":"InputPeer"},{"name":"reason","type":"ReportReason"}],"type":"Bool"},{"id":"227648840","method":"users.getUsers","params":[{"name":"id","type":"Vector"}],"type":"Vector"},{"id":"-902781519","method":"users.getFullUser","params":[{"name":"id","type":"InputUser"}],"type":"UserFull"},{"id":"-995929106","method":"contacts.getStatuses","params":[],"type":"Vector"},{"id":"583445000","method":"contacts.getContacts","params":[{"name":"hash","type":"string"}],"type":"contacts.Contacts"},{"id":"-634342611","method":"contacts.importContacts","params":[{"name":"contacts","type":"Vector"},{"name":"replace","type":"Bool"}],"type":"contacts.ImportedContacts"},{"id":"-1902823612","method":"contacts.deleteContact","params":[{"name":"id","type":"InputUser"}],"type":"contacts.Link"},{"id":"1504393374","method":"contacts.deleteContacts","params":[{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"858475004","method":"contacts.block","params":[{"name":"id","type":"InputUser"}],"type":"Bool"},{"id":"-448724803","method":"contacts.unblock","params":[{"name":"id","type":"InputUser"}],"type":"Bool"},{"id":"-176409329","method":"contacts.getBlocked","params":[{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"contacts.Blocked"},{"id":"-2065352905","method":"contacts.exportCard","params":[],"type":"Vector"},{"id":"1340184318","method":"contacts.importCard","params":[{"name":"export_card","type":"Vector"}],"type":"User"},{"id":"1109588596","method":"messages.getMessages","params":[{"name":"id","type":"Vector"}],"type":"messages.Messages"},{"id":"421243333","method":"messages.getDialogs","params":[{"name":"flags","type":"#"},{"name":"exclude_pinned","type":"flags.0?true"},{"name":"offset_date","type":"int"},{"name":"offset_id","type":"int"},{"name":"offset_peer","type":"InputPeer"},{"name":"limit","type":"int"}],"type":"messages.Dialogs"},{"id":"-1347868602","method":"messages.getHistory","params":[{"name":"peer","type":"InputPeer"},{"name":"offset_id","type":"int"},{"name":"offset_date","type":"int"},{"name":"add_offset","type":"int"},{"name":"limit","type":"int"},{"name":"max_id","type":"int"},{"name":"min_id","type":"int"}],"type":"messages.Messages"},{"id":"-732523960","method":"messages.search","params":[{"name":"flags","type":"#"},{"name":"peer","type":"InputPeer"},{"name":"q","type":"string"},{"name":"filter","type":"MessagesFilter"},{"name":"min_date","type":"int"},{"name":"max_date","type":"int"},{"name":"offset","type":"int"},{"name":"max_id","type":"int"},{"name":"limit","type":"int"}],"type":"messages.Messages"},{"id":"238054714","method":"messages.readHistory","params":[{"name":"peer","type":"InputPeer"},{"name":"max_id","type":"int"}],"type":"messages.AffectedMessages"},{"id":"469850889","method":"messages.deleteHistory","params":[{"name":"flags","type":"#"},{"name":"just_clear","type":"flags.0?true"},{"name":"peer","type":"InputPeer"},{"name":"max_id","type":"int"}],"type":"messages.AffectedHistory"},{"id":"-443640366","method":"messages.deleteMessages","params":[{"name":"flags","type":"#"},{"name":"revoke","type":"flags.0?true"},{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"94983360","method":"messages.receivedMessages","params":[{"name":"max_id","type":"int"}],"type":"Vector"},{"id":"-1551737264","method":"messages.setTyping","params":[{"name":"peer","type":"InputPeer"},{"name":"action","type":"SendMessageAction"}],"type":"Bool"},{"id":"-91733382","method":"messages.sendMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"message","type":"string"},{"name":"random_id","type":"long"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"}],"type":"Updates"},{"id":"-923703407","method":"messages.sendMedia","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"media","type":"InputMedia"},{"name":"random_id","type":"long"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"}],"type":"Updates"},{"id":"1888354709","method":"messages.forwardMessages","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"with_my_score","type":"flags.8?true"},{"name":"from_peer","type":"InputPeer"},{"name":"id","type":"Vector"},{"name":"random_id","type":"Vector"},{"name":"to_peer","type":"InputPeer"}],"type":"Updates"},{"id":"-820669733","method":"messages.reportSpam","params":[{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"-1460572005","method":"messages.hideReportSpam","params":[{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"913498268","method":"messages.getPeerSettings","params":[{"name":"peer","type":"InputPeer"}],"type":"PeerSettings"},{"id":"1013621127","method":"messages.getChats","params":[{"name":"id","type":"Vector"}],"type":"messages.Chats"},{"id":"998448230","method":"messages.getFullChat","params":[{"name":"chat_id","type":"int"}],"type":"messages.ChatFull"},{"id":"-599447467","method":"messages.editChatTitle","params":[{"name":"chat_id","type":"int"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-900957736","method":"messages.editChatPhoto","params":[{"name":"chat_id","type":"int"},{"name":"photo","type":"InputChatPhoto"}],"type":"Updates"},{"id":"-106911223","method":"messages.addChatUser","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"fwd_limit","type":"int"}],"type":"Updates"},{"id":"-530505962","method":"messages.deleteChatUser","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"Updates"},{"id":"164303470","method":"messages.createChat","params":[{"name":"users","type":"Vector"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-304838614","method":"updates.getState","params":[],"type":"updates.State"},{"id":"630429265","method":"updates.getDifference","params":[{"name":"flags","type":"#"},{"name":"pts","type":"int"},{"name":"pts_total_limit","type":"flags.0?int"},{"name":"date","type":"int"},{"name":"qts","type":"int"}],"type":"updates.Difference"},{"id":"-256159406","method":"photos.updateProfilePhoto","params":[{"name":"id","type":"InputPhoto"}],"type":"UserProfilePhoto"},{"id":"1328726168","method":"photos.uploadProfilePhoto","params":[{"name":"file","type":"InputFile"}],"type":"photos.Photo"},{"id":"-2016444625","method":"photos.deletePhotos","params":[{"name":"id","type":"Vector"}],"type":"Vector"},{"id":"-1291540959","method":"upload.saveFilePart","params":[{"name":"file_id","type":"long"},{"name":"file_part","type":"int"},{"name":"bytes","type":"bytes"}],"type":"Bool"},{"id":"-475607115","method":"upload.getFile","params":[{"name":"location","type":"InputFileLocation"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"upload.File"},{"id":"-990308245","method":"help.getConfig","params":[],"type":"Config"},{"id":"531836966","method":"help.getNearestDc","params":[],"type":"NearestDc"},{"id":"-1372724842","method":"help.getAppUpdate","params":[],"type":"help.AppUpdate"},{"id":"1862465352","method":"help.saveAppLog","params":[{"name":"events","type":"Vector"}],"type":"Bool"},{"id":"1295590211","method":"help.getInviteText","params":[],"type":"help.InviteText"},{"id":"-1848823128","method":"photos.getUserPhotos","params":[{"name":"user_id","type":"InputUser"},{"name":"offset","type":"int"},{"name":"max_id","type":"long"},{"name":"limit","type":"int"}],"type":"photos.Photos"},{"id":"865483769","method":"messages.forwardMessage","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"random_id","type":"long"}],"type":"Updates"},{"id":"651135312","method":"messages.getDhConfig","params":[{"name":"version","type":"int"},{"name":"random_length","type":"int"}],"type":"messages.DhConfig"},{"id":"-162681021","method":"messages.requestEncryption","params":[{"name":"user_id","type":"InputUser"},{"name":"random_id","type":"int"},{"name":"g_a","type":"bytes"}],"type":"EncryptedChat"},{"id":"1035731989","method":"messages.acceptEncryption","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"g_b","type":"bytes"},{"name":"key_fingerprint","type":"long"}],"type":"EncryptedChat"},{"id":"-304536635","method":"messages.discardEncryption","params":[{"name":"chat_id","type":"int"}],"type":"Bool"},{"id":"2031374829","method":"messages.setEncryptedTyping","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"typing","type":"Bool"}],"type":"Bool"},{"id":"2135648522","method":"messages.readEncryptedHistory","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"max_date","type":"int"}],"type":"Bool"},{"id":"-1451792525","method":"messages.sendEncrypted","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"}],"type":"messages.SentEncryptedMessage"},{"id":"-1701831834","method":"messages.sendEncryptedFile","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"},{"name":"file","type":"InputEncryptedFile"}],"type":"messages.SentEncryptedMessage"},{"id":"852769188","method":"messages.sendEncryptedService","params":[{"name":"peer","type":"InputEncryptedChat"},{"name":"random_id","type":"long"},{"name":"data","type":"bytes"}],"type":"messages.SentEncryptedMessage"},{"id":"1436924774","method":"messages.receivedQueue","params":[{"name":"max_qts","type":"int"}],"type":"Vector"},{"id":"1259113487","method":"messages.reportEncryptedSpam","params":[{"name":"peer","type":"InputEncryptedChat"}],"type":"Bool"},{"id":"-562337987","method":"upload.saveBigFilePart","params":[{"name":"file_id","type":"long"},{"name":"file_part","type":"int"},{"name":"file_total_parts","type":"int"},{"name":"bytes","type":"bytes"}],"type":"Bool"},{"id":"1769565673","method":"initConnection","params":[{"name":"api_id","type":"int"},{"name":"device_model","type":"string"},{"name":"system_version","type":"string"},{"name":"app_version","type":"string"},{"name":"lang_code","type":"string"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-1663104819","method":"help.getSupport","params":[],"type":"help.Support"},{"id":"916930423","method":"messages.readMessageContents","params":[{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"655677548","method":"account.checkUsername","params":[{"name":"username","type":"string"}],"type":"Bool"},{"id":"1040964988","method":"account.updateUsername","params":[{"name":"username","type":"string"}],"type":"User"},{"id":"301470424","method":"contacts.search","params":[{"name":"q","type":"string"},{"name":"limit","type":"int"}],"type":"contacts.Found"},{"id":"-623130288","method":"account.getPrivacy","params":[{"name":"key","type":"InputPrivacyKey"}],"type":"account.PrivacyRules"},{"id":"-906486552","method":"account.setPrivacy","params":[{"name":"key","type":"InputPrivacyKey"},{"name":"rules","type":"Vector"}],"type":"account.PrivacyRules"},{"id":"1099779595","method":"account.deleteAccount","params":[{"name":"reason","type":"string"}],"type":"Bool"},{"id":"150761757","method":"account.getAccountTTL","params":[],"type":"AccountDaysTTL"},{"id":"608323678","method":"account.setAccountTTL","params":[{"name":"ttl","type":"AccountDaysTTL"}],"type":"Bool"},{"id":"-627372787","method":"invokeWithLayer","params":[{"name":"layer","type":"int"},{"name":"query","type":"!X"}],"type":"X"},{"id":"-113456221","method":"contacts.resolveUsername","params":[{"name":"username","type":"string"}],"type":"contacts.ResolvedPeer"},{"id":"149257707","method":"account.sendChangePhoneCode","params":[{"name":"flags","type":"#"},{"name":"allow_flashcall","type":"flags.0?true"},{"name":"phone_number","type":"string"},{"name":"current_number","type":"flags.0?Bool"}],"type":"auth.SentCode"},{"id":"1891839707","method":"account.changePhone","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"User"},{"id":"479598769","method":"messages.getAllStickers","params":[{"name":"hash","type":"int"}],"type":"messages.AllStickers"},{"id":"954152242","method":"account.updateDeviceLocked","params":[{"name":"period","type":"int"}],"type":"Bool"},{"id":"1738800940","method":"auth.importBotAuthorization","params":[{"name":"flags","type":"int"},{"name":"api_id","type":"int"},{"name":"api_hash","type":"string"},{"name":"bot_auth_token","type":"string"}],"type":"auth.Authorization"},{"id":"623001124","method":"messages.getWebPagePreview","params":[{"name":"message","type":"string"}],"type":"MessageMedia"},{"id":"-484392616","method":"account.getAuthorizations","params":[],"type":"account.Authorizations"},{"id":"-545786948","method":"account.resetAuthorization","params":[{"name":"hash","type":"long"}],"type":"Bool"},{"id":"1418342645","method":"account.getPassword","params":[],"type":"account.Password"},{"id":"-1131605573","method":"account.getPasswordSettings","params":[{"name":"current_password_hash","type":"bytes"}],"type":"account.PasswordSettings"},{"id":"-92517498","method":"account.updatePasswordSettings","params":[{"name":"current_password_hash","type":"bytes"},{"name":"new_settings","type":"account.PasswordInputSettings"}],"type":"Bool"},{"id":"174260510","method":"auth.checkPassword","params":[{"name":"password_hash","type":"bytes"}],"type":"auth.Authorization"},{"id":"-661144474","method":"auth.requestPasswordRecovery","params":[],"type":"auth.PasswordRecovery"},{"id":"1319464594","method":"auth.recoverPassword","params":[{"name":"code","type":"string"}],"type":"auth.Authorization"},{"id":"-1080796745","method":"invokeWithoutUpdates","params":[{"name":"query","type":"!X"}],"type":"X"},{"id":"2106086025","method":"messages.exportChatInvite","params":[{"name":"chat_id","type":"int"}],"type":"ExportedChatInvite"},{"id":"1051570619","method":"messages.checkChatInvite","params":[{"name":"hash","type":"string"}],"type":"ChatInvite"},{"id":"1817183516","method":"messages.importChatInvite","params":[{"name":"hash","type":"string"}],"type":"Updates"},{"id":"639215886","method":"messages.getStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"}],"type":"messages.StickerSet"},{"id":"-946871200","method":"messages.installStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"},{"name":"archived","type":"Bool"}],"type":"messages.StickerSetInstallResult"},{"id":"-110209570","method":"messages.uninstallStickerSet","params":[{"name":"stickerset","type":"InputStickerSet"}],"type":"Bool"},{"id":"-421563528","method":"messages.startBot","params":[{"name":"bot","type":"InputUser"},{"name":"peer","type":"InputPeer"},{"name":"random_id","type":"long"},{"name":"start_param","type":"string"}],"type":"Updates"},{"id":"-1877938321","method":"help.getAppChangelog","params":[{"name":"prev_app_version","type":"string"}],"type":"Updates"},{"id":"-993483427","method":"messages.getMessagesViews","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"Vector"},{"name":"increment","type":"Bool"}],"type":"Vector"},{"id":"-871347913","method":"channels.readHistory","params":[{"name":"channel","type":"InputChannel"},{"name":"max_id","type":"int"}],"type":"Bool"},{"id":"-2067661490","method":"channels.deleteMessages","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"Vector"}],"type":"messages.AffectedMessages"},{"id":"-787622117","method":"channels.deleteUserHistory","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"}],"type":"messages.AffectedHistory"},{"id":"-32999408","method":"channels.reportSpam","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"-1814580409","method":"channels.getMessages","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"Vector"}],"type":"messages.Messages"},{"id":"618237842","method":"channels.getParticipants","params":[{"name":"channel","type":"InputChannel"},{"name":"filter","type":"ChannelParticipantsFilter"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"channels.ChannelParticipants"},{"id":"1416484774","method":"channels.getParticipant","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"}],"type":"channels.ChannelParticipant"},{"id":"176122811","method":"channels.getChannels","params":[{"name":"id","type":"Vector"}],"type":"messages.Chats"},{"id":"141781513","method":"channels.getFullChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"messages.ChatFull"},{"id":"-192332417","method":"channels.createChannel","params":[{"name":"flags","type":"#"},{"name":"broadcast","type":"flags.0?true"},{"name":"megagroup","type":"flags.1?true"},{"name":"title","type":"string"},{"name":"about","type":"string"}],"type":"Updates"},{"id":"333610782","method":"channels.editAbout","params":[{"name":"channel","type":"InputChannel"},{"name":"about","type":"string"}],"type":"Bool"},{"id":"-344583728","method":"channels.editAdmin","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"role","type":"ChannelParticipantRole"}],"type":"Updates"},{"id":"1450044624","method":"channels.editTitle","params":[{"name":"channel","type":"InputChannel"},{"name":"title","type":"string"}],"type":"Updates"},{"id":"-248621111","method":"channels.editPhoto","params":[{"name":"channel","type":"InputChannel"},{"name":"photo","type":"InputChatPhoto"}],"type":"Updates"},{"id":"283557164","method":"channels.checkUsername","params":[{"name":"channel","type":"InputChannel"},{"name":"username","type":"string"}],"type":"Bool"},{"id":"890549214","method":"channels.updateUsername","params":[{"name":"channel","type":"InputChannel"},{"name":"username","type":"string"}],"type":"Bool"},{"id":"615851205","method":"channels.joinChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"-130635115","method":"channels.leaveChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"429865580","method":"channels.inviteToChannel","params":[{"name":"channel","type":"InputChannel"},{"name":"users","type":"Vector"}],"type":"Updates"},{"id":"-1502421484","method":"channels.kickFromChannel","params":[{"name":"channel","type":"InputChannel"},{"name":"user_id","type":"InputUser"},{"name":"kicked","type":"Bool"}],"type":"Updates"},{"id":"-950663035","method":"channels.exportInvite","params":[{"name":"channel","type":"InputChannel"}],"type":"ExportedChatInvite"},{"id":"-1072619549","method":"channels.deleteChannel","params":[{"name":"channel","type":"InputChannel"}],"type":"Updates"},{"id":"51854712","method":"updates.getChannelDifference","params":[{"name":"flags","type":"#"},{"name":"force","type":"flags.0?true"},{"name":"channel","type":"InputChannel"},{"name":"filter","type":"ChannelMessagesFilter"},{"name":"pts","type":"int"},{"name":"limit","type":"int"}],"type":"updates.ChannelDifference"},{"id":"-326379039","method":"messages.toggleChatAdmins","params":[{"name":"chat_id","type":"int"},{"name":"enabled","type":"Bool"}],"type":"Updates"},{"id":"-1444503762","method":"messages.editChatAdmin","params":[{"name":"chat_id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"is_admin","type":"Bool"}],"type":"Bool"},{"id":"363051235","method":"messages.migrateChat","params":[{"name":"chat_id","type":"int"}],"type":"Updates"},{"id":"-1640190800","method":"messages.searchGlobal","params":[{"name":"q","type":"string"},{"name":"offset_date","type":"int"},{"name":"offset_peer","type":"InputPeer"},{"name":"offset_id","type":"int"},{"name":"limit","type":"int"}],"type":"messages.Messages"},{"id":"889286899","method":"help.getTermsOfService","params":[],"type":"help.TermsOfService"},{"id":"2016638777","method":"messages.reorderStickerSets","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"order","type":"Vector"}],"type":"Bool"},{"id":"864953444","method":"messages.getDocumentByHash","params":[{"name":"sha256","type":"bytes"},{"name":"size","type":"int"},{"name":"mime_type","type":"string"}],"type":"Document"},{"id":"-1080395925","method":"messages.searchGifs","params":[{"name":"q","type":"string"},{"name":"offset","type":"int"}],"type":"messages.FoundGifs"},{"id":"-2084618926","method":"messages.getSavedGifs","params":[{"name":"hash","type":"int"}],"type":"messages.SavedGifs"},{"id":"846868683","method":"messages.saveGif","params":[{"name":"id","type":"InputDocument"},{"name":"unsave","type":"Bool"}],"type":"Bool"},{"id":"1364105629","method":"messages.getInlineBotResults","params":[{"name":"flags","type":"#"},{"name":"bot","type":"InputUser"},{"name":"peer","type":"InputPeer"},{"name":"geo_point","type":"flags.0?InputGeoPoint"},{"name":"query","type":"string"},{"name":"offset","type":"string"}],"type":"messages.BotResults"},{"id":"-346119674","method":"messages.setInlineBotResults","params":[{"name":"flags","type":"#"},{"name":"gallery","type":"flags.0?true"},{"name":"private","type":"flags.1?true"},{"name":"query_id","type":"long"},{"name":"results","type":"Vector"},{"name":"cache_time","type":"int"},{"name":"next_offset","type":"flags.2?string"},{"name":"switch_pm","type":"flags.3?InlineBotSwitchPM"}],"type":"Bool"},{"id":"-1318189314","method":"messages.sendInlineBotResult","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.5?true"},{"name":"background","type":"flags.6?true"},{"name":"clear_draft","type":"flags.7?true"},{"name":"peer","type":"InputPeer"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"random_id","type":"long"},{"name":"query_id","type":"long"},{"name":"id","type":"string"}],"type":"Updates"},{"id":"1231065863","method":"channels.toggleInvites","params":[{"name":"channel","type":"InputChannel"},{"name":"enabled","type":"Bool"}],"type":"Updates"},{"id":"-934882771","method":"channels.exportMessageLink","params":[{"name":"channel","type":"InputChannel"},{"name":"id","type":"int"}],"type":"ExportedMessageLink"},{"id":"527021574","method":"channels.toggleSignatures","params":[{"name":"channel","type":"InputChannel"},{"name":"enabled","type":"Bool"}],"type":"Updates"},{"id":"-1490162350","method":"channels.updatePinnedMessage","params":[{"name":"flags","type":"#"},{"name":"silent","type":"flags.0?true"},{"name":"channel","type":"InputChannel"},{"name":"id","type":"int"}],"type":"Updates"},{"id":"1056025023","method":"auth.resendCode","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"}],"type":"auth.SentCode"},{"id":"520357240","method":"auth.cancelCode","params":[{"name":"phone_number","type":"string"},{"name":"phone_code_hash","type":"string"}],"type":"Bool"},{"id":"-39416522","method":"messages.getMessageEditData","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"}],"type":"messages.MessageEditData"},{"id":"-829299510","method":"messages.editMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"message","type":"flags.11?string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"}],"type":"Updates"},{"id":"319564933","method":"messages.editInlineBotMessage","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"id","type":"InputBotInlineMessageID"},{"name":"message","type":"flags.11?string"},{"name":"reply_markup","type":"flags.2?ReplyMarkup"},{"name":"entities","type":"flags.3?Vector"}],"type":"Bool"},{"id":"-2130010132","method":"messages.getBotCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"game","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"msg_id","type":"int"},{"name":"data","type":"flags.0?bytes"}],"type":"messages.BotCallbackAnswer"},{"id":"-712043766","method":"messages.setBotCallbackAnswer","params":[{"name":"flags","type":"#"},{"name":"alert","type":"flags.1?true"},{"name":"query_id","type":"long"},{"name":"message","type":"flags.0?string"},{"name":"url","type":"flags.2?string"},{"name":"cache_time","type":"int"}],"type":"Bool"},{"id":"-728224331","method":"contacts.getTopPeers","params":[{"name":"flags","type":"#"},{"name":"correspondents","type":"flags.0?true"},{"name":"bots_pm","type":"flags.1?true"},{"name":"bots_inline","type":"flags.2?true"},{"name":"phone_calls","type":"flags.3?true"},{"name":"groups","type":"flags.10?true"},{"name":"channels","type":"flags.15?true"},{"name":"offset","type":"int"},{"name":"limit","type":"int"},{"name":"hash","type":"int"}],"type":"contacts.TopPeers"},{"id":"451113900","method":"contacts.resetTopPeerRating","params":[{"name":"category","type":"TopPeerCategory"},{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"764901049","method":"messages.getPeerDialogs","params":[{"name":"peers","type":"Vector"}],"type":"messages.PeerDialogs"},{"id":"-1137057461","method":"messages.saveDraft","params":[{"name":"flags","type":"#"},{"name":"no_webpage","type":"flags.1?true"},{"name":"reply_to_msg_id","type":"flags.0?int"},{"name":"peer","type":"InputPeer"},{"name":"message","type":"string"},{"name":"entities","type":"flags.3?Vector"}],"type":"Bool"},{"id":"1782549861","method":"messages.getAllDrafts","params":[],"type":"Updates"},{"id":"766298703","method":"messages.getFeaturedStickers","params":[{"name":"hash","type":"int"}],"type":"messages.FeaturedStickers"},{"id":"1527873830","method":"messages.readFeaturedStickers","params":[{"name":"id","type":"Vector"}],"type":"Bool"},{"id":"1587647177","method":"messages.getRecentStickers","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"},{"name":"hash","type":"int"}],"type":"messages.RecentStickers"},{"id":"958863608","method":"messages.saveRecentSticker","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"},{"name":"id","type":"InputDocument"},{"name":"unsave","type":"Bool"}],"type":"Bool"},{"id":"-1986437075","method":"messages.clearRecentStickers","params":[{"name":"flags","type":"#"},{"name":"attached","type":"flags.0?true"}],"type":"Bool"},{"id":"1475442322","method":"messages.getArchivedStickers","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"offset_id","type":"long"},{"name":"limit","type":"int"}],"type":"messages.ArchivedStickers"},{"id":"353818557","method":"account.sendConfirmPhoneCode","params":[{"name":"flags","type":"#"},{"name":"allow_flashcall","type":"flags.0?true"},{"name":"hash","type":"string"},{"name":"current_number","type":"flags.0?Bool"}],"type":"auth.SentCode"},{"id":"1596029123","method":"account.confirmPhone","params":[{"name":"phone_code_hash","type":"string"},{"name":"phone_code","type":"string"}],"type":"Bool"},{"id":"-1920105769","method":"channels.getAdminedPublicChannels","params":[],"type":"messages.Chats"},{"id":"1706608543","method":"messages.getMaskStickers","params":[{"name":"hash","type":"int"}],"type":"messages.AllStickers"},{"id":"-866424884","method":"messages.getAttachedStickers","params":[{"name":"media","type":"InputStickeredMedia"}],"type":"Vector"},{"id":"-1907842680","method":"auth.dropTempAuthKeys","params":[{"name":"except_auth_keys","type":"Vector"}],"type":"Bool"},{"id":"-1896289088","method":"messages.setGameScore","params":[{"name":"flags","type":"#"},{"name":"edit_message","type":"flags.0?true"},{"name":"force","type":"flags.1?true"},{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"user_id","type":"InputUser"},{"name":"score","type":"int"}],"type":"Updates"},{"id":"363700068","method":"messages.setInlineGameScore","params":[{"name":"flags","type":"#"},{"name":"edit_message","type":"flags.0?true"},{"name":"force","type":"flags.1?true"},{"name":"id","type":"InputBotInlineMessageID"},{"name":"user_id","type":"InputUser"},{"name":"score","type":"int"}],"type":"Bool"},{"id":"-400399203","method":"messages.getGameHighScores","params":[{"name":"peer","type":"InputPeer"},{"name":"id","type":"int"},{"name":"user_id","type":"InputUser"}],"type":"messages.HighScores"},{"id":"258170395","method":"messages.getInlineGameHighScores","params":[{"name":"id","type":"InputBotInlineMessageID"},{"name":"user_id","type":"InputUser"}],"type":"messages.HighScores"},{"id":"218777796","method":"messages.getCommonChats","params":[{"name":"user_id","type":"InputUser"},{"name":"max_id","type":"int"},{"name":"limit","type":"int"}],"type":"messages.Chats"},{"id":"-341307408","method":"messages.getAllChats","params":[{"name":"except_ids","type":"Vector"}],"type":"messages.Chats"},{"id":"-333262899","method":"help.setBotUpdatesStatus","params":[{"name":"pending_updates_count","type":"int"},{"name":"message","type":"string"}],"type":"Bool"},{"id":"852135825","method":"messages.getWebPage","params":[{"name":"url","type":"string"},{"name":"hash","type":"int"}],"type":"WebPage"},{"id":"847887978","method":"messages.toggleDialogPin","params":[{"name":"flags","type":"#"},{"name":"pinned","type":"flags.0?true"},{"name":"peer","type":"InputPeer"}],"type":"Bool"},{"id":"-1784678844","method":"messages.reorderPinnedDialogs","params":[{"name":"flags","type":"#"},{"name":"force","type":"flags.0?true"},{"name":"order","type":"Vector"}],"type":"Bool"},{"id":"-497756594","method":"messages.getPinnedDialogs","params":[],"type":"messages.PeerDialogs"},{"id":"-1440257555","method":"bots.sendCustomRequest","params":[{"name":"custom_method","type":"string"},{"name":"params","type":"DataJSON"}],"type":"DataJSON"},{"id":"-434028723","method":"bots.answerWebhookJSONQuery","params":[{"name":"query_id","type":"long"},{"name":"data","type":"DataJSON"}],"type":"Bool"},{"id":"619086221","method":"upload.getWebFile","params":[{"name":"location","type":"InputWebFileLocation"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"upload.WebFile"},{"id":"-1712285883","method":"payments.getPaymentForm","params":[{"name":"msg_id","type":"int"}],"type":"payments.PaymentForm"},{"id":"-1601001088","method":"payments.getPaymentReceipt","params":[{"name":"msg_id","type":"int"}],"type":"payments.PaymentReceipt"},{"id":"1997180532","method":"payments.validateRequestedInfo","params":[{"name":"flags","type":"#"},{"name":"save","type":"flags.0?true"},{"name":"msg_id","type":"int"},{"name":"info","type":"PaymentRequestedInfo"}],"type":"payments.ValidatedRequestedInfo"},{"id":"730364339","method":"payments.sendPaymentForm","params":[{"name":"flags","type":"#"},{"name":"msg_id","type":"int"},{"name":"requested_info_id","type":"flags.0?string"},{"name":"shipping_option_id","type":"flags.1?string"},{"name":"credentials","type":"InputPaymentCredentials"}],"type":"payments.PaymentResult"},{"id":"1250046590","method":"account.getTmpPassword","params":[{"name":"password_hash","type":"bytes"},{"name":"period","type":"int"}],"type":"account.TmpPassword"},{"id":"578650699","method":"payments.getSavedInfo","params":[],"type":"payments.SavedInfo"},{"id":"-667062079","method":"payments.clearSavedInfo","params":[{"name":"flags","type":"#"},{"name":"credentials","type":"flags.0?true"},{"name":"info","type":"flags.1?true"}],"type":"Bool"},{"id":"-436833542","method":"messages.setBotShippingResults","params":[{"name":"flags","type":"#"},{"name":"query_id","type":"long"},{"name":"error","type":"flags.0?string"},{"name":"shipping_options","type":"flags.1?Vector"}],"type":"Bool"},{"id":"163765653","method":"messages.setBotPrecheckoutResults","params":[{"name":"flags","type":"#"},{"name":"success","type":"flags.1?true"},{"name":"query_id","type":"long"},{"name":"error","type":"flags.0?string"}],"type":"Bool"},{"id":"-1680314774","method":"stickers.createStickerSet","params":[{"name":"flags","type":"#"},{"name":"masks","type":"flags.0?true"},{"name":"user_id","type":"InputUser"},{"name":"title","type":"string"},{"name":"short_name","type":"string"},{"name":"stickers","type":"Vector"}],"type":"messages.StickerSet"},{"id":"69556532","method":"stickers.removeStickerFromSet","params":[{"name":"sticker","type":"InputDocument"}],"type":"Bool"},{"id":"1322714570","method":"stickers.changeStickerPosition","params":[{"name":"sticker","type":"InputDocument"},{"name":"position","type":"int"}],"type":"Bool"},{"id":"-2041315650","method":"stickers.addStickerToSet","params":[{"name":"stickerset","type":"InputStickerSet"},{"name":"sticker","type":"InputStickerSetItem"}],"type":"messages.StickerSet"},{"id":"1369162417","method":"messages.uploadMedia","params":[{"name":"peer","type":"InputPeer"},{"name":"media","type":"InputMedia"}],"type":"MessageMedia"},{"id":"1430593449","method":"phone.getCallConfig","params":[],"type":"DataJSON"},{"id":"1536537556","method":"phone.requestCall","params":[{"name":"user_id","type":"InputUser"},{"name":"random_id","type":"int"},{"name":"g_a_hash","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"phone.PhoneCall"},{"id":"1003664544","method":"phone.acceptCall","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"g_b","type":"bytes"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"phone.PhoneCall"},{"id":"788404002","method":"phone.confirmCall","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"g_a","type":"bytes"},{"name":"key_fingerprint","type":"long"},{"name":"protocol","type":"PhoneCallProtocol"}],"type":"phone.PhoneCall"},{"id":"399855457","method":"phone.receivedCall","params":[{"name":"peer","type":"InputPhoneCall"}],"type":"Bool"},{"id":"2027164582","method":"phone.discardCall","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"duration","type":"int"},{"name":"reason","type":"PhoneCallDiscardReason"},{"name":"connection_id","type":"long"}],"type":"Updates"},{"id":"475228724","method":"phone.setCallRating","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"rating","type":"int"},{"name":"comment","type":"string"}],"type":"Updates"},{"id":"662363518","method":"phone.saveCallDebug","params":[{"name":"peer","type":"InputPhoneCall"},{"name":"debug","type":"DataJSON"}],"type":"Bool"},{"id":"536919235","method":"upload.getCdnFile","params":[{"name":"file_token","type":"bytes"},{"name":"offset","type":"int"},{"name":"limit","type":"int"}],"type":"upload.CdnFile"},{"id":"779755552","method":"upload.reuploadCdnFile","params":[{"name":"file_token","type":"bytes"},{"name":"request_token","type":"bytes"}],"type":"Bool"},{"id":"1375900482","method":"help.getCdnConfig","params":[],"type":"CdnConfig"}]} -Config.Schema.API.layer = 62 +Config.Schema.API.layer = 66 Config.Emoji = {'00a9': ['\u00A9', ['copyright']],'00ae': ['\u00AE', ['registered']],'203c': ['\u203C', ['bangbang']],'2049': ['\u2049', ['interrobang']],'2122': ['\u2122', ['tm']],'2139': ['\u2139', ['information_source']],'2194': ['\u2194', ['left_right_arrow']],'2195': ['\u2195', ['arrow_up_down']],'2196': ['\u2196', ['arrow_upper_left']],'2197': ['\u2197', ['arrow_upper_right']],'2198': ['\u2198', ['arrow_lower_right']],'2199': ['\u2199', ['arrow_lower_left']],'21a9': ['\u21A9', ['leftwards_arrow_with_hook']],'21aa': ['\u21AA', ['arrow_right_hook']],'231a': ['\u231A', ['watch']],'231b': ['\u231B', ['hourglass']],'23e9': ['\u23E9', ['fast_forward']],'23ea': ['\u23EA', ['rewind']],'23eb': ['\u23EB', ['arrow_double_up']],'23ec': ['\u23EC', ['arrow_double_down']],'23f0': ['\u23F0', ['alarm_clock']],'23f3': ['\u23F3', ['hourglass_flowing_sand']],'24c2': ['\u24C2', ['m']],'25aa': ['\u25AA', ['black_small_square']],'25ab': ['\u25AB', ['white_small_square']],'25b6': ['\u25B6', ['arrow_forward']],'25c0': ['\u25C0', ['arrow_backward']],'25fb': ['\u25FB', ['white_medium_square']],'25fc': ['\u25FC', ['black_medium_square']],'25fd': ['\u25FD', ['white_medium_small_square']],'25fe': ['\u25FE', ['black_medium_small_square']],'2600': ['\u2600', ['sunny']],'2601': ['\u2601', ['cloud']],'260e': ['\u260E', ['phone', 'telephone']],'2611': ['\u2611', ['ballot_box_with_check']],'2614': ['\u2614', ['umbrella']],'2615': ['\u2615', ['coffee']],'261d': ['\u261D', ['point_up']],'263a': ['\u263A', ['relaxed']],'2648': ['\u2648', ['aries']],'2649': ['\u2649', ['taurus']],'264a': ['\u264A', ['gemini']],'264b': ['\u264B', ['cancer']],'264c': ['\u264C', ['leo']],'264d': ['\u264D', ['virgo']],'264e': ['\u264E', ['libra']],'264f': ['\u264F', ['scorpius']],'2650': ['\u2650', ['sagittarius']],'2651': ['\u2651', ['capricorn']],'2652': ['\u2652', ['aquarius']],'2653': ['\u2653', ['pisces']],'2660': ['\u2660', ['spades']],'2663': ['\u2663', ['clubs']],'2665': ['\u2665', ['hearts']],'2666': ['\u2666', ['diamonds']],'2668': ['\u2668', ['hotsprings']],'267b': ['\u267B', ['recycle']],'267f': ['\u267F', ['wheelchair']],'2693': ['\u2693', ['anchor']],'26a0': ['\u26A0', ['warning']],'26a1': ['\u26A1', ['zap']],'26aa': ['\u26AA', ['white_circle']],'26ab': ['\u26AB', ['black_circle']],'26bd': ['\u26BD', ['soccer']],'26be': ['\u26BE', ['baseball']],'26c4': ['\u26C4', ['snowman']],'26c5': ['\u26C5', ['partly_sunny']],'26ce': ['\u26CE', ['ophiuchus']],'26d4': ['\u26D4', ['no_entry']],'26ea': ['\u26EA', ['church']],'26f2': ['\u26F2', ['fountain']],'26f3': ['\u26F3', ['golf']],'26f5': ['\u26F5', ['boat', 'sailboat']],'26fa': ['\u26FA', ['tent']],'26fd': ['\u26FD', ['fuelpump']],'2702': ['\u2702', ['scissors']],'2705': ['\u2705', ['white_check_mark']],'2708': ['\u2708', ['airplane']],'2709': ['\u2709', ['email', 'envelope']],'270a': ['\u270A', ['fist']],'270b': ['\u270B', ['hand', 'raised_hand']],'270c': ['\u270C', ['v']],'270f': ['\u270F', ['pencil2']],'2712': ['\u2712', ['black_nib']],'2714': ['\u2714', ['heavy_check_mark']],'2716': ['\u2716', ['heavy_multiplication_x']],'2728': ['\u2728', ['sparkles']],'2733': ['\u2733', ['eight_spoked_asterisk']],'2734': ['\u2734', ['eight_pointed_black_star']],'2744': ['\u2744', ['snowflake']],'2747': ['\u2747', ['sparkle']],'274c': ['\u274C', ['x']],'274e': ['\u274E', ['negative_squared_cross_mark']],'2753': ['\u2753', ['question']],'2754': ['\u2754', ['grey_question']],'2755': ['\u2755', ['grey_exclamation']],'2757': ['\u2757', ['exclamation', 'heavy_exclamation_mark']],'2764': ['\u2764', ['heart'], '<3'],'2795': ['\u2795', ['heavy_plus_sign']],'2796': ['\u2796', ['heavy_minus_sign']],'2797': ['\u2797', ['heavy_division_sign']],'27a1': ['\u27A1', ['arrow_right']],'27b0': ['\u27B0', ['curly_loop']],'27bf': ['\u27BF', ['loop']],'2934': ['\u2934', ['arrow_heading_up']],'2935': ['\u2935', ['arrow_heading_down']],'2b05': ['\u2B05', ['arrow_left']],'2b06': ['\u2B06', ['arrow_up']],'2b07': ['\u2B07', ['arrow_down']],'2b1b': ['\u2B1B', ['black_large_square']],'2b1c': ['\u2B1C', ['white_large_square']],'2b50': ['\u2B50', ['star']],'2b55': ['\u2B55', ['o']],'3030': ['\u3030', ['wavy_dash']],'303d': ['\u303D', ['part_alternation_mark']],'3297': ['\u3297', ['congratulations']],'3299': ['\u3299', ['secret']],'1f004': ['\uD83C\uDC04', ['mahjong']],'1f0cf': ['\uD83C\uDCCF', ['black_joker']],'1f170': ['\uD83C\uDD70', ['a']],'1f171': ['\uD83C\uDD71', ['b']],'1f17e': ['\uD83C\uDD7E', ['o2']],'1f17f': ['\uD83C\uDD7F', ['parking']],'1f18e': ['\uD83C\uDD8E', ['ab']],'1f191': ['\uD83C\uDD91', ['cl']],'1f192': ['\uD83C\uDD92', ['cool']],'1f193': ['\uD83C\uDD93', ['free']],'1f194': ['\uD83C\uDD94', ['id']],'1f195': ['\uD83C\uDD95', ['new']],'1f196': ['\uD83C\uDD96', ['ng']],'1f197': ['\uD83C\uDD97', ['ok']],'1f198': ['\uD83C\uDD98', ['sos']],'1f199': ['\uD83C\uDD99', ['up']],'1f19a': ['\uD83C\uDD9A', ['vs']],'1f201': ['\uD83C\uDE01', ['koko']],'1f202': ['\uD83C\uDE02', ['sa']],'1f21a': ['\uD83C\uDE1A', ['u7121']],'1f22f': ['\uD83C\uDE2F', ['u6307']],'1f232': ['\uD83C\uDE32', ['u7981']],'1f233': ['\uD83C\uDE33', ['u7a7a']],'1f234': ['\uD83C\uDE34', ['u5408']],'1f235': ['\uD83C\uDE35', ['u6e80']],'1f236': ['\uD83C\uDE36', ['u6709']],'1f237': ['\uD83C\uDE37', ['u6708']],'1f238': ['\uD83C\uDE38', ['u7533']],'1f239': ['\uD83C\uDE39', ['u5272']],'1f23a': ['\uD83C\uDE3A', ['u55b6']],'1f250': ['\uD83C\uDE50', ['ideograph_advantage']],'1f251': ['\uD83C\uDE51', ['accept']],'1f300': ['\uD83C\uDF00', ['cyclone']],'1f301': ['\uD83C\uDF01', ['foggy']],'1f302': ['\uD83C\uDF02', ['closed_umbrella']],'1f303': ['\uD83C\uDF03', ['night_with_stars']],'1f304': ['\uD83C\uDF04', ['sunrise_over_mountains']],'1f305': ['\uD83C\uDF05', ['sunrise']],'1f306': ['\uD83C\uDF06', ['city_sunset']],'1f307': ['\uD83C\uDF07', ['city_sunrise']],'1f308': ['\uD83C\uDF08', ['rainbow']],'1f309': ['\uD83C\uDF09', ['bridge_at_night']],'1f30a': ['\uD83C\uDF0A', ['ocean']],'1f30b': ['\uD83C\uDF0B', ['volcano']],'1f30c': ['\uD83C\uDF0C', ['milky_way']],'1f30d': ['\uD83C\uDF0D', ['earth_africa']],'1f30e': ['\uD83C\uDF0E', ['earth_americas']],'1f30f': ['\uD83C\uDF0F', ['earth_asia']],'1f310': ['\uD83C\uDF10', ['globe_with_meridians']],'1f311': ['\uD83C\uDF11', ['new_moon']],'1f312': ['\uD83C\uDF12', ['waxing_crescent_moon']],'1f313': ['\uD83C\uDF13', ['first_quarter_moon']],'1f314': ['\uD83C\uDF14', ['moon', 'waxing_gibbous_moon']],'1f315': ['\uD83C\uDF15', ['full_moon']],'1f316': ['\uD83C\uDF16', ['waning_gibbous_moon']],'1f317': ['\uD83C\uDF17', ['last_quarter_moon']],'1f318': ['\uD83C\uDF18', ['waning_crescent_moon']],'1f319': ['\uD83C\uDF19', ['crescent_moon']],'1f320': ['\uD83C\uDF20', ['stars']],'1f31a': ['\uD83C\uDF1A', ['new_moon_with_face']],'1f31b': ['\uD83C\uDF1B', ['first_quarter_moon_with_face']],'1f31c': ['\uD83C\uDF1C', ['last_quarter_moon_with_face']],'1f31d': ['\uD83C\uDF1D', ['full_moon_with_face']],'1f31e': ['\uD83C\uDF1E', ['sun_with_face']],'1f31f': ['\uD83C\uDF1F', ['star2']],'1f330': ['\uD83C\uDF30', ['chestnut']],'1f331': ['\uD83C\uDF31', ['seedling']],'1f332': ['\uD83C\uDF32', ['evergreen_tree']],'1f333': ['\uD83C\uDF33', ['deciduous_tree']],'1f334': ['\uD83C\uDF34', ['palm_tree']],'1f335': ['\uD83C\uDF35', ['cactus']],'1f337': ['\uD83C\uDF37', ['tulip']],'1f338': ['\uD83C\uDF38', ['cherry_blossom']],'1f339': ['\uD83C\uDF39', ['rose']],'1f33a': ['\uD83C\uDF3A', ['hibiscus']],'1f33b': ['\uD83C\uDF3B', ['sunflower']],'1f33c': ['\uD83C\uDF3C', ['blossom']],'1f33d': ['\uD83C\uDF3D', ['corn']],'1f33e': ['\uD83C\uDF3E', ['ear_of_rice']],'1f33f': ['\uD83C\uDF3F', ['herb']],'1f340': ['\uD83C\uDF40', ['four_leaf_clover']],'1f341': ['\uD83C\uDF41', ['maple_leaf']],'1f342': ['\uD83C\uDF42', ['fallen_leaf']],'1f343': ['\uD83C\uDF43', ['leaves']],'1f344': ['\uD83C\uDF44', ['mushroom']],'1f345': ['\uD83C\uDF45', ['tomato']],'1f346': ['\uD83C\uDF46', ['eggplant']],'1f347': ['\uD83C\uDF47', ['grapes']],'1f348': ['\uD83C\uDF48', ['melon']],'1f349': ['\uD83C\uDF49', ['watermelon']],'1f34a': ['\uD83C\uDF4A', ['tangerine']],'1f34b': ['\uD83C\uDF4B', ['lemon']],'1f34c': ['\uD83C\uDF4C', ['banana']],'1f34d': ['\uD83C\uDF4D', ['pineapple']],'1f34e': ['\uD83C\uDF4E', ['apple']],'1f34f': ['\uD83C\uDF4F', ['green_apple']],'1f350': ['\uD83C\uDF50', ['pear']],'1f351': ['\uD83C\uDF51', ['peach']],'1f352': ['\uD83C\uDF52', ['cherries']],'1f353': ['\uD83C\uDF53', ['strawberry']],'1f354': ['\uD83C\uDF54', ['hamburger']],'1f355': ['\uD83C\uDF55', ['pizza']],'1f356': ['\uD83C\uDF56', ['meat_on_bone']],'1f357': ['\uD83C\uDF57', ['poultry_leg']],'1f358': ['\uD83C\uDF58', ['rice_cracker']],'1f359': ['\uD83C\uDF59', ['rice_ball']],'1f35a': ['\uD83C\uDF5A', ['rice']],'1f35b': ['\uD83C\uDF5B', ['curry']],'1f35c': ['\uD83C\uDF5C', ['ramen']],'1f35d': ['\uD83C\uDF5D', ['spaghetti']],'1f35e': ['\uD83C\uDF5E', ['bread']],'1f35f': ['\uD83C\uDF5F', ['fries']],'1f360': ['\uD83C\uDF60', ['sweet_potato']],'1f361': ['\uD83C\uDF61', ['dango']],'1f362': ['\uD83C\uDF62', ['oden']],'1f363': ['\uD83C\uDF63', ['sushi']],'1f364': ['\uD83C\uDF64', ['fried_shrimp']],'1f365': ['\uD83C\uDF65', ['fish_cake']],'1f366': ['\uD83C\uDF66', ['icecream']],'1f367': ['\uD83C\uDF67', ['shaved_ice']],'1f368': ['\uD83C\uDF68', ['ice_cream']],'1f369': ['\uD83C\uDF69', ['doughnut']],'1f36a': ['\uD83C\uDF6A', ['cookie']],'1f36b': ['\uD83C\uDF6B', ['chocolate_bar']],'1f36c': ['\uD83C\uDF6C', ['candy']],'1f36d': ['\uD83C\uDF6D', ['lollipop']],'1f36e': ['\uD83C\uDF6E', ['custard']],'1f36f': ['\uD83C\uDF6F', ['honey_pot']],'1f370': ['\uD83C\uDF70', ['cake']],'1f371': ['\uD83C\uDF71', ['bento']],'1f372': ['\uD83C\uDF72', ['stew']],'1f373': ['\uD83C\uDF73', ['egg']],'1f374': ['\uD83C\uDF74', ['fork_and_knife']],'1f375': ['\uD83C\uDF75', ['tea']],'1f376': ['\uD83C\uDF76', ['sake']],'1f377': ['\uD83C\uDF77', ['wine_glass']],'1f378': ['\uD83C\uDF78', ['cocktail']],'1f379': ['\uD83C\uDF79', ['tropical_drink']],'1f37a': ['\uD83C\uDF7A', ['beer']],'1f37b': ['\uD83C\uDF7B', ['beers']],'1f37c': ['\uD83C\uDF7C', ['baby_bottle']],'1f380': ['\uD83C\uDF80', ['ribbon']],'1f381': ['\uD83C\uDF81', ['gift']],'1f382': ['\uD83C\uDF82', ['birthday']],'1f383': ['\uD83C\uDF83', ['jack_o_lantern']],'1f384': ['\uD83C\uDF84', ['christmas_tree']],'1f385': ['\uD83C\uDF85', ['santa']],'1f386': ['\uD83C\uDF86', ['fireworks']],'1f387': ['\uD83C\uDF87', ['sparkler']],'1f388': ['\uD83C\uDF88', ['balloon']],'1f389': ['\uD83C\uDF89', ['tada']],'1f38a': ['\uD83C\uDF8A', ['confetti_ball']],'1f38b': ['\uD83C\uDF8B', ['tanabata_tree']],'1f38c': ['\uD83C\uDF8C', ['crossed_flags']],'1f38d': ['\uD83C\uDF8D', ['bamboo']],'1f38e': ['\uD83C\uDF8E', ['dolls']],'1f38f': ['\uD83C\uDF8F', ['flags']],'1f390': ['\uD83C\uDF90', ['wind_chime']],'1f391': ['\uD83C\uDF91', ['rice_scene']],'1f392': ['\uD83C\uDF92', ['school_satchel']],'1f393': ['\uD83C\uDF93', ['mortar_board']],'1f3a0': ['\uD83C\uDFA0', ['carousel_horse']],'1f3a1': ['\uD83C\uDFA1', ['ferris_wheel']],'1f3a2': ['\uD83C\uDFA2', ['roller_coaster']],'1f3a3': ['\uD83C\uDFA3', ['fishing_pole_and_fish']],'1f3a4': ['\uD83C\uDFA4', ['microphone']],'1f3a5': ['\uD83C\uDFA5', ['movie_camera']],'1f3a6': ['\uD83C\uDFA6', ['cinema']],'1f3a7': ['\uD83C\uDFA7', ['headphones']],'1f3a8': ['\uD83C\uDFA8', ['art']],'1f3a9': ['\uD83C\uDFA9', ['tophat']],'1f3aa': ['\uD83C\uDFAA', ['circus_tent']],'1f3ab': ['\uD83C\uDFAB', ['ticket']],'1f3ac': ['\uD83C\uDFAC', ['clapper']],'1f3ad': ['\uD83C\uDFAD', ['performing_arts']],'1f3ae': ['\uD83C\uDFAE', ['video_game']],'1f3af': ['\uD83C\uDFAF', ['dart']],'1f3b0': ['\uD83C\uDFB0', ['slot_machine']],'1f3b1': ['\uD83C\uDFB1', ['8ball']],'1f3b2': ['\uD83C\uDFB2', ['game_die']],'1f3b3': ['\uD83C\uDFB3', ['bowling']],'1f3b4': ['\uD83C\uDFB4', ['flower_playing_cards']],'1f3b5': ['\uD83C\uDFB5', ['musical_note']],'1f3b6': ['\uD83C\uDFB6', ['notes']],'1f3b7': ['\uD83C\uDFB7', ['saxophone']],'1f3b8': ['\uD83C\uDFB8', ['guitar']],'1f3b9': ['\uD83C\uDFB9', ['musical_keyboard']],'1f3ba': ['\uD83C\uDFBA', ['trumpet']],'1f3bb': ['\uD83C\uDFBB', ['violin']],'1f3bc': ['\uD83C\uDFBC', ['musical_score']],'1f3bd': ['\uD83C\uDFBD', ['running_shirt_with_sash']],'1f3be': ['\uD83C\uDFBE', ['tennis']],'1f3bf': ['\uD83C\uDFBF', ['ski']],'1f3c0': ['\uD83C\uDFC0', ['basketball']],'1f3c1': ['\uD83C\uDFC1', ['checkered_flag']],'1f3c2': ['\uD83C\uDFC2', ['snowboarder']],'1f3c3': ['\uD83C\uDFC3', ['runner', 'running']],'1f3c4': ['\uD83C\uDFC4', ['surfer']],'1f3c6': ['\uD83C\uDFC6', ['trophy']],'1f3c7': ['\uD83C\uDFC7', ['horse_racing']],'1f3c8': ['\uD83C\uDFC8', ['football']],'1f3c9': ['\uD83C\uDFC9', ['rugby_football']],'1f3ca': ['\uD83C\uDFCA', ['swimmer']],'1f3e0': ['\uD83C\uDFE0', ['house']],'1f3e1': ['\uD83C\uDFE1', ['house_with_garden']],'1f3e2': ['\uD83C\uDFE2', ['office']],'1f3e3': ['\uD83C\uDFE3', ['post_office']],'1f3e4': ['\uD83C\uDFE4', ['european_post_office']],'1f3e5': ['\uD83C\uDFE5', ['hospital']],'1f3e6': ['\uD83C\uDFE6', ['bank']],'1f3e7': ['\uD83C\uDFE7', ['atm']],'1f3e8': ['\uD83C\uDFE8', ['hotel']],'1f3e9': ['\uD83C\uDFE9', ['love_hotel']],'1f3ea': ['\uD83C\uDFEA', ['convenience_store']],'1f3eb': ['\uD83C\uDFEB', ['school']],'1f3ec': ['\uD83C\uDFEC', ['department_store']],'1f3ed': ['\uD83C\uDFED', ['factory']],'1f3ee': ['\uD83C\uDFEE', ['izakaya_lantern', 'lantern']],'1f3ef': ['\uD83C\uDFEF', ['japanese_castle']],'1f3f0': ['\uD83C\uDFF0', ['european_castle']],'1f400': ['\uD83D\uDC00', ['rat']],'1f401': ['\uD83D\uDC01', ['mouse2']],'1f402': ['\uD83D\uDC02', ['ox']],'1f403': ['\uD83D\uDC03', ['water_buffalo']],'1f404': ['\uD83D\uDC04', ['cow2']],'1f405': ['\uD83D\uDC05', ['tiger2']],'1f406': ['\uD83D\uDC06', ['leopard']],'1f407': ['\uD83D\uDC07', ['rabbit2']],'1f408': ['\uD83D\uDC08', ['cat2']],'1f409': ['\uD83D\uDC09', ['dragon']],'1f40a': ['\uD83D\uDC0A', ['crocodile']],'1f40b': ['\uD83D\uDC0B', ['whale2']],'1f40c': ['\uD83D\uDC0C', ['snail']],'1f40d': ['\uD83D\uDC0D', ['snake']],'1f40e': ['\uD83D\uDC0E', ['racehorse']],'1f40f': ['\uD83D\uDC0F', ['ram']],'1f410': ['\uD83D\uDC10', ['goat']],'1f411': ['\uD83D\uDC11', ['sheep']],'1f412': ['\uD83D\uDC12', ['monkey']],'1f413': ['\uD83D\uDC13', ['rooster']],'1f414': ['\uD83D\uDC14', ['chicken']],'1f415': ['\uD83D\uDC15', ['dog2']],'1f416': ['\uD83D\uDC16', ['pig2']],'1f417': ['\uD83D\uDC17', ['boar']],'1f418': ['\uD83D\uDC18', ['elephant']],'1f419': ['\uD83D\uDC19', ['octopus']],'1f41a': ['\uD83D\uDC1A', ['shell']],'1f41b': ['\uD83D\uDC1B', ['bug']],'1f41c': ['\uD83D\uDC1C', ['ant']],'1f41d': ['\uD83D\uDC1D', ['bee', 'honeybee']],'1f41e': ['\uD83D\uDC1E', ['beetle']],'1f41f': ['\uD83D\uDC1F', ['fish']],'1f420': ['\uD83D\uDC20', ['tropical_fish']],'1f421': ['\uD83D\uDC21', ['blowfish']],'1f422': ['\uD83D\uDC22', ['turtle']],'1f423': ['\uD83D\uDC23', ['hatching_chick']],'1f424': ['\uD83D\uDC24', ['baby_chick']],'1f425': ['\uD83D\uDC25', ['hatched_chick']],'1f426': ['\uD83D\uDC26', ['bird']],'1f427': ['\uD83D\uDC27', ['penguin']],'1f428': ['\uD83D\uDC28', ['koala']],'1f429': ['\uD83D\uDC29', ['poodle']],'1f42a': ['\uD83D\uDC2A', ['dromedary_camel']],'1f42b': ['\uD83D\uDC2B', ['camel']],'1f42c': ['\uD83D\uDC2C', ['dolphin', 'flipper']],'1f42d': ['\uD83D\uDC2D', ['mouse']],'1f42e': ['\uD83D\uDC2E', ['cow']],'1f42f': ['\uD83D\uDC2F', ['tiger']],'1f430': ['\uD83D\uDC30', ['rabbit']],'1f431': ['\uD83D\uDC31', ['cat']],'1f432': ['\uD83D\uDC32', ['dragon_face']],'1f433': ['\uD83D\uDC33', ['whale']],'1f434': ['\uD83D\uDC34', ['horse']],'1f435': ['\uD83D\uDC35', ['monkey_face']],'1f436': ['\uD83D\uDC36', ['dog']],'1f437': ['\uD83D\uDC37', ['pig']],'1f438': ['\uD83D\uDC38', ['frog']],'1f439': ['\uD83D\uDC39', ['hamster']],'1f43a': ['\uD83D\uDC3A', ['wolf']],'1f43b': ['\uD83D\uDC3B', ['bear']],'1f43c': ['\uD83D\uDC3C', ['panda_face']],'1f43d': ['\uD83D\uDC3D', ['pig_nose']],'1f43e': ['\uD83D\uDC3E', ['feet', 'paw_prints']],'1f440': ['\uD83D\uDC40', ['eyes']],'1f442': ['\uD83D\uDC42', ['ear']],'1f443': ['\uD83D\uDC43', ['nose']],'1f444': ['\uD83D\uDC44', ['lips']],'1f445': ['\uD83D\uDC45', ['tongue']],'1f446': ['\uD83D\uDC46', ['point_up_2']],'1f447': ['\uD83D\uDC47', ['point_down']],'1f448': ['\uD83D\uDC48', ['point_left']],'1f449': ['\uD83D\uDC49', ['point_right']],'1f44a': ['\uD83D\uDC4A', ['facepunch', 'punch']],'1f44b': ['\uD83D\uDC4B', ['wave']],'1f44c': ['\uD83D\uDC4C', ['ok_hand']],'1f44d': ['\uD83D\uDC4D', ['+1', 'thumbsup']],'1f44e': ['\uD83D\uDC4E', ['-1', 'thumbsdown']],'1f44f': ['\uD83D\uDC4F', ['clap']],'1f450': ['\uD83D\uDC50', ['open_hands']],'1f451': ['\uD83D\uDC51', ['crown']],'1f452': ['\uD83D\uDC52', ['womans_hat']],'1f453': ['\uD83D\uDC53', ['eyeglasses']],'1f454': ['\uD83D\uDC54', ['necktie']],'1f455': ['\uD83D\uDC55', ['shirt', 'tshirt']],'1f456': ['\uD83D\uDC56', ['jeans']],'1f457': ['\uD83D\uDC57', ['dress']],'1f458': ['\uD83D\uDC58', ['kimono']],'1f459': ['\uD83D\uDC59', ['bikini']],'1f45a': ['\uD83D\uDC5A', ['womans_clothes']],'1f45b': ['\uD83D\uDC5B', ['purse']],'1f45c': ['\uD83D\uDC5C', ['handbag']],'1f45d': ['\uD83D\uDC5D', ['pouch']],'1f45e': ['\uD83D\uDC5E', ['mans_shoe', 'shoe']],'1f45f': ['\uD83D\uDC5F', ['athletic_shoe']],'1f460': ['\uD83D\uDC60', ['high_heel']],'1f461': ['\uD83D\uDC61', ['sandal']],'1f462': ['\uD83D\uDC62', ['boot']],'1f463': ['\uD83D\uDC63', ['footprints']],'1f464': ['\uD83D\uDC64', ['bust_in_silhouette']],'1f465': ['\uD83D\uDC65', ['busts_in_silhouette']],'1f466': ['\uD83D\uDC66', ['boy']],'1f467': ['\uD83D\uDC67', ['girl']],'1f468': ['\uD83D\uDC68', ['man']],'1f469': ['\uD83D\uDC69', ['woman']],'1f46a': ['\uD83D\uDC6A', ['family']],'1f46b': ['\uD83D\uDC6B', ['couple']],'1f46c': ['\uD83D\uDC6C', ['two_men_holding_hands']],'1f46d': ['\uD83D\uDC6D', ['two_women_holding_hands']],'1f46e': ['\uD83D\uDC6E', ['cop']],'1f46f': ['\uD83D\uDC6F', ['dancers']],'1f470': ['\uD83D\uDC70', ['bride_with_veil']],'1f471': ['\uD83D\uDC71', ['person_with_blond_hair']],'1f472': ['\uD83D\uDC72', ['man_with_gua_pi_mao']],'1f473': ['\uD83D\uDC73', ['man_with_turban']],'1f474': ['\uD83D\uDC74', ['older_man']],'1f475': ['\uD83D\uDC75', ['older_woman']],'1f476': ['\uD83D\uDC76', ['baby']],'1f477': ['\uD83D\uDC77', ['construction_worker']],'1f478': ['\uD83D\uDC78', ['princess']],'1f479': ['\uD83D\uDC79', ['japanese_ogre']],'1f47a': ['\uD83D\uDC7A', ['japanese_goblin']],'1f47b': ['\uD83D\uDC7B', ['ghost']],'1f47c': ['\uD83D\uDC7C', ['angel']],'1f47d': ['\uD83D\uDC7D', ['alien']],'1f47e': ['\uD83D\uDC7E', ['space_invader']],'1f47f': ['\uD83D\uDC7F', ['imp']],'1f480': ['\uD83D\uDC80', ['skull']],'1f481': ['\uD83D\uDC81', ['information_desk_person']],'1f482': ['\uD83D\uDC82', ['guardsman']],'1f483': ['\uD83D\uDC83', ['dancer']],'1f484': ['\uD83D\uDC84', ['lipstick']],'1f485': ['\uD83D\uDC85', ['nail_care']],'1f486': ['\uD83D\uDC86', ['massage']],'1f487': ['\uD83D\uDC87', ['haircut']],'1f488': ['\uD83D\uDC88', ['barber']],'1f489': ['\uD83D\uDC89', ['syringe']],'1f48a': ['\uD83D\uDC8A', ['pill']],'1f48b': ['\uD83D\uDC8B', ['kiss']],'1f48c': ['\uD83D\uDC8C', ['love_letter']],'1f48d': ['\uD83D\uDC8D', ['ring']],'1f48e': ['\uD83D\uDC8E', ['gem']],'1f48f': ['\uD83D\uDC8F', ['couplekiss']],'1f490': ['\uD83D\uDC90', ['bouquet']],'1f491': ['\uD83D\uDC91', ['couple_with_heart']],'1f492': ['\uD83D\uDC92', ['wedding']],'1f493': ['\uD83D\uDC93', ['heartbeat']],'1f494': ['\uD83D\uDC94', ['broken_heart'], '<\/3'],'1f495': ['\uD83D\uDC95', ['two_hearts']],'1f496': ['\uD83D\uDC96', ['sparkling_heart']],'1f497': ['\uD83D\uDC97', ['heartpulse']],'1f498': ['\uD83D\uDC98', ['cupid']],'1f499': ['\uD83D\uDC99', ['blue_heart'], '<3'],'1f49a': ['\uD83D\uDC9A', ['green_heart'], '<3'],'1f49b': ['\uD83D\uDC9B', ['yellow_heart'], '<3'],'1f49c': ['\uD83D\uDC9C', ['purple_heart'], '<3'],'1f49d': ['\uD83D\uDC9D', ['gift_heart']],'1f49e': ['\uD83D\uDC9E', ['revolving_hearts']],'1f49f': ['\uD83D\uDC9F', ['heart_decoration']],'1f4a0': ['\uD83D\uDCA0', ['diamond_shape_with_a_dot_inside']],'1f4a1': ['\uD83D\uDCA1', ['bulb']],'1f4a2': ['\uD83D\uDCA2', ['anger']],'1f4a3': ['\uD83D\uDCA3', ['bomb']],'1f4a4': ['\uD83D\uDCA4', ['zzz']],'1f4a5': ['\uD83D\uDCA5', ['boom', 'collision']],'1f4a6': ['\uD83D\uDCA6', ['sweat_drops']],'1f4a7': ['\uD83D\uDCA7', ['droplet']],'1f4a8': ['\uD83D\uDCA8', ['dash']],'1f4a9': ['\uD83D\uDCA9', ['hankey', 'poop', 'shit']],'1f4aa': ['\uD83D\uDCAA', ['muscle']],'1f4ab': ['\uD83D\uDCAB', ['dizzy']],'1f4ac': ['\uD83D\uDCAC', ['speech_balloon']],'1f4ad': ['\uD83D\uDCAD', ['thought_balloon']],'1f4ae': ['\uD83D\uDCAE', ['white_flower']],'1f4af': ['\uD83D\uDCAF', ['100']],'1f4b0': ['\uD83D\uDCB0', ['moneybag']],'1f4b1': ['\uD83D\uDCB1', ['currency_exchange']],'1f4b2': ['\uD83D\uDCB2', ['heavy_dollar_sign']],'1f4b3': ['\uD83D\uDCB3', ['credit_card']],'1f4b4': ['\uD83D\uDCB4', ['yen']],'1f4b5': ['\uD83D\uDCB5', ['dollar']],'1f4b6': ['\uD83D\uDCB6', ['euro']],'1f4b7': ['\uD83D\uDCB7', ['pound']],'1f4b8': ['\uD83D\uDCB8', ['money_with_wings']],'1f4b9': ['\uD83D\uDCB9', ['chart']],'1f4ba': ['\uD83D\uDCBA', ['seat']],'1f4bb': ['\uD83D\uDCBB', ['computer']],'1f4bc': ['\uD83D\uDCBC', ['briefcase']],'1f4bd': ['\uD83D\uDCBD', ['minidisc']],'1f4be': ['\uD83D\uDCBE', ['floppy_disk']],'1f4bf': ['\uD83D\uDCBF', ['cd']],'1f4c0': ['\uD83D\uDCC0', ['dvd']],'1f4c1': ['\uD83D\uDCC1', ['file_folder']],'1f4c2': ['\uD83D\uDCC2', ['open_file_folder']],'1f4c3': ['\uD83D\uDCC3', ['page_with_curl']],'1f4c4': ['\uD83D\uDCC4', ['page_facing_up']],'1f4c5': ['\uD83D\uDCC5', ['date']],'1f4c6': ['\uD83D\uDCC6', ['calendar']],'1f4c7': ['\uD83D\uDCC7', ['card_index']],'1f4c8': ['\uD83D\uDCC8', ['chart_with_upwards_trend']],'1f4c9': ['\uD83D\uDCC9', ['chart_with_downwards_trend']],'1f4ca': ['\uD83D\uDCCA', ['bar_chart']],'1f4cb': ['\uD83D\uDCCB', ['clipboard']],'1f4cc': ['\uD83D\uDCCC', ['pushpin']],'1f4cd': ['\uD83D\uDCCD', ['round_pushpin']],'1f4ce': ['\uD83D\uDCCE', ['paperclip']],'1f4cf': ['\uD83D\uDCCF', ['straight_ruler']],'1f4d0': ['\uD83D\uDCD0', ['triangular_ruler']],'1f4d1': ['\uD83D\uDCD1', ['bookmark_tabs']],'1f4d2': ['\uD83D\uDCD2', ['ledger']],'1f4d3': ['\uD83D\uDCD3', ['notebook']],'1f4d4': ['\uD83D\uDCD4', ['notebook_with_decorative_cover']],'1f4d5': ['\uD83D\uDCD5', ['closed_book']],'1f4d6': ['\uD83D\uDCD6', ['book', 'open_book']],'1f4d7': ['\uD83D\uDCD7', ['green_book']],'1f4d8': ['\uD83D\uDCD8', ['blue_book']],'1f4d9': ['\uD83D\uDCD9', ['orange_book']],'1f4da': ['\uD83D\uDCDA', ['books']],'1f4db': ['\uD83D\uDCDB', ['name_badge']],'1f4dc': ['\uD83D\uDCDC', ['scroll']],'1f4dd': ['\uD83D\uDCDD', ['memo', 'pencil']],'1f4de': ['\uD83D\uDCDE', ['telephone_receiver']],'1f4df': ['\uD83D\uDCDF', ['pager']],'1f4e0': ['\uD83D\uDCE0', ['fax']],'1f4e1': ['\uD83D\uDCE1', ['satellite']],'1f4e2': ['\uD83D\uDCE2', ['loudspeaker']],'1f4e3': ['\uD83D\uDCE3', ['mega']],'1f4e4': ['\uD83D\uDCE4', ['outbox_tray']],'1f4e5': ['\uD83D\uDCE5', ['inbox_tray']],'1f4e6': ['\uD83D\uDCE6', ['package']],'1f4e7': ['\uD83D\uDCE7', ['e-mail']],'1f4e8': ['\uD83D\uDCE8', ['incoming_envelope']],'1f4e9': ['\uD83D\uDCE9', ['envelope_with_arrow']],'1f4ea': ['\uD83D\uDCEA', ['mailbox_closed']],'1f4eb': ['\uD83D\uDCEB', ['mailbox']],'1f4ec': ['\uD83D\uDCEC', ['mailbox_with_mail']],'1f4ed': ['\uD83D\uDCED', ['mailbox_with_no_mail']],'1f4ee': ['\uD83D\uDCEE', ['postbox']],'1f4ef': ['\uD83D\uDCEF', ['postal_horn']],'1f4f0': ['\uD83D\uDCF0', ['newspaper']],'1f4f1': ['\uD83D\uDCF1', ['iphone']],'1f4f2': ['\uD83D\uDCF2', ['calling']],'1f4f3': ['\uD83D\uDCF3', ['vibration_mode']],'1f4f4': ['\uD83D\uDCF4', ['mobile_phone_off']],'1f4f5': ['\uD83D\uDCF5', ['no_mobile_phones']],'1f4f6': ['\uD83D\uDCF6', ['signal_strength']],'1f4f7': ['\uD83D\uDCF7', ['camera']],'1f4f9': ['\uD83D\uDCF9', ['video_camera']],'1f4fa': ['\uD83D\uDCFA', ['tv']],'1f4fb': ['\uD83D\uDCFB', ['radio']],'1f4fc': ['\uD83D\uDCFC', ['vhs']],'1f500': ['\uD83D\uDD00', ['twisted_rightwards_arrows']],'1f501': ['\uD83D\uDD01', ['repeat']],'1f502': ['\uD83D\uDD02', ['repeat_one']],'1f503': ['\uD83D\uDD03', ['arrows_clockwise']],'1f504': ['\uD83D\uDD04', ['arrows_counterclockwise']],'1f505': ['\uD83D\uDD05', ['low_brightness']],'1f506': ['\uD83D\uDD06', ['high_brightness']],'1f507': ['\uD83D\uDD07', ['mute']],'1f508': ['\uD83D\uDD09', ['speaker']],'1f509': ['\uD83D\uDD09', ['sound']],'1f50a': ['\uD83D\uDD0A', ['loud_sound']],'1f50b': ['\uD83D\uDD0B', ['battery']],'1f50c': ['\uD83D\uDD0C', ['electric_plug']],'1f50d': ['\uD83D\uDD0D', ['mag']],'1f50e': ['\uD83D\uDD0E', ['mag_right']],'1f50f': ['\uD83D\uDD0F', ['lock_with_ink_pen']],'1f510': ['\uD83D\uDD10', ['closed_lock_with_key']],'1f511': ['\uD83D\uDD11', ['key']],'1f512': ['\uD83D\uDD12', ['lock']],'1f513': ['\uD83D\uDD13', ['unlock']],'1f514': ['\uD83D\uDD14', ['bell']],'1f515': ['\uD83D\uDD15', ['no_bell']],'1f516': ['\uD83D\uDD16', ['bookmark']],'1f517': ['\uD83D\uDD17', ['link']],'1f518': ['\uD83D\uDD18', ['radio_button']],'1f519': ['\uD83D\uDD19', ['back']],'1f51a': ['\uD83D\uDD1A', ['end']],'1f51b': ['\uD83D\uDD1B', ['on']],'1f51c': ['\uD83D\uDD1C', ['soon']],'1f51d': ['\uD83D\uDD1D', ['top']],'1f51e': ['\uD83D\uDD1E', ['underage']],'1f51f': ['\uD83D\uDD1F', ['keycap_ten']],'1f520': ['\uD83D\uDD20', ['capital_abcd']],'1f521': ['\uD83D\uDD21', ['abcd']],'1f522': ['\uD83D\uDD22', ['1234']],'1f523': ['\uD83D\uDD23', ['symbols']],'1f524': ['\uD83D\uDD24', ['abc']],'1f525': ['\uD83D\uDD25', ['fire']],'1f526': ['\uD83D\uDD26', ['flashlight']],'1f527': ['\uD83D\uDD27', ['wrench']],'1f528': ['\uD83D\uDD28', ['hammer']],'1f529': ['\uD83D\uDD29', ['nut_and_bolt']],'1f52a': ['\uD83D\uDD2A', ['hocho']],'1f52b': ['\uD83D\uDD2B', ['gun']],'1f52c': ['\uD83D\uDD2C', ['microscope']],'1f52d': ['\uD83D\uDD2D', ['telescope']],'1f52e': ['\uD83D\uDD2E', ['crystal_ball']],'1f52f': ['\uD83D\uDD2F', ['six_pointed_star']],'1f530': ['\uD83D\uDD30', ['beginner']],'1f531': ['\uD83D\uDD31', ['trident']],'1f532': ['\uD83D\uDD32', ['black_square_button']],'1f533': ['\uD83D\uDD33', ['white_square_button']],'1f534': ['\uD83D\uDD34', ['red_circle']],'1f535': ['\uD83D\uDD35', ['large_blue_circle']],'1f536': ['\uD83D\uDD36', ['large_orange_diamond']],'1f537': ['\uD83D\uDD37', ['large_blue_diamond']],'1f538': ['\uD83D\uDD38', ['small_orange_diamond']],'1f539': ['\uD83D\uDD39', ['small_blue_diamond']],'1f53a': ['\uD83D\uDD3A', ['small_red_triangle']],'1f53b': ['\uD83D\uDD3B', ['small_red_triangle_down']],'1f53c': ['\uD83D\uDD3C', ['arrow_up_small']],'1f53d': ['\uD83D\uDD3D', ['arrow_down_small']],'1f550': ['\uD83D\uDD50', ['clock1']],'1f551': ['\uD83D\uDD51', ['clock2']],'1f552': ['\uD83D\uDD52', ['clock3']],'1f553': ['\uD83D\uDD53', ['clock4']],'1f554': ['\uD83D\uDD54', ['clock5']],'1f555': ['\uD83D\uDD55', ['clock6']],'1f556': ['\uD83D\uDD56', ['clock7']],'1f557': ['\uD83D\uDD57', ['clock8']],'1f558': ['\uD83D\uDD58', ['clock9']],'1f559': ['\uD83D\uDD59', ['clock10']],'1f55a': ['\uD83D\uDD5A', ['clock11']],'1f55b': ['\uD83D\uDD5B', ['clock12']],'1f55c': ['\uD83D\uDD5C', ['clock130']],'1f55d': ['\uD83D\uDD5D', ['clock230']],'1f55e': ['\uD83D\uDD5E', ['clock330']],'1f55f': ['\uD83D\uDD5F', ['clock430']],'1f560': ['\uD83D\uDD60', ['clock530']],'1f561': ['\uD83D\uDD61', ['clock630']],'1f562': ['\uD83D\uDD62', ['clock730']],'1f563': ['\uD83D\uDD63', ['clock830']],'1f564': ['\uD83D\uDD64', ['clock930']],'1f565': ['\uD83D\uDD65', ['clock1030']],'1f566': ['\uD83D\uDD66', ['clock1130']],'1f567': ['\uD83D\uDD67', ['clock1230']],'1f5fb': ['\uD83D\uDDFB', ['mount_fuji']],'1f5fc': ['\uD83D\uDDFC', ['tokyo_tower']],'1f5fd': ['\uD83D\uDDFD', ['statue_of_liberty']],'1f5fe': ['\uD83D\uDDFE', ['japan']],'1f5ff': ['\uD83D\uDDFF', ['moyai']],'1f600': ['\uD83D\uDE00', ['grinning']],'1f601': ['\uD83D\uDE01', ['grin']],'1f602': ['\uD83D\uDE02', ['joy']],'1f603': ['\uD83D\uDE03', ['smiley'], ':)'],'1f604': ['\uD83D\uDE04', ['smile'], ':)'],'1f605': ['\uD83D\uDE05', ['sweat_smile']],'1f606': ['\uD83D\uDE06', ['laughing', 'satisfied']],'1f607': ['\uD83D\uDE07', ['innocent']],'1f608': ['\uD83D\uDE08', ['smiling_imp']],'1f609': ['\uD83D\uDE09', ['wink'], ';)'],'1f60a': ['\uD83D\uDE0A', ['blush']],'1f60b': ['\uD83D\uDE0B', ['yum']],'1f60c': ['\uD83D\uDE0C', ['relieved']],'1f60d': ['\uD83D\uDE0D', ['heart_eyes']],'1f60e': ['\uD83D\uDE0E', ['sunglasses']],'1f60f': ['\uD83D\uDE0F', ['smirk']],'1f610': ['\uD83D\uDE10', ['neutral_face']],'1f611': ['\uD83D\uDE11', ['expressionless']],'1f612': ['\uD83D\uDE12', ['unamused']],'1f613': ['\uD83D\uDE13', ['sweat']],'1f614': ['\uD83D\uDE14', ['pensive']],'1f615': ['\uD83D\uDE15', ['confused']],'1f616': ['\uD83D\uDE16', ['confounded']],'1f617': ['\uD83D\uDE17', ['kissing']],'1f618': ['\uD83D\uDE18', ['kissing_heart']],'1f619': ['\uD83D\uDE19', ['kissing_smiling_eyes']],'1f61a': ['\uD83D\uDE1A', ['kissing_closed_eyes']],'1f61b': ['\uD83D\uDE1B', ['stuck_out_tongue']],'1f61c': ['\uD83D\uDE1C', ['stuck_out_tongue_winking_eye'], ';p'],'1f61d': ['\uD83D\uDE1D', ['stuck_out_tongue_closed_eyes']],'1f61e': ['\uD83D\uDE1E', ['disappointed'], ':('],'1f61f': ['\uD83D\uDE1F', ['worried']],'1f620': ['\uD83D\uDE20', ['angry']],'1f621': ['\uD83D\uDE21', ['rage']],'1f622': ['\uD83D\uDE22', ['cry'], ":'("],'1f623': ['\uD83D\uDE23', ['persevere']],'1f624': ['\uD83D\uDE24', ['triumph']],'1f625': ['\uD83D\uDE25', ['disappointed_relieved']],'1f626': ['\uD83D\uDE26', ['frowning']],'1f627': ['\uD83D\uDE27', ['anguished']],'1f628': ['\uD83D\uDE28', ['fearful']],'1f629': ['\uD83D\uDE29', ['weary']],'1f62a': ['\uD83D\uDE2A', ['sleepy']],'1f62b': ['\uD83D\uDE2B', ['tired_face']],'1f62c': ['\uD83D\uDE2C', ['grimacing']],'1f62d': ['\uD83D\uDE2D', ['sob'], ":'("],'1f62e': ['\uD83D\uDE2E', ['open_mouth']],'1f62f': ['\uD83D\uDE2F', ['hushed']],'1f630': ['\uD83D\uDE30', ['cold_sweat']],'1f631': ['\uD83D\uDE31', ['scream']],'1f632': ['\uD83D\uDE32', ['astonished']],'1f633': ['\uD83D\uDE33', ['flushed']],'1f634': ['\uD83D\uDE34', ['sleeping']],'1f635': ['\uD83D\uDE35', ['dizzy_face']],'1f636': ['\uD83D\uDE36', ['no_mouth']],'1f637': ['\uD83D\uDE37', ['mask']],'1f638': ['\uD83D\uDE38', ['smile_cat']],'1f639': ['\uD83D\uDE39', ['joy_cat']],'1f63a': ['\uD83D\uDE3A', ['smiley_cat']],'1f63b': ['\uD83D\uDE3B', ['heart_eyes_cat']],'1f63c': ['\uD83D\uDE3C', ['smirk_cat']],'1f63d': ['\uD83D\uDE3D', ['kissing_cat']],'1f63e': ['\uD83D\uDE3E', ['pouting_cat']],'1f63f': ['\uD83D\uDE3F', ['crying_cat_face']],'1f640': ['\uD83D\uDE40', ['scream_cat']],'1f645': ['\uD83D\uDE45', ['no_good']],'1f646': ['\uD83D\uDE46', ['ok_woman']],'1f647': ['\uD83D\uDE47', ['bow']],'1f648': ['\uD83D\uDE48', ['see_no_evil']],'1f649': ['\uD83D\uDE49', ['hear_no_evil']],'1f64a': ['\uD83D\uDE4A', ['speak_no_evil']],'1f64b': ['\uD83D\uDE4B', ['raising_hand']],'1f64c': ['\uD83D\uDE4C', ['raised_hands']],'1f64d': ['\uD83D\uDE4D', ['person_frowning']],'1f64e': ['\uD83D\uDE4E', ['person_with_pouting_face']],'1f64f': ['\uD83D\uDE4F', ['pray']],'1f680': ['\uD83D\uDE80', ['rocket']],'1f681': ['\uD83D\uDE81', ['helicopter']],'1f682': ['\uD83D\uDE82', ['steam_locomotive']],'1f683': ['\uD83D\uDE83', ['railway_car']],'1f68b': ['\uD83D\uDE8B', ['train']],'1f684': ['\uD83D\uDE84', ['bullettrain_side']],'1f685': ['\uD83D\uDE85', ['bullettrain_front']],'1f686': ['\uD83D\uDE86', ['train2']],'1f687': ['\uD83D\uDE87', ['metro']],'1f688': ['\uD83D\uDE88', ['light_rail']],'1f689': ['\uD83D\uDE89', ['station']],'1f68a': ['\uD83D\uDE8A', ['tram']],'1f68c': ['\uD83D\uDE8C', ['bus']],'1f68d': ['\uD83D\uDE8D', ['oncoming_bus']],'1f68e': ['\uD83D\uDE8E', ['trolleybus']],'1f68f': ['\uD83D\uDE8F', ['busstop']],'1f690': ['\uD83D\uDE90', ['minibus']],'1f691': ['\uD83D\uDE91', ['ambulance']],'1f692': ['\uD83D\uDE92', ['fire_engine']],'1f693': ['\uD83D\uDE93', ['police_car']],'1f694': ['\uD83D\uDE94', ['oncoming_police_car']],'1f695': ['\uD83D\uDE95', ['taxi']],'1f696': ['\uD83D\uDE96', ['oncoming_taxi']],'1f697': ['\uD83D\uDE97', ['car', 'red_car']],'1f698': ['\uD83D\uDE98', ['oncoming_automobile']],'1f699': ['\uD83D\uDE99', ['blue_car']],'1f69a': ['\uD83D\uDE9A', ['truck']],'1f69b': ['\uD83D\uDE9B', ['articulated_lorry']],'1f69c': ['\uD83D\uDE9C', ['tractor']],'1f69d': ['\uD83D\uDE9D', ['monorail']],'1f69e': ['\uD83D\uDE9E', ['mountain_railway']],'1f69f': ['\uD83D\uDE9F', ['suspension_railway']],'1f6a0': ['\uD83D\uDEA0', ['mountain_cableway']],'1f6a1': ['\uD83D\uDEA1', ['aerial_tramway']],'1f6a2': ['\uD83D\uDEA2', ['ship']],'1f6a3': ['\uD83D\uDEA3', ['rowboat']],'1f6a4': ['\uD83D\uDEA4', ['speedboat']],'1f6a5': ['\uD83D\uDEA5', ['traffic_light']],'1f6a6': ['\uD83D\uDEA6', ['vertical_traffic_light']],'1f6a7': ['\uD83D\uDEA7', ['construction']],'1f6a8': ['\uD83D\uDEA8', ['rotating_light']],'1f6a9': ['\uD83D\uDEA9', ['triangular_flag_on_post']],'1f6aa': ['\uD83D\uDEAA', ['door']],'1f6ab': ['\uD83D\uDEAB', ['no_entry_sign']],'1f6ac': ['\uD83D\uDEAC', ['smoking']],'1f6ad': ['\uD83D\uDEAD', ['no_smoking']],'1f6ae': ['\uD83D\uDEAE', ['put_litter_in_its_place']],'1f6af': ['\uD83D\uDEAF', ['do_not_litter']],'1f6b0': ['\uD83D\uDEB0', ['potable_water']],'1f6b1': ['\uD83D\uDEB1', ['non-potable_water']],'1f6b2': ['\uD83D\uDEB2', ['bike']],'1f6b3': ['\uD83D\uDEB3', ['no_bicycles']],'1f6b4': ['\uD83D\uDEB4', ['bicyclist']],'1f6b5': ['\uD83D\uDEB5', ['mountain_bicyclist']],'1f6b6': ['\uD83D\uDEB6', ['walking']],'1f6b7': ['\uD83D\uDEB7', ['no_pedestrians']],'1f6b8': ['\uD83D\uDEB8', ['children_crossing']],'1f6b9': ['\uD83D\uDEB9', ['mens']],'1f6ba': ['\uD83D\uDEBA', ['womens']],'1f6bb': ['\uD83D\uDEBB', ['restroom']],'1f6bc': ['\uD83D\uDEBC', ['baby_symbol']],'1f6bd': ['\uD83D\uDEBD', ['toilet']],'1f6be': ['\uD83D\uDEBE', ['wc']],'1f6bf': ['\uD83D\uDEBF', ['shower']],'1f6c0': ['\uD83D\uDEC0', ['bath']],'1f6c1': ['\uD83D\uDEC1', ['bathtub']],'1f6c2': ['\uD83D\uDEC2', ['passport_control']],'1f6c3': ['\uD83D\uDEC3', ['customs']],'1f6c4': ['\uD83D\uDEC4', ['baggage_claim']],'1f6c5': ['\uD83D\uDEC5', ['left_luggage']],'0023': ['\u0023\u20E3', ['hash']],'0030': ['\u0030\u20E3', ['zero']],'0031': ['\u0031\u20E3', ['one']],'0032': ['\u0032\u20E3', ['two']],'0033': ['\u0033\u20E3', ['three']],'0034': ['\u0034\u20E3', ['four']],'0035': ['\u0035\u20E3', ['five']],'0036': ['\u0036\u20E3', ['six']],'0037': ['\u0037\u20E3', ['seven']],'0038': ['\u0038\u20E3', ['eight']],'0039': ['\u0039\u20E3', ['nine']],'1f1e8-1f1f3': ['\uD83C\uDDE8\uD83C\uDDF3', ['cn']],'1f1e9-1f1ea': ['\uD83C\uDDE9\uD83C\uDDEA', ['de']],'1f1ea-1f1f8': ['\uD83C\uDDEA\uD83C\uDDF8', ['es']],'1f1eb-1f1f7': ['\uD83C\uDDEB\uD83C\uDDF7', ['fr']],'1f1ec-1f1e7': ['\uD83C\uDDEC\uD83C\uDDE7', ['gb', 'uk']],'1f1ee-1f1f9': ['\uD83C\uDDEE\uD83C\uDDF9', ['it']],'1f1ef-1f1f5': ['\uD83C\uDDEF\uD83C\uDDF5', ['jp']],'1f1f0-1f1f7': ['\uD83C\uDDF0\uD83C\uDDF7', ['kr']],'1f1f7-1f1fa': ['\uD83C\uDDF7\uD83C\uDDFA', ['ru']],'1f1fa-1f1f8': ['\uD83C\uDDFA\uD83C\uDDF8', ['us']]} diff --git a/app/js/lib/ng_utils.js b/app/js/lib/ng_utils.js index c0b42e15..08d578f7 100755 --- a/app/js/lib/ng_utils.js +++ b/app/js/lib/ng_utils.js @@ -1918,14 +1918,15 @@ angular.module('izhukov.utils', []) } function wrapUrl (url, unsafe) { - if (!url.match(/^https?:\/\//i)) { + if (!url.match(/^(https?|tg):\/\//i)) { url = 'http://' + url } var tgMeMatch + var telescoPeMatch if (unsafe == 2) { url = 'tg://unsafe_url?url=' + encodeURIComponent(url) } - else if ( (tgMeMatch = url.match(/^https?:\/\/t(?:elegram)?\.me\/(.+)/))) { + else if ((tgMeMatch = url.match(/^https?:\/\/t(?:elegram)?\.me\/(.+)/))) { var path = tgMeMatch[1].split('/') switch (path[0]) { case 'joinchat': @@ -1944,6 +1945,9 @@ angular.module('izhukov.utils', []) } } } + else if ((telescoPeMatch = url.match(/^https?:\/\/telesco\.pe\/([^/?]+)\/(\d+)/))) { + url = 'tg://resolve?domain=' + telescoPeMatch[1] + '&post=' + telescoPeMatch[2] + } else if (unsafe) { url = 'tg://unsafe_url?url=' + encodeURIComponent(url) } diff --git a/app/js/lib/schema.tl.txt b/app/js/lib/schema.tl.txt index b7a83d0d..1953adbc 100644 --- a/app/js/lib/schema.tl.txt +++ b/app/js/lib/schema.tl.txt @@ -37,6 +37,7 @@ inputMediaGifExternal#4843b0fd url:string q:string = InputMedia; inputMediaPhotoExternal#b55f4f18 url:string caption:string = InputMedia; inputMediaDocumentExternal#e5e9607c url:string caption:string = InputMedia; inputMediaGame#d33f43f3 id:InputGame = InputMedia; +inputMediaInvoice#92153685 flags:# title:string description:string photo:flags.0?InputWebDocument invoice:Invoice payload:bytes provider:string start_param:string = InputMedia; inputChatPhotoEmpty#1ca48f57 = InputChatPhoto; inputChatUploadedPhoto#927c55b4 file:InputFile = InputChatPhoto; @@ -59,13 +60,13 @@ peerChat#bad0e5bb chat_id:int = Peer; peerChannel#bddde532 channel_id:int = Peer; storage.fileUnknown#aa963b05 = storage.FileType; +storage.filePartial#40bc6f52 = storage.FileType; storage.fileJpeg#7efe0e = storage.FileType; storage.fileGif#cae1aadf = storage.FileType; storage.filePng#a4f63c0 = storage.FileType; storage.filePdf#ae1e508d = storage.FileType; storage.fileMp3#528a0677 = storage.FileType; storage.fileMov#4b09ebbc = storage.FileType; -storage.filePartial#40bc6f52 = storage.FileType; storage.fileMp4#b3cea0e4 = storage.FileType; storage.fileWebp#1081464c = storage.FileType; @@ -73,7 +74,7 @@ fileLocationUnavailable#7c596b46 volume_id:long local_id:int secret:long = FileL fileLocation#53d69076 dc_id:int volume_id:long local_id:int secret:long = FileLocation; userEmpty#200250ba id:int = User; -user#d10d979a flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true id:int access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?string bot_inline_placeholder:flags.19?string = User; +user#2e13f4c3 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true id:int access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?string bot_inline_placeholder:flags.19?string lang_code:flags.22?string = User; userProfilePhotoEmpty#4f11bae1 = UserProfilePhoto; userProfilePhoto#d559d8c8 photo_id:long photo_small:FileLocation photo_big:FileLocation = UserProfilePhoto; @@ -117,6 +118,7 @@ messageMediaDocument#f3e02ea8 document:Document caption:string = MessageMedia; messageMediaWebPage#a32dd600 webpage:WebPage = MessageMedia; messageMediaVenue#7912b71f geo:GeoPoint title:string address:string provider:string venue_id:string = MessageMedia; messageMediaGame#fdb19008 game:Game = MessageMedia; +messageMediaInvoice#84551347 flags:# shipping_address_requested:flags.1?true test:flags.3?true title:string description:string photo:flags.0?WebDocument receipt_msg_id:flags.2?int currency:string total_amount:long start_param:string = MessageMedia; messageActionEmpty#b6aef7b0 = MessageAction; messageActionChatCreate#a6638b9a title:string users:Vector = MessageAction; @@ -132,6 +134,8 @@ messageActionChannelMigrateFrom#b055eaee title:string chat_id:int = MessageActio messageActionPinMessage#94bd38ed = MessageAction; messageActionHistoryClear#9fbab604 = MessageAction; messageActionGameScore#92a72876 game_id:long score:int = MessageAction; +messageActionPaymentSentMe#8f31b327 flags:# currency:string total_amount:long payload:bytes info:flags.0?PaymentRequestedInfo shipping_option_id:flags.1?string charge:PaymentCharge = MessageAction; +messageActionPaymentSent#40699cd0 currency:string total_amount:long = MessageAction; messageActionPhoneCall#80e11a7f flags:# call_id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = MessageAction; dialog#66ffba14 flags:# pinned:flags.2?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage = Dialog; @@ -180,7 +184,7 @@ inputReportReasonViolence#1e22c78d = ReportReason; inputReportReasonPornography#2e59d922 = ReportReason; inputReportReasonOther#e1746d0a text:string = ReportReason; -userFull#f220f3f flags:# blocked:flags.0?true phone_calls_available:flags.4?true user:User about:flags.1?string link:contacts.Link profile_photo:flags.2?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo common_chats_count:int = UserFull; +userFull#f220f3f flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true user:User about:flags.1?string link:contacts.Link profile_photo:flags.2?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo common_chats_count:int = UserFull; contact#f911c994 user_id:int mutual:Bool = Contact; @@ -226,6 +230,8 @@ inputMessagesFilterVoice#50f5c392 = MessagesFilter; inputMessagesFilterMusic#3751b49e = MessagesFilter; inputMessagesFilterChatPhotos#3a20ecb8 = MessagesFilter; inputMessagesFilterPhoneCalls#80c99768 flags:# missed:flags.0?true = MessagesFilter; +inputMessagesFilterRoundVoice#7a7c17a4 = MessagesFilter; +inputMessagesFilterRoundVideo#b549da53 = MessagesFilter; updateNewMessage#1f2b0afd message:Message pts:int pts_count:int = Update; updateMessageID#4e90bfd6 id:int random_id:long = Update; @@ -280,9 +286,13 @@ updateRecentStickers#9a422c20 = Update; updateConfig#a229dd06 = Update; updatePtsChanged#3354678f = Update; updateChannelWebPage#40771900 channel_id:int webpage:WebPage pts:int pts_count:int = Update; -updatePhoneCall#ab0f6b1e phone_call:PhoneCall = Update; updateDialogPinned#d711a2cc flags:# pinned:flags.0?true peer:Peer = Update; updatePinnedDialogs#d8caf68d flags:# order:flags.0?Vector = Update; +updateBotWebhookJSON#8317c0c3 data:DataJSON = Update; +updateBotWebhookJSONQuery#9b9240a6 query_id:long data:DataJSON timeout:int = Update; +updateBotShippingQuery#e0cdc940 query_id:long user_id:int payload:bytes shipping_address:PostAddress = Update; +updateBotPrecheckoutQuery#5d2f3aa9 flags:# query_id:long user_id:int payload:bytes info:flags.0?PaymentRequestedInfo shipping_option_id:flags.1?string currency:string total_amount:long = Update; +updatePhoneCall#ab0f6b1e phone_call:PhoneCall = Update; updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; @@ -305,10 +315,11 @@ photos.photosSlice#15051f54 count:int photos:Vector users:Vector = photos.photo#20212ca8 photo:Photo users:Vector = photos.Photo; upload.file#96a18d5 type:storage.FileType mtime:int bytes:bytes = upload.File; +upload.fileCdnRedirect#1508485a dc_id:int file_token:bytes encryption_key:bytes encryption_iv:bytes = upload.File; -dcOption#5d8c6cc flags:# ipv6:flags.0?true media_only:flags.1?true tcpo_only:flags.2?true id:int ip_address:string port:int = DcOption; +dcOption#5d8c6cc flags:# ipv6:flags.0?true media_only:flags.1?true tcpo_only:flags.2?true cdn:flags.3?true id:int ip_address:string port:int = DcOption; -config#3af6fb5f flags:# phonecalls_enabled:flags.1?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int chat_big_size:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int rating_e_decay:int stickers_recent_limit:int tmp_sessions:flags.0?int pinned_dialogs_count_max:int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int disabled_features:Vector = Config; +config#cb601684 flags:# phonecalls_enabled:flags.1?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int chat_big_size:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int rating_e_decay:int stickers_recent_limit:int tmp_sessions:flags.0?int pinned_dialogs_count_max:int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int me_url_prefix:string disabled_features:Vector = Config; nearestDc#8e1a1775 country:string this_dc:int nearest_dc:int = NearestDc; @@ -366,6 +377,8 @@ sendMessageUploadDocumentAction#aa0cd9e4 progress:int = SendMessageAction; sendMessageGeoLocationAction#176f8ba1 = SendMessageAction; sendMessageChooseContactAction#628cbc6f = SendMessageAction; sendMessageGamePlayAction#dd6a8f48 = SendMessageAction; +sendMessageRecordRoundAction#88f27fbc = SendMessageAction; +sendMessageUploadRoundAction#243e1c66 progress:int = SendMessageAction; contacts.found#1aa1f784 results:Vector chats:Vector users:Vector = contacts.Found; @@ -398,7 +411,7 @@ accountDaysTTL#b8d0afdf days:int = AccountDaysTTL; documentAttributeImageSize#6c37c15c w:int h:int = DocumentAttribute; documentAttributeAnimated#11b58939 = DocumentAttribute; documentAttributeSticker#6319d612 flags:# mask:flags.1?true alt:string stickerset:InputStickerSet mask_coords:flags.0?MaskCoords = DocumentAttribute; -documentAttributeVideo#5910cccb duration:int w:int h:int = DocumentAttribute; +documentAttributeVideo#ef02ce6 flags:# round_message:flags.0?true duration:int w:int h:int = DocumentAttribute; documentAttributeAudio#9852f9c6 flags:# voice:flags.10?true duration:int title:flags.0?string performer:flags.1?string waveform:flags.2?bytes = DocumentAttribute; documentAttributeFilename#15590068 file_name:string = DocumentAttribute; documentAttributeHasStickers#9801d2f7 = DocumentAttribute; @@ -465,6 +478,7 @@ keyboardButtonRequestPhone#b16a6c29 text:string = KeyboardButton; keyboardButtonRequestGeoLocation#fc796b3f text:string = KeyboardButton; keyboardButtonSwitchInline#568a748 flags:# same_peer:flags.0?true text:string query:string = KeyboardButton; keyboardButtonGame#50f41ccf text:string = KeyboardButton; +keyboardButtonBuy#afd93fbb text:string = KeyboardButton; keyboardButtonRow#77608b83 buttons:Vector = KeyboardButtonRow; @@ -473,9 +487,6 @@ replyKeyboardForceReply#f4108aa0 flags:# single_use:flags.1?true selective:flags replyKeyboardMarkup#3502758c flags:# resize:flags.0?true single_use:flags.1?true selective:flags.2?true rows:Vector = ReplyMarkup; replyInlineMarkup#48a30254 rows:Vector = ReplyMarkup; -help.appChangelogEmpty#af7e0394 = help.AppChangelog; -help.appChangelog#2a137e7c message:string media:MessageMedia entities:Vector = help.AppChangelog; - messageEntityUnknown#bb92ba95 offset:int length:int = MessageEntity; messageEntityMention#fa04579d offset:int length:int = MessageEntity; messageEntityHashtag#6f635b0d offset:int length:int = MessageEntity; @@ -656,17 +667,66 @@ pageBlockEmbed#cde200d1 flags:# full_width:flags.0?true allow_scrolling:flags.3? pageBlockEmbedPost#292c7be9 url:string webpage_id:long author_photo_id:long author:string date:int blocks:Vector caption:RichText = PageBlock; pageBlockCollage#8b31c4f items:Vector caption:RichText = PageBlock; pageBlockSlideshow#130c8963 items:Vector caption:RichText = PageBlock; +pageBlockChannel#ef1751b5 channel:Chat = PageBlock; pagePart#8dee6c44 blocks:Vector photos:Vector videos:Vector = Page; pageFull#d7a19d69 blocks:Vector photos:Vector videos:Vector = Page; +phoneCallDiscardReasonMissed#85e42301 = PhoneCallDiscardReason; +phoneCallDiscardReasonDisconnect#e095c1a0 = PhoneCallDiscardReason; +phoneCallDiscardReasonHangup#57adc690 = PhoneCallDiscardReason; +phoneCallDiscardReasonBusy#faf7e8c9 = PhoneCallDiscardReason; + +dataJSON#7d748d04 data:string = DataJSON; + +labeledPrice#cb296bf8 label:string amount:long = LabeledPrice; + +invoice#c30aa358 flags:# test:flags.0?true name_requested:flags.1?true phone_requested:flags.2?true email_requested:flags.3?true shipping_address_requested:flags.4?true flexible:flags.5?true currency:string prices:Vector = Invoice; + +paymentCharge#ea02c27e id:string provider_charge_id:string = PaymentCharge; + +postAddress#1e8caaeb street_line1:string street_line2:string city:string state:string country_iso2:string post_code:string = PostAddress; + +paymentRequestedInfo#909c3f94 flags:# name:flags.0?string phone:flags.1?string email:flags.2?string shipping_address:flags.3?PostAddress = PaymentRequestedInfo; + +paymentSavedCredentialsCard#cdc27a1f id:string title:string = PaymentSavedCredentials; + +webDocument#c61acbd8 url:string access_hash:long size:int mime_type:string attributes:Vector dc_id:int = WebDocument; + +inputWebDocument#9bed434d url:string size:int mime_type:string attributes:Vector = InputWebDocument; + +inputWebFileLocation#c239d686 url:string access_hash:long = InputWebFileLocation; + +upload.webFile#21e753bc size:int mime_type:string file_type:storage.FileType mtime:int bytes:bytes = upload.WebFile; + +payments.paymentForm#3f56aea3 flags:# can_save_credentials:flags.2?true password_missing:flags.3?true bot_id:int invoice:Invoice provider_id:int url:string native_provider:flags.4?string native_params:flags.4?DataJSON saved_info:flags.0?PaymentRequestedInfo saved_credentials:flags.1?PaymentSavedCredentials users:Vector = payments.PaymentForm; + +payments.validatedRequestedInfo#d1451883 flags:# id:flags.0?string shipping_options:flags.1?Vector = payments.ValidatedRequestedInfo; + +payments.paymentResult#4e5f810d updates:Updates = payments.PaymentResult; +payments.paymentVerficationNeeded#6b56b921 url:string = payments.PaymentResult; + +payments.paymentReceipt#500911e1 flags:# date:int bot_id:int invoice:Invoice provider_id:int info:flags.0?PaymentRequestedInfo shipping:flags.1?ShippingOption currency:string total_amount:long credentials_title:string users:Vector = payments.PaymentReceipt; + +payments.savedInfo#fb8fe43c flags:# has_saved_credentials:flags.1?true saved_info:flags.0?PaymentRequestedInfo = payments.SavedInfo; + +inputPaymentCredentialsSaved#c10eb2cf id:string tmp_password:bytes = InputPaymentCredentials; +inputPaymentCredentials#3417d728 flags:# save:flags.0?true data:DataJSON = InputPaymentCredentials; + +account.tmpPassword#db64fd34 tmp_password:bytes valid_until:int = account.TmpPassword; + +shippingOption#b6213cdf id:string title:string prices:Vector = ShippingOption; + +inputStickerSetItem#ffa0a496 flags:# document:InputDocument emoji:string mask_coords:flags.0?MaskCoords = InputStickerSetItem; + inputPhoneCall#1e36fded id:long access_hash:long = InputPhoneCall; phoneCallEmpty#5366c915 id:long = PhoneCall; phoneCallWaiting#1b8f4ad1 flags:# id:long access_hash:long date:int admin_id:int participant_id:int protocol:PhoneCallProtocol receive_date:flags.0?int = PhoneCall; -phoneCallRequested#6c448ae8 id:long access_hash:long date:int admin_id:int participant_id:int g_a:bytes protocol:PhoneCallProtocol = PhoneCall; +phoneCallRequested#83761ce4 id:long access_hash:long date:int admin_id:int participant_id:int g_a_hash:bytes protocol:PhoneCallProtocol = PhoneCall; +phoneCallAccepted#6d003d3f id:long access_hash:long date:int admin_id:int participant_id:int g_b:bytes protocol:PhoneCallProtocol = PhoneCall; phoneCall#ffe6ab67 id:long access_hash:long date:int admin_id:int participant_id:int g_a_or_b:bytes key_fingerprint:long protocol:PhoneCallProtocol connection:PhoneConnection alternative_connections:Vector start_date:int = PhoneCall; -phoneCallDiscarded#50ca4de1 flags:# id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = PhoneCall; +phoneCallDiscarded#50ca4de1 flags:# need_rating:flags.2?true need_debug:flags.3?true id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = PhoneCall; phoneConnection#9d4c17c0 id:long ip:string ipv6:string port:int peer_tag:bytes = PhoneConnection; @@ -674,10 +734,12 @@ phoneCallProtocol#a2bb35cb flags:# udp_p2p:flags.0?true udp_reflector:flags.1?tr phone.phoneCall#ec82e140 phone_call:PhoneCall users:Vector = phone.PhoneCall; -phoneCallDiscardReasonMissed#85e42301 = PhoneCallDiscardReason; -phoneCallDiscardReasonDisconnect#e095c1a0 = PhoneCallDiscardReason; -phoneCallDiscardReasonHangup#57adc690 = PhoneCallDiscardReason; -phoneCallDiscardReasonBusy#faf7e8c9 = PhoneCallDiscardReason; +upload.cdnFileReuploadNeeded#eea8e46e request_token:bytes = upload.CdnFile; +upload.cdnFile#a99fca4f bytes:bytes = upload.CdnFile; + +cdnPublicKey#c982eaba dc_id:int public_key:string = CdnPublicKey; + +cdnConfig#5725e40a public_keys:Vector = CdnConfig; ---functions--- @@ -731,6 +793,7 @@ account.getPasswordSettings#bc8d11bb current_password_hash:bytes = account.Passw account.updatePasswordSettings#fa7c4b86 current_password_hash:bytes new_settings:account.PasswordInputSettings = Bool; account.sendConfirmPhoneCode#1516d7bd flags:# allow_flashcall:flags.0?true hash:string current_number:flags.0?Bool = auth.SentCode; account.confirmPhone#5f2178c3 phone_code_hash:string phone_code:string = Bool; +account.getTmpPassword#4a82327e password_hash:bytes period:int = account.TmpPassword; users.getUsers#d91a548 id:Vector = Vector; users.getFullUser#ca30a5b1 id:InputUser = UserFull; @@ -747,7 +810,7 @@ contacts.exportCard#84e53737 = Vector; contacts.importCard#4fe196fe export_card:Vector = User; contacts.search#11f812d8 q:string limit:int = contacts.Found; contacts.resolveUsername#f93ccba3 username:string = contacts.ResolvedPeer; -contacts.getTopPeers#d4982db5 flags:# correspondents:flags.0?true bots_pm:flags.1?true bots_inline:flags.2?true groups:flags.10?true channels:flags.15?true offset:int limit:int hash:int = contacts.TopPeers; +contacts.getTopPeers#d4982db5 flags:# correspondents:flags.0?true bots_pm:flags.1?true bots_inline:flags.2?true phone_calls:flags.3?true groups:flags.10?true channels:flags.15?true offset:int limit:int hash:int = contacts.TopPeers; contacts.resetTopPeerRating#1ae373ac category:TopPeerCategory peer:InputPeer = Bool; messages.getMessages#4222fa74 id:Vector = messages.Messages; @@ -833,6 +896,9 @@ messages.getWebPage#32ca8f91 url:string hash:int = WebPage; messages.toggleDialogPin#3289be6a flags:# pinned:flags.0?true peer:InputPeer = Bool; messages.reorderPinnedDialogs#959ff644 flags:# force:flags.0?true order:Vector = Bool; messages.getPinnedDialogs#e254d64e = messages.PeerDialogs; +messages.setBotShippingResults#e5f672fa flags:# query_id:long error:flags.0?string shipping_options:flags.1?Vector = Bool; +messages.setBotPrecheckoutResults#9c2dd95 flags:# success:flags.1?true query_id:long error:flags.0?string = Bool; +messages.uploadMedia#519bc2b1 peer:InputPeer media:InputMedia = MessageMedia; updates.getState#edd4882a = updates.State; updates.getDifference#25939651 flags:# pts:int pts_total_limit:flags.0?int date:int qts:int = updates.Difference; @@ -846,6 +912,9 @@ photos.getUserPhotos#91cd32a8 user_id:InputUser offset:int max_id:long limit:int upload.saveFilePart#b304a621 file_id:long file_part:int bytes:bytes = Bool; upload.getFile#e3a6cfb5 location:InputFileLocation offset:int limit:int = upload.File; upload.saveBigFilePart#de7b673d file_id:long file_part:int file_total_parts:int bytes:bytes = Bool; +upload.getWebFile#24e6818d location:InputWebFileLocation offset:int limit:int = upload.WebFile; +upload.getCdnFile#2000bcc3 file_token:bytes offset:int limit:int = upload.CdnFile; +upload.reuploadCdnFile#2e7a2020 file_token:bytes request_token:bytes = Bool; help.getConfig#c4f9186b = Config; help.getNearestDc#1fb33026 = NearestDc; @@ -853,9 +922,10 @@ help.getAppUpdate#ae2de196 = help.AppUpdate; help.saveAppLog#6f02f748 events:Vector = Bool; help.getInviteText#4d392343 = help.InviteText; help.getSupport#9cdf08cd = help.Support; -help.getAppChangelog#b921197a = help.AppChangelog; +help.getAppChangelog#9010ef6f prev_app_version:string = Updates; help.getTermsOfService#350170f3 = help.TermsOfService; help.setBotUpdatesStatus#ec22cfcd pending_updates_count:int message:string = Bool; +help.getCdnConfig#52029342 = CdnConfig; channels.readHistory#cc104937 channel:InputChannel max_id:int = Bool; channels.deleteMessages#84c1fd4e channel:InputChannel id:Vector = messages.AffectedMessages; @@ -885,7 +955,26 @@ channels.toggleSignatures#1f69b606 channel:InputChannel enabled:Bool = Updates; channels.updatePinnedMessage#a72ded52 flags:# silent:flags.0?true channel:InputChannel id:int = Updates; channels.getAdminedPublicChannels#8d8d82d7 = messages.Chats; -phone.requestCall#a41aa5e4 user_id:InputUser random_id:int g_a:bytes protocol:PhoneCallProtocol = phone.PhoneCall; -phone.acceptCall#220f0b20 peer:InputPhoneCall g_b:bytes key_fingerprint:long protocol:PhoneCallProtocol = phone.PhoneCall; -phone.discardCall#5dfbcddc peer:InputPhoneCall duration:int reason:PhoneCallDiscardReason connection_id:long = Bool; -phone.receivedCall#17d54f61 peer:InputPhoneCall = Bool; \ No newline at end of file +bots.sendCustomRequest#aa2769ed custom_method:string params:DataJSON = DataJSON; +bots.answerWebhookJSONQuery#e6213f4d query_id:long data:DataJSON = Bool; + +payments.getPaymentForm#99f09745 msg_id:int = payments.PaymentForm; +payments.getPaymentReceipt#a092a980 msg_id:int = payments.PaymentReceipt; +payments.validateRequestedInfo#770a8e74 flags:# save:flags.0?true msg_id:int info:PaymentRequestedInfo = payments.ValidatedRequestedInfo; +payments.sendPaymentForm#2b8879b3 flags:# msg_id:int requested_info_id:flags.0?string shipping_option_id:flags.1?string credentials:InputPaymentCredentials = payments.PaymentResult; +payments.getSavedInfo#227d824b = payments.SavedInfo; +payments.clearSavedInfo#d83d70c1 flags:# credentials:flags.0?true info:flags.1?true = Bool; + +stickers.createStickerSet#9bd86e6a flags:# masks:flags.0?true user_id:InputUser title:string short_name:string stickers:Vector = messages.StickerSet; +stickers.removeStickerFromSet#4255934 sticker:InputDocument = Bool; +stickers.changeStickerPosition#4ed705ca sticker:InputDocument position:int = Bool; +stickers.addStickerToSet#8653febe stickerset:InputStickerSet sticker:InputStickerSetItem = messages.StickerSet; + +phone.getCallConfig#55451fa9 = DataJSON; +phone.requestCall#5b95b3d4 user_id:InputUser random_id:int g_a_hash:bytes protocol:PhoneCallProtocol = phone.PhoneCall; +phone.acceptCall#3bd2b4a0 peer:InputPhoneCall g_b:bytes protocol:PhoneCallProtocol = phone.PhoneCall; +phone.confirmCall#2efe1722 peer:InputPhoneCall g_a:bytes key_fingerprint:long protocol:PhoneCallProtocol = phone.PhoneCall; +phone.receivedCall#17d54f61 peer:InputPhoneCall = Bool; +phone.discardCall#78d413a6 peer:InputPhoneCall duration:int reason:PhoneCallDiscardReason connection_id:long = Updates; +phone.setCallRating#1c536a34 peer:InputPhoneCall rating:int comment:string = Updates; +phone.saveCallDebug#277add7e peer:InputPhoneCall debug:DataJSON = Bool; \ No newline at end of file diff --git a/app/js/locales/en-us.json b/app/js/locales/en-us.json index 5cdc3b43..638de3ed 100644 --- a/app/js/locales/en-us.json +++ b/app/js/locales/en-us.json @@ -311,6 +311,7 @@ "conversation_draft": "Draft:", "conversation_media_photo": "Photo", "conversation_media_video": "Video", + "conversation_media_round": "Video message", "conversation_media_document": "File", "conversation_media_sticker": "Sticker", "conversation_media_gif": "GIF", @@ -318,6 +319,7 @@ "conversation_media_location": "Location", "conversation_media_contact": "Contact", "conversation_media_attachment": "Attachment", + "conversation_media_unsupported": "Unsupported attachment", "conversation_search_peer": "Search in this chat", @@ -374,6 +376,7 @@ "message_service_changed_channel_photo": "Channel photo updated", "message_service_removed_channel_photo": "Channel photo removed", "message_service_scored_X": "{'one': 'scored {}', 'other': 'scored {}'}", + "message_service_payment_sent": "Payment sent", "message_action_reply": "Reply", "message_action_edit": "Edit", diff --git a/app/js/messages_manager.js b/app/js/messages_manager.js index bbc2c830..41911b19 100644 --- a/app/js/messages_manager.js +++ b/app/js/messages_manager.js @@ -1323,6 +1323,9 @@ angular.module('myApp.services') AppGamesManager.saveGame(apiMessage.media.game, apiMessage.mid, mediaContext) apiMessage.media.handleMessage = true break + case 'messageMediaInvoice': + apiMessage.media = {_: 'messageMediaUnsupported'} + break } } if (apiMessage.action) { @@ -2733,6 +2736,10 @@ angular.module('myApp.services') notificationMessage = _('conversation_media_video_raw') captionEmoji = '📹' break + case 'round': + notificationMessage = _('conversation_media_round_raw') + captionEmoji = '📹' + break case 'voice': case 'audio': notificationMessage = _('conversation_media_audio_raw') @@ -2759,6 +2766,9 @@ angular.module('myApp.services') case 'messageMediaGame': notificationMessage = RichTextProcessor.wrapPlainText('🎮 ' + message.media.game.title) break + case 'messageMediaUnsupported': + notificationMessage = _('conversation_media_unsupported_raw') + break default: notificationMessage = _('conversation_media_attachment_raw') break @@ -2900,6 +2910,7 @@ angular.module('myApp.services') var newDialogsToHandle = {} var notificationsHandlePromise = false var notificationsToHandle = {} + var newUpdatesAfterReloadToHandle = {} function handleNewMessages () { $timeout.cancel(newMessagesHandlePromise) @@ -2955,10 +2966,7 @@ angular.module('myApp.services') notificationsToHandle = {} } - $rootScope.$on('apiUpdate', function (e, update) { - // if (update._ != 'updateUserStatus') { - // console.log('on apiUpdate', update) - // } + function handleUpdate(update) { switch (update._) { case 'updateMessageID': var randomID = update.random_id @@ -2982,6 +2990,10 @@ angular.module('myApp.services') if (!newDialogsHandlePromise) { newDialogsHandlePromise = $timeout(handleNewDialogs, 0) } + if (newUpdatesAfterReloadToHandle[peerID] === undefined) { + newUpdatesAfterReloadToHandle[peerID] = [] + } + newUpdatesAfterReloadToHandle[peerID].push(update) break } @@ -3455,6 +3467,13 @@ angular.module('myApp.services') } break } + } + + $rootScope.$on('apiUpdate', function (e, update) { + // if (update._ != 'updateUserStatus') { + // console.log('on apiUpdate', update) + // } + handleUpdate(update) }) function reloadConversation (peerID) { @@ -3491,6 +3510,12 @@ angular.module('myApp.services') $rootScope.$broadcast('dialog_drop', {peerID: peerID}) } } + if (newUpdatesAfterReloadToHandle[peerID] !== undefined) { + angular.forEach(newUpdatesAfterReloadToHandle[peerID], function (update) { + handleUpdate(update) + }) + delete newUpdatesAfterReloadToHandle[peerID] + } }) if (hasUpdated) { $rootScope.$broadcast('dialogs_multiupdate', updatedDialogs) diff --git a/app/js/services.js b/app/js/services.js index 6cf61ad6..fbabb6cb 100755 --- a/app/js/services.js +++ b/app/js/services.js @@ -1893,7 +1893,11 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) apiDoc.duration = attribute.duration apiDoc.w = attribute.w apiDoc.h = attribute.h - if (apiDoc.thumb) { + if (apiDoc.thumb && + attribute.pFlags.round_message) { + apiDoc.type = 'round' + } + else if (apiDoc.thumb) { apiDoc.type = 'video' } break @@ -1935,6 +1939,7 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) apiDoc.mime_type = 'video/mp4' break case 'video': + case 'round': apiDoc.mime_type = 'video/mp4' break case 'sticker': @@ -2010,6 +2015,12 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) boxHeight = Math.min(windowH - 100, Config.Mobile ? 210 : 260) break + case 'round': + inlineImage = true + boxWidth = Math.min(windowW - 80, 200) + boxHeight = Math.min(windowH - 100, 200) + break + default: boxWidth = boxHeight = 100 } diff --git a/app/less/app.less b/app/less/app.less index ae9c7223..deee51e2 100644 --- a/app/less/app.less +++ b/app/less/app.less @@ -4113,6 +4113,81 @@ h5 { opacity: 1; } + +/* Round documents */ +.img_round_image_wrap { + position: relative; + overflow: hidden; + border-radius: 50%; + overflow: hidden; +} +.img_round_meta { + background: rgba(0,0,0,0.4); + width: 40px; + height: 40px; + line-height: 0; + position: absolute; + z-index: 2; + border-radius: 50%; + overflow: hidden; + margin: 0 auto; + top: 50%; + left: 50%; + margin-left: -20px; + margin-top: -20px; + pointer-events: none; +} +.icon-cancel { + position: absolute; + top: 50%; + left: 50%; + margin-left: -9px; + margin-top: -1px; + + .icon-bar { + display: block; + width: 18px; + height: 2px; + background: #FFF; + transform-origin: 50% 50%; + + &:first-child { + .transform(rotate(-45deg)); + } + &:last-child { + .transform(translate3d(0,-2px,0) rotate(45deg)); + } + } +} + +.img_round_thumb { + -webkit-filter: blur(2px); + -moz-filter: blur(2px); + -o-filter: blur(2px); + -ms-filter: blur(2px); + filter: blur(2px); + filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius='3'); + transform-origin: center center; + -webkit-transform-origin: center center; + -webkit-transform: scale(1.02, 1.02); + transform: scale(1.02, 1.02); + + max-width: 100%; + height: auto; +} + +.img_round_meta_contents { + transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.2s; +} +.img_round_meta_contents.ng-leave.ng-leave-active, +.img_round_meta_contents.ng-enter { + opacity: 0; +} +.img_round_meta_contents.ng-leave, +.img_round_meta_contents.ng-enter.ng-enter-active { + opacity: 1; +} + .countries_modal_window { .modal-dialog { max-width: 392px; diff --git a/app/partials/desktop/full_round.html b/app/partials/desktop/full_round.html new file mode 100644 index 00000000..ec8032e2 --- /dev/null +++ b/app/partials/desktop/full_round.html @@ -0,0 +1,27 @@ + + +
+ +
+
+ + + + +
+
+ +
+
+ +
+ + +
+ + +
+ +
\ No newline at end of file diff --git a/app/partials/desktop/message_attach_document.html b/app/partials/desktop/message_attach_document.html index 8ca3d8cc..0d16d630 100755 --- a/app/partials/desktop/message_attach_document.html +++ b/app/partials/desktop/message_attach_document.html @@ -2,6 +2,8 @@
+
+
diff --git a/app/partials/desktop/message_service.html b/app/partials/desktop/message_service.html index c48bf687..aa0fb9f7 100644 --- a/app/partials/desktop/message_service.html +++ b/app/partials/desktop/message_service.html @@ -50,6 +50,7 @@ + diff --git a/app/partials/desktop/short_message.html b/app/partials/desktop/short_message.html index ff8f0faf..a2a391b3 100644 --- a/app/partials/desktop/short_message.html +++ b/app/partials/desktop/short_message.html @@ -6,6 +6,7 @@ + @@ -18,6 +19,7 @@ + @@ -55,5 +57,6 @@ + \ No newline at end of file diff --git a/app/partials/mobile/message_attach_document.html b/app/partials/mobile/message_attach_document.html index 0ee3d84a..fbcf61ba 100644 --- a/app/partials/mobile/message_attach_document.html +++ b/app/partials/mobile/message_attach_document.html @@ -1,6 +1,8 @@
+ +
diff --git a/app/partials/mobile/message_service.html b/app/partials/mobile/message_service.html index 8fe4ed18..32bbe954 100644 --- a/app/partials/mobile/message_service.html +++ b/app/partials/mobile/message_service.html @@ -49,6 +49,8 @@ + + From b4e4ce5a7976e9a7641d19bc99a50f02367e5e50 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Thu, 29 Jun 2017 21:33:44 +0300 Subject: [PATCH 14/49] Handle fresh auth error Closes #1436 --- app/js/locales/en-us.json | 1 + app/partials/desktop/error_modal.html | 3 +++ 2 files changed, 4 insertions(+) diff --git a/app/js/locales/en-us.json b/app/js/locales/en-us.json index 638de3ed..4ba085f1 100644 --- a/app/js/locales/en-us.json +++ b/app/js/locales/en-us.json @@ -419,6 +419,7 @@ "error_modal_media_not_supported_description": "Your browser cannot play this media file. Try downloading the file and opening it in a standalone player.", "error_modal_username_not_found_description": "There is no Telegram account with the username you provided.", "error_modal_phonecalls_not_supported_description_md": "Unfortunately calls are not supported in the Web App at the moment.\n\nYou can call {user} using our mobile apps or native desktop applications.\n{download-link: Download »}", + "error_modal_fresh_reset_authorization_forbidden": "For security reasons, you can't terminate older sessions from a device that you've just connected. Please use an earlier connection or wait for a few hours", "error_modal_bad_request_description": "One of the params is missing or invalid.", "error_modal_unauthorized_description": "This action requires authorization access. Please {login-link: log in}.", diff --git a/app/partials/desktop/error_modal.html b/app/partials/desktop/error_modal.html index fd518d9b..6eb56570 100644 --- a/app/partials/desktop/error_modal.html +++ b/app/partials/desktop/error_modal.html @@ -61,6 +61,9 @@ + + +
From 21b34ac7b4e163d05e4934e8c4cfb19ce7d5c93e Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Thu, 29 Jun 2017 23:14:21 +0300 Subject: [PATCH 15/49] Disable sign ups --- app/js/controllers.js | 4 ++++ app/js/locales/en-us.json | 1 + app/partials/desktop/error_modal.html | 6 +++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/js/controllers.js b/app/js/controllers.js index ad7ffe58..e6e05dc1 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -219,6 +219,10 @@ angular.module('myApp.controllers', ['myApp.i18n']) $scope.error = {field: 'phone'} error.handled = true break + + case 'PHONE_NUMBER_APP_SIGNUP_FORBIDDEN': + $scope.error = {field: 'phone'} + break } })['finally'](function () { if ($rootScope.idle.isIDLE || tsNow() - authKeyStarted > 60000) { diff --git a/app/js/locales/en-us.json b/app/js/locales/en-us.json index 4ba085f1..401da1a9 100644 --- a/app/js/locales/en-us.json +++ b/app/js/locales/en-us.json @@ -420,6 +420,7 @@ "error_modal_username_not_found_description": "There is no Telegram account with the username you provided.", "error_modal_phonecalls_not_supported_description_md": "Unfortunately calls are not supported in the Web App at the moment.\n\nYou can call {user} using our mobile apps or native desktop applications.\n{download-link: Download »}", "error_modal_fresh_reset_authorization_forbidden": "For security reasons, you can't terminate older sessions from a device that you've just connected. Please use an earlier connection or wait for a few hours", + "error_modal_app_signup_forbidden_md": "You don't have a Telegram account yet, please **sign up** with {signup-link: Android / iPhone} first.", "error_modal_bad_request_description": "One of the params is missing or invalid.", "error_modal_unauthorized_description": "This action requires authorization access. Please {login-link: log in}.", diff --git a/app/partials/desktop/error_modal.html b/app/partials/desktop/error_modal.html index 6eb56570..51640358 100644 --- a/app/partials/desktop/error_modal.html +++ b/app/partials/desktop/error_modal.html @@ -40,6 +40,10 @@ + + {0} + + @@ -58,7 +62,7 @@ {0} - + From dcb63cb9f3830718c292ed2b789ab57c159d066c Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Thu, 29 Jun 2017 23:48:39 +0300 Subject: [PATCH 16/49] Fixed round video on mobile --- app/js/lib/utils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/js/lib/utils.js b/app/js/lib/utils.js index f871cd09..064c0d4e 100644 --- a/app/js/lib/utils.js +++ b/app/js/lib/utils.js @@ -381,6 +381,7 @@ function templateUrl (tplName) { media_modal_layout: 'desktop', slider: 'desktop', reply_message: 'desktop', + full_round: 'desktop', message_body: 'desktop', message_media: 'desktop', message_attach_game: 'desktop', From 5be0105806100613d32b79d273875e9e8fb539d7 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 30 Jun 2017 16:24:56 +0300 Subject: [PATCH 17/49] Fixed empty user_auth after logout on test --- app/js/lib/mtproto_wrapper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/js/lib/mtproto_wrapper.js b/app/js/lib/mtproto_wrapper.js index 37dafaaa..eda656d0 100644 --- a/app/js/lib/mtproto_wrapper.js +++ b/app/js/lib/mtproto_wrapper.js @@ -71,7 +71,7 @@ angular.module('izhukov.mtproto.wrapper', ['izhukov.utils', 'izhukov.mtproto']) } function mtpClearStorage () { - var saveKeys = [] + var saveKeys = ['user_auth', 't_user_auth', 'dc', 't_dc'] for (var dcID = 1; dcID <= 5; dcID++) { saveKeys.push('dc' + dcID + '_auth_key') saveKeys.push('t_dc' + dcID + '_auth_key') From 0af89fa6d21cb943afbbda87f00faf326f8a8505 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 30 Jun 2017 20:55:52 +0300 Subject: [PATCH 18/49] Create CHANGELOG.md --- CHANGELOG.md | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..f8db68fc --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,167 @@ +### 0.5.6 +* Edit the text of your messages after sending them. This works across all Telegram chats, including groups and one-on-one conversations. Select a message and click 'Edit' or just press the up arrow button to edit your last message. +* Unsend Messages: retract any messages within 48 hours of sending them. Check out the [Telegram Blog](https://telegram.org/blog/unsend-and-usage) for more info. +* Pinned chats. Check out the [Telegram Blog](https://telegram.org/blog/pin-and-ifttt) for more info. +* Sticker suggestions by emoji. +* Search for messages in specific chats. +* Background notifications in Chrome and Firefox (can be disabled in Settings) + +### 0.5.5 +* Introducing Drafts: Seamless syncing for unsent messages on all your devices. Drafts are now visible in your chats list. +* Mention people in groups by typing @ and selecting them from the list — even if they don't have a username. +* Share links to specific posts in channels via quick forwarding menu (click on the date in a message to try this out). + +### 0.5.4 +* Introducing Bot API 2.0, the biggest update to our bot platform since June 2015. +* New inline keyboards with callback, 'open URL' or 'switch to inline mode' buttons help create seamless interfaces. +* Bots can now update existing messages on the fly as you interact with them. +* Prepare for the rise of location-based bots: all bots can now ask users to share their location. +* Inline bots can now send all attachments supported in Telegram (videos, music, stickers, files, etc.). +* Try out these sample bots to see what's coming your way soon: @music, @sticker, @youtube, @foursquare +* Check out the [Telegram Blog](https://telegram.org/blog/bots-2-0) for more info. +* New quick forwarding in channels (click on the date in a message to try this out). +* Improved performance. + +### 0.5.3 +* Inline bots: A new way to add bot content to any chat. Type a bot's username and your query in the text field to get instant results and send them to your chat partner. Try typing `@gif dog` in your next chat. Sample bots: @gif, @wiki, @bing, @vid, @bold. +* Check out the [Telegram Blog](https://telegram.org/blog/inline-bots) for more info. +* Improved GIFs: 20x faster sending and downloading, nice animated progress +* Click on message date to reply (or to forward from channels). +* Preview images before sending when pasting from clipboard. +* Improved formatting for copy-pasted history fragments (date, time and sender names inserted automatically). + +### 0.5.2 +* Unread counters for muted chats now colored in gray. +* Improved previews for sticker sets: Click on a sticker to view the whole set, click on stickers in a set to send right away, added a 'Share' button. +* Improved performance. + +### 0.5.1 +* Groups that have reached their capacity of 200 users can be upgraded to supergroups of up to 1,000 members. +* Check out the [Telegram Blog](https://telegram.org/blog/supergroups) for more info + +### 0.5.0 +* Removed annoying "multiple tabs open" error. +* Improved message forwarding. +* Added view counter to messages from channels. +* Improved image loading in Safari and Firefox. + +### 0.4.9 +* New emoji and sticker menu, tabs for sticker packs. + +### 0.4.8 +* Introducing Channels – a great new way to broadcast your messages to unlimited audiences. +* Check out the [Telegram Blog](https://telegram.org/blog/channels) for more info +* Improved performance in Safari on OS X El Capitan. +* Added formatting for fixed-width code, surround text with `single backticks` for inline text and ```triple backticks``` for blocks of pre-formatted text. + +### 0.4.7 +* New bot API, free for everyone. If you're an engineer, create your own bots for games, services or integrations. + +* Check out [Telegram Blog](https://telegram.org/blog/bot-revolution) for more info +* Improved Stickers support: now stickers are loading much faster. +* Click on any custom stickers in chats to view and add sticker sets. +* [Mobile] Reply to a message easily: tap on any message and select "Reply". + +### 0.4.6 +* Install and share custom sticker sets like this one: telegram.me/addstickers/Animals +* If you're an artist, create custom sticker sets using our @Stickers bot. +* Check out [Telegram Blog](https://telegram.org/blog/stickers-revolution) for more info + +### 0.4.5 +* Invite links for group chats: + Check out [Telegram Blog](https://telegram.org/blog/invite-links) for more info +* Smart notifications +* 'Listened' status for voice messages +* Places in locations (venues, landmarks) + +### 0.4.4 +* Link Previews: +Get rich link summaries for tweets, YouTube videos, Instagram photos and other content. +* Check out [Telegram Blog](https://telegram.org/blog/link-preview) for more info. + +### 0.4.3 +* Sessions List: +View your active Telegram sessions (on desktop, tablet and mobile devices) and close specific sessions remotely. + +* Two-step verification: + Set up an additional password that will be required to log into your Telegram account. +* Check out [Telegram Blog](https://telegram.org/blog/sessions-and-2-step-verification) for more info. + +### 0.4.2 +* Optimization for screens with smaller Y-resolutions. +* Supported Spotify URL embeds. +* Mentions of the current user in group chats are now highlighted. + +### 0.4.1 +* Reply to specific messages in groups. +* Mention @usernames in groups to notify multiple users. +* Revised notifications in groups: mentioned users and people you reply to will be notified (private chat notification settings apply in this case instead of group settings). Check out Telegram Blog for more info. +* Setting to disable message preview + +### 0.4.0 +* Full stickers support +* Multisearch box: instantly find chats, usernames and messages +* Emoji autocomplete: e.g., type **:kiss<** in the message field to see the list. [Full cheat sheet](http://www.emoji-cheat-sheet.com/) +* Added 'typing' notification in chats list +* Online members counter in group headers + +### 0.3.9 +* [Desktop] Material design completed + +### 0.3.8 +* Telegram.me links open right in Telegram Web when authorized +* @username mentions in messages are clickable and open a conversation with the user + +### 0.3.7 +* [Desktop] New material design for modal windows +* [Desktop] Forward messages to multiple recipients + +### 0.3.6 +* New viewer for photos, videos, documents. +* [FirefoxOS] Improved media downloads. + +### 0.3.5 +* Added embedded Soundcloud tracks and playlists. +* Added global user search to contacts list. +* Added switch to mobile version on window resize. +* Migrate to HTTPS notification +* Bugfixes. + +### 0.3.4 +* Added embedded Facebook posts and Vimeo videos. +* Improved IE10+ support: downloading files and style fixes. +* Added unsupported media playback warning. +* Bugfixes. + +### 0.3.3 +* Added Native Client module: dramatically improved encryption speed; Download and upload speed is now as high as in native applications. +* HTTPS. We recommend you to use https://web.telegram.org. +* Added multiple open tabs warning. Please note, that only one tab with Telegram Web will work. +* Added embedded Instagram, Twitter, Vine, YouTube links. +* Jump to selected spot when playing back audio. +* Bugfixes + +### 0.3.2 +* Usernames support. +* Search can now find public users by username. +* Most popular emoticons shown in 'recent' when empty +* [ChromeApp] Added saving window position and size +* Bugfixes + +### 0.3.1 +* New languages: Spanish, German and Italian are now available +* New custom-made audio player +* Bad browser page for IE 6-9 +* Perfomance improvements and bugfixes + +### 0.3.0 +* Log in codes may be received in other Telegram apps +* Partner's online status updates automatically +* Added support for non-english hashtags in messages +* Fixed invalid scrollbar width bug +* [Desktop] Added automatic country code detection +* [FirefoxOS] Improved PUSH-notifications for <= 1.1 +* [FirefoxOS] Fixed emoji in notifications +* [FirefoxOS] Fixed attachment bug for <= 1.1 +* [FirefoxOS] Added phonebook permissions handling +* [FirefoxOS] Added ability to share Gallery photos in Telegram From 53aad40a1420b799ff4636331a5fab67828cf239 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 30 Jun 2017 22:07:00 +0300 Subject: [PATCH 19/49] Supported service notifications --- app/js/controllers.js | 4 +- app/js/lib/mtproto_wrapper.js | 4 + app/js/locales/en-us.json | 3 +- app/js/messages_manager.js | 101 +++++-- app/js/services.js | 23 +- app/partials/desktop/changelog_modal.html | 339 +--------------------- app/partials/desktop/error_modal.html | 7 +- app/partials/mobile/channel_modal.html | 130 --------- app/partials/mobile/settings_modal.html | 2 +- 9 files changed, 113 insertions(+), 500 deletions(-) delete mode 100644 app/partials/mobile/channel_modal.html diff --git a/app/js/controllers.js b/app/js/controllers.js index e6e05dc1..f1336cf1 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -2150,8 +2150,8 @@ angular.module('myApp.controllers', ['myApp.i18n']) var lastIsRead = !historyMessage || !historyMessage.pFlags.unread for (i = 0; i < len; i++) { messageID = msgs[i] - if (messageID < maxID || - history.ids.indexOf(messageID) !== -1) { + if (messageID > 0 && messageID < maxID || + history.ids.indexOf(messageID) !== -1) { continue } historyMessage = AppMessagesManager.wrapForHistory(messageID) diff --git a/app/js/lib/mtproto_wrapper.js b/app/js/lib/mtproto_wrapper.js index eda656d0..50fda25f 100644 --- a/app/js/lib/mtproto_wrapper.js +++ b/app/js/lib/mtproto_wrapper.js @@ -157,6 +157,10 @@ angular.module('izhukov.mtproto.wrapper', ['izhukov.utils', 'izhukov.mtproto']) } deferred.reject(error) + if (error.code == 406) { + error.handled = true + } + if (!options.noErrorBox) { error.input = method error.stack = stack || (error.originalError && error.originalError.stack) || error.stack || (new Error()).stack diff --git a/app/js/locales/en-us.json b/app/js/locales/en-us.json index 401da1a9..689896a9 100644 --- a/app/js/locales/en-us.json +++ b/app/js/locales/en-us.json @@ -187,6 +187,8 @@ "changelog_modal_header_recent_updates_md": "Recent updates in **Telegram Web**", "changelog_modal_header_new_updates_md": "**Telegram Web** has been updated!", "changelog_modal_title_current_version": "current version", + "changelog_modal_full_description_md": "Official free messaging app based on Telegram API for speed and security.\n\nThis software is licensed under GNU GPL version 3.", + "changelog_modal_changelog_link": "Changelog", "group_create_contacts_modal_title": "New group", "group_create_modal_title": "Create group", @@ -419,7 +421,6 @@ "error_modal_media_not_supported_description": "Your browser cannot play this media file. Try downloading the file and opening it in a standalone player.", "error_modal_username_not_found_description": "There is no Telegram account with the username you provided.", "error_modal_phonecalls_not_supported_description_md": "Unfortunately calls are not supported in the Web App at the moment.\n\nYou can call {user} using our mobile apps or native desktop applications.\n{download-link: Download »}", - "error_modal_fresh_reset_authorization_forbidden": "For security reasons, you can't terminate older sessions from a device that you've just connected. Please use an earlier connection or wait for a few hours", "error_modal_app_signup_forbidden_md": "You don't have a Telegram account yet, please **sign up** with {signup-link: Android / iPhone} first.", "error_modal_bad_request_description": "One of the params is missing or invalid.", diff --git a/app/js/messages_manager.js b/app/js/messages_manager.js index 41911b19..29baa25b 100644 --- a/app/js/messages_manager.js +++ b/app/js/messages_manager.js @@ -18,6 +18,7 @@ angular.module('myApp.services') var pendingByRandomID = {} var pendingByMessageID = {} var pendingAfterMsgs = {} + var pendingTopMsgs = {} var sendFilePromise = $q.when() var tempID = -1 @@ -181,7 +182,11 @@ angular.module('myApp.services') if (historiesStorage[peerID] === undefined && !message.deleted) { - var historyStorage = {count: null, history: [mid], pending: []} + var historyStorage = {count: null, history: [], pending: []} + historyStorage[mid > 0 ? 'history' : 'pending'].push(mid) + if (mid < 0 && message.pFlags.unread) { + dialog.unread_count++ + } historiesStorage[peerID] = historyStorage if (mergeReplyKeyboard(historyStorage, message)) { $rootScope.$broadcast('history_reply_markup', {peerID: peerID}) @@ -526,6 +531,9 @@ angular.module('myApp.services') historyStorage = historiesStorage[peerID] = {count: null, history: [], pending: []} } + if (maxID < 0) { + maxID = 0 + } var isMigrated = false var reqPeerID = peerID if (migratedToFrom[peerID]) { @@ -3007,29 +3015,30 @@ angular.module('myApp.services') saveMessages([message], {isNew: true}) // console.warn(dT(), 'message unread', message.mid, message.pFlags.unread) - if (historyStorage !== undefined) { - var history = historyStorage.history - if (history.indexOf(message.mid) != -1) { - return false - } - var topMsgID = history[0] - history.unshift(message.mid) - if (message.mid > 0 && message.mid < topMsgID) { - history.sort(function (a, b) { - return b - a - }) - } - if (historyStorage.count !== null) { - historyStorage.count++ - } - } else { - historyStorage = historiesStorage[peerID] = { + if (historyStorage === undefined) { + historyStorage = historiesStorage[peerID] = { count: null, - history: [message.mid], + history: [], pending: [] } } + var history = message.mid > 0 ? historyStorage.history : historyStorage.pending + if (history.indexOf(message.mid) != -1) { + return false + } + var topMsgID = history[0] + history.unshift(message.mid) + if (message.mid > 0 && message.mid < topMsgID) { + history.sort(function (a, b) { + return b - a + }) + } + if (message.mid > 0 && + historyStorage.count !== null) { + historyStorage.count++ + } + if (mergeReplyKeyboard(historyStorage, message)) { $rootScope.$broadcast('history_reply_markup', {peerID: peerID}) } @@ -3466,6 +3475,49 @@ angular.module('myApp.services') }) } break + + case 'updateServiceNotification': + // update.inbox_date = tsNow(true) + // update.pFlags = {popup: true} + var fromID = 777000 + var peerID = fromID + var messageID = tempID-- + var message = { + _: 'message', + id: messageID, + from_id: fromID, + to_id: AppPeersManager.getOutputPeer(peerID), + flags: 0, + pFlags: {unread: true}, + date: (update.inbox_date || tsNow(true)) + ServerTimeManager.serverTimeOffset, + message: update.message, + media: update.media, + entities: update.entities + } + if (!AppUsersManager.hasUser(fromID)) { + AppUsersManager.saveApiUsers([{ + _: 'user', + id: fromID, + pFlags: {verified: true}, + access_hash: 0, + first_name: 'Telegram', + phone: '42777' + }]) + } + saveMessages([message]) + + if (update.inbox_date) { + pendingTopMsgs[peerID] = messageID + handleUpdate({ + _: 'updateNewMessage', + message: message + }) + } + if (update.pFlags.popup && update.message) { + var historyMessage = wrapForHistory(messageID) + ErrorService.show({error: {code: 400, type: 'UPDATE_SERVICE_NOTIFICATION'}, historyMessage: historyMessage}) + } + break } } @@ -3493,11 +3545,18 @@ angular.module('myApp.services') var hasUpdated = false angular.forEach(dialogsResult.dialogs, function (dialog) { var peerID = AppPeersManager.getPeerID(dialog.peer) - if (dialog.top_message) { + var topMessage = dialog.top_message + var topPendingMesage = pendingTopMsgs[peerID] + if (topPendingMesage) { + if (!topMessage || getMessage(topPendingMesage).date > getMessage(topMessage).date) { + dialog.top_message = topMessage = topPendingMesage + } + } + if (topMessage) { var wasBefore = getDialogByPeerID(peerID).length > 0 saveConversation(dialog) if (wasBefore) { - clearDialogCache(dialog.top_message) + clearDialogCache(topMessage) $rootScope.$broadcast('dialog_top', dialog) } else { updatedDialogs[peerID] = dialog diff --git a/app/js/services.js b/app/js/services.js index fbabb6cb..85d79a5c 100755 --- a/app/js/services.js +++ b/app/js/services.js @@ -4341,16 +4341,23 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) } }) - .service('ChangelogNotifyService', function (Storage, $rootScope, $modal) { + .service('ChangelogNotifyService', function (Storage, $rootScope, $modal, $timeout, MtpApiManager, ApiUpdatesManager) { function checkUpdate () { - Storage.get('last_version').then(function (lastVersion) { - if (lastVersion != Config.App.version) { - if (lastVersion) { - showChangelog(lastVersion) + $timeout(function () { + Storage.get('last_version').then(function (lastVersion) { + if (lastVersion != Config.App.version) { + MtpApiManager.invokeApi('help.getAppChangelog', { + prev_app_version: lastVersion + }).then(function (updates) { + if (updates._ == 'updates' && !updates.updates.length) { + return false + } + ApiUpdatesManager.processUpdateMessage(updates) + Storage.set({last_version: Config.App.version}) + }) } - Storage.set({last_version: Config.App.version}) - } - }) + }) + }, 5000) } function showChangelog (lastVersion) { diff --git a/app/partials/desktop/changelog_modal.html b/app/partials/desktop/changelog_modal.html index 8e25b32c..646c424d 100644 --- a/app/partials/desktop/changelog_modal.html +++ b/app/partials/desktop/changelog_modal.html @@ -31,341 +31,8 @@
-
-
0.5.6
-
-
    -
  • Edit the text of your messages after sending them. This works across all Telegram chats, including groups and one-on-one conversations. Select a message and click 'Edit' or just press the up arrow button to edit your last message.
  • -
  • Unsend Messages: retract any messages within 48 hours of sending them. Check out the Telegram Blog for more info.
  • -
  • Pinned chats. Check out the Telegram Blog for more info.
  • -
  • Sticker suggestions by emoji.
  • -
  • Search for messages in specific chats.
  • -
  • Background notifications in Chrome and Firefox (can be disabled in Settings)
  • -
- -
-
- -
-
0.5.5
-
-
    -
  • Introducing Drafts: Seamless syncing for unsent messages on all your devices. Drafts are now visible in your chats list.
  • -
  • Mention people in groups by typing @ and selecting them from the list — even if they don't have a username.
  • -
  • Share links to specific posts in channels via quick forwarding menu (click on the date in a message to try this out).
  • -
- -
-
- -
-
0.5.4
-
-
    -
  • Introducing Bot API 2.0, the biggest update to our bot platform since June 2015.
  • -
  • New inline keyboards with callback, 'open URL' or 'switch to inline mode' buttons help create seamless interfaces.
  • -
  • Bots can now update existing messages on the fly as you interact with them.
  • -
  • Prepare for the rise of location-based bots: all bots can now ask users to share their location.
  • -
  • Inline bots can now send all attachments supported in Telegram (videos, music, stickers, files, etc.).
  • -
  • Try out these sample bots to see what's coming your way soon: @music, @sticker, @youtube, @foursquare
  • -
  • Check out the Telegram Blog for more info.
  • -
  • New quick forwarding in channels (click on the date in a message to try this out).
  • -
  • Improved performance.
  • -
- -
-
- -
-
0.5.3
-
-
    -
  • Inline bots: A new way to add bot content to any chat. Type a bot's username and your query in the text field to get instant results and send them to your chat partner. Try typing @gif dog in your next chat. Sample bots: @gif, @wiki, @bing, @vid, @bold.
  • -
  • Check out the Telegram Blog for more info.
  • -
  • Improved GIFs: 20x faster sending and downloading, nice animated progress
  • -
  • Click on message date to reply (or to forward from channels).
  • -
  • Preview images before sending when pasting from clipboard.
  • -
  • Improved formatting for copy-pasted history fragments (date, time and sender names inserted automatically).
  • -
-
-
- -
-
0.5.2
-
-
    -
  • Unread counters for muted chats now colored in gray.
  • -
  • Improved previews for sticker sets: Click on a sticker to view the whole set, click on stickers in a set to send right away, added a 'Share' button.
  • -
  • Improved performance.
  • -
-
-
- -
-
0.5.1
-
-
    -
  • Groups that have reached their capacity of 200 users can be upgraded to supergroups of up to 1,000 members.
  • -
  • Check out the Telegram Blog for more info
  • -
-
-
- -
-
0.5.0
-
-
    -
  • Removed annoying "multiple tabs open" error.
  • -
  • Improved message forwarding.
  • -
  • Added view counter to messages from channels.
  • -
  • Improved image loading in Safari and Firefox.
  • -
-
-
- -
-
0.4.9
-
-
    -
  • New emoji and sticker menu, tabs for sticker packs.
  • -
-
-
- -
-
0.4.8
-
-
    -
  • Introducing Channels – a great new way to broadcast your messages to unlimited audiences.
  • -
  • Check out the Telegram Blog for more info
  • -
  • Improved performance in Safari on OS X El Capitan.
  • -
  • Added formatting for fixed-width code, surround text with `single backticks` for inline text and ```triple backticks``` for blocks of pre-formatted text.
  • -
-
-
- -
-
0.4.7
-
-
    -
  • New bot API, free for everyone. If you're an engineer, create your own bots for games, services or integrations. -
  • -
  • Check out Telegram Blog for more info
  • -
  • Improved Stickers support: now stickers are loading much faster.
  • -
  • Click on any custom stickers in chats to view and add sticker sets.
  • -
  • [Mobile] Reply to a message easily: tap on any message and select "Reply".
  • -
-
-
- -
-
0.4.6
-
- -
-
- -
-
0.4.5
-
-
    -
  • - Invite links for group chats:
    - Check out Telegram Blog for more info -
  • -
  • Smart notifications
  • -
  • 'Listened' status for voice messages
  • -
  • Places in locations (venues, landmarks)
  • -
-
-
- -
-
0.4.4
-
-
    -
  • Link Previews:
    - Get rich link summaries for tweets, YouTube videos, Instagram photos and other content.
  • - -
  • Check out Telegram Blog for more info.
  • -
-
-
- -
-
0.4.3
-
-
    -
  • Sessions List:
    - View your active Telegram sessions (on desktop, tablet and mobile devices) and close specific sessions remotely.
  • - -
  • Two-step verification:
    - Set up an additional password that will be required to log into your Telegram account.
  • - -
  • Check out Telegram Blog for more info.
  • -
-
-
- -
-
0.4.2
-
-
    -
  • Optimization for screens with smaller Y-resolutions.
  • -
  • Supported Spotify URL embeds.
  • -
  • Mentions of the current user in group chats are now highlighted.
  • -
-
-
- -
-
0.4.1
-
-
    -
  • Reply to specific messages in groups.
  • -
  • Mention @usernames in groups to notify multiple users.
  • -
  • Revised notifications in groups: mentioned users and people you reply to will be notified (private chat notification settings apply in this case instead of group settings). Check out Telegram Blog for more info.
  • -
  • Setting to disable message preview
  • -
-
-
- -
-
0.4.0
-
-
    -
  • Full stickers support
  • -
  • Multisearch box: instantly find chats, usernames and messages
  • -
  • Emoji autocomplete: e.g., type :kiss in the message field to see the list. Full cheat sheet »
  • -
  • Added 'typing' notification in chats list
  • -
  • Online members counter in group headers
  • -
-
-
- -
-
0.3.9
-
-
    -
  • [Desktop] Material design completed
  • -
-
-
- -
-
0.3.8
-
-
    -
  • Telegram.me links open right in Telegram Web when authorized
  • -
  • @username mentions in messages are clickable and open a conversation with the user
  • -
-
-
- -
-
0.3.7
-
-
    -
  • [Desktop] New material design for modal windows
  • -
  • [Desktop] Forward messages to multiple recipients
  • -
-
-
- -
-
0.3.6
-
-
    -
  • New viewer for photos, videos, documents.
  • -
  • [FirefoxOS] Improved media downloads.
  • -
-
-
- -
-
0.3.5
-
-
    -
  • Added embedded Soundcloud tracks and playlists.
  • -
  • Added global user search to contacts list.
  • -
  • Added switch to mobile version on window resize.
  • -
  • Migrate to HTTPS notification
  • -
  • Bugfixes.
  • -
-
-
- -
-
0.3.4
-
-
    -
  • Added embedded Facebook posts and Vimeo videos.
  • -
  • Improved IE10+ support: downloading files and style fixes.
  • -
  • Added unsupported media playback warning.
  • -
  • Bugfixes.
  • -
-
-
- -
-
0.3.3
-
-
    -
  • Added Native Client module: dramatically improved encryption speed; Download and upload speed is now as high as in native applications.
  • -
  • HTTPS. We recommend you to use https://web.telegram.org.
  • -
  • Added multiple open tabs warning. Please note, that only one tab with Telegram Web will work.
  • -
  • Added embedded Instagram, Twitter, Vine, YouTube links.
  • -
  • Jump to selected spot when playing back audio.
  • -
  • Bugfixes
  • -
-
-
- -
-
0.3.2
-
-
    -
  • Usernames support: Choose a username right now!
  • -
  • Search can now find public users by username.
  • -
  • Most popular emoticons shown in 'recent' when empty
  • -
  • [ChromeApp] Added saving window position and size
  • -
  • Bugfixes
  • -
-
-
- -
-
0.3.1
-
-
    -
  • New languages: Spanish, German and Italian are now available
  • -
  • New custom-made audio player
  • -
  • Bad browser page for IE 6-9
  • -
  • Perfomance improvements and bugfixes
  • -
-
-
- -
-
0.3.0
-
-
    -
  • Log in codes may be received in other Telegram apps
  • -
  • Partner's online status updates automatically
  • -
  • Added support for non-english hashtags in messages
  • -
  • Fixed invalid scrollbar width bug
  • -
  • [Desktop] Added automatic country code detection
  • -
  • [FirefoxOS] Improved PUSH-notifications for <= 1.1
  • -
  • [FirefoxOS] Fixed emoji in notifications
  • -
  • [FirefoxOS] Fixed attachment bug for <= 1.1
  • -
  • [FirefoxOS] Added phonebook permissions handling
  • -
  • [FirefoxOS] Added ability to share Gallery photos in Telegram
  • -
-
+
+
@@ -373,7 +40,7 @@
diff --git a/app/partials/desktop/error_modal.html b/app/partials/desktop/error_modal.html index 51640358..c9ccc054 100644 --- a/app/partials/desktop/error_modal.html +++ b/app/partials/desktop/error_modal.html @@ -65,7 +65,12 @@ - + +
+
+
+
+
diff --git a/app/partials/mobile/channel_modal.html b/app/partials/mobile/channel_modal.html deleted file mode 100644 index 22bb30f7..00000000 --- a/app/partials/mobile/channel_modal.html +++ /dev/null @@ -1,130 +0,0 @@ -
- -
- -
- - - -
diff --git a/app/partials/mobile/settings_modal.html b/app/partials/mobile/settings_modal.html index 7dbf2554..ccd90897 100644 --- a/app/partials/mobile/settings_modal.html +++ b/app/partials/mobile/settings_modal.html @@ -158,7 +158,7 @@

- +

From 7086aabf843927380a48ed952b7e7cf9b9151cb2 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 30 Jun 2017 22:08:57 +0300 Subject: [PATCH 20/49] Bump to 0.5.7 --- app/js/app.js | 2 +- app/js/background.js | 2 +- app/js/controllers.js | 2 +- app/js/directives.js | 2 +- app/js/directives_mobile.js | 2 +- app/js/filters.js | 2 +- app/js/lib/bin_utils.js | 2 +- app/js/lib/config.js | 4 ++-- app/js/lib/crypto_worker.js | 2 +- app/js/lib/mtproto.js | 2 +- app/js/lib/mtproto_wrapper.js | 2 +- app/js/lib/ng_utils.js | 2 +- app/js/lib/tl_utils.js | 2 +- app/js/lib/utils.js | 2 +- app/js/message_composer.js | 2 +- app/js/messages_manager.js | 2 +- app/js/services.js | 2 +- app/manifest.json | 2 +- app/manifest.webapp | 2 +- package.json | 2 +- 20 files changed, 21 insertions(+), 21 deletions(-) diff --git a/app/js/app.js b/app/js/app.js index e9ea0ed6..4644ad0d 100644 --- a/app/js/app.js +++ b/app/js/app.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/background.js b/app/js/background.js index 732730e9..11495c64 100644 --- a/app/js/background.js +++ b/app/js/background.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/controllers.js b/app/js/controllers.js index f1336cf1..6a22a6ef 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/directives.js b/app/js/directives.js index 7380f259..16e612e0 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/directives_mobile.js b/app/js/directives_mobile.js index d5b79d6b..d466f473 100644 --- a/app/js/directives_mobile.js +++ b/app/js/directives_mobile.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/filters.js b/app/js/filters.js index 2e9549d5..0885d12c 100644 --- a/app/js/filters.js +++ b/app/js/filters.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/bin_utils.js b/app/js/lib/bin_utils.js index 74282fb6..df9a210a 100644 --- a/app/js/lib/bin_utils.js +++ b/app/js/lib/bin_utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/config.js b/app/js/lib/config.js index e0a5b02f..9e574e54 100644 --- a/app/js/lib/config.js +++ b/app/js/lib/config.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE @@ -20,7 +20,7 @@ Config = window.Config || {} Config.App = { id: 2496, hash: '8da85b0d5bfe62527e5b244c209159c3', - version: '0.5.6', + version: '0.5.7', domains: ['web.telegram.org', 'zhukov.github.io'] } diff --git a/app/js/lib/crypto_worker.js b/app/js/lib/crypto_worker.js index 3d18474c..2a5b44fd 100644 --- a/app/js/lib/crypto_worker.js +++ b/app/js/lib/crypto_worker.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/mtproto.js b/app/js/lib/mtproto.js index 70da38fb..9ce95121 100644 --- a/app/js/lib/mtproto.js +++ b/app/js/lib/mtproto.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/mtproto_wrapper.js b/app/js/lib/mtproto_wrapper.js index 50fda25f..27e164cc 100644 --- a/app/js/lib/mtproto_wrapper.js +++ b/app/js/lib/mtproto_wrapper.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/ng_utils.js b/app/js/lib/ng_utils.js index 08d578f7..481dd0c5 100755 --- a/app/js/lib/ng_utils.js +++ b/app/js/lib/ng_utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/tl_utils.js b/app/js/lib/tl_utils.js index 26f2d00a..0fc61a9f 100644 --- a/app/js/lib/tl_utils.js +++ b/app/js/lib/tl_utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/utils.js b/app/js/lib/utils.js index 064c0d4e..95858dc0 100644 --- a/app/js/lib/utils.js +++ b/app/js/lib/utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/message_composer.js b/app/js/message_composer.js index f5208389..e424463c 100644 --- a/app/js/message_composer.js +++ b/app/js/message_composer.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/messages_manager.js b/app/js/messages_manager.js index 29baa25b..6b357bf0 100644 --- a/app/js/messages_manager.js +++ b/app/js/messages_manager.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/services.js b/app/js/services.js index 85d79a5c..a1c676b0 100755 --- a/app/js/services.js +++ b/app/js/services.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.6 - messaging web application for MTProto + * Webogram v0.5.7 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/manifest.json b/app/manifest.json index 333c7356..94450556 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "Telegram", "description": "Telegram Web App.\nMore info & source code here: https://github.com/zhukov/webogram", - "version": "0.5.6", + "version": "0.5.7", "short_name": "Telegram", "manifest_version": 2, "app": { diff --git a/app/manifest.webapp b/app/manifest.webapp index bea166c1..b101fd12 100644 --- a/app/manifest.webapp +++ b/app/manifest.webapp @@ -1,7 +1,7 @@ { "name": "Telegram", "description": "Telegram Web App.\nMore info & source code here: https://github.com/zhukov/webogram", - "version": "0.5.6", + "version": "0.5.7", "type": "privileged", "launch_path": "/index.html", "developer": { diff --git a/package.json b/package.json index 48d2774c..96d1afc5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Telegram", "description": "Telegram Web App.\nMore info & source code here: https://github.com/zhukov/webogram", - "version": "0.5.6", + "version": "0.5.7", "main": "app/index.html", "single-instance": true, "dom_storage_quota": 40, From cddccdfba305c3b421e79c12b66fc772430745a1 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 30 Jun 2017 22:36:03 +0300 Subject: [PATCH 21/49] Fixed changelog --- app/js/services.js | 37 ++++++++++++++++++++++--------------- gulpfile.js | 3 ++- package.json | 2 +- yarn.lock | 17 +++++++++++------ 4 files changed, 36 insertions(+), 23 deletions(-) diff --git a/app/js/services.js b/app/js/services.js index a1c676b0..3423b7d1 100755 --- a/app/js/services.js +++ b/app/js/services.js @@ -4343,21 +4343,28 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) .service('ChangelogNotifyService', function (Storage, $rootScope, $modal, $timeout, MtpApiManager, ApiUpdatesManager) { function checkUpdate () { - $timeout(function () { - Storage.get('last_version').then(function (lastVersion) { - if (lastVersion != Config.App.version) { - MtpApiManager.invokeApi('help.getAppChangelog', { - prev_app_version: lastVersion - }).then(function (updates) { - if (updates._ == 'updates' && !updates.updates.length) { - return false - } - ApiUpdatesManager.processUpdateMessage(updates) - Storage.set({last_version: Config.App.version}) - }) - } - }) - }, 5000) + MtpApiManager.getUserID().then(function (userID) { + if (!userID) { + return + } + $timeout(function () { + Storage.get('last_version').then(function (lastVersion) { + if (lastVersion != Config.App.version) { + MtpApiManager.invokeApi('help.getAppChangelog', { + prev_app_version: lastVersion + }, { + noErrorBox: true, + }).then(function (updates) { + if (updates._ == 'updates' && !updates.updates.length) { + return false + } + ApiUpdatesManager.processUpdateMessage(updates) + Storage.set({last_version: Config.App.version}) + }) + } + }) + }, 5000) + }) } function showChangelog (lastVersion) { diff --git a/gulpfile.js b/gulpfile.js index 63942b78..df40947a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -202,7 +202,8 @@ gulp.task('generate-service-worker', ['build'], function (callback) { gulp.task('add-appcache-manifest', ['build'], function () { return gulp.src(fileGlobs) .pipe($.manifest({ - timestamp: true, + timestamp: false, + hash: true, network: ['http://*', 'https://*', '*'], filename: 'webogram.appcache', exclude: ['webogram.appcache', 'app.manifest'] diff --git a/package.json b/package.json index 96d1afc5..358ea161 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "gulp-less": "^3.0.5", "gulp-livereload": "^3.8.1", "gulp-load-plugins": "^0.4.0", - "gulp-manifest": "0.0.3", + "gulp-manifest": "0.1.1", "gulp-minify-css": "^0.3.12", "gulp-minify-html": "^0.1.1", "gulp-ng-annotate": "~0.5.2", diff --git a/yarn.lock b/yarn.lock index 62845f2e..b41b42a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1411,7 +1411,7 @@ event-stream@3.3.2: stream-combiner "~0.0.4" through "~2.3.1" -event-stream@~3.0.18, event-stream@~3.0.20: +event-stream@~3.0.18: version "3.0.20" resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.0.20.tgz#038bbb2ea9ea90385b26fbc1854d0b539f2abea3" dependencies: @@ -2126,12 +2126,13 @@ gulp-load-plugins@^0.4.0: findup-sync "~0.1.2" globule "~0.1.0" -gulp-manifest@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/gulp-manifest/-/gulp-manifest-0.0.3.tgz#239187c0b322c24afed952393770d427dc31d2b2" +gulp-manifest@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/gulp-manifest/-/gulp-manifest-0.1.1.tgz#68a801a5a15c12f7f3f1d34082070b534df9f717" dependencies: - event-stream "~3.0.20" gulp-util "~2.2.6" + minimatch "~2.0.1" + slash "^1.0.0" through "~2.3.4" gulp-minify-css@^0.3.12: @@ -3564,7 +3565,7 @@ minimatch@^1.0.0: lru-cache "2" sigmund "~1.0.0" -minimatch@^2.0.1: +minimatch@^2.0.1, minimatch@~2.0.1: version "2.0.10" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" dependencies: @@ -4431,6 +4432,10 @@ simple-is@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz#2abb75aade39deb5cc815ce10e6191164850baf0" +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" From 1c9e6fe42abae6908460dda1abd27d65f325b158 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 30 Jun 2017 23:10:39 +0300 Subject: [PATCH 22/49] Fixed get changelog --- app/js/services.js | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/app/js/services.js b/app/js/services.js index 3423b7d1..a13b9f4e 100755 --- a/app/js/services.js +++ b/app/js/services.js @@ -4350,17 +4350,21 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) $timeout(function () { Storage.get('last_version').then(function (lastVersion) { if (lastVersion != Config.App.version) { - MtpApiManager.invokeApi('help.getAppChangelog', { - prev_app_version: lastVersion - }, { - noErrorBox: true, - }).then(function (updates) { - if (updates._ == 'updates' && !updates.updates.length) { - return false - } - ApiUpdatesManager.processUpdateMessage(updates) + if (!lastVersion) { Storage.set({last_version: Config.App.version}) - }) + } else { + MtpApiManager.invokeApi('help.getAppChangelog', { + prev_app_version: lastVersion + }, { + noErrorBox: true, + }).then(function (updates) { + if (updates._ == 'updates' && !updates.updates.length) { + return false + } + ApiUpdatesManager.processUpdateMessage(updates) + Storage.set({last_version: Config.App.version}) + }) + } } }) }, 5000) From bfd333648508598e466e40a06d65aff56936e13e Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Sun, 2 Jul 2017 15:57:26 +0300 Subject: [PATCH 23/49] Fixed empty message in conversation --- app/js/messages_manager.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/js/messages_manager.js b/app/js/messages_manager.js index 6b357bf0..1d6aae44 100644 --- a/app/js/messages_manager.js +++ b/app/js/messages_manager.js @@ -138,6 +138,9 @@ angular.module('myApp.services') var isMegagroup = AppPeersManager.isMegagroup(channelID) var mid = AppMessagesIDsManager.getFullMessageID(dialog.top_message, channelID) var message = getMessage(mid) + if (message.deleted) { + console.warn(dT(), 'Deleted message in coversaion', dialog, message, mid) + } var offsetDate = message.date if (!channelID && peerID < 0) { @@ -911,7 +914,11 @@ angular.module('myApp.services') } function getMessage (messageID) { - return messagesStorage[messageID] || {deleted: true} + return messagesStorage[messageID] || { + _: 'messageEmpty', + deleted: true, + pFlags: {out: false, unread: false} + } } function canMessageBeEdited(message) { From a86c249f6345550d8682ffe3e5860aba890b1040 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Mon, 3 Jul 2017 13:55:33 +0300 Subject: [PATCH 24/49] Fixed empty conversation in pinned --- app/js/messages_manager.js | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/app/js/messages_manager.js b/app/js/messages_manager.js index 1d6aae44..300b02ee 100644 --- a/app/js/messages_manager.js +++ b/app/js/messages_manager.js @@ -136,10 +136,24 @@ angular.module('myApp.services') SearchIndexManager.indexObject(peerID, peerText, dialogsIndex) var isMegagroup = AppPeersManager.isMegagroup(channelID) - var mid = AppMessagesIDsManager.getFullMessageID(dialog.top_message, channelID) - var message = getMessage(mid) - if (message.deleted) { - console.warn(dT(), 'Deleted message in coversaion', dialog, message, mid) + if (dialog.top_message) { + var mid = AppMessagesIDsManager.getFullMessageID(dialog.top_message, channelID) + var message = getMessage(mid) + } else { + var mid = tempID-- + var message = { + _: 'message', + id: mid, + mid: mid, + from_id: AppUsersManager.getSelf().id, + to_id: AppPeersManager.getOutputPeer(peerID), + deleted: true, + flags: 0, + pFlags: {unread: false, out: true}, + date: 0, + message: '' + } + saveMessages([message]) } var offsetDate = message.date From 0a9a0c4c9d636da55f17b1bca058790f7af642ff Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Mon, 3 Jul 2017 14:49:06 +0300 Subject: [PATCH 25/49] ForceUnsubscribe from WebPush on logout --- app/js/lib/mtproto_wrapper.js | 8 ++++++-- app/js/lib/ng_utils.js | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/js/lib/mtproto_wrapper.js b/app/js/lib/mtproto_wrapper.js index 27e164cc..374dec9d 100644 --- a/app/js/lib/mtproto_wrapper.js +++ b/app/js/lib/mtproto_wrapper.js @@ -7,7 +7,7 @@ angular.module('izhukov.mtproto.wrapper', ['izhukov.utils', 'izhukov.mtproto']) - .factory('MtpApiManager', function (Storage, MtpAuthorizer, MtpNetworkerFactory, MtpSingleInstanceService, AppRuntimeManager, ErrorService, qSync, $rootScope, $q, TelegramMeWebService) { + .factory('MtpApiManager', function (Storage, MtpAuthorizer, MtpNetworkerFactory, MtpSingleInstanceService, AppRuntimeManager, ErrorService, qSync, $rootScope, $q, WebPushApiManager, TelegramMeWebService) { var cachedNetworkers = {} var cachedUploadNetworkers = {} var cachedExportPromise = {} @@ -47,11 +47,12 @@ angular.module('izhukov.mtproto.wrapper', ['izhukov.utils', 'izhukov.mtproto']) for (var dcID = 1; dcID <= 5; dcID++) { storageKeys.push('dc' + dcID + '_auth_key') } + WebPushApiManager.forceUnsubscribe() return Storage.get(storageKeys).then(function (storageResult) { var logoutPromises = [] for (var i = 0; i < storageResult.length; i++) { if (storageResult[i]) { - logoutPromises.push(mtpInvokeApi('auth.logOut', {}, {dcID: i + 1})) + logoutPromises.push(mtpInvokeApi('auth.logOut', {}, {dcID: i + 1, ignoreErrors: true})) } } return $q.all(logoutPromises).then(function () { @@ -156,6 +157,9 @@ angular.module('izhukov.mtproto.wrapper', ['izhukov.utils', 'izhukov.mtproto']) error = {message: error} } deferred.reject(error) + if (options.ignoreErrors) { + return + } if (error.code == 406) { error.handled = true diff --git a/app/js/lib/ng_utils.js b/app/js/lib/ng_utils.js index 481dd0c5..0df4257b 100755 --- a/app/js/lib/ng_utils.js +++ b/app/js/lib/ng_utils.js @@ -2083,6 +2083,29 @@ angular.module('izhukov.utils', []) }) } + function forceUnsubscribe() { + if (!isAvailable) { + return + } + navigator.serviceWorker.ready.then(function(reg) { + reg.pushManager.getSubscription().then(function (subscription) { + console.warn('force unsubscribe', subscription) + if (subscription) { + subscription.unsubscribe().then(function(successful) { + console.warn('force unsubscribe successful', successful) + isPushEnabled = false + }).catch(function(e) { + console.error('Unsubscription error: ', e) + }) + } + + }).catch(function(e) { + console.error('Error thrown while unsubscribing from ' + + 'push messaging.', e) + }) + }) + } + function isAliveNotify() { if (!isAvailable || $rootScope.idle && $rootScope.idle.deactivated) { @@ -2176,6 +2199,7 @@ angular.module('izhukov.utils', []) isPushEnabled: isPushEnabled, subscribe: subscribe, unsubscribe: unsubscribe, + forceUnsubscribe: forceUnsubscribe, hidePushNotifications: hidePushNotifications, setLocalNotificationsDisabled: setLocalNotificationsDisabled, setSettings: setSettings From fdf983dec78a3acec641065ab8fac0ce8692eb77 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Mon, 3 Jul 2017 14:54:16 +0300 Subject: [PATCH 26/49] Fixed force unsubscribe on logout --- app/js/controllers.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/js/controllers.js b/app/js/controllers.js index 6a22a6ef..ed905182 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -31,7 +31,7 @@ angular.module('myApp.controllers', ['myApp.i18n']) LayoutSwitchService.start() }) - .controller('AppLoginController', function ($scope, $rootScope, $location, $timeout, $modal, $modalStack, MtpApiManager, ErrorService, NotificationsManager, PasswordManager, ChangelogNotifyService, IdleManager, LayoutSwitchService, TelegramMeWebService, _) { + .controller('AppLoginController', function ($scope, $rootScope, $location, $timeout, $modal, $modalStack, MtpApiManager, ErrorService, NotificationsManager, PasswordManager, ChangelogNotifyService, IdleManager, LayoutSwitchService, WebPushApiManager, TelegramMeWebService, _) { $modalStack.dismissAll() IdleManager.start() @@ -47,6 +47,7 @@ angular.module('myApp.controllers', ['myApp.i18n']) return } TelegramMeWebService.setAuthorized(false) + WebPushApiManager.forceUnsubscribe() }) var options = {dcID: 2, createNetworker: true} From ea0e5a9dd2c30e831615f67e65077102763e7f3a Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Tue, 4 Jul 2017 14:47:31 +0300 Subject: [PATCH 27/49] Update CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8db68fc..1152e419 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +### 0.5.7 +* Video messages and Telescope +* Notifications about new logins +* Changelog is now received as a message + ### 0.5.6 * Edit the text of your messages after sending them. This works across all Telegram chats, including groups and one-on-one conversations. Select a message and click 'Edit' or just press the up arrow button to edit your last message. * Unsend Messages: retract any messages within 48 hours of sending them. Check out the [Telegram Blog](https://telegram.org/blog/unsend-and-usage) for more info. From 9111bed58057ba1402d41bd8a19e780955234d7c Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Wed, 5 Jul 2017 11:57:23 +0300 Subject: [PATCH 28/49] Fixed crash in ChromeApp Also bump to 0.5.7.1 Closes #1450 --- app/js/app.js | 2 +- app/js/background.js | 2 +- app/js/controllers.js | 2 +- app/js/directives.js | 2 +- app/js/directives_mobile.js | 2 +- app/js/filters.js | 2 +- app/js/lib/bin_utils.js | 2 +- app/js/lib/config.js | 4 ++-- app/js/lib/crypto_worker.js | 2 +- app/js/lib/mtproto.js | 2 +- app/js/lib/mtproto_wrapper.js | 2 +- app/js/lib/ng_utils.js | 2 +- app/js/lib/tl_utils.js | 2 +- app/js/lib/utils.js | 2 +- app/js/message_composer.js | 2 +- app/js/messages_manager.js | 2 +- app/js/services.js | 7 ++++++- app/manifest.json | 2 +- app/manifest.webapp | 2 +- package.json | 2 +- 20 files changed, 26 insertions(+), 21 deletions(-) diff --git a/app/js/app.js b/app/js/app.js index 4644ad0d..19adeb66 100644 --- a/app/js/app.js +++ b/app/js/app.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/background.js b/app/js/background.js index 11495c64..dad25228 100644 --- a/app/js/background.js +++ b/app/js/background.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/controllers.js b/app/js/controllers.js index ed905182..75e08400 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/directives.js b/app/js/directives.js index 16e612e0..33716e7c 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/directives_mobile.js b/app/js/directives_mobile.js index d466f473..1c48747d 100644 --- a/app/js/directives_mobile.js +++ b/app/js/directives_mobile.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/filters.js b/app/js/filters.js index 0885d12c..577d261a 100644 --- a/app/js/filters.js +++ b/app/js/filters.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/bin_utils.js b/app/js/lib/bin_utils.js index df9a210a..2348e7b9 100644 --- a/app/js/lib/bin_utils.js +++ b/app/js/lib/bin_utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/config.js b/app/js/lib/config.js index 9e574e54..4bc2c564 100644 --- a/app/js/lib/config.js +++ b/app/js/lib/config.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE @@ -20,7 +20,7 @@ Config = window.Config || {} Config.App = { id: 2496, hash: '8da85b0d5bfe62527e5b244c209159c3', - version: '0.5.7', + version: '0.5.7.1', domains: ['web.telegram.org', 'zhukov.github.io'] } diff --git a/app/js/lib/crypto_worker.js b/app/js/lib/crypto_worker.js index 2a5b44fd..087c3bb9 100644 --- a/app/js/lib/crypto_worker.js +++ b/app/js/lib/crypto_worker.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/mtproto.js b/app/js/lib/mtproto.js index 9ce95121..0d353a68 100644 --- a/app/js/lib/mtproto.js +++ b/app/js/lib/mtproto.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/mtproto_wrapper.js b/app/js/lib/mtproto_wrapper.js index 374dec9d..2c9dc123 100644 --- a/app/js/lib/mtproto_wrapper.js +++ b/app/js/lib/mtproto_wrapper.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/ng_utils.js b/app/js/lib/ng_utils.js index 0df4257b..85e2fa10 100755 --- a/app/js/lib/ng_utils.js +++ b/app/js/lib/ng_utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/tl_utils.js b/app/js/lib/tl_utils.js index 0fc61a9f..a9164d39 100644 --- a/app/js/lib/tl_utils.js +++ b/app/js/lib/tl_utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/utils.js b/app/js/lib/utils.js index 95858dc0..f88ba448 100644 --- a/app/js/lib/utils.js +++ b/app/js/lib/utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/message_composer.js b/app/js/message_composer.js index e424463c..fb0b805f 100644 --- a/app/js/message_composer.js +++ b/app/js/message_composer.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/messages_manager.js b/app/js/messages_manager.js index 300b02ee..5d8a3315 100644 --- a/app/js/messages_manager.js +++ b/app/js/messages_manager.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/services.js b/app/js/services.js index a13b9f4e..9ba007b7 100755 --- a/app/js/services.js +++ b/app/js/services.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7 - messaging web application for MTProto + * Webogram v0.5.7.1 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE @@ -4730,6 +4730,11 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) !target.onclick && !target.onmousedown) { var href = $(target).attr('href') || target.href || '' + if (Config.Modes.chrome_packed && + href.length && + $(target).attr('target') == '_blank') { + $(target).attr('rel', '') + } var match = href.match(tgAddrRegExp) if (match) { if (handleTgProtoAddr(match[3], true)) { diff --git a/app/manifest.json b/app/manifest.json index 94450556..c69e3fdd 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "Telegram", "description": "Telegram Web App.\nMore info & source code here: https://github.com/zhukov/webogram", - "version": "0.5.7", + "version": "0.5.7.1", "short_name": "Telegram", "manifest_version": 2, "app": { diff --git a/app/manifest.webapp b/app/manifest.webapp index b101fd12..88416791 100644 --- a/app/manifest.webapp +++ b/app/manifest.webapp @@ -1,7 +1,7 @@ { "name": "Telegram", "description": "Telegram Web App.\nMore info & source code here: https://github.com/zhukov/webogram", - "version": "0.5.7", + "version": "0.5.7.1", "type": "privileged", "launch_path": "/index.html", "developer": { diff --git a/package.json b/package.json index 358ea161..246e4910 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Telegram", "description": "Telegram Web App.\nMore info & source code here: https://github.com/zhukov/webogram", - "version": "0.5.7", + "version": "0.5.7.1", "main": "app/index.html", "single-instance": true, "dom_storage_quota": 40, From 98de12e860559ca4820bdb8c03b992d0f2cef80f Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Mon, 31 Jul 2017 18:39:46 +0300 Subject: [PATCH 29/49] Added JS OPUS decoder via ogv.js Fixed playback of voice messages from iOS app in Chrome Added playback ability to Safari Closes #1396 Closes #1464 Closes #1465 --- app/index.html | 5 + app/js/directives.js | 68 +- app/js/services.js | 1 - app/less/app.less | 9 + app/partials/desktop/audio_player.html | 12 +- app/partials/mobile/audio_player.html | 25 +- .../angular-media-player.js | 15 +- app/vendor/ogv.js/COPYING | 21 + app/vendor/ogv.js/COPYING-ogg.txt | 28 + app/vendor/ogv.js/COPYING-opus.txt | 44 + app/vendor/ogv.js/COPYING-theora.txt | 28 + app/vendor/ogv.js/COPYING-vorbis.txt | 28 + app/vendor/ogv.js/LICENSE-nestegg.txt | 13 + app/vendor/ogv.js/LICENSE-vpx.txt | 31 + app/vendor/ogv.js/PATENTS-vpx.txt | 23 + app/vendor/ogv.js/README.md | 371 + app/vendor/ogv.js/dynamicaudio.swf | Bin 0 -> 3459 bytes .../ogv.js/ogv-decoder-audio-opus-wasm.js | 17 + .../ogv.js/ogv-decoder-audio-opus-wasm.wasm | Bin 0 -> 189537 bytes app/vendor/ogv.js/ogv-decoder-audio-opus.js | 32 + .../ogv.js/ogv-decoder-audio-vorbis-wasm.js | 17 + .../ogv.js/ogv-decoder-audio-vorbis-wasm.wasm | Bin 0 -> 150470 bytes app/vendor/ogv.js/ogv-decoder-audio-vorbis.js | 30 + .../ogv.js/ogv-decoder-video-theora-wasm.js | 17 + .../ogv.js/ogv-decoder-video-theora-wasm.wasm | Bin 0 -> 53613 bytes app/vendor/ogv.js/ogv-decoder-video-theora.js | 30 + app/vendor/ogv.js/ogv-decoder-video-vp8-mt.js | 31 + .../ogv.js/ogv-decoder-video-vp8-wasm.js | 17 + .../ogv.js/ogv-decoder-video-vp8-wasm.wasm | Bin 0 -> 118537 bytes app/vendor/ogv.js/ogv-decoder-video-vp8.js | 31 + app/vendor/ogv.js/ogv-decoder-video-vp9-mt.js | 33 + .../ogv.js/ogv-decoder-video-vp9-wasm.js | 17 + .../ogv.js/ogv-decoder-video-vp9-wasm.wasm | Bin 0 -> 227459 bytes app/vendor/ogv.js/ogv-decoder-video-vp9.js | 33 + app/vendor/ogv.js/ogv-demuxer-ogg-wasm.js | 17 + app/vendor/ogv.js/ogv-demuxer-ogg-wasm.wasm | Bin 0 -> 84734 bytes app/vendor/ogv.js/ogv-demuxer-ogg.js | 30 + app/vendor/ogv.js/ogv-demuxer-webm-wasm.js | 17 + app/vendor/ogv.js/ogv-demuxer-webm-wasm.wasm | Bin 0 -> 57864 bytes app/vendor/ogv.js/ogv-demuxer-webm.js | 30 + app/vendor/ogv.js/ogv-support.js | 272 + app/vendor/ogv.js/ogv-version.js | 70 + app/vendor/ogv.js/ogv-worker-audio.js | 701 ++ app/vendor/ogv.js/ogv-worker-video.js | 700 ++ app/vendor/ogv.js/ogv.js | 9663 +++++++++++++++++ app/vendor/ogv.js/pthread-main.js | 103 + app/webogram.appcache | 2 +- 47 files changed, 12593 insertions(+), 39 deletions(-) create mode 100644 app/vendor/ogv.js/COPYING create mode 100644 app/vendor/ogv.js/COPYING-ogg.txt create mode 100644 app/vendor/ogv.js/COPYING-opus.txt create mode 100644 app/vendor/ogv.js/COPYING-theora.txt create mode 100644 app/vendor/ogv.js/COPYING-vorbis.txt create mode 100644 app/vendor/ogv.js/LICENSE-nestegg.txt create mode 100644 app/vendor/ogv.js/LICENSE-vpx.txt create mode 100644 app/vendor/ogv.js/PATENTS-vpx.txt create mode 100644 app/vendor/ogv.js/README.md create mode 100644 app/vendor/ogv.js/dynamicaudio.swf create mode 100644 app/vendor/ogv.js/ogv-decoder-audio-opus-wasm.js create mode 100644 app/vendor/ogv.js/ogv-decoder-audio-opus-wasm.wasm create mode 100644 app/vendor/ogv.js/ogv-decoder-audio-opus.js create mode 100644 app/vendor/ogv.js/ogv-decoder-audio-vorbis-wasm.js create mode 100644 app/vendor/ogv.js/ogv-decoder-audio-vorbis-wasm.wasm create mode 100644 app/vendor/ogv.js/ogv-decoder-audio-vorbis.js create mode 100644 app/vendor/ogv.js/ogv-decoder-video-theora-wasm.js create mode 100644 app/vendor/ogv.js/ogv-decoder-video-theora-wasm.wasm create mode 100644 app/vendor/ogv.js/ogv-decoder-video-theora.js create mode 100644 app/vendor/ogv.js/ogv-decoder-video-vp8-mt.js create mode 100644 app/vendor/ogv.js/ogv-decoder-video-vp8-wasm.js create mode 100644 app/vendor/ogv.js/ogv-decoder-video-vp8-wasm.wasm create mode 100644 app/vendor/ogv.js/ogv-decoder-video-vp8.js create mode 100644 app/vendor/ogv.js/ogv-decoder-video-vp9-mt.js create mode 100644 app/vendor/ogv.js/ogv-decoder-video-vp9-wasm.js create mode 100644 app/vendor/ogv.js/ogv-decoder-video-vp9-wasm.wasm create mode 100644 app/vendor/ogv.js/ogv-decoder-video-vp9.js create mode 100644 app/vendor/ogv.js/ogv-demuxer-ogg-wasm.js create mode 100644 app/vendor/ogv.js/ogv-demuxer-ogg-wasm.wasm create mode 100644 app/vendor/ogv.js/ogv-demuxer-ogg.js create mode 100644 app/vendor/ogv.js/ogv-demuxer-webm-wasm.js create mode 100644 app/vendor/ogv.js/ogv-demuxer-webm-wasm.wasm create mode 100644 app/vendor/ogv.js/ogv-demuxer-webm.js create mode 100644 app/vendor/ogv.js/ogv-support.js create mode 100644 app/vendor/ogv.js/ogv-version.js create mode 100644 app/vendor/ogv.js/ogv-worker-audio.js create mode 100644 app/vendor/ogv.js/ogv-worker-video.js create mode 100644 app/vendor/ogv.js/ogv.js create mode 100644 app/vendor/ogv.js/pthread-main.js diff --git a/app/index.html b/app/index.html index 0d92c41c..d3a49705 100644 --- a/app/index.html +++ b/app/index.html @@ -72,6 +72,11 @@ + + + + + diff --git a/app/js/directives.js b/app/js/directives.js index 33716e7c..87b5718c 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -3120,8 +3120,31 @@ angular.module('myApp.directives', ['myApp.filters']) } }) + .directive('myOgvPlayer', function ($compile) { + return { + link: function ($scope, $element, $attrs) { + var audio = $scope.audio + var playerEl + if (audio.mime_type == 'audio/ogg' && + // false && + OGVCompat.hasWebAudio() && // we don't want to use Flash + OGVCompat.supported('OGVPlayer')) { + playerEl = new OGVPlayer({debug: false, worker: false}) + } else { + playerEl = document.createElement('audio') + } + + $(playerEl).attr('media-player', $attrs.myOgvPlayer) + $(playerEl).attr('src', '{{::' + $attrs.src + '}}') + + $compile(playerEl)($scope) + $($element).append(playerEl) + } + } + }) + .directive('myAudioPlayer', function ($timeout, $q, Storage, AppDocsManager, AppMessagesManager, ErrorService) { - var currentPlayer = false + var currentPlayerScope = false var audioVolume = 0.5 Storage.get('audio_volume').then(function (newAudioVolume) { @@ -3147,20 +3170,23 @@ angular.module('myApp.directives', ['myApp.filters']) return { link: link, scope: { - audio: '=', - message: '=' + audio: '=' }, templateUrl: templateUrl('audio_player') } - function checkPlayer (newPlayer) { - if (newPlayer === currentPlayer) { + function checkAudioPlayer (newPlayerScope) { + if (newPlayerScope === currentPlayerScope) { return false } - if (currentPlayer) { - currentPlayer.pause() + if (currentPlayerScope) { + ;(function ($scope) { + setZeroTimeout(function () { + $scope.mediaPlayer.player.pause() + }) + })(currentPlayerScope) } - currentPlayer = newPlayer + currentPlayerScope = newPlayerScope } function link ($scope, element, attrs) { @@ -3168,20 +3194,34 @@ angular.module('myApp.directives', ['myApp.filters']) $scope.volume = audioVolume $scope.mediaPlayer = {} + if ($scope.$parent.messageId) { + $scope.message = AppMessagesManager.wrapForHistory($scope.$parent.messageId) + } $scope.download = function () { AppDocsManager.saveDocFile($scope.audio.id) } + $scope.duration = function () { + if ($scope.mediaPlayer.player && + $scope.mediaPlayer.player.duration > 0 && + $scope.mediaPlayer.player.duration < Infinity) { + return $scope.mediaPlayer.player.duration + } + return $scope.audio && $scope.audio.duration || 0 + } + $scope.togglePlay = function () { if ($scope.audio.url) { - checkPlayer($scope.mediaPlayer.player) - $scope.mediaPlayer.player.playPause() + checkAudioPlayer($scope) + setZeroTimeout(function () { + $scope.mediaPlayer.player.playPause() + }) } else if ($scope.audio.progress && $scope.audio.progress.enabled) { } else { AppDocsManager.downloadDoc($scope.audio.id).then(function () { onContentLoaded(function () { - var errorListenerEl = $('audio', element)[0] || element[0] + var errorListenerEl = $('audio, ogvjs', element)[0] || element[0] if (errorListenerEl) { var errorAlready = false var onAudioError = function (event) { @@ -3209,13 +3249,13 @@ angular.module('myApp.directives', ['myApp.filters']) }) } setTimeout(function () { - checkPlayer($scope.mediaPlayer.player) + checkAudioPlayer($scope) $scope.mediaPlayer.player.setVolume(audioVolume) $scope.mediaPlayer.player.play() if ($scope.message && - !$scope.message.pFlags.out && - $scope.message.pFlags.media_unread) { + !$scope.message.pFlags.out && + $scope.message.pFlags.media_unread) { AppMessagesManager.readMessages([$scope.message.mid]) } }, 300) diff --git a/app/js/services.js b/app/js/services.js index 9ba007b7..e2498d1d 100755 --- a/app/js/services.js +++ b/app/js/services.js @@ -4869,7 +4869,6 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) // console.warn(dT(), 'server', draft) } else { // console.warn(dT(), 'local', draft) - console.warn(dT(), 'local', draft) } var replyToMsgID = draft && draft.replyToMsgID if (replyToMsgID) { diff --git a/app/less/app.less b/app/less/app.less index deee51e2..04187eaf 100644 --- a/app/less/app.less +++ b/app/less/app.less @@ -2042,6 +2042,15 @@ img.im_message_document_thumb { } } +.audio_player_media { + position: absolute; + visibility: hidden; + + canvas { + display: none; + } +} + .im_message_upload_progress_wrap, .im_message_download_progress_wrap { margin-top: 5px; diff --git a/app/partials/desktop/audio_player.html b/app/partials/desktop/audio_player.html index 17adc90a..21d28d4e 100755 --- a/app/partials/desktop/audio_player.html +++ b/app/partials/desktop/audio_player.html @@ -4,8 +4,8 @@
- - + +
[ @@ -18,7 +18,7 @@ ] -
+
@@ -37,11 +37,9 @@
-
+
- +
\ No newline at end of file diff --git a/app/partials/mobile/audio_player.html b/app/partials/mobile/audio_player.html index 58520719..21d28d4e 100644 --- a/app/partials/mobile/audio_player.html +++ b/app/partials/mobile/audio_player.html @@ -4,10 +4,11 @@
- - + +
- + [ + @@ -15,19 +16,20 @@ + ] -
+
-
- - +
+ +
- +
@@ -35,10 +37,9 @@
-
+
+
- +
\ No newline at end of file diff --git a/app/vendor/angular-media-player/angular-media-player.js b/app/vendor/angular-media-player/angular-media-player.js index a5d8893b..d2444ff6 100644 --- a/app/vendor/angular-media-player/angular-media-player.js +++ b/app/vendor/angular-media-player/angular-media-player.js @@ -50,7 +50,9 @@ angular.module('mediaPlayer', ['mediaPlayer.helpers']) this.$domEl.load(); this.ended = undefined; if (autoplay) { - this.$element.one('canplay', this.play.bind(this)); + // ogv.js doesn't have support for canplay event yet + var canPlayEvent = this.$domEl.tagName == 'OGVJS' ? 'loadeddata' : 'canplay' + this.$element.one(canPlayEvent, this.play.bind(this)); } }, /** @@ -242,6 +244,10 @@ angular.module('mediaPlayer', ['mediaPlayer.helpers']) * Returns an unbinding function */ var bindListeners = function (au, al, element) { + var updateTime = function (scope) { + scope.currentTime = al.currentTime; + scope.formatTime = scope.$formatTime(scope.currentTime); + } var listeners = { playing: function () { au.$apply(function (scope) { @@ -261,13 +267,13 @@ angular.module('mediaPlayer', ['mediaPlayer.helpers']) au.$apply(function (scope) { scope.ended = true; scope.playing = false; // IE9 does not throw 'pause' when file ends + updateTime(scope) }); } }, timeupdate: throttle(1000, false, function () { au.$apply(function (scope) { - scope.currentTime = al.currentTime; - scope.formatTime = scope.$formatTime(scope.currentTime); + updateTime(scope) }); }), loadedmetadata: function () { @@ -278,6 +284,7 @@ angular.module('mediaPlayer', ['mediaPlayer.helpers']) if (al.buffered.length) { scope.loadPercent = Math.round((al.buffered.end(al.buffered.length - 1) / scope.duration) * 100); } + updateTime(scope) }); }, progress: function () { @@ -434,7 +441,7 @@ angular.module('mediaPlayer', ['mediaPlayer.helpers']) scope.$eval(mediaName + ' = player', {player: player}); } - if (element[0].tagName !== 'AUDIO' && element[0].tagName !== 'VIDEO') { + if (element[0].tagName !== 'AUDIO' && element[0].tagName !== 'VIDEO' && element[0].tagName !== 'OGVJS') { return new Error('player directive works only when attached to an
diff --git a/app/partials/mobile/head.html b/app/partials/mobile/head.html index 421c35db..152ebe30 100644 --- a/app/partials/mobile/head.html +++ b/app/partials/mobile/head.html @@ -25,6 +25,7 @@
  • +
  • From 9ce6996f392821ef84696fdfddad0e263299f8ea Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Mon, 31 Jul 2017 19:00:40 +0300 Subject: [PATCH 33/49] Reverted chrome frame for Linux users Closes #1452 --- app/js/background.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/js/background.js b/app/js/background.js index dad25228..d9f27da7 100644 --- a/app/js/background.js +++ b/app/js/background.js @@ -6,6 +6,7 @@ */ chrome.app.runtime.onLaunched.addListener(function (launchData) { + var isWindows = typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.match(/windows/i) ? true : false chrome.app.window.create('../index.html', { id: 'webogram-chat', innerBounds: { @@ -14,6 +15,6 @@ chrome.app.runtime.onLaunched.addListener(function (launchData) { }, minWidth: 320, minHeight: 400, - frame: { color: "#5682a3" } + frame: isWindows ? { color: '#5682a3' } : 'chrome' }) }) From 54dfe8fd604f9a06aefb6880635e6d1edde11fe7 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Mon, 31 Jul 2017 19:01:05 +0300 Subject: [PATCH 34/49] Fixed repeating changelog notifications --- app/js/services.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/js/services.js b/app/js/services.js index e2498d1d..3c3c3e32 100755 --- a/app/js/services.js +++ b/app/js/services.js @@ -4342,7 +4342,14 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) }) .service('ChangelogNotifyService', function (Storage, $rootScope, $modal, $timeout, MtpApiManager, ApiUpdatesManager) { + + var checked = false + function checkUpdate () { + if (checked) { + return + } + checked = true MtpApiManager.getUserID().then(function (userID) { if (!userID) { return From 52cbc5690609b72053965011c43c48730e322750 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Mon, 31 Jul 2017 20:39:20 +0300 Subject: [PATCH 35/49] Fixed crash on chrome app link middle-click Closes #1471 --- app/js/services.js | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/app/js/services.js b/app/js/services.js index 3c3c3e32..8a34e783 100755 --- a/app/js/services.js +++ b/app/js/services.js @@ -4737,11 +4737,6 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) !target.onclick && !target.onmousedown) { var href = $(target).attr('href') || target.href || '' - if (Config.Modes.chrome_packed && - href.length && - $(target).attr('target') == '_blank') { - $(target).attr('rel', '') - } var match = href.match(tgAddrRegExp) if (match) { if (handleTgProtoAddr(match[3], true)) { @@ -4751,6 +4746,19 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) } }) + $(document).on('mousedown', function (event) { + var target = event.target + if (target && + target.tagName == 'A') { + var href = $(target).attr('href') || target.href || '' + if (Config.Modes.chrome_packed && + href.length && + $(target).attr('target') == '_blank') { + $(target).attr('rel', '') + } + } + }) + $rootScope.$on('$routeUpdate', checkLocationTgAddr) checkLocationTgAddr() } From 0a2b5fbdfe9c0e2f7762456153768dd7090159a5 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 4 Aug 2017 23:09:19 +0200 Subject: [PATCH 36/49] Make it work with recordjs File is now encoded to Opus, like in other apps --- app/index.html | 2 + app/js/controllers.js | 2 - app/js/directives.js | 134 +++++++------ app/less/mobile.less | 31 +-- app/partials/mobile/im.html | 2 +- app/vendor/recorderjs/encoder_worker.js | 18 ++ app/vendor/recorderjs/recorder.js | 242 ++++++++++++++++++++++++ app/vendor/recorderjs/recorder.min.js | 1 + app/webogram.appcache | 2 +- 9 files changed, 345 insertions(+), 89 deletions(-) create mode 100755 app/vendor/recorderjs/encoder_worker.js create mode 100755 app/vendor/recorderjs/recorder.js create mode 100755 app/vendor/recorderjs/recorder.min.js diff --git a/app/index.html b/app/index.html index d3a49705..5c800795 100644 --- a/app/index.html +++ b/app/index.html @@ -78,6 +78,8 @@ + + diff --git a/app/js/controllers.js b/app/js/controllers.js index 8431400b..ff175065 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -518,8 +518,6 @@ angular.module('myApp.controllers', ['myApp.i18n']) skipped: false } - $scope.voiceRecorder = { time : '', recording : null, processing : false }; - $scope.openSettings = function () { $modal.open({ templateUrl: templateUrl('settings_modal'), diff --git a/app/js/directives.js b/app/js/directives.js index 69369de6..c5c4a11e 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1547,7 +1547,7 @@ angular.module('myApp.directives', ['myApp.filters']) } }) - .directive('mySendForm', function (_, $q, $timeout, $compile, $modalStack, $http, $interpolate, Storage, AppStickersManager, AppDocsManager, ErrorService, AppInlineBotsManager, FileManager, shouldFocusOnInteraction) { + .directive('mySendForm', function (_, $q, $timeout, $interval, $window, $compile, $modalStack, $http, $interpolate, Storage, AppStickersManager, AppDocsManager, ErrorService, AppInlineBotsManager, FileManager, shouldFocusOnInteraction) { return { link: link, scope: { @@ -1564,17 +1564,25 @@ angular.module('myApp.directives', ['myApp.filters']) var fileSelects = $('input', element) var dropbox = $('.im_send_dropbox_wrap', element)[0] var messageFieldWrap = $('.im_send_field_wrap', element)[0] + var sendFieldPanel = $('.im_send_field_panel', element)[0] var dragStarted var dragTimeout var submitBtn = $('.im_submit', element)[0] - var voiceRecord = $('.im_record', element); + var voiceRecordBtn = $('.im_record', element)[0] var stickerImageCompiled = $compile('') var cachedStickerImages = {} - var audioRecorder = null; - var audioPromise = null; - var audioStream = null; + var voiceRecorder = null + var voiceRecordSuccess = false + var voiceRecordSupported = Recorder.isRecordingSupported() + var voiceRecordDurationInterval = null + var voiceRecorderPromise = null + if (voiceRecordSupported) { + $(sendFieldPanel).addClass('im_record_supported') + } + + $scope.voiceRecorder = {duration: 0, recording: false, processing: false} var emojiTooltip = new EmojiTooltip(emojiButton, { getStickers: function (callback) { @@ -1688,82 +1696,82 @@ angular.module('myApp.directives', ['myApp.filters']) }) }) - navigator.getUserMedia = ( navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); - - voiceRecord.on('touchstart', function(e) { - if ($scope.$parent.$parent.voiceRecorder.processing) { return; } + $(voiceRecordBtn).on('contextmenu', cancelEvent) - navigator.getUserMedia({audio : true}, function(stream){ - var start = Date.now(); - var touch = null; - - audioPromise = null; - audioStream = stream; - audioRecorder = new MediaRecorder(stream); - - var interval = setInterval(function(){ - var time = (new Date()); + $(voiceRecordBtn).on('touchstart', function(e) { + if ($scope.voiceRecorder.processing) { + return + } - time.setTime(Date.now() - start); + voiceRecorderPromise = null - $scope.$apply(function(){ - $scope.$parent.$parent.voiceRecorder.time = (time.getMinutes() < 10 ? '0' : '') + time.getMinutes() + ':' + (time.getSeconds() < 10 ? '0' : '') + time.getSeconds(); - }); - }, 1000); + voiceRecorder = new Recorder({ + monitorGain: 0, + numberOfChannels: 1, + bitRate: 64000, + encoderSampleRate: 48000, + encoderPath: 'vendor/recorderjs/encoder_worker.js' + }) - $scope.$apply(function(){ - $scope.$parent.$parent.voiceRecorder.time = '00:00'; - $scope.$parent.$parent.voiceRecorder.recording = interval; - }); + voiceRecorder.addEventListener('start', function(e) { + var startTime = tsNow(true) - audioRecorder.start(); + voiceRecordSuccess = false - console.log('recording now!'); + voiceRecordDurationInterval = $interval(function() { + $scope.voiceRecorder.duration = tsNow(true) - startTime + }, 1000) - }, function(e){ - console.error(e); - }); - }); + $scope.$apply(function() { + $scope.voiceRecorder.recording = true + }) - voiceRecord.on('click', function(){ - if (audioPromise) { - $scope.$parent.$parent.voiceRecorder.processing = true; + console.warn(dT(), 'recording now!') + }) - audioPromise.then(function(e) { - var blob = e.data; + voiceRecorder.addEventListener('streamReady', function(e) { + voiceRecorder.start() + }) - console.log(blob); - $scope.draftMessage.files = [blob]; - $scope.draftMessage.isMedia = true; + voiceRecorder.initStream() - $scope.$parent.$parent.voiceRecorder.processing = false; + $($window).one('touchend', function() { + var deferred = $q.defer() + voiceRecorder.addEventListener('dataAvailable', function(e) { + var blob = blobConstruct([e.detail], 'audio/ogg') + deferred.resolve(blob) + }) + voiceRecorderPromise = deferred.promise + voiceRecorder.stop() - audioPromise = null; - }); - } - }); + $interval.cancel(voiceRecordDurationInterval) - $($window).on('touchend', function(){ - if (audioStream && audioRecorder) { - audioPromise = new Promise(function(resolve) { - audioRecorder.ondataavailable = resolve; - }); + $scope.$apply(function() { + $scope.voiceRecorder.recording = false + }) + }) + }) - audioRecorder.stop(); - audioStream.stop(); + $(voiceRecordBtn).on('touchend', function(e) { + voiceRecordSuccess = true + $timeout(function () { + if (voiceRecorderPromise) { + $scope.voiceRecorder.processing = true - audioRecorder = null; - audioStream = null; + voiceRecorderPromise.then(function(blob) { + console.warn(dT(), 'got audio', blob) + $scope.draftMessage.files = [blob] + $scope.draftMessage.isMedia = true - clearInterval($scope.$parent.$parent.voiceRecorder.recording); + $scope.voiceRecorder.processing = false - $scope.$apply(function(){ - $scope.$parent.$parent.voiceRecorder.recording = null; - }); - } - }); + voiceRecorderPromise = null + }) + } + }, 100) + }) - var sendOnEnter = true; + var sendOnEnter = true function updateSendSettings () { Storage.get('send_ctrlenter').then(function (sendOnCtrl) { sendOnEnter = !sendOnCtrl diff --git a/app/less/mobile.less b/app/less/mobile.less index eace37c3..53d3b5a5 100644 --- a/app/less/mobile.less +++ b/app/less/mobile.less @@ -1431,7 +1431,7 @@ a.im_message_fwd_author { background-position: -12px -285px; } -.im_attach, .im_record { +.im_attach { cursor: pointer; display: none; overflow: hidden; @@ -1442,6 +1442,7 @@ a.im_message_fwd_author { width: 50px; height: 32px; padding: 3px 13px 4px 16px; + right: 0; &:active { .icon-paperclip { @@ -1451,29 +1452,15 @@ a.im_message_fwd_author { } } -.non_ffos { - .im_attach { - right: 0; - } -} - .im_record { - right: 0; - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; -} - -.ffos { - .im_send_form_empty { - .im_send_field_wrap { - margin-right: 85px; - } + right: 0; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; - .im_record { - display: block; - } + .im_record_supported .im_send_form_empty & { + display: block; } } diff --git a/app/partials/mobile/im.html b/app/partials/mobile/im.html index 778a2eb1..3d7e3732 100644 --- a/app/partials/mobile/im.html +++ b/app/partials/mobile/im.html @@ -163,7 +163,7 @@
    -
    {{voiceRecorder.time}}
    +
    diff --git a/app/vendor/recorderjs/encoder_worker.js b/app/vendor/recorderjs/encoder_worker.js new file mode 100755 index 00000000..3b9072c2 --- /dev/null +++ b/app/vendor/recorderjs/encoder_worker.js @@ -0,0 +1,18 @@ +var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=console.log;if(!Module["printErr"])Module["printErr"]=console.warn;var nodeFS;var nodePath;Module["read"]=function read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return xhr.response}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.warn(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){abort("NO_DYNAMIC_EXECUTION=1 was set, cannot eval")}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}if(!Module["quit"]){Module["quit"]=(function(status,toThrow){throw toThrow})}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var Runtime={setTempRet0:(function(value){tempRet0=value;return value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i>2];var end=(ret+size+15|0)&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];if(!func){abort("NO_DYNAMIC_EXECUTION=1 was set, cannot eval")}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=Runtime.stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){var __cxa_demangle_func=Module["___cxa_demangle"]||Module["__cxa_demangle"];if(__cxa_demangle_func){try{var s=func.substr(1);var len=lengthBytesUTF8(s)+1;var buf=_malloc(len);stringToUTF8(s,buf,len);var status=_malloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}return func}Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}Module["stackTrace"]=stackTrace;var HEAP;var buffer;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which adjusts the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var lastChar,end;if(dontAddNull){end=buffer+lengthBytesUTF8(string);lastChar=HEAP8[end]}stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end]=lastChar}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];if(!Math["trunc"])Math["trunc"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math["trunc"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var ASM_CONSTS=[];STATIC_BASE=8;STATICTOP=STATIC_BASE+34512;__ATINIT__.push();allocate([200,81,12,210,132,244,239,63,0,0,0,0,0,0,240,63,200,81,12,210,132,244,239,63,246,149,7,233,41,210,239,63,218,211,196,241,50,153,239,63,212,253,16,217,15,74,239,63,126,159,187,110,91,229,238,63,97,193,63,157,217,107,238,63,29,215,241,37,117,222,237,63,106,127,111,236,60,62,237,63,201,234,53,193,96,140,236,63,119,36,69,1,46,202,235,63,30,188,126,218,11,249,234,63,58,208,191,52,119,26,234,63,245,37,35,128,254,47,233,63,242,64,67,131,61,59,232,63,14,7,83,222,216,61,231,63,247,242,175,163,121,57,230,63,76,200,197,32,201,47,229,63,206,184,120,145,108,34,228,63,255,153,90,25,1,19,227,63,47,156,49,237,23,3,226,63,99,217,6,205,50,244,224,63,77,90,134,114,129,207,223,63,205,143,100,251,53,190,221,63,21,198,55,144,5,183,219,63,224,7,173,168,61,188,217,63,96,51,10,147,243,207,215,63,243,29,252,196,1,244,213,63,74,133,103,248,5,42,212,63,231,205,60,20,96,115,210,63,141,202,52,55,50,209,208,63,216,209,122,240,193,136,206,63,175,39,120,18,42,155,203,63,200,72,147,222,121,218,200,63,181,207,91,35,31,71,198,63,61,87,66,20,31,225,195,63,181,205,1,64,29,168,193,63,77,186,144,187,198,54,191,63,46,12,38,56,212,115,187,63,102,146,5,10,196,4,184,63,128,84,22,199,121,230,180,63,98,72,78,38,110,21,178,63,164,21,132,151,133,27,175,63,236,178,235,32,167,150,170,63,151,168,65,69,147,147,166,63,62,120,47,239,88,9,163,63,213,231,172,71,200,221,159,63,108,207,77,23,57,118,154,63,244,241,216,232,255,201,149,63,15,11,181,166,121,199,145,63,85,23,108,250,30,187,140,63,254,164,177,40,178,247,134,63,60,183,150,234,126,37,130,63,165,251,181,204,84,78,124,63,103,31,84,119,159,194,117,63,5,196,127,21,59,117,112,63,116,127,179,156,157,111,104,63,211,240,243,0,146,192,97,63,247,82,219,250,167,35,89,63,63,193,172,237,121,64,81,63,241,66,0,145,250,194,70,63,123,178,205,83,62,128,60,63,38,81,146,34,240,143,48,63,199,84,110,96,122,20,33,63,125,137,127,55,32,171,11,63,241,104,227,136,181,248,228,62,0,0,0,0,0,0,0,0,185,166,163,144,34,218,239,63,0,0,0,0,0,0,240,63,185,166,163,144,34,218,239,63,133,11,22,218,123,105,239,63,68,70,205,120,215,176,238,63,38,83,195,134,192,180,237,63,51,218,46,93,86,123,236,63,169,206,23,57,19,12,235,63,169,234,113,33,135,111,233,63,114,230,145,30,10,175,231,63,214,209,105,196,105,212,229,63,192,167,164,20,149,233,227,63,57,160,0,229,74,248,225,63,234,131,27,223,205,9,224,63,85,106,213,50,66,77,220,63,67,93,222,251,159,172,216,63,15,90,246,193,133,62,213,63,31,5,219,202,67,13,210,63,160,103,55,35,24,65,206,63,140,139,122,243,225,250,200,63,240,174,72,134,251,76,196,63,116,227,39,31,204,55,192,63,238,97,138,205,34,111,185,63,59,78,85,202,0,138,179,63,232,97,46,202,232,87,173,63,36,51,205,42,34,121,165,63,187,105,109,249,204,130,158,63,34,44,116,111,143,239,148,63,62,17,221,22,217,140,139,63,93,194,95,155,166,50,129,63,80,8,178,216,5,7,116,63,129,200,42,190,4,27,101,63,220,238,171,147,175,219,82,63,27,202,154,162,109,70,55,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,193,83,76,206,30,226,239,63,0,0,0,0,0,0,240,63,193,83,76,206,30,226,239,63,207,66,200,154,13,137,239,63,12,109,231,152,127,246,238,63,136,18,45,121,60,45,238,63,154,77,244,183,12,49,237,63,181,176,192,186,158,6,236,63,204,153,14,25,102,179,234,63,220,121,44,199,117,61,233,63,81,171,34,187,86,171,231,63,149,54,201,77,220,3,230,63,117,171,231,164,247,77,228,63,119,0,155,222,139,144,226,63,19,129,234,31,68,210,224,63,198,0,195,209,217,50,222,63,83,62,4,85,163,215,218,63,217,8,97,193,63,157,215,63,168,106,6,225,159,140,212,63,110,36,125,24,41,173,209,63,90,239,121,246,67,9,206,63,27,0,96,43,87,46,201,63,81,150,107,27,144,206,196,63,139,236,90,173,217,235,192,63,233,214,41,94,126,10,187,63,223,23,250,212,111,46,181,63,6,13,129,76,0,56,176,63,202,189,68,229,244,47,168,63,166,21,248,237,152,120,161,63,75,245,83,210,121,67,152,63,148,207,159,244,141,1,144,63,0,110,55,61,255,168,131,63,222,105,25,70,205,153,117,63,224,133,140,203,225,40,99,63,252,169,241,210,77,98,64,63,0,0,0,0,0,0,0,0,37,145,224,186,32,234,239,63,0,0,0,0,0,0,240,63,37,145,224,186,32,234,239,63,222,75,43,207,205,168,239,63,90,31,255,154,230,60,239,63,85,207,23,181,218,167,238,63,190,160,100,246,162,235,237,63,215,144,110,58,184,10,237,63,139,232,207,101,7,8,236,63,181,222,111,180,227,230,234,63,88,0,116,20,247,170,233,63,34,114,85,52,49,88,232,63,80,197,174,105,181,242,230,63,88,228,182,1,200,126,229,63,148,69,39,108,187,0,228,63,71,43,74,75,221,124,226,63,169,163,227,106,100,247,224,63,170,169,151,165,190,232,222,63,22,196,122,130,72,239,219,63,75,102,204,143,133,9,217,63,63,233,225,87,238,61,214,63,194,106,110,125,63,146,211,63,160,190,167,106,105,11,209,63,43,114,95,57,8,91,205,63,39,153,98,47,144,247,200,63,161,7,202,175,23,241,196,63,202,98,172,128,140,74,193,63,34,197,190,108,84,10,188,63,97,133,0,133,31,65,182,63,143,222,112,31,185,53,177,63,67,132,201,158,78,195,169,63,33,123,123,223,17,120,162,63,243,71,40,232,188,231,152,63,89,237,14,231,233,117,142,63,33,2,14,161,74,205,126,63,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,6,0,0,0,1,0,0,0,5,0,0,0,2,0,0,0,15,0,0,0,0,0,0,0,8,0,0,0,7,0,0,0,12,0,0,0,3,0,0,0,11,0,0,0,4,0,0,0,14,0,0,0,1,0,0,0,9,0,0,0,6,0,0,0,13,0,0,0,2,0,0,0,10,0,0,0,5,0,0,0,0,0,157,62,0,64,94,62,0,192,4,62,0,128,237,62,0,64,137,62,0,0,0,0,0,192,76,63,0,0,205,61,0,0,0,0,0,0,128,63,0,0,0,64,0,0,64,64,0,0,128,64,0,0,160,64,0,0,192,64,0,0,224,64,0,0,0,65,0,0,128,65,0,0,192,65,0,0,16,66,0,0,48,66,0,0,72,66,0,0,96,66,0,0,120,66,0,0,134,66,0,0,144,66,0,0,158,66,0,0,176,66,0,0,212,66,0,0,6,67,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,0,64,0,0,0,64,0,0,0,64,0,0,0,64,0,0,0,64,0,0,0,64,0,0,0,64,0,0,64,64,0,0,64,64,0,0,128,64,0,0,160,64,0,0,192,64,0,0,0,65,0,0,0,65,8,7,0,0,200,9,0,0,132,12,0,0,60,15,0,0,240,17,0,0,160,20,0,0,76,23,0,0,180,24,0,0,112,25,0,0,228,25,0,0,48,26,0,0,104,26,0,0,136,26,0,0,160,26,0,0,172,26,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,3,0,0,0,5,0,0,0,7,0,0,0,9,0,0,0,11,0,0,0,13,0,0,0,15,0,0,0,17,0,0,0,19,0,0,0,21,0,0,0,23,0,0,0,25,0,0,0,27,0,0,0,29,0,0,0,31,0,0,0,33,0,0,0,35,0,0,0,37,0,0,0,39,0,0,0,41,0,0,0,43,0,0,0,45,0,0,0,47,0,0,0,49,0,0,0,51,0,0,0,53,0,0,0,55,0,0,0,57,0,0,0,59,0,0,0,61,0,0,0,63,0,0,0,65,0,0,0,67,0,0,0,69,0,0,0,71,0,0,0,73,0,0,0,75,0,0,0,77,0,0,0,79,0,0,0,81,0,0,0,83,0,0,0,85,0,0,0,87,0,0,0,89,0,0,0,91,0,0,0,93,0,0,0,95,0,0,0,97,0,0,0,99,0,0,0,101,0,0,0,103,0,0,0,105,0,0,0,107,0,0,0,109,0,0,0,111,0,0,0,113,0,0,0,115,0,0,0,117,0,0,0,119,0,0,0,121,0,0,0,123,0,0,0,125,0,0,0,127,0,0,0,129,0,0,0,131,0,0,0,133,0,0,0,135,0,0,0,137,0,0,0,139,0,0,0,141,0,0,0,143,0,0,0,145,0,0,0,147,0,0,0,149,0,0,0,151,0,0,0,153,0,0,0,155,0,0,0,157,0,0,0,159,0,0,0,161,0,0,0,163,0,0,0,165,0,0,0,167,0,0,0,169,0,0,0,171,0,0,0,173,0,0,0,175,0,0,0,177,0,0,0,179,0,0,0,181,0,0,0,183,0,0,0,185,0,0,0,187,0,0,0,189,0,0,0,191,0,0,0,193,0,0,0,195,0,0,0,197,0,0,0,199,0,0,0,201,0,0,0,203,0,0,0,205,0,0,0,207,0,0,0,209,0,0,0,211,0,0,0,213,0,0,0,215,0,0,0,217,0,0,0,219,0,0,0,221,0,0,0,223,0,0,0,225,0,0,0,227,0,0,0,229,0,0,0,231,0,0,0,233,0,0,0,235,0,0,0,237,0,0,0,239,0,0,0,241,0,0,0,243,0,0,0,245,0,0,0,247,0,0,0,249,0,0,0,251,0,0,0,253,0,0,0,255,0,0,0,1,1,0,0,3,1,0,0,5,1,0,0,7,1,0,0,9,1,0,0,11,1,0,0,13,1,0,0,15,1,0,0,17,1,0,0,19,1,0,0,21,1,0,0,23,1,0,0,25,1,0,0,27,1,0,0,29,1,0,0,31,1,0,0,33,1,0,0,35,1,0,0,37,1,0,0,39,1,0,0,41,1,0,0,43,1,0,0,45,1,0,0,47,1,0,0,49,1,0,0,51,1,0,0,53,1,0,0,55,1,0,0,57,1,0,0,59,1,0,0,61,1,0,0,63,1,0,0,65,1,0,0,67,1,0,0,69,1,0,0,71,1,0,0,73,1,0,0,75,1,0,0,77,1,0,0,79,1,0,0,81,1,0,0,83,1,0,0,85,1,0,0,87,1,0,0,89,1,0,0,91,1,0,0,93,1,0,0,95,1,0,0,13,0,0,0,25,0,0,0,41,0,0,0,61,0,0,0,85,0,0,0,113,0,0,0,145,0,0,0,181,0,0,0,221,0,0,0,9,1,0,0,57,1,0,0,109,1,0,0,165,1,0,0,225,1,0,0,33,2,0,0,101,2,0,0,173,2,0,0,249,2,0,0,73,3,0,0,157,3,0,0,245,3,0,0,81,4,0,0,177,4,0,0,21,5,0,0,125,5,0,0,233,5,0,0,89,6,0,0,205,6,0,0,69,7,0,0,193,7,0,0,65,8,0,0,197,8,0,0,77,9,0,0,217,9,0,0,105,10,0,0,253,10,0,0,149,11,0,0,49,12,0,0,209,12,0,0,117,13,0,0,29,14,0,0,201,14,0,0,121,15,0,0,45,16,0,0,229,16,0,0,161,17,0,0,97,18,0,0,37,19,0,0,237,19,0,0,185,20,0,0,137,21,0,0,93,22,0,0,53,23,0,0,17,24,0,0,241,24,0,0,213,25,0,0,189,26,0,0,169,27,0,0,153,28,0,0,141,29,0,0,133,30,0,0,129,31,0,0,129,32,0,0,133,33,0,0,141,34,0,0,153,35,0,0,169,36,0,0,189,37,0,0,213,38,0,0,241,39,0,0,17,41,0,0,53,42,0,0,93,43,0,0,137,44,0,0,185,45,0,0,237,46,0,0,37,48,0,0,97,49,0,0,161,50,0,0,229,51,0,0,45,53,0,0,121,54,0,0,201,55,0,0,29,57,0,0,117,58,0,0,209,59,0,0,49,61,0,0,149,62,0,0,253,63,0,0,105,65,0,0,217,66,0,0,77,68,0,0,197,69,0,0,65,71,0,0,193,72,0,0,69,74,0,0,205,75,0,0,89,77,0,0,233,78,0,0,125,80,0,0,21,82,0,0,177,83,0,0,81,85,0,0,245,86,0,0,157,88,0,0,73,90,0,0,249,91,0,0,173,93,0,0,101,95,0,0,33,97,0,0,225,98,0,0,165,100,0,0,109,102,0,0,57,104,0,0,9,106,0,0,221,107,0,0,181,109,0,0,145,111,0,0,113,113,0,0,85,115,0,0,61,117,0,0,41,119,0,0,25,121,0,0,13,123,0,0,5,125,0,0,1,127,0,0,1,129,0,0,5,131,0,0,13,133,0,0,25,135,0,0,41,137,0,0,61,139,0,0,85,141,0,0,113,143,0,0,145,145,0,0,181,147,0,0,221,149,0,0,9,152,0,0,57,154,0,0,109,156,0,0,165,158,0,0,225,160,0,0,33,163,0,0,101,165,0,0,173,167,0,0,249,169,0,0,73,172,0,0,157,174,0,0,245,176,0,0,81,179,0,0,177,181,0,0,21,184,0,0,125,186,0,0,233,188,0,0,89,191,0,0,205,193,0,0,69,196,0,0,193,198,0,0,65,201,0,0,197,203,0,0,77,206,0,0,217,208,0,0,105,211,0,0,253,213,0,0,149,216,0,0,49,219,0,0,209,221,0,0,117,224,0,0,29,227,0,0,201,229,0,0,121,232,0,0,45,235,0,0,229,237,0,0,161,240,0,0,63,0,0,0,129,0,0,0,231,0,0,0,121,1,0,0,63,2,0,0,65,3,0,0,135,4,0,0,25,6,0,0,255,7,0,0,65,10,0,0,231,12,0,0,249,15,0,0,127,19,0,0,129,23,0,0,7,28,0,0,25,33,0,0,191,38,0,0,1,45,0,0,231,51,0,0,121,59,0,0,191,67,0,0,193,76,0,0,135,86,0,0,25,97,0,0,127,108,0,0,193,120,0,0,231,133,0,0,249,147,0,0,255,162,0,0,1,179,0,0,7,196,0,0,25,214,0,0,63,233,0,0,129,253,0,0,231,18,1,0,121,41,1,0,63,65,1,0,65,90,1,0,135,116,1,0,25,144,1,0,255,172,1,0,65,203,1,0,231,234,1,0,249,11,2,0,127,46,2,0,129,82,2,0,7,120,2,0,25,159,2,0,191,199,2,0,1,242,2,0,231,29,3,0,121,75,3,0,191,122,3,0,193,171,3,0,135,222,3,0,25,19,4,0,127,73,4,0,193,129,4,0,231,187,4,0,249,247,4,0,255,53,5,0,1,118,5,0,7,184,5,0,25,252,5,0,63,66,6,0,129,138,6,0,231,212,6,0,121,33,7,0,63,112,7,0,65,193,7,0,135,20,8,0,25,106,8,0,255,193,8,0,65,28,9,0,231,120,9,0,249,215,9,0,127,57,10,0,129,157,10,0,7,4,11,0,25,109,11,0,191,216,11,0,1,71,12,0,231,183,12,0,121,43,13,0,191,161,13,0,193,26,14,0,135,150,14,0,25,21,15,0,127,150,15,0,193,26,16,0,231,161,16,0,249,43,17,0,255,184,17,0,1,73,18,0,7,220,18,0,25,114,19,0,63,11,20,0,129,167,20,0,231,70,21,0,121,233,21,0,63,143,22,0,65,56,23,0,135,228,23,0,25,148,24,0,255,70,25,0,65,253,25,0,231,182,26,0,249,115,27,0,127,52,28,0,129,248,28,0,7,192,29,0,25,139,30,0,191,89,31,0,1,44,32,0,231,1,33,0,121,219,33,0,191,184,34,0,193,153,35,0,135,126,36,0,25,103,37,0,127,83,38,0,193,67,39,0,231,55,40,0,249,47,41,0,255,43,42,0,1,44,43,0,7,48,44,0,25,56,45,0,63,68,46,0,129,84,47,0,231,104,48,0,121,129,49,0,63,158,50,0,65,191,51,0,135,228,52,0,25,14,54,0,255,59,55,0,65,110,56,0,231,164,57,0,249,223,58,0,127,31,60,0,129,99,61,0,7,172,62,0,25,249,63,0,191,74,65,0,1,161,66,0,231,251,67,0,121,91,69,0,191,191,70,0,193,40,72,0,135,150,73,0,25,9,75,0,127,128,76,0,193,252,77,0,231,125,79,0,249,3,81,0,255,142,82,0,1,31,84,0,7,180,85,0,25,78,87,0,63,237,88,0,129,145,90,0,231,58,92,0,121,233,93,0,63,157,95,0,65,86,97,0,135,20,99,0,25,216,100,0,255,160,102,0,65,111,104,0,231,66,106,0,249,27,108,0,127,250,109,0,65,1,0,0,169,2,0,0,9,5,0,0,193,8,0,0,65,14,0,0,9,22,0,0,169,32,0,0,193,46,0,0,1,65,0,0,41,88,0,0,9,117,0,0,129,152,0,0,129,195,0,0,9,247,0,0,41,52,1,0,1,124,1,0,193,207,1,0,169,48,2,0,9,160,2,0,65,31,3,0,193,175,3,0,9,83,4,0,169,10,5,0,65,216,5,0,129,189,6,0,41,188,7,0,9,214,8,0,1,13,10,0,1,99,11,0,9,218,12,0,41,116,14,0,129,51,16,0,65,26,18,0,169,42,20,0,9,103,22,0,193,209,24,0,65,109,27,0,9,60,30,0,169,64,33,0,193,125,36,0,1,246,39,0,41,172,43,0,9,163,47,0,129,221,51,0,129,94,56,0,9,41,61,0,41,64,66,0,1,167,71,0,193,96,77,0,169,112,83,0,9,218,89,0,65,160,96,0,193,198,103,0,9,81,111,0,169,66,119,0,65,159,127,0,129,106,136,0,41,168,145,0,9,92,155,0,1,138,165,0,1,54,176,0,9,100,187,0,41,24,199,0,129,86,211,0,65,35,224,0,169,130,237,0,9,121,251,0,193,10,10,1,65,60,25,1,9,18,41,1,169,144,57,1,193,188,74,1,1,155,92,1,41,48,111,1,9,129,130,1,129,146,150,1,129,105,171,1,9,11,193,1,41,124,215,1,1,194,238,1,193,225,6,2,169,224,31,2,9,196,57,2,65,145,84,2,193,77,112,2,9,255,140,2,169,170,170,2,65,86,201,2,129,7,233,2,41,196,9,3,9,146,43,3,1,119,78,3,1,121,114,3,9,158,151,3,41,236,189,3,129,105,229,3,65,28,14,4,169,10,56,4,9,59,99,4,193,179,143,4,65,123,189,4,9,152,236,4,169,16,29,5,193,235,78,5,1,48,130,5,41,228,182,5,9,15,237,5,129,183,36,6,129,228,93,6,9,157,152,6,41,232,212,6,1,205,18,7,193,82,82,7,169,128,147,7,9,94,214,7,65,242,26,8,193,68,97,8,9,93,169,8,169,66,243,8,65,253,62,9,129,148,140,9,41,16,220,9,9,120,45,10,1,212,128,10,1,44,214,10,9,136,45,11,41,240,134,11,129,108,226,11,65,5,64,12,169,194,159,12,9,173,1,13,193,204,101,13,65,42,204,13,9,206,52,14,169,192,159,14,193,10,13,15,1,181,124,15,41,200,238,15,9,77,99,16,129,76,218,16,129,207,83,17,9,223,207,17,41,132,78,18,1,200,207,18,193,179,83,19,169,80,218,19,9,168,99,20,65,195,239,20,193,171,126,21,9,107,16,22,169,10,165,22,65,148,60,23,129,17,215,23,41,140,116,24,9,14,21,25,1,161,184,25,1,79,95,26,9,34,9,27,41,36,182,27,129,95,102,28,65,222,25,29,169,170,208,29,9,207,138,30,193,85,72,31,65,73,9,32,9,180,205,32,169,160,149,33,193,25,97,34,1,42,48,35,41,220,2,36,9,59,217,36,129,81,179,37,147,6,0,0,69,14,0,0,15,28,0,0,17,51,0,0,91,87,0,0,13,142,0,0,119,221,0,0,57,77,1,0,99,230,1,0,149,179,2,0,31,193,3,0,33,29,5,0,171,215,6,0,221,2,9,0,7,179,11,0,201,254,14,0,51,255,18,0,229,207,23,0,47,143,29,0,49,94,36,0,251,96,44,0,173,190,53,0,151,161,64,0,89,55,77,0,3,177,91,0,53,67,108,0,63,38,127,0,65,150,148,0,75,211,172,0,125,33,200,0,39,201,230,0,233,22,9,1,211,91,47,1,133,237,89,1,79,38,137,1,81,101,189,1,155,14,247,1,77,139,54,2,183,73,124,2,121,189,200,2,163,95,28,3,213,174,119,3,95,47,219,3,97,107,71,4,235,242,188,4,29,92,60,5,71,67,198,5,9,75,91,6,115,28,252,6,37,103,169,7,111,225,99,8,113,72,44,9,59,96,3,10,237,243,233,10,215,213,224,11,153,223,232,12,67,242,2,14,117,246,47,15,127,220,112,16,129,156,198,17,139,54,50,19,189,178,180,20,103,33,79,22,41,155,2,24,19,65,208,25,197,60,185,27,143,192,190,29,145,7,226,31,219,85,36,34,141,248,134,36,247,69,11,39,185,157,178,41,227,104,126,44,21,26,112,47,159,45,137,50,161,41,203,53,43,158,55,57,93,37,208,60,135,99,150,64,73,7,140,68,179,201,178,72,101,110,12,77,175,195,154,81,177,162,95,86,123,239,92,91,45,153,148,96,23,154,8,102,217,247,186,107,131,195,173,113,181,25,227,119,191,34,93,126,29,35,0,0,113,77,0,0,145,156,0,0,253,38,1,0,101,12,2,0,233,119,3,0,153,162,5,0,53,214,8,0,45,112,13,0,225,228,19,0,33,195,28,0,237,183,40,0,117,146,56,0,89,72,77,0,41,250,103,0,37,248,137,0,61,199,180,0,81,38,234,0,177,19,44,1,221,210,124,1,133,242,222,1,201,82,85,2,185,43,227,2,21,20,140,3,77,8,84,4,193,113,63,5,65,46,83,6,205,151,148,7,149,140,9,9,57,119,184,10,73,87,168,12,5,202,224,14,93,19,106,17,49,39,77,20,209,178,147,23,189,38,72,27,165,192,117,31,169,149,40,36,217,156,109,41,245,185,82,47,109,200,230,53,161,166,57,61,97,65,92,69,173,159,96,78,181,238,89,88,25,142,92,99,105,28,126,111,229,131,213,124,255,189,0,0,1,168,1,0,143,107,3,0,241,158,6,0,63,35,12,0,193,61,21,0,143,182,35,0,241,252,57,0,255,81,91,0,1,250,139,0,15,117,209,0,113,191,50,1,63,154,184,1,193,220,109,2,15,207,95,3,113,142,158,4,255,123,61,6,1,182,83,8,143,156,252,10,241,97,88,14,63,167,140,18,193,37,197,23,143,101,52,30,241,129,20,38,255,251,167,47,1,156,58,59,15,98,34,73,113,134,192,89,63,138,130,109,193,88,227,132,1,14,4,0,145,33,9,0,17,44,19,0,65,238,37,0,65,79,71,0,145,67,128,0,17,247,221,0,1,70,115,1,1,146,90,2,17,1,184,3,145,53,188,5,65,143,167,8,65,6,206,12,17,178,155,18,145,15,154,26,1,26,118,37,1,76,7,52,145,158,87,71,17,157,172,96,65,166,145,129,35,81,22,0,197,158,50,0,23,185,107,0,153,246,216,0,107,137,160,1,13,196,254,2,31,1,80,5,33,217,29,9,51,108,48,15,213,162,164,24,167,103,8,39,41,253,125,60,123,181,231,91,29,119,29,137,175,160,45,201,173,142,123,0,137,230,25,1,57,150,94,2,61,22,216,4,181,99,119,9,225,40,198,17,33,3,52,32,117,72,130,56,125,87,87,96,191,91,175,2,129,216,39,6,247,132,94,13,233,254,173,27,127,139,235,54,129,183,229,104,23,3,156,193,193,12,255,14,57,106,133,34,25,238,145,75,129,120,43,158,51,225,9,84,149,139,0,0,55,152,0,0,255,165,0,0,4,181,0,0,103,197,0,0,69,215,0,0,193,234,0,0,255,255,0,0,128,187,0,0,120,0,0,0,21,0,0,0,21,0,0,0,0,154,89,63,0,0,0,0,0,0,128,63,0,0,128,63,248,94,0,0,3,0,0,0,8,0,0,0,120,0,0,0,11,0,0,0,84,113,0,0,36,95,0,0,116,27,0,0,128,7,0,0,3,0,0,0,84,29,0,0,140,29,0,0,196,29,0,0,252,29,0,0,52,30,0,0,136,1,0,0,78,95,0,0,59,114,0,0,195,115,0,0,106,28,141,56,82,187,30,58,8,105,220,58,130,237,87,59,137,99,178,59,3,42,5,60,48,220,57,60,180,62,119,60,28,163,158,60,209,242,197,60,254,134,241,60,155,171,16,61,5,173,42,61,132,194,70,61,83,230,100,61,17,137,130,61,135,159,147,61,203,178,165,61,209,190,184,61,58,191,204,61,84,175,225,61,20,138,247,61,14,37,7,62,217,244,18,62,95,49,31,62,104,215,43,62,138,227,56,62,48,82,70,62,148,31,84,62,191,71,98,62,142,198,112,62,176,151,127,62,82,91,135,62,96,15,143,62,152,229,150,62,121,219,158,62,112,238,166,62,216,27,175,62,251,96,183,62,17,187,191,62,70,39,200,62,183,162,208,62,120,42,217,62,148,187,225,62,12,83,234,62,222,237,242,62,6,137,251,62,190,16,2,63,31,90,6,63,36,159,10,63,80,222,14,63,43,22,19,63,65,69,23,63,37,106,27,63,115,131,31,63,206,143,35,63,230,141,39,63,116,124,43,63,63,90,47,63,25,38,51,63,231,222,54,63,153,131,58,63,51,19,62,63,197,140,65,63,119,239,68,63,127,58,72,63,39,109,75,63,206,134,78,63,229,134,81,63,241,108,84,63,142,56,87,63,105,233,89,63,69,127,92,63,250,249,94,63,115,89,97,63,175,157,99,63,193,198,101,63,207,212,103,63,17,200,105,63,210,160,107,63,110,95,109,63,80,4,111,63,244,143,112,63,230,2,114,63,189,93,115,63,31,161,116,63,191,205,117,63,87,228,118,63,176,229,119,63,151,210,120,63,227,171,121,63,115,114,122,63,39,39,123,63,231,202,123,63,157,94,124,63,53,227,124,63,156,89,125,63,189,194,125,63,134,31,126,63,222,112,126,63,171,183,126,63,207,244,126,63,38,41,127,63,134,85,127,63,190,122,127,63,150,153,127,63,204,178,127,63,20,199,127,63,28,215,127,63,130,227,127,63,221,236,127,63,182,243,127,63,138,248,127,63,200,251,127,63,214,253,127,63,7,255,127,63,165,255,127,63,232,255,127,63,253,255,127,63,0,0,128,63,224,1,0,0,135,136,8,59,255,255,255,255,5,0,96,0,3,0,32,0,4,0,8,0,2,0,4,0,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,104,99,0,0,84,58,0,0,0,0,0,0,240,0,0,0,137,136,136,59,1,0,0,0,5,0,48,0,3,0,16,0,4,0,4,0,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,97,0,0,84,58,0,0,0,0,0,0,120,0,0,0,136,136,8,60,2,0,0,0,5,0,24,0,3,0,8,0,2,0,4,0,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,152,96,0,0,84,58,0,0,0,0,0,0,60,0,0,0,137,136,136,60,3,0,0,0,5,0,12,0,3,0,4,0,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,96,0,0,84,58,0,0,0,0,0,0,255,255,127,63,142,255,127,63,106,254,127,63,147,252,127,63,7,250,127,63,200,246,127,63,214,242,127,63,48,238,127,63,214,232,127,63,200,226,127,63,7,220,127,63,147,212,127,63,107,204,127,63,143,195,127,63,0,186,127,63,189,175,127,63,199,164,127,63,29,153,127,63,192,140,127,63,176,127,127,63,236,113,127,63,118,99,127,63,75,84,127,63,110,68,127,63,222,51,127,63,154,34,127,63,163,16,127,63,250,253,126,63,157,234,126,63,141,214,126,63,203,193,126,63,86,172,126,63,46,150,126,63,83,127,126,63,198,103,126,63,134,79,126,63,148,54,126,63,239,28,126,63,152,2,126,63,143,231,125,63,211,203,125,63,102,175,125,63,70,146,125,63,116,116,125,63,241,85,125,63,188,54,125,63,213,22,125,63,60,246,124,63,242,212,124,63,246,178,124,63,73,144,124,63,235,108,124,63,219,72,124,63,27,36,124,63,169,254,123,63,135,216,123,63,180,177,123,63,48,138,123,63,252,97,123,63,23,57,123,63,130,15,123,63,61,229,122,63,72,186,122,63,162,142,122,63,77,98,122,63,72,53,122,63,148,7,122,63,48,217,121,63,29,170,121,63,90,122,121,63,233,73,121,63,200,24,121,63,249,230,120,63,123,180,120,63,78,129,120,63,115,77,120,63,234,24,120,63,178,227,119,63,205,173,119,63,58,119,119,63,249,63,119,63,10,8,119,63,110,207,118,63,37,150,118,63,47,92,118,63,140,33,118,63,60,230,117,63,64,170,117,63,151,109,117,63,66,48,117,63,65,242,116,63,148,179,116,63,59,116,116,63,55,52,116,63,135,243,115,63,44,178,115,63,38,112,115,63,118,45,115,63,26,234,114,63,20,166,114,63,100,97,114,63,10,28,114,63,5,214,113,63,87,143,113,63,0,72,113,63,255,255,112,63,85,183,112,63,2,110,112,63,6,36,112,63,98,217,111,63,21,142,111,63,32,66,111,63,132,245,110,63,63,168,110,63,83,90,110,63,192,11,110,63,134,188,109,63,165,108,109,63,29,28,109,63,239,202,108,63,27,121,108,63,161,38,108,63,128,211,107,63,187,127,107,63,80,43,107,63,64,214,106,63,140,128,106,63,50,42,106,63,53,211,105,63,147,123,105,63,77,35,105,63,100,202,104,63,216,112,104,63,168,22,104,63,213,187,103,63,96,96,103,63,72,4,103,63,143,167,102,63,51,74,102,63,54,236,101,63,151,141,101,63,87,46,101,63,119,206,100,63,245,109,100,63,212,12,100,63,18,171,99,63,177,72,99,63,176,229,98,63,16,130,98,63,209,29,98,63,243,184,97,63,119,83,97,63,92,237,96,63,164,134,96,63,78,31,96,63,91,183,95,63,203,78,95,63,158,229,94,63,213,123,94,63,112,17,94,63,110,166,93,63,210,58,93,63,154,206,92,63,198,97,92,63,89,244,91,63,81,134,91,63,174,23,91,63,114,168,90,63,157,56,90,63,46,200,89,63,39,87,89,63,135,229,88,63,79,115,88,63,127,0,88,63,23,141,87,63,24,25,87,63,130,164,86,63,86,47,86,63,147,185,85,63,58,67,85,63,75,204,84,63,199,84,84,63,174,220,83,63,1,100,83,63,191,234,82,63,233,112,82,63,127,246,81,63,130,123,81,63,242,255,80,63,207,131,80,63,26,7,80,63,210,137,79,63,250,11,79,63,144,141,78,63,148,14,78,63,9,143,77,63,237,14,77,63,65,142,76,63,5,13,76,63,59,139,75,63,225,8,75,63,249,133,74,63,131,2,74,63,127,126,73,63,238,249,72,63,207,116,72,63,36,239,71,63,237,104,71,63,41,226,70,63,218,90,70,63,0,211,69,63,155,74,69,63,172,193,68,63,50,56,68,63,47,174,67,63,162,35,67,63,141,152,66,63,239,12,66,63,200,128,65,63,26,244,64,63,229,102,64,63,40,217,63,63,229,74,63,63,27,188,62,63,204,44,62,63,247,156,61,63,157,12,61,63,190,123,60,63,92,234,59,63,117,88,59,63,10,198,58,63,29,51,58,63,173,159,57,63,187,11,57,63,71,119,56,63,81,226,55,63,218,76,55,63,227,182,54,63,107,32,54,63,116,137,53,63,253,241,52,63,7,90,52,63,147,193,51,63,160,40,51,63,48,143,50,63,66,245,49,63,216,90,49,63,241,191,48,63,142,36,48,63,175,136,47,63,85,236,46,63,129,79,46,63,50,178,45,63,105,20,45,63,39,118,44,63,107,215,43,63,55,56,43,63,139,152,42,63,103,248,41,63,204,87,41,63,186,182,40,63,50,21,40,63,51,115,39,63,191,208,38,63,214,45,38,63,121,138,37,63,167,230,36,63,97,66,36,63,169,157,35,63,125,248,34,63,223,82,34,63,207,172,33,63,77,6,33,63,91,95,32,63,248,183,31,63,37,16,31,63,226,103,30,63,48,191,29,63,16,22,29,63,129,108,28,63,132,194,27,63,26,24,27,63,67,109,26,63,0,194,25,63,81,22,25,63,54,106,24,63,177,189,23,63,193,16,23,63,103,99,22,63,163,181,21,63,118,7,21,63,225,88,20,63,228,169,19,63,127,250,18,63,179,74,18,63,128,154,17,63,231,233,16,63,232,56,16,63,132,135,15,63,187,213,14,63,142,35,14,63,254,112,13,63,10,190,12,63,179,10,12,63,250,86,11,63,223,162,10,63,99,238,9,63,134,57,9,63,73,132,8,63,172,206,7,63,175,24,7,63,84,98,6,63,155,171,5,63,131,244,4,63,15,61,4,63,61,133,3,63,15,205,2,63,134,20,2,63,161,91,1,63,97,162,0,63,143,209,255,62,167,93,254,62,14,233,252,62,194,115,251,62,198,253,249,62,27,135,248,62,193,15,247,62,186,151,245,62,6,31,244,62,168,165,242,62,158,43,241,62,236,176,239,62,145,53,238,62,144,185,236,62,232,60,235,62,154,191,233,62,169,65,232,62,21,195,230,62,223,67,229,62,8,196,227,62,145,67,226,62,124,194,224,62,200,64,223,62,120,190,221,62,140,59,220,62,6,184,218,62,230,51,217,62,46,175,215,62,223,41,214,62,249,163,212,62,125,29,211,62,110,150,209,62,204,14,208,62,151,134,206,62,210,253,204,62,125,116,203,62,153,234,201,62,39,96,200,62,40,213,198,62,159,73,197,62,138,189,195,62,236,48,194,62,198,163,192,62,25,22,191,62,230,135,189,62,45,249,187,62,241,105,186,62,50,218,184,62,241,73,183,62,47,185,181,62,238,39,180,62,47,150,178,62,242,3,177,62,57,113,175,62,4,222,173,62,86,74,172,62,47,182,170,62,144,33,169,62,122,140,167,62,239,246,165,62,239,96,164,62,124,202,162,62,151,51,161,62,64,156,159,62,122,4,158,62,68,108,156,62,161,211,154,62,145,58,153,62,22,161,151,62,48,7,150,62,225,108,148,62,41,210,146,62,11,55,145,62,135,155,143,62,158,255,141,62,81,99,140,62,162,198,138,62,145,41,137,62,32,140,135,62,80,238,133,62,34,80,132,62,151,177,130,62,176,18,129,62,222,230,126,62,169,167,123,62,195,103,120,62,47,39,117,62,238,229,113,62,4,164,110,62,115,97,107,62,60,30,104,62,98,218,100,62,232,149,97,62,207,80,94,62,26,11,91,62,204,196,87,62,230,125,84,62,107,54,81,62,93,238,77,62,191,165,74,62,146,92,71,62,218,18,68,62,151,200,64,62,206,125,61,62,128,50,58,62,174,230,54,62,93,154,51,62,141,77,48,62,66,0,45,62,125,178,41,62,66,100,38,62,145,21,35,62,110,198,31,62,219,118,28,62,218,38,25,62,109,214,21,62,152,133,18,62,91,52,15,62,186,226,11,62,183,144,8,62,84,62,5,62,148,235,1,62,240,48,253,61,6,138,246,61,113,226,239,61,51,58,233,61,79,145,226,61,207,231,219,61,181,61,213,61,3,147,206,61,192,231,199,61,242,59,193,61,156,143,186,61,195,226,179,61,108,53,173,61,155,135,166,61,85,217,159,61,159,42,153,61,126,123,146,61,246,203,139,61,11,28,133,61,135,215,124,61,70,118,111,61,93,20,98,61,214,177,84,61,185,78,71,61,16,235,57,61,229,134,44,61,64,34,31,61,44,189,17,61,178,87,4,61,181,227,237,60,96,23,211,60,118,74,184,60,11,125,157,60,50,175,130,60,250,193,79,60,254,36,26,60,42,15,201,59,153,167,59,59,46,125,214,185,210,70,113,187,171,222,227,187,166,140,39,188,129,41,93,188,225,98,137,188,160,48,164,188,236,253,190,188,179,202,217,188,224,150,244,188,49,177,7,189,147,22,21,189,140,123,34,189,19,224,47,189,30,68,61,189,165,167,74,189,157,10,88,189,254,108,101,189,190,206,114,189,234,23,128,189,27,200,134,189,237,119,141,189,92,39,148,189,99,214,154,189,253,132,161,189,38,51,168,189,217,224,174,189,17,142,181,189,202,58,188,189,254,230,194,189,170,146,201,189,200,61,208,189,84,232,214,189,74,146,221,189,164,59,228,189,93,228,234,189,114,140,241,189,221,51,248,189,154,218,254,189,82,192,2,190,252,18,6,190,71,101,9,190,50,183,12,190,186,8,16,190,221,89,19,190,152,170,22,190,234,250,25,190,208,74,29,190,71,154,32,190,78,233,35,190,225,55,39,190,0,134,42,190,166,211,45,190,211,32,49,190,131,109,52,190,181,185,55,190,101,5,59,190,147,80,62,190,58,155,65,190,90,229,68,190,240,46,72,190,249,119,75,190,116,192,78,190,93,8,82,190,179,79,85,190,115,150,88,190,156,220,91,190,42,34,95,190,27,103,98,190,109,171,101,190,31,239,104,190,44,50,108,190,148,116,111,190,84,182,114,190,106,247,117,190,211,55,121,190,141,119,124,190,150,182,127,190,117,122,129,190,69,25,131,190,185,183,132,190,208,85,134,190,136,243,135,190,225,144,137,190,218,45,139,190,112,202,140,190,164,102,142,190,116,2,144,190,223,157,145,190,228,56,147,190,129,211,148,190,182,109,150,190,129,7,152,190,226,160,153,190,215,57,155,190,95,210,156,190,121,106,158,190,35,2,160,190,94,153,161,190,38,48,163,190,125,198,164,190,96,92,166,190,206,241,167,190,198,134,169,190,71,27,171,190,80,175,172,190,224,66,174,190,245,213,175,190,143,104,177,190,173,250,178,190,77,140,180,190,110,29,182,190,16,174,183,190,48,62,185,190,207,205,186,190,234,92,188,190,130,235,189,190,148,121,191,190,31,7,193,190,35,148,194,190,159,32,196,190,145,172,197,190,248,55,199,190,211,194,200,190,34,77,202,190,226,214,203,190,19,96,205,190,181,232,206,190,197,112,208,190,66,248,209,190,45,127,211,190,131,5,213,190,67,139,214,190,109,16,216,190,255,148,217,190,249,24,219,190,89,156,220,190,29,31,222,190,70,161,223,190,211,34,225,190,193,163,226,190,16,36,228,190,190,163,229,190,204,34,231,190,56,161,232,190,0,31,234,190,36,156,235,190,162,24,237,190,122,148,238,190],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);allocate([171,15,240,190,51,138,241,190,18,4,243,190,70,125,244,190,207,245,245,190,170,109,247,190,217,228,248,190,88,91,250,190,40,209,251,190,71,70,253,190,181,186,254,190,56,23,0,191,187,208,0,191,228,137,1,191,178,66,2,191,37,251,2,191,59,179,3,191,246,106,4,191,83,34,5,191,83,217,5,191,245,143,6,191,56,70,7,191,29,252,7,191,162,177,8,191,199,102,9,191,140,27,10,191,240,207,10,191,243,131,11,191,147,55,12,191,209,234,12,191,172,157,13,191,36,80,14,191,56,2,15,191,232,179,15,191,50,101,16,191,24,22,17,191,151,198,17,191,176,118,18,191,99,38,19,191,174,213,19,191,145,132,20,191,13,51,21,191,31,225,21,191,200,142,22,191,8,60,23,191,221,232,23,191,72,149,24,191,72,65,25,191,220,236,25,191,4,152,26,191,192,66,27,191,15,237,27,191,240,150,28,191,99,64,29,191,104,233,29,191,254,145,30,191,37,58,31,191,220,225,31,191,35,137,32,191,250,47,33,191,95,214,33,191,82,124,34,191,212,33,35,191,227,198,35,191,127,107,36,191,167,15,37,191,92,179,37,191,157,86,38,191,104,249,38,191,191,155,39,191,160,61,40,191,11,223,40,191,255,127,41,191,125,32,42,191,131,192,42,191,17,96,43,191,39,255,43,191,196,157,44,191,232,59,45,191,146,217,45,191,195,118,46,191,121,19,47,191,180,175,47,191,115,75,48,191,183,230,48,191,127,129,49,191,203,27,50,191,153,181,50,191,234,78,51,191,189,231,51,191,18,128,52,191,232,23,53,191,63,175,53,191,22,70,54,191,110,220,54,191,69,114,55,191,156,7,56,191,113,156,56,191,197,48,57,191,150,196,57,191,230,87,58,191,178,234,58,191,252,124,59,191,194,14,60,191,3,160,60,191,193,48,61,191,250,192,61,191,173,80,62,191,219,223,62,191,131,110,63,191,165,252,63,191,64,138,64,191,83,23,65,191,224,163,65,191,228,47,66,191,96,187,66,191,83,70,67,191,190,208,67,191,158,90,68,191,246,227,68,191,194,108,69,191,5,245,69,191,188,124,70,191,232,3,71,191,137,138,71,191,157,16,72,191,37,150,72,191,32,27,73,191,142,159,73,191,111,35,74,191,193,166,74,191,134,41,75,191,188,171,75,191,99,45,76,191,122,174,76,191,2,47,77,191,250,174,77,191,98,46,78,191,57,173,78,191,126,43,79,191,51,169,79,191,85,38,80,191,230,162,80,191,228,30,81,191,80,154,81,191,40,21,82,191,109,143,82,191,30,9,83,191,59,130,83,191,195,250,83,191,183,114,84,191,22,234,84,191,223,96,85,191,18,215,85,191,176,76,86,191,183,193,86,191,39,54,87,191,0,170,87,191,66,29,88,191,236,143,88,191,254,1,89,191,120,115,89,191,89,228,89,191,162,84,90,191,81,196,90,191,102,51,91,191,226,161,91,191,195,15,92,191,10,125,92,191,183,233,92,191,200,85,93,191,62,193,93,191,24,44,94,191,87,150,94,191,249,255,94,191,255,104,95,191,104,209,95,191,51,57,96,191,98,160,96,191,243,6,97,191,229,108,97,191,58,210,97,191,240,54,98,191,8,155,98,191,128,254,98,191,89,97,99,191,146,195,99,191,44,37,100,191,37,134,100,191,126,230,100,191,55,70,101,191,78,165,101,191,197,3,102,191,154,97,102,191,205,190,102,191,94,27,103,191,77,119,103,191,154,210,103,191,68,45,104,191,75,135,104,191,174,224,104,191,111,57,105,191,139,145,105,191,4,233,105,191,217,63,106,191,9,150,106,191,148,235,106,191,123,64,107,191,188,148,107,191,89,232,107,191,79,59,108,191,160,141,108,191,75,223,108,191,79,48,109,191,173,128,109,191,101,208,109,191,117,31,110,191,223,109,110,191,161,187,110,191,187,8,111,191,46,85,111,191,248,160,111,191,27,236,111,191,149,54,112,191,103,128,112,191,144,201,112,191,15,18,113,191,230,89,113,191,19,161,113,191,151,231,113,191,113,45,114,191,160,114,114,191,38,183,114,191,1,251,114,191,50,62,115,191,184,128,115,191,148,194,115,191,196,3,116,191,73,68,116,191,34,132,116,191,80,195,116,191,210,1,117,191,168,63,117,191,210,124,117,191,80,185,117,191,33,245,117,191,69,48,118,191,189,106,118,191,136,164,118,191,166,221,118,191,22,22,119,191,217,77,119,191,239,132,119,191,87,187,119,191,17,241,119,191,29,38,120,191,122,90,120,191,42,142,120,191,43,193,120,191,125,243,120,191,33,37,121,191,22,86,121,191,92,134,121,191,242,181,121,191,218,228,121,191,18,19,122,191,154,64,122,191,115,109,122,191,157,153,122,191,22,197,122,191,223,239,122,191,248,25,123,191,97,67,123,191,26,108,123,191,34,148,123,191,122,187,123,191,32,226,123,191,23,8,124,191,92,45,124,191,240,81,124,191,211,117,124,191,5,153,124,191,134,187,124,191,85,221,124,191,115,254,124,191,223,30,125,191,154,62,125,191,163,93,125,191,250,123,125,191,159,153,125,191,146,182,125,191,211,210,125,191,98,238,125,191,63,9,126,191,105,35,126,191,225,60,126,191,167,85,126,191,186,109,126,191,27,133,126,191,201,155,126,191,196,177,126,191,13,199,126,191,162,219,126,191,133,239,126,191,181,2,127,191,50,21,127,191,252,38,127,191,19,56,127,191,118,72,127,191,39,88,127,191,36,103,127,191,110,117,127,191,5,131,127,191,232,143,127,191,25,156,127,191,149,167,127,191,95,178,127,191,116,188,127,191,215,197,127,191,133,206,127,191,129,214,127,191,200,221,127,191,93,228,127,191,61,234,127,191,106,239,127,191,227,243,127,191,169,247,127,191,187,250,127,191,25,253,127,191,196,254,127,191,187,255,127,191,250,255,127,63,57,254,127,63,169,249,127,63,75,242,127,63,30,232,127,63,35,219,127,63,89,203,127,63,193,184,127,63,91,163,127,63,40,139,127,63,39,112,127,63,90,82,127,63,191,49,127,63,88,14,127,63,37,232,126,63,38,191,126,63,92,147,126,63,200,100,126,63,105,51,126,63,65,255,125,63,79,200,125,63,150,142,125,63,20,82,125,63,203,18,125,63,188,208,124,63,231,139,124,63,77,68,124,63,239,249,123,63,205,172,123,63,233,92,123,63,67,10,123,63,221,180,122,63,182,92,122,63,209,1,122,63,46,164,121,63,206,67,121,63,178,224,120,63,220,122,120,63,76,18,120,63,4,167,119,63,4,57,119,63,79,200,118,63,228,84,118,63,198,222,117,63,246,101,117,63,117,234,116,63,68,108,116,63,101,235,115,63,218,103,115,63,163,225,114,63,194,88,114,63,57,205,113,63,9,63,113,63,52,174,112,63,187,26,112,63,160,132,111,63,228,235,110,63,138,80,110,63,147,178,109,63,1,18,109,63,213,110,108,63,17,201,107,63,183,32,107,63,201,117,106,63,73,200,105,63,57,24,105,63,155,101,104,63,111,176,103,63,186,248,102,63,124,62,102,63,184,129,101,63,111,194,100,63,164,0,100,63,90,60,99,63,145,117,98,63,76,172,97,63,142,224,96,63,89,18,96,63,174,65,95,63,145,110,94,63,3,153,93,63,8,193,92,63,160,230,91,63,207,9,91,63,152,42,90,63,251,72,89,63,253,100,88,63,159,126,87,63,229,149,86,63,208,170,85,63,99,189,84,63,161,205,83,63,140,219,82,63,39,231,81,63,117,240,80,63,121,247,79,63,52,252,78,63,171,254,77,63,223,254,76,63,212,252,75,63,140,248,74,63,10,242,73,63,82,233,72,63,101,222,71,63,71,209,70,63,251,193,69,63,132,176,68,63,229,156,67,63,32,135,66,63,58,111,65,63,52,85,64,63,19,57,63,63,216,26,62,63,136,250,60,63,38,216,59,63,180,179,58,63,54,141,57,63,175,100,56,63,34,58,55,63,147,13,54,63,5,223,52,63,124,174,51,63,249,123,50,63,130,71,49,63,25,17,48,63,194,216,46,63,127,158,45,63,86,98,44,63,72,36,43,63,90,228,41,63,144,162,40,63,235,94,39,63,113,25,38,63,37,210,36,63,9,137,35,63,35,62,34,63,117,241,32,63,4,163,31,63,210,82,30,63,228,0,29,63,61,173,27,63,225,87,26,63,211,0,25,63,25,168,23,63,180,77,22,63,170,241,20,63,253,147,19,63,178,52,18,63,204,211,16,63,80,113,15,63,66,13,14,63,164,167,12,63,124,64,11,63,205,215,9,63,154,109,8,63,233,1,7,63,189,148,5,63,25,38,4,63,3,182,2,63,126,68,1,63,28,163,255,62,110,186,252,62,250,206,249,62,202,224,246,62,228,239,243,62,81,252,240,62,26,6,238,62,71,13,235,62,224,17,232,62,237,19,229,62,119,19,226,62,135,16,223,62,36,11,220,62,88,3,217,62,42,249,213,62,164,236,210,62,205,221,207,62,175,204,204,62,82,185,201,62,191,163,198,62,254,139,195,62,24,114,192,62,22,86,189,62,0,56,186,62,224,23,183,62,189,245,179,62,161,209,176,62,149,171,173,62,162,131,170,62,207,89,167,62,39,46,164,62,178,0,161,62,121,209,157,62,133,160,154,62,223,109,151,62,143,57,148,62,160,3,145,62,26,204,141,62,5,147,138,62,107,88,135,62,86,28,132,62,205,222,128,62,182,63,123,62,16,191,116,62,187,59,110,62,201,181,103,62,77,45,97,62,89,162,90,62,255,20,84,62,81,133,77,62,99,243,70,62,70,95,64,62,13,201,57,62,202,48,51,62,144,150,44,62,114,250,37,62,130,92,31,62,210,188,24,62,118,27,18,62,127,120,11,62,1,212,4,62,29,92,252,61,114,13,239,61,41,188,225,61,102,104,212,61,78,18,199,61,8,186,185,61,184,95,172,61,132,3,159,61,146,165,145,61,7,70,132,61,18,202,109,61,122,5,83,61,145,62,56,61,164,117,29,61,252,170,2,61,202,189,207,60,86,35,154,60,97,14,73,60,197,167,187,59,61,122,86,186,9,70,241,187,18,221,99,188,80,138,167,188,65,36,221,188,227,93,9,189,35,40,36,189,150,240,62,189,242,182,89,189,234,122,116,189,26,158,135,189,66,253,148,189,200,90,162,189,134,182,175,189,87,16,189,189,22,104,202,189,155,189,215,189,195,16,229,189,105,97,242,189,101,175,255,189,74,125,6,190,104,33,13,190,250,195,19,190,237,100,26,190,46,4,33,190,172,161,39,190,83,61,46,190,16,215,52,190,210,110,59,190,134,4,66,190,25,152,72,190,121,41,79,190,148,184,85,190,86,69,92,190,174,207,98,190,137,87,105,190,214,220,111,190,128,95,118,190,120,223,124,190,84,174,129,190,129,235,132,190,56,39,136,190,114,97,139,190,36,154,142,190,69,209,145,190,205,6,149,190,179,58,152,190,238,108,155,190,116,157,158,190,61,204,161,190,64,249,164,190,115,36,168,190,207,77,171,190,73,117,174,190,218,154,177,190,120,190,180,190,27,224,183,190,186,255,186,190,75,29,190,190,199,56,193,190,37,82,196,190,91,105,199,190,97,126,202,190,48,145,205,190,188,161,208,190,0,176,211,190,241,187,214,190,135,197,217,190,186,204,220,190,129,209,223,190,211,211,226,190,169,211,229,190,250,208,232,190,189,203,235,190,234,195,238,190,120,185,241,190,96,172,244,190,154,156,247,190,28,138,250,190,223,116,253,190,109,46,0,191,3,161,1,191,45,18,3,191,230,129,4,191,44,240,5,191,250,92,7,191,76,200,8,191,30,50,10,191,108,154,11,191,50,1,13,191,108,102,14,191,23,202,15,191,45,44,17,191,172,140,18,191,144,235,19,191,213,72,21,191,118,164,22,191,113,254,23,191,192,86,25,191,98,173,26,191,81,2,28,191,138,85,29,191,9,167,30,191,203,246,31,191,204,68,33,191,9,145,34,191,124,219,35,191,36,36,37,191,253,106,38,191,2,176,39,191,48,243,40,191,132,52,42,191,250,115,43,191,143,177,44,191,63,237,45,191,7,39,47,191,227,94,48,191,208,148,49,191,202,200,50,191,206,250,51,191,218,42,53,191,232,88,54,191,247,132,55,191,2,175,56,191,7,215,57,191,3,253,58,191,241,32,60,191,207,66,61,191,154,98,62,191,79,128,63,191,233,155,64,191,104,181,65,191,198,204,66,191,1,226,67,191,23,245,68,191,3,6,70,191,196,20,71,191,86,33,72,191,182,43,73,191,225,51,74,191,212,57,75,191,141,61,76,191,9,63,77,191,68,62,78,191,61,59,79,191,240,53,80,191,90,46,81,191,121,36,82,191,74,24,83,191,202,9,84,191,247,248,84,191,206,229,85,191,77,208,86,191,112,184,87,191,55,158,88,191,156,129,89,191,160,98,90,191,62,65,91,191,117,29,92,191,65,247,92,191,162,206,93,191,148,163,94,191,20,118,95,191,34,70,96,191,186,19,97,191,217,222,97,191,127,167,98,191,169,109,99,191,84,49,100,191,126,242,100,191,38,177,101,191,73,109,102,191,229,38,103,191,248,221,103,191,128,146,104,191,123,68,105,191,232,243,105,191,195,160,106,191,12,75,107,191,192,242,107,191,222,151,108,191,100,58,109,191,80,218,109,191,160,119,110,191,83,18,111,191,102,170,111,191,217,63,112,191,169,210,112,191,213,98,113,191,91,240,113,191,58,123,114,191,113,3,115,191,253,136,115,191,222,11,116,191,17,140,116,191,150,9,117,191,107,132,117,191,143,252,117,191,0,114,118,191,189,228,118,191,198,84,119,191,24,194,119,191,178,44,120,191,147,148,120,191,187,249,120,191,40,92,121,191,217,187,121,191,205,24,122,191,2,115,122,191,121,202,122,191,47,31,123,191,36,113,123,191,88,192,123,191,201,12,124,191,118,86,124,191,95,157,124,191,130,225,124,191,224,34,125,191,119,97,125,191,71,157,125,191,79,214,125,191,142,12,126,191,4,64,126,191,176,112,126,191,146,158,126,191,169,201,126,191,245,241,126,191,117,23,127,191,41,58,127,191,16,90,127,191,43,119,127,191,120,145,127,191,248,168,127,191,170,189,127,191,143,207,127,191,165,222,127,191,237,234,127,191,102,244,127,191,17,251,127,191,237,254,127,191,234,255,127,63,229,248,127,63,166,230,127,63,45,201,127,63,124,160,127,63,149,108,127,63,121,45,127,63,44,227,126,63,177,141,126,63,11,45,126,63,63,193,125,63,82,74,125,63,72,200,124,63,40,59,124,63,247,162,123,63,189,255,122,63,128,81,122,63,72,152,121,63,30,212,120,63,9,5,120,63,19,43,119,63,70,70,118,63,172,86,117,63,78,92,116,63,56,87,115,63,118,71,114,63,19,45,113,63,28,8,112,63,158,216,110,63,165,158,109,63,64,90,108,63,126,11,107,63,107,178,105,63,25,79,104,63,150,225,102,63,242,105,101,63,62,232,99,63,139,92,98,63,234,198,96,63,109,39,95,63,38,126,93,63,40,203,91,63,133,14,90,63,83,72,88,63,163,120,86,63,139,159,84,63,32,189,82,63,118,209,80,63,163,220,78,63,189,222,76,63,219,215,74,63,19,200,72,63,124,175,70,63,46,142,68,63,65,100,66,63,206,49,64,63,236,246,61,63,180,179,59,63,66,104,57,63,173,20,55,63,16,185,52,63,134,85,50,63,41,234,47,63,21,119,45,63,101,252,42,63,53,122,40,63,161,240,37,63,198,95,35,63,192,199,32,63,172,40,30,63,169,130,27,63,212,213,24,63,74,34,22,63,42,104,19,63,147,167,16,63,164,224,13,63,123,19,11,63,57,64,8,63,253,102,5,63,231,135,2,63,45,70,255,62,91,113,249,62,151,145,243,62,36,167,237,62,69,178,231,62,60,179,225,62,76,170,219,62,186,151,213,62,201,123,207,62,190,86,201,62,223,40,195,62,112,242,188,62,183,179,182,62,251,108,176,62,129,30,170,62,146,200,163,62,115,107,157,62,108,7,151,62,197,156,144,62,199,43,138,62,185,180,131,62,199,111,122,62,33,107,109,62,17,92,96,62,41,67,83,62,253,32,70,62,32,246,56,62,38,195,43,62,164,136,30,62,45,71,17,62,87,255,3,62,110,99,237,61,194,189,210,61,218,14,184,61,222,87,157,61,251,153,130,61,188,172,79,61,101,28,26,61,153,10,201,60,42,167,59,60,193,120,214,186,45,68,113,188,87,215,227,188,76,129,39,189,148,15,93,189,21,74,137,189,90,6,164,189,109,187,190,189,34,104,217,189,78,11,244,189,227,81,7,190,47,152,20,190,247,215,33,190,165,16,47,190,166,65,60,190,100,106,73,190,77,138,86,190,205,160,99,190,80,173,112,190,69,175,125,190,13,83,133,190,158,200,139,190,13,56,146,190,18,161,152,190,102,3,159,190,191,94,165,190,216,178,171,190,105,255,177,190,43,68,184,190,216,128,190,190,42,181,196,190,219,224,202,190,165,3,209,190,69,29,215,190,117,45,221,190,241,51,227,190,118,48,233,190,192,34,239,190,141,10,245,190,155,231,250,190,211,92,0,191,56,64,3,191,219,29,6,191,155,245,8,191,90,199,11,191,247,146,14,191,84,88,17,191,80,23,20,191,205,207,22,191,172,129,25,191,208,44,28,191,26,209,30,191,109,110,33,191,171,4,36,191,183,147,38,191,116,27,41,191,199,155,43,191,147,20,46,191,187,133,48,191,38,239,50,191,183,80,53,191,85,170,55,191,227,251,57,191,74,69,60,191,110,134,62,191,55,191,64,191,139,239,66,191,83,23,69,191,117,54,71,191,218,76,73,191,107,90,75,191,16,95,77,191,179,90,79,191,62,77,81,191,154,54,83,191,179,22,85,191,114,237,86,191,197,186,88,191,149,126,90,191,208,56,92,191,98,233,93,191,56,144,95,191,64,45,97,191,103,192,98,191,156,73,100,191,206,200,101,191,235,61,103,191,227,168,104,191,167,9,106,191,39,96,107,191,84,172,108,191,31,238,109,191,122,37,111,191,88,82,112,191,171,116,113,191,103,140,114,191,127,153,115,191,231,155,116,191,149,147,117,191,126,128,118,191,150,98,119,191,212,57,120,191,47,6,121,191,158,199,121,191,23,126,122,191,148,41,123,191,13,202,123,191,122,95,124,191,213,233,124,191,24,105,125,191,62,221,125,191,64,70,126,191,28,164,126,191,204,246,126,191,77,62,127,191,156,122,127,191,182,171,127,191,153,209,127,191,67,236,127,191,180,251,127,191,166,255,127,63,148,227,127,63,156,154,127,63,204,36,127,63,56,130,126,63,253,178,125,63,63,183,124,63,42,143,123,63,243,58,122,63,212,186,120,63,17,15,119,63,246,55,117,63,213,53,115,63,8,9,113,63,241,177,110,63,249,48,108,63,144,134,105,63,47,179,102,63,83,183,99,63,132,147,96,63,78,72,93,63,69,214,89,63,3,62,86,63,43,128,82,63,101,157,78,63,94,150,74,63,204,107,70,63,106,30,66,63,249,174,61,63,64,30,57,63,13,109,52,63,50,156,47,63,135,172,42,63,235,158,37,63,63,116,32,63,109,45,27,63,97,203,21,63,13,79,16,63,104,185,10,63,107,11,5,63,46,140,254,62,221,212,242,62,241,242,230,62,127,232,218,62,166,183,206,62,136,98,194,62,78,235,181,62,42,84,169,62,81,159,156,62,253,206,143,62,109,229,130,62,206,201,107,62,98,159,81,62,48,80,55,62,211,224,28,62,241,85,2,62,98,104,207,61,124,0,154,61,36,251,72,61,27,164,187,60,243,119,86,187,100,61,241,188,187,192,99,189,103,93,167,189,20,189,220,189,3,251,8,190,115,127,35,190,52,231,61,190,164,45,88,190,38,78,114,190,18,34,134,190,137,5,147,190,52,207,159,190,213,124,172,190,51,12,185,190,26,123,197,190,91,199,209,190,205,238,221,190,80,239,233,190,199,198,245,190,144,185,0,191,38,121,6,191,36,33,12,191,141,176,17,191,102,38,23,191,186,129,28,191,152,193,33,191,21,229,38,191,74,235,43,191,86,211,48,191,91,156,53,191,131,69,58,191,253,205,62,191,252,52,67,191,188,121,71,191,125,155,75,191,132,153,79,191,31,115,83,191,161,39,87,191,99,182,90,191,198,30,94,191,48,96,97,191,15,122,100,191,216,107,103,191,7,53,106,191,31,213,108,191,169,75,111,191,55,152,113,191,98,186,115,191,201,177,117,191,22,126,119,191,246,30,121,191,33,148,122,191,85,221,123,191,89,250,124,191,250,234,125,191,14,175,126,191,116,70,127,191,15,177,127,191,206,238,127,191,0,0,128,63,0,0,0,128,99,250,127,63,191,117,86,188,139,233,127,63,10,113,214,188,121,205,127,63,231,206,32,189,47,166,127,63,58,94,86,189,175,115,127,63,19,242,133,189,249,53,127,63,42,175,160,189,18,237,126,63,51,101,187,189,253,152,126,63,4,19,214,189,188,57,126,63,115,183,240,189,85,207,125,63,168,168,5,190,203,89,125,63,187,239,18,190,37,217,124,63,92,48,32,190,103,77,124,63,245,105,45,190,152,182,123,63,243,155,58,190,190,20,123,63,194,197,71,190,226,103,122,63,205,230,84,190,9,176,121,63,130,254,97,190,60,237,120,63,77,12,111,190,132,31,120,63,156,15,124,190,234,70,119,63,238,131,132,190,119,99,118,63,62,250,138,190,54,117,117,63,117,106,145,190,48,124,116,63,76,212,151,190,113,120,115,63,122,55,158,190,3,106,114,63,183,147,164,190,244,80,113,63,188,232,170,190,79,45,112,63,65,54,177,190,33,255,110,63,1,124,183,190,118,198,109,63,180,185,189,190,94,131,108,63,21,239,195,190,231,53,107,63,222,27,202,190,30,222,105,63,201,63,208,190,18,124,104,63,146,90,214,190,212,15,103,63,243,107,220,190,116,153,101,63,170,115,226,190,1,25,100,63,113,113,232,190,141,142,98,63,7,101,238,190,40,250,96,63,39,78,244,190,230,91,95,63,144,44,250,190,215,179,93,63,0,0,0,191,15,2,92,63,27,228,2,191,160,70,90,63,119,194,5,191,158,129,88,63,246,154,8,191,29,179,86,63,119,109,11,191,49,219,84,63,218,57,14,191,239,249,82,63,0,0,17,191,108,15,81,63,202,191,19,191,189,27,79,63,24,121,22,191,248,30,77,63,205,43,25,191,52,25,75,63,202,215,27,191,136,10,73,63,241,124,30,191,10,243,70,63,36,27,33,191,209,210,68,63,70,178,35,191,247,169,66,63,58,66,38,191,147,120,64,63,227,202,40,191,189,62,62,63,37,76,43,191,143,252,59,63,227,197,45,191,34,178,57,63,1,56,48,191,144,95,55,63,101,162,50,191,243,4,53,63,243,4,53,191,101,162,50,63,144,95,55,191,1,56,48,63,34,178,57,191,227,197,45,63,143,252,59,191,37,76,43,63,189,62,62,191,227,202,40,63,147,120,64,191,58,66,38,63,247,169,66,191,70,178,35,63,209,210,68,191,36,27,33,63,10,243,70,191,241,124,30,63,136,10,73,191,202,215,27,63,52,25,75,191,205,43,25,63,248,30,77,191,24,121,22,63,189,27,79,191,202,191,19,63,108,15,81,191,0,0,17,63,239,249,82,191,218,57,14,63,49,219,84,191,119,109,11,63,29,179,86,191,246,154,8,63,158,129,88,191,119,194,5,63,160,70,90,191,27,228,2,63,15,2,92,191,0,0,0,63,215,179,93,191,144,44,250,62,230,91,95,191,39,78,244,62,40,250,96,191,7,101,238,62,141,142,98,191,113,113,232,62,1,25,100,191,170,115,226,62,116,153,101,191,243,107,220,62,212,15,103,191,146,90,214,62,18,124,104,191,201,63,208,62,30,222,105,191,222,27,202,62,231,53,107,191,21,239,195,62,94,131,108,191,180,185,189,62,118,198,109,191,1,124,183,62,33,255,110,191,65,54,177,62,79,45,112,191,188,232,170,62,244,80,113,191,183,147,164,62,3,106,114,191,122,55,158,62,113,120,115,191,76,212,151,62,48,124,116,191,117,106,145,62,54,117,117,191,62,250,138,62,119,99,118,191,238,131,132,62,234,70,119,191,156,15,124,62,132,31,120,191,77,12,111,62,60,237,120,191,130,254,97,62,9,176,121,191,205,230,84,62,226,103,122,191,194,197,71,62,190,20,123,191,243,155,58,62,152,182,123,191,245,105,45,62,103,77,124,191,92,48,32,62,37,217,124,191,187,239,18,62,203,89,125,191,168,168,5,62,85,207,125,191,115,183,240,61,188,57,126,191,4,19,214,61,253,152,126,191,51,101,187,61,18,237,126,191,42,175,160,61,249,53,127,191,19,242,133,61,175,115,127,191,58,94,86,61,47,166,127,191,231,206,32,61,121,205,127,191,10,113,214,60,139,233,127,191,191,117,86,60,99,250,127,191,0,48,141,36,0,0,128,191,191,117,86,188,99,250,127,191,10,113,214,188,139,233,127,191,231,206,32,189,121,205,127,191,58,94,86,189,47,166,127,191,19,242,133,189,175,115,127,191,42,175,160,189,249,53,127,191,51,101,187,189,18,237,126,191,4,19,214,189,253,152,126,191,115,183,240,189,188,57,126,191,168,168,5,190,85,207,125,191,187,239,18,190,203,89,125,191,92,48,32,190,37,217,124,191,245,105,45,190,103,77,124,191,243,155,58,190,152,182,123,191,194,197,71,190,190,20,123,191,205,230,84,190,226,103,122,191,130,254,97,190,9,176,121,191,77,12,111,190,60,237,120,191,156,15,124,190,132,31,120,191,238,131,132,190,234,70,119,191,62,250,138,190,119,99,118,191,117,106,145,190,54,117,117,191,76,212,151,190,48,124,116,191,122,55,158,190,113,120,115,191,183,147,164,190,3,106,114,191,188,232,170,190,244,80,113,191,65,54,177,190,79,45,112,191,1,124,183,190,33,255,110,191,180,185,189,190,118,198,109,191,21,239,195,190,94,131,108,191,222,27,202,190,231,53,107,191,201,63,208,190,30,222,105,191,146,90,214,190,18,124,104,191,243,107,220,190,212,15,103,191,170,115,226,190,116,153,101,191,113,113,232,190,1,25,100,191,7,101,238,190,141,142,98,191,39,78,244,190,40,250,96,191,144,44,250,190,230,91,95,191,0,0,0,191,215,179,93,191,27,228,2,191,15,2,92,191,119,194,5,191,160,70,90,191,246,154,8,191,158,129,88,191,119,109,11,191,29,179,86,191,218,57,14,191,49,219,84,191,0,0,17,191,239,249,82,191,202,191,19,191,108,15,81,191,24,121,22,191,189,27,79,191,205,43,25,191,248,30,77,191,202,215,27,191,52,25,75,191,241,124,30,191,136,10,73,191,36,27,33,191,10,243,70,191,70,178,35,191,209,210,68,191,58,66,38,191,247,169,66,191,227,202,40,191,147,120,64,191,37,76,43,191,189,62,62,191,227,197,45,191,143,252,59,191,1,56,48,191,34,178,57,191,101,162,50,191,144,95,55,191,243,4,53,191,243,4,53,191,144,95,55,191,101,162,50,191,34,178,57,191,1,56,48,191,143,252,59,191,227,197,45,191,189,62,62,191,37,76,43,191,147,120,64,191,227,202,40,191,247,169,66,191,58,66,38,191,209,210,68,191,70,178,35,191,10,243,70,191,36,27,33,191,136,10,73,191,241,124,30,191,52,25,75,191,202,215,27,191,248,30,77,191,205,43,25,191,189,27,79,191,24,121,22,191,108,15,81,191,202,191,19,191,239,249,82,191,0,0,17,191,49,219,84,191,218,57,14,191,29,179,86,191,119,109,11,191,158,129,88,191,246,154,8,191,160,70,90,191,119,194,5,191,15,2,92,191,27,228,2,191,215,179,93,191,0,0,0,191,230,91,95,191,144,44,250,190,40,250,96,191,39,78,244,190,141,142,98,191,7,101,238,190,1,25,100,191,113,113,232,190,116,153,101,191,170,115,226,190,212,15,103,191,243,107,220,190,18,124,104,191,146,90,214,190,30,222,105,191,201,63,208,190,231,53,107,191,222,27,202,190,94,131,108,191,21,239,195,190,118,198,109,191,180,185,189,190,33,255,110,191,1,124,183,190,79,45,112,191,65,54,177,190,244,80,113,191,188,232,170,190,3,106,114,191,183,147,164,190,113,120,115,191,122,55,158,190,48,124,116,191,76,212,151,190,54,117,117,191,117,106,145,190,119,99,118,191,62,250,138,190,234,70,119,191,238,131,132,190,132,31,120,191,156,15,124,190,60,237,120,191,77,12,111,190,9,176,121,191,130,254,97,190,226,103,122,191,205,230,84,190,190,20,123,191,194,197,71,190,152,182,123,191,243,155,58,190,103,77,124,191,245,105,45,190,37,217,124,191,92,48,32,190,203,89,125,191,187,239,18,190,85,207,125,191,168,168,5,190,188,57,126,191,115,183,240,189,253,152,126,191,4,19,214,189,18,237,126,191,51,101,187,189,249,53,127,191,42,175,160,189,175,115,127,191,19,242,133,189,47,166,127,191,58,94,86,189,121,205,127,191,231,206,32,189,139,233,127,191,10,113,214,188,99,250,127,191,191,117,86,188,0,0,128,191,0,48,13,165,99,250,127,191,191,117,86,60,139,233,127,191,10,113,214,60,121,205,127,191,231,206,32,61,47,166,127,191,58,94,86,61,175,115,127,191,19,242,133,61,249,53,127,191,42,175,160,61,18,237,126,191,51,101,187,61,253,152,126,191,4,19,214,61,188,57,126,191,115,183,240,61,85,207,125,191,168,168,5,62,203,89,125,191,187,239,18,62,37,217,124,191,92,48,32,62,103,77,124,191,245,105,45,62,152,182,123,191,243,155,58,62,190,20,123,191,194,197,71,62,226,103,122,191,205,230,84,62,9,176,121,191,130,254,97,62,60,237,120,191,77,12,111,62,132,31,120,191,156,15,124,62,234,70,119,191,238,131,132,62,119,99,118,191,62,250,138,62,54,117,117,191,117,106,145,62,48,124,116,191,76,212,151,62,113,120,115,191,122,55,158,62,3,106,114,191,183,147,164,62,244,80,113,191,188,232,170,62,79,45,112,191,65,54,177,62,33,255,110,191,1,124,183,62,118,198,109,191,180,185,189,62,94,131,108,191,21,239,195,62,231,53,107,191,222,27,202,62,30,222,105,191,201,63,208,62,18,124,104,191,146,90,214,62,212,15,103,191,243,107,220,62,116,153,101,191,170,115,226,62,1,25,100,191,113,113,232,62,141,142,98,191,7,101,238,62,40,250,96,191,39,78,244,62,230,91,95,191,144,44,250,62,215,179,93,191,0,0,0,63,15,2,92,191,27,228,2,63,160,70,90,191,119,194,5,63,158,129,88,191,246,154,8,63,29,179,86,191,119,109,11,63,49,219,84,191,218,57,14,63,239,249,82,191,0,0,17,63,108,15,81,191,202,191,19,63,189,27,79,191,24,121,22,63,248,30,77,191,205,43,25,63,52,25,75,191,202,215,27,63,136,10,73,191,241,124,30,63,10,243,70,191,36,27,33,63,209,210,68,191,70,178,35,63,247,169,66,191,58,66,38,63,147,120,64,191,227,202,40,63,189,62,62,191,37,76,43,63,143,252,59,191,227,197,45,63,34,178,57,191,1,56,48,63,144,95,55,191,101,162,50,63,243,4,53,191,243,4,53,63,101,162,50,191,144,95,55,63,1,56,48,191,34,178,57,63,227,197,45,191,143,252,59,63,37,76,43,191,189,62,62,63,227,202,40,191,147,120,64,63,58,66,38,191,247,169,66,63,70,178,35,191,209,210,68,63,36,27,33,191,10,243,70,63,241,124,30,191,136,10,73,63,202,215,27,191,52,25,75,63,205,43,25,191,248,30,77,63,24,121,22,191,189,27,79,63,202,191,19,191,108,15,81,63,0,0,17,191,239,249,82,63,218,57,14,191,49,219,84,63,119,109,11,191,29,179,86,63,246,154,8,191,158,129,88,63,119,194,5,191,160,70,90,63,27,228,2,191,15,2,92,63,0,0,0,191,215,179,93,63,144,44,250,190,230,91,95,63,39,78,244,190,40,250,96,63,7,101,238,190,141,142,98,63,113,113,232,190,1,25,100,63,170,115,226,190,116,153,101,63,243,107,220,190,212,15,103,63,146,90,214,190,18,124,104,63,201,63,208,190,30,222,105,63,222,27,202,190,231,53,107,63,21,239,195,190,94,131,108,63,180,185,189,190,118,198,109,63,1,124,183,190,33,255,110,63,65,54,177,190,79,45,112,63,188,232,170,190,244,80,113,63,183,147,164,190,3,106,114,63,122,55,158,190,113,120,115,63,76,212,151,190,48,124,116,63,117,106,145,190,54,117,117,63,62,250,138,190,119,99,118,63,238,131,132,190,234,70,119,63,156,15,124,190,132,31,120,63,77,12,111,190,60,237,120,63,130,254,97,190,9,176,121,63,205,230,84,190,226,103,122,63,194,197,71,190,190,20,123,63,243,155,58,190,152,182,123,63,245,105,45,190,103,77,124,63,92,48,32,190,37,217,124,63,187,239,18,190,203,89,125,63,168,168,5,190,85,207,125,63,115,183,240,189,188,57,126,63,4,19,214,189,253,152,126,63,51,101,187,189,18,237,126,63,42,175,160,189,249,53,127,63,19,242,133,189,175,115,127,63,58,94,86,189,47,166,127,63,231,206,32,189,121,205,127,63,10,113,214,188,139,233,127,63,191,117,86,188,99,250,127,63,0,200,83,165,0,0,128,63,191,117,86,60,99,250,127,63,10,113,214,60,139,233,127,63,231,206,32,61,121,205,127,63,58,94,86,61,47,166,127,63,19,242,133,61,175,115,127,63,42,175,160,61,249,53,127,63,51,101,187,61,18,237,126,63,4,19,214,61,253,152,126,63,115,183,240,61,188,57,126,63,168,168,5,62,85,207,125,63,187,239,18,62,203,89,125,63,92,48,32,62,37,217,124,63,245,105,45,62,103,77,124,63,243,155,58,62,152,182,123,63,194,197,71,62,190,20,123,63,205,230,84,62,226,103,122,63,130,254,97,62,9,176,121,63,77,12,111,62,60,237,120,63,156,15,124,62,132,31,120,63,238,131,132,62,234,70,119,63,62,250,138,62,119,99,118,63,117,106,145,62,54,117,117,63,76,212,151,62,48,124,116,63,122,55,158,62,113,120,115,63,183,147,164,62,3,106,114,63,188,232,170,62,244,80,113,63,65,54,177,62,79,45,112,63,1,124,183,62,33,255,110,63,180,185,189,62,118,198,109,63,21,239,195,62,94,131,108,63,222,27,202,62,231,53,107,63,201,63,208,62,30,222,105,63,146,90,214,62,18,124,104,63,243,107,220,62,212,15,103,63,170,115,226,62,116,153,101,63,113,113,232,62,1,25,100,63,7,101,238,62,141,142,98,63,39,78,244,62,40,250,96,63,144,44,250,62,230,91,95,63,0,0,0,63,215,179,93,63,27,228,2,63,15,2,92,63,119,194,5,63,160,70,90,63,246,154,8,63,158,129,88,63,119,109,11,63,29,179,86,63,218,57,14,63,49,219,84,63,0,0,17,63,239,249,82,63,202,191,19,63,108,15,81,63,24,121,22,63,189,27,79,63,205,43,25,63,248,30,77,63,202,215,27,63,52,25,75,63,241,124,30,63,136,10,73,63,36,27,33,63,10,243,70,63,70,178,35,63,209,210,68,63,58,66,38,63,247,169,66,63,227,202,40,63,147,120,64,63,37,76,43,63,189,62,62,63,227,197,45,63,143,252,59,63,1,56,48,63,34,178,57,63,101,162,50,63,144,95,55,63,243,4,53,63,243,4,53,63,144,95,55,63,101,162,50,63,34,178,57,63,1,56,48,63,143,252,59,63,227,197,45,63,189,62,62,63,37,76,43,63,147,120,64,63,227,202,40,63,247,169,66,63,58,66,38,63,209,210,68,63,70,178,35,63,10,243,70,63,36,27,33,63,136,10,73,63,241,124,30,63,52,25,75,63,202,215,27,63,248,30,77,63,205,43,25,63,189,27,79,63,24,121,22,63,108,15,81,63,202,191,19,63,239,249,82,63,0,0,17,63,49,219,84,63,218,57,14,63,29,179,86,63,119,109,11,63,158,129,88,63,246,154,8,63,160,70,90,63,119,194,5,63,15,2,92,63,27,228,2,63,215,179,93,63,0,0,0,63,230,91,95,63,144,44,250,62,40,250,96,63,39,78,244,62,141,142,98,63,7,101,238,62,1,25,100,63,113,113,232,62,116,153,101,63,170,115,226,62,212,15,103,63,243,107,220,62,18,124,104,63,146,90,214,62,30,222,105,63,201,63,208,62,231,53,107,63,222,27,202,62,94,131,108,63,21,239,195,62,118,198,109,63,180,185,189,62,33,255,110,63,1,124,183,62,79,45,112,63,65,54,177,62,244,80,113,63,188,232,170,62,3,106,114,63,183,147,164,62,113,120,115,63,122,55,158,62,48,124,116,63,76,212,151,62,54,117,117,63,117,106,145,62,119,99,118,63,62,250,138,62,234,70,119,63,238,131,132,62,132,31,120,63,156,15,124,62,60,237,120,63,77,12,111,62,9,176,121,63,130,254,97,62,226,103,122,63,205,230,84,62,190,20,123,63,194,197,71,62,152,182,123,63,243,155,58,62,103,77,124,63,245,105,45,62,37,217,124,63,92,48,32,62,203,89,125,63,187,239,18,62,85,207,125,63,168,168,5,62,188,57,126,63,115,183,240,61,253,152,126,63,4,19,214,61,18,237,126,63,51,101,187,61,249,53,127,63,42,175,160,61,175,115,127,63,19,242,133,61,47,166,127,63,58,94,86,61,121,205,127,63,231,206,32,61,139,233,127,63,10,113,214,60,99,250,127,63,191,117,86,60,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,5,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,5,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,0,0,206,64,0,0,200,64,0,0,184,64,0,0,170,64,0,0,162,64,0,0,154,64,0,0,144,64,0,0,140,64,0,0,156,64,0,0,150,64,0,0,146,64,0,0,142,64,0,0,156,64,0,0,148,64,0,0,138,64,0,0,144,64,0,0,140,64,0,0,148,64,0,0,152,64,0,0,142,64,0,0,112,64,0,0,112,64,0,0,112,64,0,0,112,64,0,0,112,64,0,0,102,63,0,0,76,63,0,0,38,63,0,0,0,63,0,134,107,63,0,20,46,63,0,112,189,62,0,208,76,62,15,0,0,0,10,0,0,0,5,0,0,0,26,118,0,0,34,118,0,0,50,118,0,0,82,118,0,0,90,118,0,0,106,118,0,0,138,118,0,0,178,118,0,0,2,119,0,0,162,119,0,0,170,119,0,0,186,119,0,0,32,0,10,0,20,46,100,1,221,119,0,0,40,103,0,0,29,121,0,0,93,121,0,0,111,121,0,0,15,122,0,0,87,122,0,0,168,105,0,0,32,0,16,0,102,38,171,1,159,122,0,0,190,105,0,0,159,124,0,0,223,124,0,0,253,124,0,0,253,125,0,0,69,126,0,0,190,109,0,0,0,0,0,0,64,31,0,0,184,36,0,0,236,44,0,0,188,52,0,0,92,68,0,0,168,97,0,0,128,56,1,0,0,0,0,0,40,35,0,0,224,46,0,0,164,56,0,0,68,72,0,0,180,95,0,0,172,138,0,0,128,56,1,0,0,0,0,0,4,41,0,0,176,54,0,0,104,66,0,0,252,83,0,0,84,111,0,0,16,164,0,0,128,56,1,0,168,126,0,0,171,126,0,0,10,103,242,14,86,205,228,29,10,103,242,14,117,82,130,12,89,154,4,25,117,82,130,12,70,17,49,10,237,3,98,20,70,17,49,10,218,2,215,7,249,198,173,15,218,2,215,7,34,182,82,5,218,250,164,10,34,182,82,5,70,243,46,30,43,227,75,14,31,102,128,24,28,44,29,10,218,97,72,18,237,156,244,6,236,48,19,11,227,144,165,4,237,164,29,2,10,223,107,3,48,117,0,0,112,23,0,0,32,209,255,255,32,209,255,255,0,64,0,0,108,34,0,0,66,15,0,0,18,6,0,0,77,2,0,0,219,0,0,0,237,0,0,0,153,0,0,0,73,0,0,0,30,0,0,0,12,0,0,0,7,0,0,0,0,64,0,0,147,93,0,0,189,112,0,0,237,121,0,0,178,125,0,0,36,127,0,0,16,39,0,0,232,3,0,0,248,42,0,0,232,3,0,0,188,52,0,0,232,3,0,0,176,54,0,0,208,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,46,0,0,16,39,0,0,16,39,0,0,248,42,0,0,248,42,0,0,128,62,0,0,188,52,0,0,188,52,0,0,152,58,0,0,152,58,0,0,32,78,0,0,128,62,0,0,128,62,0,0,80,70,0,0,80,70,0,0,192,93,0,0,80,70,0,0,80,70,0,0,8,82,0,0,8,82,0,0,0,125,0,0,240,85,0,0,240,85,0,0,96,109,0,0,96,109,0,0,0,250,0,0,112,148,0,0,112,148,0,0,80,195,0,0,80,195,0,0,224,46,0,0,232,3,0,0,176,54,0,0,232,3,0,0,128,62,0,0,232,3,0,0,32,78,0,0,232,3,0,0,240,85,0,0,232,3,0,0,230,90,52,56,119,78,51,57,211,217,201,57,146,145,51,58,204,96,140,58,97,251,201,58,153,126,9,59,203,128,51,59,213,37,99,59,119,46,140,59,168,138,169,59,69,184,201,59,135,166,236,59,232,46,9,60,174,102,29,60,247,2,51,60,147,255,73,60,79,88,98,60,94,17,124,60,46,145,139,60,189,199,153,60,92,172,168,60,243,60,184,60,129,121,200,60,238,95,217,60,57,240,234,60,99,42,253,60,53,7,8,61,16,204,17,61,205,228,27,61,97,80,38,61,203,14,49,61,0,31,60,61,254,128,71,61,198,52,83,61,63,56,95,61,105,139,107,61,69,46,120,61,105,144,130,61,123,48,137,61,224,247,143,61,138,229,150,61,123,249,157,61,177,51,165,61,33,147,172,61,80,24,180,61,51,194,187,61,79,145,195,61,18,132,203,61,2,155,211,61,31,214,219,61,215,51,228,61,175,180,236,61,33,88,245,61,168,29,254,61,161,130,3,62,242,6,8,62,199,155,12,62,221,64,17,62,52,246,21,62,69,187,26,62,17,144,31,62,84,116,36,62,203,103,41,62,51,106,46,62,141,123,51,62,82,155,56,62,197,201,61,62,28,6,67,62,89,80,72,62,122,168,77,62,183,13,83,62,82,128,88,62,8,0,94,62,84,140,99,62,242,36,105,62,37,202,110,62,36,123,116,62,172,55,122,62,0,0,128,62,171,233,130,62,249,216,133,62,133,205,136,62,80,199,139,62,55,198,142,62,247,201,145,62,179,210,148,62,38,224,151,62,15,242,154,62,108,8,158,62,28,35,161,62,255,65,164,62,208,100,167,62,177,139,170,62,28,182,173,62,84,228,176,62,211,21,180,62,186,74,183,62,232,130,186,62,249,189,189,62,13,252,192,62,226,60,196,62,86,128,199,62,71,198,202,62,149,14,206,62,251,88,209,62,122,165,212,62,241,243,215,62,28,68,219,62,217,149,222,62,8,233,225,62,167,61,229,62,83,147,232,62,12,234,235,62,175,65,239,62,28,154,242,62,14,243,245,62,136,76,249,62,34,166,252,62,0,0,0,63,239,172,1,63,188,89,3,63,121,6,5,63,242,178,6,63,41,95,8,63,250,10,10,63,86,182,11,63,44,97,13,63,124,11,15,63,19,181,16,63,242,93,18,63,8,6,20,63,67,173,21,63,130,83,23,63,182,248,24,63,220,156,26,63,213,63,28,63,143,225,29,63,249,129,31,63,4,33,33,63,140,190,34,63,163,90,36,63,23,245,37,63,214,141,39,63,242,36,41,63,40,186,42,63,152,77,44,63,1,223,45,63,114,110,47,63,202,251,48,63,249,134,50,63,237,15,52,63,167,150,53,63,4,27,55,63,229,156,56,63,88,28,58,63,61,153,59,63,131,19,61,63,42,139,62,63,0,0,64,63,21,114,65,63,55,225,66,63,119,77,68,63,195,182,69,63,235,28,71,63,254,127,72,63,236,223,73,63,146,60,75,63,225,149,76,63,234,235,77,63,121,62,79,63,143,141,80,63,43,217,81,63,29,33,83,63,115,101,84,63,13,166,85,63,235,226,86,63,252,27,88,63,47,81,89,63,115,130,90,63,201,175,91,63,14,217,92,63,67,254,93,63,88,31,95,63,75,60,96,63,252,84,97,63,106,105,98,63,133,121,99,63,60,133,100,63,160,140,101,63,126,143,102,63,214,141,103,63,186,135,104,63,246,124,105,63,156,109,106,63,138,89,107,63,209,64,108,63,79,35,109,63,4,1,110,63,241,217,110,63,243,173,111,63,28,125,112,63,73,71,113,63,124,12,114,63,180,204,114,63,240,135,115,63,16,62,116,63,19,239,116,63,250,154,117,63,179,65,118,63,63,227,118,63,141,127,119,63,173,22,120,63,126,168,120,63,1,53,121,63,52,188,121,63,24,62,122,63,157,186,122,63,194,49,123,63],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+10240);allocate([119,163,123,63,187,15,124,63,159,118,124,63,2,216,124,63,244,51,125,63,101,138,125,63,68,219,125,63,179,38,126,63,143,108,126,63,235,172,126,63,163,231,126,63,218,28,127,63,127,76,127,63,129,118,127,63,2,155,127,63,208,185,127,63,28,211,127,63,197,230,127,63,203,244,127,63,47,253,127,63,0,0,128,63,4,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,28,0,0,0,32,0,0,0,40,0,0,0,48,0,0,0,56,0,0,0,64,0,0,0,80,0,0,0,96,0,0,0,112,0,0,0,136,0,0,0,160,0,0,0,192,0,0,0,240,0,0,0,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,0,0,128,62,208,37,180,62,151,57,173,62,9,165,159,62,250,237,139,62,205,172,101,62,248,169,42,62,52,48,210,61,90,241,13,61,90,241,13,189,52,48,210,189,248,169,42,190,205,172,101,190,250,237,139,190,9,165,159,190,151,57,173,190,208,37,180,190,135,138,177,62,27,131,150,62,96,35,73,62,196,66,141,61,196,66,141,189,96,35,73,190,27,131,150,190,135,138,177,190,135,138,177,190,27,131,150,190,96,35,73,190,196,66,141,189,196,66,141,61,96,35,73,62,27,131,150,62,135,138,177,62,151,57,173,62,205,172,101,62,90,241,13,61,248,169,42,190,9,165,159,190,208,37,180,190,250,237,139,190,52,48,210,189,52,48,210,61,250,237,139,62,208,37,180,62,9,165,159,62,248,169,42,62,90,241,13,189,205,172,101,190,151,57,173,190,125,61,167,62,210,139,10,62,210,139,10,190,125,61,167,190,125,61,167,190,210,139,10,190,210,139,10,62,125,61,167,62,125,61,167,62,210,139,10,62,210,139,10,190,125,61,167,190,125,61,167,190,210,139,10,190,210,139,10,62,125,61,167,62,9,165,159,62,90,241,13,61,250,237,139,190,151,57,173,190,52,48,210,189,205,172,101,62,208,37,180,62,248,169,42,62,248,169,42,190,208,37,180,190,205,172,101,190,52,48,210,61,151,57,173,62,250,237,139,62,90,241,13,189,9,165,159,190,27,131,150,62,196,66,141,189,135,138,177,190,96,35,73,190,96,35,73,62,135,138,177,62,196,66,141,61,27,131,150,190,27,131,150,190,196,66,141,61,135,138,177,62,96,35,73,62,96,35,73,190,135,138,177,190,196,66,141,189,27,131,150,62,250,237,139,62,248,169,42,190,151,57,173,190,90,241,13,61,208,37,180,62,52,48,210,61,9,165,159,190,205,172,101,190,205,172,101,62,9,165,159,62,52,48,210,189,208,37,180,190,90,241,13,189,151,57,173,62,248,169,42,62,250,237,139,190,22,235,181,64,30,107,94,64,35,164,226,63,185,197,204,63,91,124,113,64,184,115,10,64,116,96,161,63,136,245,142,63,19,155,245,63,0,0,0,0,5,193,35,61,233,125,163,61,37,150,244,61,226,116,34,62,172,28,74,62,221,37,113,62,52,186,139,62,180,119,158,62,228,191,176,62,173,136,194,62,37,201,211,62,24,122,228,62,24,149,244,62,200,10,2,63,28,124,9,63,73,157,16,63,202,109,23,63,192,237,29,63,159,29,36,63,84,254,41,63,46,145,47,63,224,215,52,63,99,212,57,63,240,136,62,63,211,247,66,63,171,35,71,63,23,15,75,63,216,188,78,63,173,47,82,63,106,106,85,63,206,111,88,63,154,66,91,63,142,229,93,63,75,91,96,63,110,166,98,63,100,201,100,63,155,198,102,63,111,160,104,63,247,88,106,63,128,242,107,63,223,110,109,63,11,208,110,63,202,23,112,63,224,71,113,63,225,97,114,63,77,103,115,63,150,89,116,63,12,58,117,63,255,9,118,63,138,202,118,63,187,124,119,63,192,33,120,63,98,186,120,63,157,71,121,63,75,202,121,63,36,67,122,63,242,178,122,63,59,26,123,63,200,121,123,63,32,210,123,63,200,35,124,63,55,111,124,63,242,180,124,63,94,245,124,63,224,48,125,63,236,103,125,63,183,154,125,63,180,201,125,63,6,245,125,63,17,29,126,63,24,66,126,63,78,100,126,63,211,131,126,63,253,160,126,63,237,187,126,63,195,212,126,63,179,235,126,63,239,0,127,63,135,20,127,63,141,38,127,63,67,55,127,63,170,70,127,63,227,84,127,63,15,98,127,63,47,110,127,63,100,121,127,63,190,131,127,63,63,141,127,63,24,150,127,63,56,158,127,63,194,165,127,63,163,172,127,63,16,179,127,63,245,184,127,63,119,190,127,63,114,195,127,63,25,200,127,63,108,204,127,63,91,208,127,63,6,212,127,63,111,215,127,63,131,218,127,63,102,221,127,63,21,224,127,63,130,226,127,63,205,228,127,63,230,230,127,63,205,232,127,63,146,234,127,63,70,236,127,63,200,237,127,63,40,239,127,63,120,240,127,63,166,241,127,63,195,242,127,63,191,243,127,63,186,244,127,63,148,245,127,63,94,246,127,63,39,247,127,63,207,247,127,63,119,248,127,63,253,248,127,63,148,249,127,63,9,250,127,63,127,250,127,63,244,250,127,63,89,251,127,63,173,251,127,63,1,252,127,63,84,252,127,63,152,252,127,63,219,252,127,63,30,253,127,63,80,253,127,63,130,253,127,63,181,253,127,63,231,253,127,63,9,254,127,63,59,254,127,63,93,254,127,63,126,254,127,63,143,254,127,63,176,254,127,63,210,254,127,63,227,254,127,63,244,254,127,63,21,255,127,63,38,255,127,63,55,255,127,63,71,255,127,63,88,255,127,63,88,255,127,63,105,255,127,63,122,255,127,63,122,255,127,63,139,255,127,63,155,255,127,63,155,255,127,63,155,255,127,63,172,255,127,63,172,255,127,63,189,255,127,63,189,255,127,63,189,255,127,63,206,255,127,63,206,255,127,63,206,255,127,63,206,255,127,63,206,255,127,63,222,255,127,63,222,255,127,63,222,255,127,63,222,255,127,63,222,255,127,63,222,255,127,63,239,255,127,63,239,255,127,63,239,255,127,63,239,255,127,63,239,255,127,63,239,255,127,63,239,255,127,63,239,255,127,63,239,255,127,63,239,255,127,63,239,255,127,63,239,255,127,63,239,255,127,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,0,0,128,63,102,190,3,191,246,224,191,60,157,186,18,190,208,219,179,189,72,48,246,186,182,229,210,188,213,65,222,61,240,207,90,59,200,178,191,59,159,161,201,188,250,37,18,62,197,7,143,187,243,14,38,60,204,209,227,189,36,194,165,189,19,194,153,189,224,23,242,60,183,254,6,60,92,0,26,62,74,110,3,61,5,134,145,189,72,22,184,191,116,238,38,63,186,69,133,61,191,43,198,191,247,0,45,62,205,175,246,191,184,41,84,61,240,93,137,189,55,86,141,189,79,56,34,59,47,210,85,189,222,77,129,61,157,57,90,61,141,150,67,61,69,240,63,188,125,202,17,62,2,75,238,188,143,251,142,190,149,243,221,190,5,218,162,189,100,203,194,190,39,249,81,189,42,200,95,62,214,27,165,190,164,136,136,63,50,60,214,189,63,111,150,192,80,195,159,62,251,6,142,62,97,253,45,192,185,165,217,63,209,63,17,190,180,109,61,60,3,0,129,61,242,108,37,61,88,112,100,60,129,36,141,187,229,187,47,189,84,203,113,189,208,108,77,189,79,79,233,188,214,67,42,189,98,208,51,189,100,123,168,61,57,237,73,62,37,204,20,61,8,85,111,189,139,21,154,61,88,204,163,189,29,201,21,190,118,138,37,62,218,3,61,190,199,15,21,62,178,185,226,62,230,92,206,63,144,73,142,63,20,203,39,64,23,217,30,192,78,154,230,189,146,7,226,189,77,44,16,190,254,13,58,190,51,217,132,61,13,126,172,61,34,72,191,61,149,185,25,62,103,69,4,62,164,23,53,62,2,41,17,62,65,44,139,190,118,193,112,62,203,236,136,61,157,47,222,190,107,184,232,61,144,105,45,190,5,81,179,191,150,236,32,63,41,117,9,190,159,233,205,62,180,142,238,63,17,30,197,63,82,68,138,192,112,63,60,63,211,218,76,63,69,170,30,188,69,115,46,61,66,58,161,60,31,242,150,188,151,84,180,185,62,113,136,187,167,56,146,58,51,199,141,60,39,156,35,188,11,40,212,188,79,56,162,58,13,132,170,187,1,112,103,189,205,137,130,61,148,208,167,59,196,86,181,60,179,87,6,60,229,78,63,189,5,145,96,189,7,211,77,187,8,119,151,191,169,193,240,63,130,173,210,190,233,67,61,192,175,125,5,191,135,20,139,190,176,227,255,61,100,74,90,189,25,231,207,61,249,177,90,57,241,48,72,189,162,143,131,61,97,57,29,189,102,66,93,60,68,104,41,189,187,177,5,189,140,38,97,188,217,127,184,188,160,220,187,189,109,54,142,190,55,222,61,190,90,249,64,61,109,230,0,190,19,98,134,62,172,230,89,190,94,72,231,189,81,218,255,191,62,64,207,190,163,201,101,62,122,81,35,63,128,96,142,190,253,67,148,189,55,57,92,189,204,197,9,189,1,172,185,189,16,87,131,189,39,34,146,189,159,194,86,61,112,127,199,59,156,112,154,61,143,12,72,189,31,40,220,187,138,79,43,61,116,169,91,61,133,210,7,190,219,65,219,60,245,100,126,190,239,164,42,188,150,150,17,61,236,219,89,190,14,21,155,190,182,147,18,189,233,240,192,62,161,214,24,63,78,38,42,191,156,110,137,62,66,232,192,190,17,1,135,191,163,56,108,60,194,107,55,62,253,132,19,61,93,140,97,62,208,191,184,187,132,236,1,61,125,99,126,61,65,92,255,187,234,84,1,60,194,197,101,59,21,184,43,60,200,161,20,61,53,126,33,190,108,31,135,189,165,179,189,189,163,146,252,59,34,91,129,61,80,100,167,61,50,61,217,190,1,75,51,189,139,84,120,190,81,18,54,63,81,136,60,191,127,106,12,192,174,99,220,189,24,92,51,190,247,37,22,189,95,199,73,188,87,184,128,189,206,98,179,188,177,79,227,187,88,204,227,59,156,64,166,59,62,126,107,59,64,143,172,59,105,168,17,61,28,193,28,61,18,40,12,61,94,122,1,188,146,5,140,188,123,161,64,61,208,173,161,60,78,99,123,188,30,236,131,61,195,187,188,190,240,54,138,189,251,232,52,192,25,173,171,63,106,99,161,189,62,150,94,192,224,218,1,63,38,254,80,191,194,71,105,188,199,103,2,190,5,252,218,189,211,66,19,189,213,33,215,61,145,70,149,62,88,26,72,62,144,102,177,61,134,89,136,189,241,71,209,189,58,152,200,61,137,239,4,190,134,228,204,62,125,148,209,190,190,6,115,189,240,99,134,189,162,97,81,190,4,30,56,62,13,116,5,58,172,248,203,61,197,32,24,192,57,181,47,191,13,83,111,63,83,34,141,63,204,238,177,63,211,193,138,192,180,6,45,187,141,166,233,59,241,160,217,61,233,44,19,62,184,89,140,189,248,222,95,189,235,197,144,188,28,62,158,189,31,179,216,188,241,26,42,188,67,20,221,188,189,29,225,187,42,57,103,62,189,196,208,62,235,236,122,189,120,72,108,189,67,116,56,190,88,30,100,190,115,105,236,190,14,164,171,62,201,89,132,63,65,183,135,64,44,12,177,190,93,52,24,191,10,72,152,194,66,210,135,190,50,246,79,61,6,178,131,61,143,160,29,61,193,219,45,61,143,217,30,189,243,83,193,188,118,170,151,189,48,53,221,188,47,137,16,60,76,64,98,189,35,52,159,187,70,235,160,62,105,138,184,62,236,49,161,189,205,1,226,61,114,248,212,190,65,42,197,190,242,96,139,190,202,137,198,191,154,64,17,190,53,211,229,62,16,62,16,191,17,25,20,192,238,234,245,189,33,229,191,191,126,86,81,191,15,26,75,189,126,14,189,188,36,131,183,188,139,197,239,61,176,15,33,61,206,250,84,61,4,123,7,61,3,233,226,189,114,242,172,60,0,152,161,188,108,145,153,60,142,25,77,60,139,84,24,62,30,136,188,61,226,88,175,190,190,132,10,62,211,48,44,190,142,230,8,189,15,166,119,189,82,237,3,190,247,57,42,63,24,122,20,190,3,178,17,64,75,176,164,63,255,89,87,63,128,101,27,192,70,205,188,60,103,38,104,62,241,132,25,189,157,42,31,62,231,250,35,61,84,30,61,190,92,146,3,62,205,105,192,189,79,250,108,189,83,225,217,60,65,169,204,189,174,52,4,189,120,95,165,190,121,234,65,190,23,242,60,191,60,155,154,189,198,222,91,62,119,244,191,189,21,28,50,191,29,45,184,61,216,245,3,192,230,36,140,190,73,160,101,191,176,175,5,62,139,222,9,62,12,147,165,63,152,163,170,59,90,205,4,189,116,209,173,59,15,154,157,60,13,108,87,59,139,124,205,60,206,221,174,59,233,66,145,188,201,195,202,59,186,38,172,59,152,24,137,58,222,164,19,189,3,211,36,61,254,112,38,189,228,68,96,60,51,95,180,61,14,192,161,188,106,49,184,61,77,150,36,60,66,210,66,189,67,144,59,191,88,83,25,61,119,17,22,190,14,191,107,190,40,39,68,192,197,114,179,191,231,152,162,60,102,0,35,61,3,216,155,188,12,206,64,61,6,132,6,190,131,82,68,190,218,92,144,188,143,192,68,189,71,31,99,190,111,47,137,190,208,181,239,188,43,186,122,61,122,254,4,190,79,228,205,59,199,245,175,189,164,171,143,60,29,153,93,61,39,17,166,189,102,249,194,190,166,98,99,190,149,68,2,191,108,93,242,190,106,76,248,62,220,46,18,192,64,149,100,60,99,156,121,64,210,227,219,63,35,132,183,191,67,86,45,192,108,178,226,63,167,92,175,64,132,42,185,63,203,185,0,64,87,33,241,191,184,146,105,192,178,186,161,191,34,136,71,63,187,68,7,64,105,169,70,64,117,31,216,63,117,200,142,192,147,169,206,191,224,74,102,64,30,220,27,64,194,221,161,191,93,252,213,62,40,184,188,63,122,165,10,64,29,90,244,191,194,48,84,191,159,171,177,63,6,129,43,192,192,94,225,189,230,92,250,63,155,171,50,63,41,95,160,190,38,170,99,191,79,4,145,62,190,51,114,63,8,0,0,0,4,0,0,0,225,122,84,63,246,40,92,63,212,93,0,0,16,0,0,0,4,0,0,0,154,153,89,63,174,71,97,63,212,93,0,0,32,0,0,0,4,0,0,0,193,202,97,63,195,245,104,63,212,93,0,0,48,0,0,0,8,0,0,0,184,30,101,63,131,192,106,63,220,93,0,0,64,0,0,0,8,0,0,0,168,198,107,63,215,163,112,63,220,93,0,0,80,0,0,0,16,0,0,0,49,8,108,63,215,163,112,63,228,93,0,0,96,0,0,0,16,0,0,0,215,163,112,63,133,235,113,63,228,93,0,0,128,0,0,0,16,0,0,0,51,51,115,63,51,51,115,63,228,93,0,0,160,0,0,0,16,0,0,0,143,194,117,63,143,194,117,63,228,93,0,0,192,0,0,0,32,0,0,0,217,206,119,63,217,206,119,63,236,93,0,0,0,1,0,0,32,0,0,0,154,153,121,63,154,153,121,63,236,93,0,0,104,4,0,0,32,0,0,0,72,3,0,0,32,0,0,0,40,2,0,0,32,0,0,0,8,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,202,69,27,76,255,82,130,90,179,98,162,107,96,117,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,10,0,12,0,14,0,16,0,20,0,24,0,28,0,34,0,40,0,48,0,60,0,78,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,8,0,8,0,8,0,16,0,16,0,16,0,21,0,21,0,24,0,29,0,34,0,36,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,41,0,41,0,41,0,82,0,82,0,123,0,164,0,200,0,222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,0,41,0,41,0,41,0,123,0,123,0,123,0,164,0,164,0,240,0,10,1,27,1,39,1,41,0,41,0,41,0,41,0,41,0,41,0,41,0,41,0,123,0,123,0,123,0,123,0,240,0,240,0,240,0,10,1,10,1,49,1,62,1,72,1,80,1,123,0,123,0,123,0,123,0,123,0,123,0,123,0,123,0,240,0,240,0,240,0,240,0,49,1,49,1,49,1,62,1,62,1,87,1,95,1,102,1,108,1,240,0,240,0,240,0,240,0,240,0,240,0,240,0,240,0,49,1,49,1,49,1,49,1,87,1,87,1,87,1,95,1,95,1,114,1,120,1,126,1,131,1,0,0,12,0,24,0,36,0,48,0,4,0,16,0,28,0,40,0,52,0,8,0,20,0,32,0,44,0,56,0,1,0,13,0,25,0,37,0,49,0,5,0,17,0,29,0,41,0,53,0,9,0,21,0,33,0,45,0,57,0,2,0,14,0,26,0,38,0,50,0,6,0,18,0,30,0,42,0,54,0,10,0,22,0,34,0,46,0,58,0,3,0,15,0,27,0,39,0,51,0,7,0,19,0,31,0,43,0,55,0,11,0,23,0,35,0,47,0,59,0,0,0,24,0,48,0,72,0,96,0,8,0,32,0,56,0,80,0,104,0,16,0,40,0,64,0,88,0,112,0,4,0,28,0,52,0,76,0,100,0,12,0,36,0,60,0,84,0,108,0,20,0,44,0,68,0,92,0,116,0,1,0,25,0,49,0,73,0,97,0,9,0,33,0,57,0,81,0,105,0,17,0,41,0,65,0,89,0,113,0,5,0,29,0,53,0,77,0,101,0,13,0,37,0,61,0,85,0,109,0,21,0,45,0,69,0,93,0,117,0,2,0,26,0,50,0,74,0,98,0,10,0,34,0,58,0,82,0,106,0,18,0,42,0,66,0,90,0,114,0,6,0,30,0,54,0,78,0,102,0,14,0,38,0,62,0,86,0,110,0,22,0,46,0,70,0,94,0,118,0,3,0,27,0,51,0,75,0,99,0,11,0,35,0,59,0,83,0,107,0,19,0,43,0,67,0,91,0,115,0,7,0,31,0,55,0,79,0,103,0,15,0,39,0,63,0,87,0,111,0,23,0,47,0,71,0,95,0,119,0,0,0,48,0,96,0,144,0,192,0,16,0,64,0,112,0,160,0,208,0,32,0,80,0,128,0,176,0,224,0,4,0,52,0,100,0,148,0,196,0,20,0,68,0,116,0,164,0,212,0,36,0,84,0,132,0,180,0,228,0,8,0,56,0,104,0,152,0,200,0,24,0,72,0,120,0,168,0,216,0,40,0,88,0,136,0,184,0,232,0,12,0,60,0,108,0,156,0,204,0,28,0,76,0,124,0,172,0,220,0,44,0,92,0,140,0,188,0,236,0,1,0,49,0,97,0,145,0,193,0,17,0,65,0,113,0,161,0,209,0,33,0,81,0,129,0,177,0,225,0,5,0,53,0,101,0,149,0,197,0,21,0,69,0,117,0,165,0,213,0,37,0,85,0,133,0,181,0,229,0,9,0,57,0,105,0,153,0,201,0,25,0,73,0,121,0,169,0,217,0,41,0,89,0,137,0,185,0,233,0,13,0,61,0,109,0,157,0,205,0,29,0,77,0,125,0,173,0,221,0,45,0,93,0,141,0,189,0,237,0,2,0,50,0,98,0,146,0,194,0,18,0,66,0,114,0,162,0,210,0,34,0,82,0,130,0,178,0,226,0,6,0,54,0,102,0,150,0,198,0,22,0,70,0,118,0,166,0,214,0,38,0,86,0,134,0,182,0,230,0,10,0,58,0,106,0,154,0,202,0,26,0,74,0,122,0,170,0,218,0,42,0,90,0,138,0,186,0,234,0,14,0,62,0,110,0,158,0,206,0,30,0,78,0,126,0,174,0,222,0,46,0,94,0,142,0,190,0,238,0,3,0,51,0,99,0,147,0,195,0,19,0,67,0,115,0,163,0,211,0,35,0,83,0,131,0,179,0,227,0,7,0,55,0,103,0,151,0,199,0,23,0,71,0,119,0,167,0,215,0,39,0,87,0,135,0,183,0,231,0,11,0,59,0,107,0,155,0,203,0,27,0,75,0,123,0,171,0,219,0,43,0,91,0,139,0,187,0,235,0,15,0,63,0,111,0,159,0,207,0,31,0,79,0,127,0,175,0,223,0,47,0,95,0,143,0,191,0,239,0,0,0,96,0,192,0,32,1,128,1,32,0,128,0,224,0,64,1,160,1,64,0,160,0,0,1,96,1,192,1,8,0,104,0,200,0,40,1,136,1,40,0,136,0,232,0,72,1,168,1,72,0,168,0,8,1,104,1,200,1,16,0,112,0,208,0,48,1,144,1,48,0,144,0,240,0,80,1,176,1,80,0,176,0,16,1,112,1,208,1,24,0,120,0,216,0,56,1,152,1,56,0,152,0,248,0,88,1,184,1,88,0,184,0,24,1,120,1,216,1,4,0,100,0,196,0,36,1,132,1,36,0,132,0,228,0,68,1,164,1,68,0,164,0,4,1,100,1,196,1,12,0,108,0,204,0,44,1,140,1,44,0,140,0,236,0,76,1,172,1,76,0,172,0,12,1,108,1,204,1,20,0,116,0,212,0,52,1,148,1,52,0,148,0,244,0,84,1,180,1,84,0,180,0,20,1,116,1,212,1,28,0,124,0,220,0,60,1,156,1,60,0,156,0,252,0,92,1,188,1,92,0,188,0,28,1,124,1,220,1,1,0,97,0,193,0,33,1,129,1,33,0,129,0,225,0,65,1,161,1,65,0,161,0,1,1,97,1,193,1,9,0,105,0,201,0,41,1,137,1,41,0,137,0,233,0,73,1,169,1,73,0,169,0,9,1,105,1,201,1,17,0,113,0,209,0,49,1,145,1,49,0,145,0,241,0,81,1,177,1,81,0,177,0,17,1,113,1,209,1,25,0,121,0,217,0,57,1,153,1,57,0,153,0,249,0,89,1,185,1,89,0,185,0,25,1,121,1,217,1,5,0,101,0,197,0,37,1,133,1,37,0,133,0,229,0,69,1,165,1,69,0,165,0,5,1,101,1,197,1,13,0,109,0,205,0,45,1,141,1,45,0,141,0,237,0,77,1,173,1,77,0,173,0,13,1,109,1,205,1,21,0,117,0,213,0,53,1,149,1,53,0,149,0,245,0,85,1,181,1,85,0,181,0,21,1,117,1,213,1,29,0,125,0,221,0,61,1,157,1,61,0,157,0,253,0,93,1,189,1,93,0,189,0,29,1,125,1,221,1,2,0,98,0,194,0,34,1,130,1,34,0,130,0,226,0,66,1,162,1,66,0,162,0,2,1,98,1,194,1,10,0,106,0,202,0,42,1,138,1,42,0,138,0,234,0,74,1,170,1,74,0,170,0,10,1,106,1,202,1,18,0,114,0,210,0,50,1,146,1,50,0,146,0,242,0,82,1,178,1,82,0,178,0,18,1,114,1,210,1,26,0,122,0,218,0,58,1,154,1,58,0,154,0,250,0,90,1,186,1,90,0,186,0,26,1,122,1,218,1,6,0,102,0,198,0,38,1,134,1,38,0,134,0,230,0,70,1,166,1,70,0,166,0,6,1,102,1,198,1,14,0,110,0,206,0,46,1,142,1,46,0,142,0,238,0,78,1,174,1,78,0,174,0,14,1,110,1,206,1,22,0,118,0,214,0,54,1,150,1,54,0,150,0,246,0,86,1,182,1,86,0,182,0,22,1,118,1,214,1,30,0,126,0,222,0,62,1,158,1,62,0,158,0,254,0,94,1,190,1,94,0,190,0,30,1,126,1,222,1,3,0,99,0,195,0,35,1,131,1,35,0,131,0,227,0,67,1,163,1,67,0,163,0,3,1,99,1,195,1,11,0,107,0,203,0,43,1,139,1,43,0,139,0,235,0,75,1,171,1,75,0,171,0,11,1,107,1,203,1,19,0,115,0,211,0,51,1,147,1,51,0,147,0,243,0,83,1,179,1,83,0,179,0,19,1,115,1,211,1,27,0,123,0,219,0,59,1,155,1,59,0,155,0,251,0,91,1,187,1,91,0,187,0,27,1,123,1,219,1,7,0,103,0,199,0,39,1,135,1,39,0,135,0,231,0,71,1,167,1,71,0,167,0,7,1,103,1,199,1,15,0,111,0,207,0,47,1,143,1,47,0,143,0,239,0,79,1,175,1,79,0,175,0,15,1,111,1,207,1,23,0,119,0,215,0,55,1,151,1,55,0,151,0,247,0,87,1,183,1,87,0,183,0,23,1,119,1,215,1,31,0,127,0,223,0,63,1,159,1,63,0,159,0,255,0,95,1,191,1,95,0,191,0,31,1,127,1,223,1,81,11,10,9,10,9,10,9,239,8,239,8,10,9,252,8,23,9,239,8,72,11,20,10,90,9,63,9,10,9,226,8,226,8,226,8,226,8,146,8,183,9,36,9,36,9,10,9,10,9,10,9,36,9,36,9,63,9,50,9,144,12,206,10,36,9,36,9,10,9,226,8,173,8,159,8,213,8,146,8,156,9,170,9,63,9,90,9,90,9,90,9,90,9,63,9,103,9,10,9,151,13,240,11,79,8,159,8,226,8,226,8,226,8,239,8,10,9,213,8,210,12,69,12,20,10,90,9,199,8,173,8,159,8,146,8,146,8,66,8,0,16,5,15,173,8,60,10,60,10,103,9,10,9,90,9,63,9,26,8,106,12,172,12,63,9,173,8,249,9,130,9,36,9,10,9,119,8,173,8,10,13,160,13,166,10,146,8,213,8,156,9,50,9,63,9,159,8,53,8,50,9,116,9,23,9,63,9,90,9,116,9,116,9,116,9,156,9,63,9,195,14,45,14,130,9,223,9,63,9,226,8,226,8,252,8,159,8,0,8,182,12,153,12,153,10,30,11,143,9,23,9,252,8,252,8,226,8,79,8,191,12,228,12,193,10,246,10,143,9,213,8,213,8,199,8,79,8,53,8,57,11,165,11,73,10,63,9,103,9,50,9,146,8,199,8,199,8,66,8,153,12,125,12,73,10,20,10,226,8,133,8,199,8,173,8,173,8,93,8,106,12,238,12,180,10,103,9,226,8,226,8,226,8,239,8,146,8,66,8,69,12,200,12,156,9,13,8,239,8,196,9,63,9,183,9,130,9,133,8,179,13,210,12,10,9,140,10,87,10,170,9,63,9,90,9,36,9,79,8,95,13,207,13,222,11,240,11,252,8,158,7,173,8,226,8,226,8,226,8,76,13,38,13,39,8,127,10,57,11,50,9,116,9,226,8,170,9,236,9,176,14,160,13,158,7,100,10,81,11,223,9,90,9,63,9,156,9,213,8,212,11,200,12,180,10,72,11,180,10,106,8,79,8,239,8,186,8,199,8,111,14,73,14,233,7,177,7,100,10,140,10,20,10,196,9,23,9,63,9,135,12,85,13,50,9,26,8,72,11,72,11,36,9,183,9,199,8,119,8,10,13,38,13,30,11,220,10,23,9,106,8,226,8,239,8,66,8,13,8,23,9,252,8,133,8,119,8,133,8,63,9,73,10,140,10,140,10,249,9,103,9,130,9,173,8,213,8,173,8,173,8,36,9,116,9,47,10,140,10,222,11,172,12,246,10,72,11,170,9,26,8,252,8,10,9,50,9,76,9,173,8,106,8,79,8,239,8,196,9,233,10,233,10,60,10,20,10,63,9,92,14,129,14,186,8,46,7,133,8,193,10,166,10,113,10,209,9,159,8,233,10,88,12,166,10,249,9,30,11,209,9,133,8,90,9,173,8,133,8,250,0,3,0,6,0,3,0,3,0,3,0,4,0,3,0,3,0,3,0,205,1,73,14,109,11,109,11,109,11,109,11,109,11,109,11,109,11,109,11,109,11,109,11,109,11,147,11,147,11,109,11,30,11,144,12,13,12,156,11,240,11,240,11,194,11,194,11,194,11,147,11,147,11,194,11,156,11,72,11,30,11,30,11,166,10,80,15,174,15,165,11,135,12,135,12,118,11,240,11,30,11,50,12,172,12,109,11,30,11,60,10,249,9,220,10,109,11,188,13,125,12,194,11,31,12,203,11,72,11,109,11,109,11,109,11,109,11,72,11,72,11,72,11,72,11,72,11,193,10,190,19,190,19,118,11,245,13,57,13,240,11,13,12,233,10,88,12,88,12,156,11,30,11,209,9,236,9,193,10,72,11,76,17,53,16,140,10,193,10,156,11,194,11,109,11,30,11,165,11,203,11,109,11,109,11,109,11,109,11,72,11,166,10,36,14,203,11,156,11,240,11,240,11,57,11,246,10,240,11,144,12,231,11,165,11,219,12,219,12,165,11,238,12,175,11,107,20,150,19,236,9,10,13,198,13,57,13,125,12,22,12,48,13,165,11,140,10,87,10,127,10,233,10,30,11,113,10,217,19,54,20,7,18,76,17,156,9,81,11,231,11,135,12,97,12,127,10,180,10,72,11,30,11,233,10,30,11,140,10,50,12,72,11,147,11,109,11,109,11,109,11,109,11,147,11,147,11,147,11,147,11,109,11,109,11,147,11,147,11,147,11,106,16,135,12,165,11,31,12,194,11,72,11,72,11,109,11,156,11,57,11,100,11,203,11,156,11,194,11,125,12,57,11,176,14,176,14,172,12,31,12,165,11,72,11,109,11,72,11,156,11,118,11,233,10,233,10,30,11,72,11,72,11,100,10,14,15,174,15,135,12,50,12,172,12,118,11,231,11,147,11,147,11,13,12,30,11,233,10,233,10,233,10,233,10,20,10,5,15,240,15,29,13,188,13,22,12,180,10,194,11,118,11,50,12,13,12,30,11,30,11,87,10,87,10,30,11,246,10,27,20,30,19,153,12,5,15,113,13,97,12,81,11,85,13,123,13,140,10,20,10,113,10,180,10,30,11,246,10,193,10,13,16,205,14,219,12,88,12,109,11,72,11,72,11,109,11,233,10,180,10,233,10,180,10,233,10,30,11,72,11,246,10,217,19,190,19,231,11,217,13,172,12,240,11,13,12,128,11,31,12,81,11,180,10,180,10,180,10,30,11,233,10,60,10,213,16,213,16,44,11,223,9,135,12,48,13,48,13,3,12,3,12,48,13,240,11,30,11,87,10,20,10,166,10,193,10,240,11,100,11,246,10,72,11,180,10,127,10,81,11,31,12,78,12,78,12,144,12,97,12,240,11,194,11,147,11,30,11,23,17,42,15,109,11,72,11,30,11,72,11,30,11,30,11,72,11,72,11,72,11,30,11,72,11,109,11,72,11,30,11,165,11,100,11,100,11,165,11,165,11,240,11,50,12,144,12,78,12,240,11,194,11,156,11,156,11,156,11,109,11,180,10,133,16,53,16,238,12,19,13,109,11,147,11,72,11,165,11,165,11,30,11,233,10,180,10,30,11,30,11,30,11,233,10,240,15,174,15,31,12,194,11,109,11,109,11,109,11,72,11,109,11,109,11,30,11,30,11,30,11,233,10,72,11,220,10,7,18,223,17,97,12,113,13,135,12,165,11,81,11,222,11,50,12,180,10,127,10,127,10,127,10,180,10,233,10,140,10,53,16,173,16,205,14,73,14,166,10,220,10,72,11,72,11,194,11,156,11,109,11,30,11,127,10,127,10,233,10,72,11,119,16,226,13,193,10,30,11,30,11,72,11,72,11,72,11,109,11,109,11,72,11,109,11,109,11,109,11,147,11,72,11,54,20,57,19,213,8,104,13,205,14,151,13,19,13,30,11,238,12,151,13,78,12,81,11,156,9,183,9,193,10,109,11,123,13,101,14,50,12,125,12,29,13,231,11,135,12,135,12,165,11,144,12,13,12,109,11,109,11,127,10,236,9,130,9,165,11,194,11,233,10,233,10,180,10,233,10,30,11,156,11,240,11,31,12,78,12,78,12,78,12,31,12,194,11,194,11,128,11,57,11,127,10,166,10,220,10,194,11,104,13,217,13,29,13,172,12,240,11,194,11,147,11,109,11,72,11,30,11,203,11,128,11,81,11,194,11,194,11,156,11,203,11,31,12,240,11,240,11,194,11,72,11,30,11,109,11,109,11,72,11,80,15,127,15,194,11,125,12,29,13,144,12,219,12,219,12,151,13,120,14,113,13,166,10,133,8,156,9,20,10,47,10,100,0,3,0,40,0,3,0,3,0,3,0,5,0,14,0,14,0,10,0,11,0,3,0,8,0,9,0,7,0,3,0,91,1,18,0,29,0,38,0,40,0,46,0,52,0,62,0,84,0,92,202,190,216,182,223,154,226,156,230,120,236,122,244,204,252,52,3,134,11,136,19,100,25,102,29,74,32,66,39,164,53,100,0,240,0,32,0,100,0,205,60,0,48,0,32,0,32,254,31,246,31,234,31,216,31,194,31,168,31,136,31,98,31,58,31,10,31,216,30,160,30,98,30,34,30,220,29,144,29,66,29,238,28,150,28,58,28,216,27,114,27,10,27,156,26,42,26,180,25,58,25,188,24,60,24,182,23,46,23,160,22,16,22,126,21,232,20,78,20,176,19,16,19,110,18,200,17,30,17,116,16,198,15,22,15,100,14,174,13,248,12,64,12,132,11,200,10,10,10,74,9,138,8,198,7,2,7,62,6,120,5,178,4,234,3,34,3,90,2,146,1,202,0,0,0,54,255,110,254,166,253,222,252,22,252,78,251,136,250,194,249,254,248,58,248,118,247,182,246,246,245,56,245,124,244,192,243,8,243,82,242,156,241,234,240,58,240,140,239,226,238,56,238,146,237,240,236,80,236,178,235,24,235,130,234,240,233,96,233,210,232,74,232,196,231,68,231,198,230,76,230,214,229,100,229,246,228,142,228,40,228,198,227,106,227,18,227,190,226,112,226,36,226,222,225,158,225,96,225,40,225,246,224,198,224,158,224,120,224,88,224,62,224,40,224,22,224,10,224,2,224,0,224,42,175,213,201,207,255,64,0,17,0,99,255,97,1,16,254,163,0,39,43,189,86,217,255,6,0,91,0,86,255,186,0,23,0,128,252,192,24,216,77,237,255,220,255,102,0,167,255,232,255,72,1,73,252,8,10,37,62,135,199,61,201,64,0,128,0,134,255,36,0,54,1,0,253,72,2,51,36,69,69,12,0,128,0,18,0,114,255,32,1,139,255,159,252,27,16,123,56,104,2,13,200,246,255,39,0,58,0,210,255,172,255,120,0,184,0,197,254,227,253,4,5,4,21,64,35,230,62,198,196,243,255,0,0,20,0,26,0,5,0,225,255,213,255,252,255,65,0,90,0,7,0,99,255,8,255,212,255,81,2,47,6,52,10,199,12,228,87,5,197,3,0,242,255,236,255,241,255,2,0,25,0,37,0,25,0,240,255,185,255,149,255,177,255,50,0,36,1,111,2,214,3,8,5,184,5,148,107,103,196,17,0,12,0,8,0,1,0,246,255,234,255,226,255,224,255,234,255,3,0,44,0,100,0,168,0,243,0,61,1,125,1,173,1,199,1,19,245,149,230,89,18,243,41,31,6,84,32,189,0,168,253,105,2,103,119,117,0,97,255,210,251,8,116,52,0,221,0,168,246,116,110,252,255,17,2,234,242,229,102,208,255,246,2,140,240,165,93,176,255,137,3,117,239,6,83,157,255,204,3,130,239,102,71,149,255,199,3,139,240,39,59,153,255,128,3,97,242,174,46,165,255,5,3,207,244,94,34,185,255,99,2,161,247,152,22,210,255,169,1,161,250,180,11,0,1,1,1,2,3,3,3,2,3,3,3,2,3,3,3,0,3,12,15,48,51,60,63,192,195,204,207,240,243,252,255,0,255,0,255,0,255,0,255,0,255,0,254,1,0,1,255,0,254,0,253,2,0,1,255,0,254,0,253,3,0,1,255,2,1,0,25,23,2,0,126,124,119,109,87,41,19,9,4,2,0,255,255,156,110,86,70,59,51,45,40,37,33,31,28,26,25,23,22,21,20,19,18,17,16,16,15,15,14,13,13,12,12,12,12,11,11,11,10,10,10,9,9,9,9,9,9,8,8,8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,90,80,75,69,63,56,49,40,34,29,20,18,10,0,0,0,0,0,0,0,0,110,100,90,84,78,71,65,58,51,45,39,32,26,20,12,0,0,0,0,0,0,118,110,103,93,86,80,75,70,65,59,53,47,40,31,23,15,4,0,0,0,0,126,119,112,104,95,89,83,78,72,66,60,54,47,39,32,25,17,12,1,0,0,134,127,120,114,103,97,91,85,78,72,66,60,54,47,41,35,29,23,16,10,1,144,137,130,124,113,107,101,95,88,82,76,70,64,57,51,45,39,33,26,15,1,152,145,138,132,123,117,111,105,98,92,86,80,74,67,61,55,49,43,36,20,1,162,155,148,142,133,127,121,115,108,102,96,90,84,77,71,65,59,53,46,30,1,172,165,158,152,143,137,131,125,118,112,106,100,94,87,81,75,69,63,56,45,20,200,200,200,200,200,200,200,200,198,193,188,183,178,173,168,163,158,153,148,129,104,40,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,40,15,23,28,31,34,36,38,39,41,42,43,44,45,46,47,47,49,50,51,52,53,54,55,55,57,58,59,60,61,62,63,63,65,66,67,68,69,70,71,71,40,20,33,41,48,53,57,61,64,66,69,71,73,75,76,78,80,82,85,87,89,91,92,94,96,98,101,103,105,107,108,110,112,114,117,119,121,123,124,126,128,40,23,39,51,60,67,73,79,83,87,91,94,97,100,102,105,107,111,115,118,121,124,126,129,131,135,139,142,145,148,150,153,155,159,163,166,169,172,174,177,179,35,28,49,65,78,89,99,107,114,120,126,132,136,141,145,149,153,159,165,171,176,180,185,189,192,199,205,211,216,220,225,229,232,239,245,251,21,33,58,79,97,112,125,137,148,157,166,174,182,189,195,201,207,217,227,235,243,251,17,35,63,86,106,123,139,152,165,177,187,197,206,214,222,230,237,250,25,31,55,75,91,105,117,128,138,146,154,161,168,174,180,185,190,200,208,215,222,229,235,240,245,255,16,36,65,89,110,128,144,159,173,185,196,207,217,226,234,242,250,11,41,74,103,128,151,172,191,209,225,241,255,9,43,79,110,138,163,186,207,227,246,12,39,71,99,123,144,164,182,198,214,228,241,253,9,44,81,113,142,168,192,214,235,255,7,49,90,127,160,191,220,247,6,51,95,134,170,203,234,7,47,87,123,155,184,212,237,6,52,97,137,174,208,240,5,57,106,151,192,231,5,59,111,158,202,243,5,55,103,147,187,224,5,60,113,161,206,248,4,65,122,175,224,4,67,127,182,234,224,224,224,224,224,224,224,224,160,160,160,160,185,185,185,178,178,168,134,61,37,224,224,224,224,224,224,224,224,240,240,240,240,207,207,207,198,198,183,144,66,40,160,160,160,160,160,160,160,160,185,185,185,185,193,193,193,183,183,172,138,64,38,240,240,240,240,240,240,240,240,207,207,207,207,204,204,204,193,193,180,143,66,40,185,185,185,185,185,185,185,185,193,193,193,193,193,193,193,183,183,172,138,65,39,207,207,207,207,207,207,207,207,204,204,204,204,201,201,201,188,188,176,141,66,40,193,193,193,193,193,193,193,193,193,193,193,193,194,194,194,184,184,173,139,65,39,204,204,204,204,204,204,204,204,201,201,201,201,198,198,198,187,187,175,140,66,40,72,127,65,129,66,128,65,128,64,128,62,128,64,128,64,128,92,78,92,79,92,78,90,79,116,41,115,40,114,40,132,26,132,26,145,17,161,12,176,10,177,11,24,179,48,138,54,135,54,132,53,134,56,133,55,132,55,132,61,114,70,96,74,88,75,88,87,74,89,66,91,67,100,59,108,50,120,40,122,37,97,43,78,50,83,78,84,81,88,75,86,74,87,71,90,73,93,74,93,74,109,40,114,36,117,34,117,34,143,17,145,18,146,19,162,12,165,10,178,7,189,6,190,8,177,9,23,178,54,115,63,102,66,98,69,99,74,89,71,91,73,91,78,89,86,80,92,66,93,64,102,59,103,60,104,60,117,52,123,44,138,35,133,31,97,38,77,45,61,90,93,60,105,42,107,41,110,45,116,38,113,38,112,38,124,26,132,27,136,19,140,20,155,14,159,16,158,18,170,13,177,10,187,8,192,6,175,9,159,10,21,178,59,110,71,86,75,85,84,83,91,66,88,73,87,72,92,75,98,72,105,58,107,54,115,52,114,55,112,56,129,51,132,40,150,33,140,29,98,35,77,42,42,121,96,66,108,43,111,40,117,44,123,32,120,36,119,33,127,33,134,34,139,21,147,23,152,20,158,25,154,26,166,21,173,16,184,13,184,10,150,13,139,15,22,178,63,114,74,82,84,83,92,82,103,62,96,72,96,67,101,73,107,72,113,55,118,52,125,52,118,52,117,55,135,49,137,39,157,32,145,29,97,33,77,40,2,1,0,0,8,13,16,19,21,23,24,26,27,28,29,30,31,32,32,33,34,34,35,36,36,37,37,224,112,44,15,3,2,1,0,254,237,192,132,70,23,4,0,255,252,226,155,61,11,2,0,250,245,234,203,71,50,42,38,35,33,31,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,179,99,0,71,56,43,30,21,12,6,0,199,165,144,124,109,96,84,71,61,51,42,32,23,15,8,0,241,225,211,199,187,175,164,153,142,132,123,114,105,96,88,80,72,64,57,50,44,38,33,29,24,20,16,12,9,5,2,0,15,131,138,138,155,155,173,173,69,93,115,118,131,138,141,138,150,150,155,150,155,160,166,160,131,128,134,141,141,141,145,145,145,150,155,155,155,155,160,160,160,160,166,166,173,173,182,192,182,192,192,192,205,192,205,224,4,6,24,7,5,0,0,2,0,0,12,28,41,13,252,247,15,42,25,14,1,254,62,41,247,246,37,65,252,3,250,4,66,7,248,16,14,38,253,33,13,22,39,23,12,255,36,64,27,250,249,10,55,43,17,1,1,8,1,1,6,245,74,53,247,244,55,76,244,8,253,3,93,27,252,26,39,59,3,248,2,0,77,11,9,248,22,44,250,7,40,9,26,3,9,249,20,101,249,4,3,248,42,26,0,241,33,68,2,23,254,55,46,254,15,3,255,21,16,41,250,27,61,39,5,245,42,88,4,1,254,60,65,6,252,255,251,73,56,1,247,19,94,29,247,0,12,99,6,4,8,237,102,46,243,3,2,13,3,2,9,235,84,72,238,245,46,104,234,8,18,38,48,23,0,240,70,83,235,11,5,245,117,22,248,250,23,117,244,3,3,248,95,28,4,246,15,77,60,241,255,4,124,2,252,3,38,84,24,231,2,13,42,13,31,21,252,56,46,255,255,35,79,243,19,249,65,88,247,242,20,4,81,49,227,20,0,75,3,239,5,247,44,92,248,1,253,22,69,31,250,95,41,244,5,39,67,16,252,1,0,250,120,55,220,243,44,122,4,232,81,5,11,3,7,2,0,9,10,88,46,2,90,87,93,91,82,98,109,120,118,12,113,115,117,119,99,59,87,111,63,111,112,80,126,124,125,124,129,121,126,23,132,127,127,127,126,127,122,133,130,134,101,118,119,145,126,86,124,120,123,119,170,173,107,109,8,16,32,12,35,60,83,108,132,157,180,206,228,15,32,55,77,101,125,151,175,201,225,19,42,66,89,114,137,162,184,209,230,12,25,50,72,97,120,147,172,200,223,26,44,69],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+20480);allocate([90,114,135,159,180,205,225,13,22,53,80,106,130,156,180,205,228,15,25,44,64,90,115,142,168,196,222,19,24,62,82,100,120,145,168,190,214,22,31,50,79,103,120,151,170,203,227,21,29,45,65,106,124,150,171,196,224,30,49,75,97,121,142,165,186,209,229,19,25,52,70,93,116,143,166,192,219,26,34,62,75,97,118,145,167,194,217,25,33,56,70,91,113,143,165,196,223,21,34,51,72,97,117,145,171,196,222,20,29,50,67,90,117,144,168,197,221,22,31,48,66,95,117,146,168,196,222,24,33,51,77,116,134,158,180,200,224,21,28,70,87,106,124,149,170,194,217,26,33,53,64,83,117,152,173,204,225,27,34,65,95,108,129,155,174,210,225,20,26,72,99,113,131,154,176,200,219,34,43,61,78,93,114,155,177,205,229,23,29,54,97,124,138,163,179,209,229,30,38,56,89,118,129,158,178,200,231,21,29,49,63,85,111,142,163,193,222,27,48,77,103,133,158,179,196,215,232,29,47,74,99,124,151,176,198,220,237,33,42,61,76,93,121,155,174,207,225,29,53,87,112,136,154,170,188,208,227,24,30,52,84,131,150,166,186,203,229,37,48,64,84,104,118,156,177,201,230,212,178,148,129,108,96,85,82,79,77,61,59,57,56,51,49,48,45,42,41,40,38,36,34,31,30,21,12,10,3,1,0,255,245,244,236,233,225,217,203,190,176,175,161,149,136,125,114,102,91,81,71,60,52,43,35,28,20,19,18,12,11,5,0,179,138,140,148,151,149,153,151,163,116,67,82,59,92,72,100,89,92,16,0,0,0,0,99,66,36,36,34,36,34,34,34,34,83,69,36,52,34,116,102,70,68,68,176,102,68,68,34,65,85,68,84,36,116,141,152,139,170,132,187,184,216,137,132,249,168,185,139,104,102,100,68,68,178,218,185,185,170,244,216,187,187,170,244,187,187,219,138,103,155,184,185,137,116,183,155,152,136,132,217,184,184,170,164,217,171,155,139,244,169,184,185,170,164,216,223,218,138,214,143,188,218,168,244,141,136,155,170,168,138,220,219,139,164,219,202,216,137,168,186,246,185,139,116,185,219,185,138,100,100,134,100,102,34,68,68,100,68,168,203,221,218,168,167,154,136,104,70,164,246,171,137,139,137,155,218,219,139,255,254,253,238,14,3,2,1,0,255,254,252,218,35,3,2,1,0,255,254,250,208,59,4,2,1,0,255,254,246,194,71,10,2,1,0,255,252,236,183,82,8,2,1,0,255,252,235,180,90,17,2,1,0,255,248,224,171,97,30,4,1,0,255,254,236,173,95,37,7,1,0,255,255,255,131,6,145,255,255,255,255,255,236,93,15,96,255,255,255,255,255,194,83,25,71,221,255,255,255,255,162,73,34,66,162,255,255,255,210,126,73,43,57,173,255,255,255,201,125,71,48,58,130,255,255,255,166,110,73,57,62,104,210,255,255,251,123,65,55,68,100,171,255,7,23,38,54,69,85,100,116,131,147,162,178,193,208,223,239,13,25,41,55,69,83,98,112,127,142,157,171,187,203,220,236,15,21,34,51,61,78,92,106,126,136,152,167,185,205,225,240,10,21,36,50,63,79,95,110,126,141,157,173,189,205,221,237,17,20,37,51,59,78,89,107,123,134,150,164,184,205,224,240,10,15,32,51,67,81,96,112,129,142,158,173,189,204,220,236,8,21,37,51,65,79,98,113,126,138,155,168,179,192,209,218,12,15,34,55,63,78,87,108,118,131,148,167,185,203,219,236,16,19,32,36,56,79,91,108,118,136,154,171,186,204,220,237,11,28,43,58,74,89,105,120,135,150,165,180,196,211,226,241,6,16,33,46,60,75,92,107,123,137,156,169,185,199,214,225,11,19,30,44,57,74,89,105,121,135,152,169,186,202,218,234,12,19,29,46,57,71,88,100,120,132,148,165,182,199,216,233,17,23,35,46,56,77,92,106,123,134,152,167,185,204,222,237,14,17,45,53,63,75,89,107,115,132,151,171,188,206,221,240,9,16,29,40,56,71,88,103,119,137,154,171,189,205,222,237,16,19,36,48,57,76,87,105,118,132,150,167,185,202,218,236,12,17,29,54,71,81,94,104,126,136,149,164,182,201,221,237,15,28,47,62,79,97,115,129,142,155,168,180,194,208,223,238,8,14,30,45,62,78,94,111,127,143,159,175,192,207,223,239,17,30,49,62,79,92,107,119,132,145,160,174,190,204,220,235,14,19,36,45,61,76,91,108,121,138,154,172,189,205,222,238,12,18,31,45,60,76,91,107,123,138,154,171,187,204,221,236,13,17,31,43,53,70,83,103,114,131,149,167,185,203,220,237,17,22,35,42,58,78,93,110,125,139,155,170,188,206,224,240,8,15,34,50,67,83,99,115,131,146,162,178,193,209,224,239,13,16,41,66,73,86,95,111,128,137,150,163,183,206,225,241,17,25,37,52,63,75,92,102,119,132,144,160,175,191,212,231,19,31,49,65,83,100,117,133,147,161,174,187,200,213,227,242,18,31,52,68,88,103,117,126,138,149,163,177,192,207,223,239,16,29,47,61,76,90,106,119,133,147,161,176,193,209,224,240,15,21,35,50,61,73,86,97,110,119,129,141,175,198,218,237,225,204,201,184,183,175,158,154,153,135,119,115,113,110,109,99,98,95,79,68,52,50,48,45,43,32,31,27,18,10,3,0,255,251,235,230,212,201,196,182,167,166,163,151,138,124,110,104,90,78,76,70,69,57,45,34,24,21,11,6,5,4,3,0,175,148,160,176,178,173,174,164,177,174,196,182,198,192,182,68,62,66,60,72,117,85,90,118,136,151,142,160,142,155,0,0,0,0,0,0,0,1,100,102,102,68,68,36,34,96,164,107,158,185,180,185,139,102,64,66,36,34,34,0,1,32,208,139,141,191,152,185,155,104,96,171,104,166,102,102,102,132,1,0,0,0,0,16,16,0,80,109,78,107,185,139,103,101,208,212,141,139,173,153,123,103,36,0,0,0,0,0,0,1,48,0,0,0,0,0,0,32,68,135,123,119,119,103,69,98,68,103,120,118,118,102,71,98,134,136,157,184,182,153,139,134,208,168,248,75,189,143,121,107,32,49,34,34,34,0,17,2,210,235,139,123,185,137,105,134,98,135,104,182,100,183,171,134,100,70,68,70,66,66,34,131,64,166,102,68,36,2,1,0,134,166,102,68,34,34,66,132,212,246,158,139,107,107,87,102,100,219,125,122,137,118,103,132,114,135,137,105,171,106,50,34,164,214,141,143,185,151,121,103,192,34,0,0,0,0,0,1,208,109,74,187,134,249,159,137,102,110,154,118,87,101,119,101,0,2,0,36,36,66,68,35,96,164,102,100,36,0,2,33,167,138,174,102,100,84,2,2,100,107,120,119,36,197,24,0,255,254,253,244,12,3,2,1,0,255,254,252,224,38,3,2,1,0,255,254,251,209,57,4,2,1,0,255,254,244,195,69,4,2,1,0,255,251,232,184,84,7,2,1,0,255,254,240,186,86,14,2,1,0,255,254,239,178,91,30,5,1,0,255,248,227,177,100,19,2,1,0,255,255,255,156,4,154,255,255,255,255,255,227,102,15,92,255,255,255,255,255,213,83,24,72,236,255,255,255,255,150,76,33,63,214,255,255,255,190,121,77,43,55,185,255,255,255,245,137,71,43,59,139,255,255,255,255,131,66,50,66,107,194,255,255,166,116,76,55,53,125,255,255,249,247,246,245,244,234,210,202,201,200,197,174,82,59,56,55,54,46,22,12,11,10,9,7,0,64,0,203,150,0,215,195,166,125,110,82,0,120,0,128,64,0,232,158,10,0,230,0,243,221,192,181,0,171,85,0,192,128,64,0,205,154,102,51,0,213,171,128,85,43,0,224,192,160,128,96,64,32,0,100,40,16,7,3,1,0,253,250,244,233,212,182,150,131,120,110,98,85,72,60,49,40,32,25,19,15,13,11,9,8,7,6,5,4,3,2,1,0,210,208,206,203,199,193,183,168,142,104,74,52,37,27,20,14,10,6,4,2,0,223,201,183,167,152,138,124,111,98,88,79,70,62,56,50,44,39,35,31,27,24,21,18,16,14,12,10,8,6,4,3,2,1,0,188,176,155,138,119,97,67,43,26,10,0,165,119,80,61,47,35,27,20,14,9,4,0,113,63,0,125,51,26,18,15,12,11,10,9,8,7,6,5,4,3,2,1,0,198,105,45,22,15,12,11,10,9,8,7,6,5,4,3,2,1,0,213,162,116,83,59,43,32,24,18,15,12,9,7,6,5,3,2,0,239,187,116,59,28,16,11,10,9,8,7,6,5,4,3,2,1,0,250,229,188,135,86,51,30,19,13,10,8,6,5,4,3,2,1,0,249,235,213,185,156,128,103,83,66,53,42,33,26,21,17,13,10,0,254,249,235,206,164,118,77,46,27,16,10,7,5,4,3,2,1,0,255,253,249,239,220,191,156,119,85,57,37,23,15,10,6,4,2,0,255,253,251,246,237,223,203,179,152,124,98,75,55,40,29,21,15,0,255,254,253,247,220,162,106,67,42,28,18,12,9,6,4,3,2,0,31,57,107,160,205,205,255,255,255,255,255,255,255,255,255,255,255,255,69,47,67,111,166,205,255,255,255,255,255,255,255,255,255,255,255,255,82,74,79,95,109,128,145,160,173,205,205,205,224,255,255,224,255,224,125,74,59,69,97,141,182,255,255,255,255,255,255,255,255,255,255,255,173,115,85,73,76,92,115,145,173,205,224,224,255,255,255,255,255,255,166,134,113,102,101,102,107,118,125,138,145,155,166,182,192,192,205,150,224,182,134,101,83,79,85,97,120,145,173,205,224,255,255,255,255,255,255,224,192,150,120,101,92,89,93,102,118,134,160,182,192,224,224,224,255,224,224,182,155,134,118,109,104,102,106,111,118,131,145,160,173,131,241,190,178,132,87,74,41,14,0,223,193,157,140,106,57,39,18,0,131,74,141,79,80,138,95,104,134,95,99,91,125,93,76,123,115,123,128,0,214,42,0,235,128,21,0,244,184,72,11,0,248,214,128,42,7,0,248,225,170,80,25,5,0,251,236,198,126,54,18,3,0,250,238,211,159,82,35,15,5,0,250,231,203,168,128,88,53,25,6,0,252,238,216,185,148,108,71,40,18,4,0,253,243,225,199,166,128,90,57,31,13,3,0,254,246,233,212,183,147,109,73,44,23,10,2,0,255,250,240,223,198,166,128,90,58,33,16,6,1,0,255,251,244,231,210,181,146,110,75,46,25,12,5,1,0,255,253,248,238,221,196,164,128,92,60,35,18,8,3,1,0,255,253,249,242,229,208,180,146,110,76,48,27,14,7,3,1,0,129,0,207,50,0,236,129,20,0,245,185,72,10,0,249,213,129,42,6,0,250,226,169,87,27,4,0,251,233,194,130,62,20,4,0,250,236,207,160,99,47,17,3,0,255,240,217,182,131,81,41,11,1,0,255,254,233,201,159,107,61,20,2,1,0,255,249,233,206,170,128,86,50,23,7,1,0,255,250,238,217,186,148,108,70,39,18,6,1,0,255,252,243,226,200,166,128,90,56,30,13,4,1,0,255,252,245,231,209,180,146,110,76,47,25,11,4,1,0,255,253,248,237,219,194,163,128,93,62,37,19,8,3,1,0,255,254,250,241,226,205,177,145,111,79,51,30,15,6,2,1,0,129,0,203,54,0,234,129,23,0,245,184,73,10,0,250,215,129,41,5,0,252,232,173,86,24,3,0,253,240,200,129,56,15,2,0,253,244,217,164,94,38,10,1,0,253,245,226,189,132,71,27,7,1,0,253,246,231,203,159,105,56,23,6,1,0,255,248,235,213,179,133,85,47,19,5,1,0,255,254,243,221,194,159,117,70,37,12,2,1,0,255,254,248,234,208,171,128,85,48,22,8,2,1,0,255,254,250,240,220,189,149,107,67,36,16,6,2,1,0,255,254,251,243,227,201,166,128,90,55,29,13,5,2,1,0,255,254,252,246,234,213,183,147,109,73,43,22,10,4,2,1,0,130,0,200,58,0,231,130,26,0,244,184,76,12,0,249,214,130,43,6,0,252,232,173,87,24,3,0,253,241,203,131,56,14,2,0,254,246,221,167,94,35,8,1,0,254,249,232,193,130,65,23,5,1,0,255,251,239,211,162,99,45,15,4,1,0,255,251,243,223,186,131,74,33,11,3,1,0,255,252,245,230,202,158,105,57,24,8,2,1,0,255,253,247,235,214,179,132,84,44,19,7,2,1,0,255,254,250,240,223,196,159,112,69,36,15,6,2,1,0,255,254,253,245,231,209,176,136,93,55,27,11,3,2,1,0,255,254,253,252,239,221,194,158,117,76,42,18,4,3,2,1,0,0,0,2,5,9,14,20,27,35,44,54,65,77,90,104,119,135,254,49,67,77,82,93,99,198,11,18,24,31,36,45,255,46,66,78,87,94,104,208,14,21,32,42,51,66,255,94,104,109,112,115,118,248,53,69,80,88,95,102,0,15,8,7,4,11,12,3,2,13,10,5,6,9,14,1,0,9,6,3,4,5,8,1,2,7,0,1,0,0,0,1,0,0,1,255,1,255,2,254,2,254,3,253,0,1,0,1,255,2,255,2,254,3,254,3,253,7,254,7,0,2,255,255,255,0,0,1,1,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,255,2,1,0,1,1,0,0,255,255,0,0,1,255,0,1,255,0,255,1,254,2,254,254,2,253,2,3,253,252,3,252,4,4,251,5,250,251,6,249,6,5,8,247,0,0,1,0,0,0,0,0,0,0,255,1,0,0,1,255,0,1,255,255,1,255,2,1,255,2,254,254,2,254,2,2,3,253,0,1,0,0,0,0,0,0,1,0,1,0,0,1,255,1,0,0,2,1,255,2,255,255,2,255,2,2,255,3,254,254,254,3,0,1,0,0,1,0,1,255,2,255,2,255,2,3,254,3,254,254,4,4,253,5,253,252,6,252,6,5,251,8,250,251,249,9,251,8,255,6,255,6,252,10,250,10,254,6,255,6,251,10,247,12,253,7,254,7,249,13,16,24,34,6,0,3,0,7,3,0,1,10,0,2,6,18,10,12,4,0,2,0,0,0,9,4,7,4,0,3,12,7,7],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+30720);var tempDoublePtr=STATICTOP;STATICTOP+=16;Module["_bitshift64Ashr"]=_bitshift64Ashr;Module["_i64Add"]=_i64Add;function _llvm_exp2_f32(x){return Math.pow(2,x)}function _llvm_exp2_f64(){return _llvm_exp2_f32.apply(null,arguments)}Module["_memset"]=_memset;Module["_bitshift64Lshr"]=_bitshift64Lshr;function _abort(){Module["abort"]()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;var _llvm_pow_f64=Math_pow;Module["___muldsi3"]=___muldsi3;Module["___muldi3"]=___muldi3;function _llvm_stackrestore(p){var self=_llvm_stacksave;var ret=self.LLVM_SAVEDSTACKS[p];self.LLVM_SAVEDSTACKS.splice(p,1);Runtime.stackRestore(ret)}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}Module["_sbrk"]=_sbrk;function _llvm_stacksave(){var self=_llvm_stacksave;if(!self.LLVM_SAVEDSTACKS){self.LLVM_SAVEDSTACKS=[]}self.LLVM_SAVEDSTACKS.push(Runtime.stackSave());return self.LLVM_SAVEDSTACKS.length-1}Module["_memmove"]=_memmove;DYNAMICTOP_PTR=allocate(1,"i32",ALLOC_STATIC);STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=Runtime.alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){try{return Module["dynCall_iiiiiii"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7){try{Module["dynCall_viiiiiii"](index,a1,a2,a3,a4,a5,a6,a7)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}Module.asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,"Infinity":Infinity};Module.asmLibraryArg={"abort":abort,"assert":assert,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"invoke_iiiiiii":invoke_iiiiiii,"invoke_viiiiiii":invoke_viiiiiii,"_llvm_exp2_f64":_llvm_exp2_f64,"_llvm_pow_f64":_llvm_pow_f64,"_llvm_exp2_f32":_llvm_exp2_f32,"_abort":_abort,"___setErrNo":___setErrNo,"_llvm_stacksave":_llvm_stacksave,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_llvm_stackrestore":_llvm_stackrestore,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX};// EMSCRIPTEN_START_ASM +var asm=(function(global,env,buffer) { +"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.DYNAMICTOP_PTR|0;var j=env.tempDoublePtr|0;var k=env.ABORT|0;var l=env.STACKTOP|0;var m=env.STACK_MAX|0;var n=0;var o=0;var p=0;var q=0;var r=global.NaN,s=global.Infinity;var t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0.0;var C=0;var D=global.Math.floor;var E=global.Math.abs;var F=global.Math.sqrt;var G=global.Math.pow;var H=global.Math.cos;var I=global.Math.sin;var J=global.Math.tan;var K=global.Math.acos;var L=global.Math.asin;var M=global.Math.atan;var N=global.Math.atan2;var O=global.Math.exp;var P=global.Math.log;var Q=global.Math.ceil;var R=global.Math.imul;var S=global.Math.min;var T=global.Math.max;var U=global.Math.clz32;var V=env.abort;var W=env.assert;var X=env.enlargeMemory;var Y=env.getTotalMemory;var Z=env.abortOnCannotGrowMemory;var _=env.invoke_iiiiiii;var $=env.invoke_viiiiiii;var aa=env._llvm_exp2_f64;var ba=env._llvm_pow_f64;var ca=env._llvm_exp2_f32;var da=env._abort;var ea=env.___setErrNo;var fa=env._llvm_stacksave;var ga=env._emscripten_memcpy_big;var ha=env._llvm_stackrestore;var ia=0.0; +// EMSCRIPTEN_START_FUNCS +function la(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function ma(){return l|0}function na(a){a=a|0;l=a}function oa(a,b){a=a|0;b=b|0;l=a;m=b}function pa(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function qa(a){a=a|0;C=a}function ra(){return C|0}function sa(a,b){a=+a;b=b|0;var c=0,d=0;c=0;while(1){if((c|0)>=21)break;if(+g[1572+(c<<2)>>2]>a)break;c=c+1|0}if((c|0)>(b|0)?+g[1572+(b<<2)>>2]+ +g[1656+(b<<2)>>2]>a:0)return b|0;if((c|0)>=(b|0)){b=c;return b|0}d=b+-1|0;if(!(+g[1572+(d<<2)>>2]-+g[1656+(d<<2)>>2]>16;b=((R(b,b)|0)+4096|0)>>>13;a=b<<16>>16;return 32767-b+(((R(a,(((R(a,(((R(a,-626)|0)+16384|0)>>>15<<16)+542441472>>16)|0)+16384|0)>>>15<<16)+-501415936>>16)|0)+16384|0)>>>15)+1&65535|0}function va(a,b){a=a|0;b=b|0;var c=0,d=0;c=32-(U(b|0)|0)|0;d=32-(U(a|0)|0)|0;a=a<<15-d<<16>>16;b=b<<15-c<<16>>16;return (d-c<<11)+((R(a,(((R(a,-2597)|0)+16384|0)>>>15<<16)+519831552>>16)|0)+16384>>15)-((R(b,(((R(b,-2597)|0)+16384|0)>>>15<<16)+519831552>>16)|0)+16384>>15)|0}function wa(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0;n=c[a+32>>2]|0;m=c[a+44>>2]<=(f|0))break;q=b[n+(j<<1)>>1]|0;r=d+(l+(q<>1]|0)-q<>2]|0)|0)<<2)>>2]=p;j=o}a=a+1|0}while((a|0)<(h|0));return}function xa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=0.0;e=0;while(1){if((e|0)>=(c|0))break;d=d+ +g[a+(e<<2)>>2]*+g[b+(e<<2)>>2];e=e+1|0}return +d}function ya(a,d,e,f,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0;r=c[a+32>>2]|0;q=R(c[a+44>>2]|0,j)|0;n=a+8|0;m=0;while(1){o=R(m,q)|0;a=0;a:while(1){if((a|0)>=(h|0))break;p=1.0/(+g[f+(a+(R(m,c[n>>2]|0)|0)<<2)>>2]+1.0000000272452012e-27);k=R(b[r+(a<<1)>>1]|0,j)|0;a=a+1|0;l=R(b[r+(a<<1)>>1]|0,j)|0;while(1){if((k|0)>=(l|0))continue a;s=k+o|0;g[e+(s<<2)>>2]=+g[d+(s<<2)>>2]*p;k=k+1|0}}m=m+1|0;if((m|0)>=(i|0))break}return}function za(a,b){a=a|0;b=b|0;return (a>>>0)/(b>>>0)|0|0}function Aa(a,d,e,f,h,i,j,k,l,m){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0;A=c[a+32>>2]|0;B=R(c[a+44>>2]|0,m)|0;if((R((b[A+(k<<1)>>1]|0)-(b[A+(k+-1<<1)>>1]|0)|0,m)|0)<9){i=0;return i|0}y=a+8|0;w=0;n=0;o=0;a=0;while(1){z=R(w,B)|0;x=0;C=a;while(1){if((x|0)>=(k|0))break;v=b[A+(x<<1)>>1]|0;p=d+((R(v,m)|0)<<2)+(z<<2)|0;u=x+1|0;v=R((b[A+(u<<1)>>1]|0)-v|0,m)|0;if((v|0)<9){x=u;continue}q=+(v|0);a=0;r=0;s=0;t=0;while(1){if((a|0)==(v|0))break;D=+g[p+(a<<2)>>2];D=D*D*q;a=a+1|0;r=r+(D<.25&1)|0;s=s+(D<.0625&1)|0;t=t+(D<.015625&1)|0}if((x|0)>((c[y>>2]|0)+-4|0))n=n+(za(s+r<<5,v)|0)|0;x=u;C=C+(((t<<1|0)>=(v|0)&1)+((s<<1|0)>=(v|0)&1)+((r<<1|0)>=(v|0)&1)<<8)|0;o=o+1|0}w=w+1|0;if((w|0)>=(l|0))break;else a=C}if(j|0){if(!n)a=0;else a=za(n,R(4-(c[y>>2]|0)+k|0,l)|0)|0;a=(c[h>>2]|0)+a>>1;c[h>>2]=a;switch(c[i>>2]|0){case 2:{a=a+4|0;break}case 0:{a=a+-4|0;break}default:{}}c[i>>2]=(a|0)>22?2:(a|0)>18&1}a=za(C,o)|0;a=a+(c[e>>2]|0)>>1;c[e>>2]=a;a=(a*3|0)+(3-f<<7|64)+2>>2;if((a|0)<80){i=3;return i|0}if((a|0)<256){i=2;return i|0}else return (a|0)<384|0;return 0}function Ba(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,h=0,i=0.0,j=0.0,k=0;e=b>>1;f=c<<1;d=0;while(1){if((d|0)<(c|0))b=0;else break;while(1){if((b|0)>=(e|0))break;k=a+((R(f,b)|0)+d<<2)|0;j=+g[k>>2]*.7071067690849304;h=a+((R(b<<1|1,c)|0)+d<<2)|0;i=+g[h>>2]*.7071067690849304;g[k>>2]=j+i;g[h>>2]=j-i;b=b+1|0}d=d+1|0}return}function Ca(e,f,h,i,j,k,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B){e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;y=y|0;z=z|0;A=A|0;B=B|0;var C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0.0,Wa=0.0;Ua=l;l=l+1552|0;Ka=Ua+216|0;Ba=Ua+24|0;Ca=Ua;La=Ua+168|0;Ma=Ua+108|0;Na=Ua+48|0;Oa=Ua+276|0;Pa=Ua+40|0;Qa=e+32|0;Ra=c[Qa>>2]|0;Sa=j|0?2:1;Ta=(j|0)==0;za=(q|0)==0&(Ta^1)&(z|0)>7;Aa=1<>1]<>2]|0;o=b[Ra+(z+-1<<1)>>1]|0;C=o<>1]|0)-o<>2]=m;c[Ka+28>>2]=v;c[Ka>>2]=1;c[Ka+16>>2]=r;c[Ka+8>>2]=e;ka=Ka+40|0;c[ka>>2]=c[y>>2];c[Ka+20>>2]=p;c[Ka+44>>2]=A;c[Ka+52>>2]=B;c[Ka+4>>2]=za&1;da=Ka+48|0;c[da>>2]=0;ea=(qa|0)>1;fa=Ka+56|0;c[fa>>2]=ea&1;ga=Ka+12|0;ha=h+-1|0;ba=v+20|0;ca=v+28|0;ia=Ka+32|0;ja=Ka+24|0;Z=e+12|0;_=(1<=(h|0))break;c[ga>>2]=V;N=(V|0)==(ha|0);O=Ra+(V<<1)|0;S=b[O>>1]<>1]<>2]|0,c[ca>>2]|0)|0;Q=z-((V|0)==(f|0)?0:T)|0;z=t-T|0;c[ia>>2]=z+-1;if((V|0)<(x|0)?(Ia=x-V|0,Ia=Da(Q,(Ia|0)<3?Ia:3)|0,Ia=(c[n+(V<<2)>>2]|0)+Ia|0,Ja=(z|0)<(Ia|0),!(((Ja?z:Ia)|0)<16384&((Ja?z:Ia)|0)<0)):0)P=((Ja?z:Ia)|0)>16383?16383:Ja?z:Ia;else P=0;if(za?((b[O>>1]<=(b[ra>>1]<>2]|0;c[ja>>2]=K;M=(V|0)<(c[Z>>2]|0);o=M?o:0;L=M?C:ua;M=M?A:Ta?0:ua;o=N?(za?o:0):o;if((B|0)!=0?(p|0)!=3|ea|(K|0)<0:0){u=(b[Ra+(B<<1)>>1]<>1]<(z|0));z=z+S|0;e=B+-1|0;while(1){C=e+1|0;if((b[Ra+(C<<1)>>1]<>0];C=C|d[k+(K+Sa+-1)>>0];if((A|0)<(e|0))A=A+1|0;else{D=C;A=z;break}}}else{u=-1;D=_;A=_}a:do if(q)if((V|0)==(r|0)){if(!za){ya=29;break}C=Ra+(r<<1)|0;z=0;while(1){if((z|0)>=((b[C>>1]<>2]=(+g[ya>>2]+ +g[wa+(z<<2)>>2])*.5;z=z+1|0}}else{e=(P|0)/2|0;C=(u|0)==-1;z=C?0:ua+(u<<2)|0;if(N){z=Ea(Ka,L,S,e,qa,z,w,0,1.0,o,A)|0;A=C?0:wa+(u<<2)|0;C=0}else{z=Ea(Ka,L,S,e,qa,z,w,ua+(b[O>>1]<>1]<>1]<>2]=0;if(N)z=0;else z=ua+(b[O>>1]<>2],+g[m+(V+(c[ta>>2]|0)<<2)>>2],Pa);E=A|D;e=c[v>>2]|0;q=c[W>>2]|0;c[Ba>>2]=c[X>>2];c[Ba+4>>2]=c[X+4>>2];c[Ba+8>>2]=c[X+8>>2];c[Ba+12>>2]=c[X+12>>2];D=c[Y>>2]|0;c[Ca>>2]=c[ca>>2];c[Ca+4>>2]=c[ca+4>>2];c[Ca+8>>2]=c[ca+8>>2];c[Ca+12>>2]=c[ca+12>>2];c[Ca+16>>2]=c[ca+16>>2];z=Ma;C=Ka;A=z+60|0;do{c[z>>2]=c[C>>2];z=z+4|0;C=C+4|0}while((z|0)<(A|0));J=S<<2;Sh(la|0,L|0,J|0)|0;Sh(ma|0,M|0,J|0)|0;c[da>>2]=-1;F=(u|0)==-1;if(N)z=0;else z=ua+(b[O>>1]<>2];Va=Va*+xa(la,L,S);G=+g[$>>2];G=Va+G*+xa(ma,M,S);z=La;C=v;A=z+48|0;do{c[z>>2]=c[C>>2];z=z+4|0;C=C+4|0}while((z|0)<(A|0));z=Na;C=Ka;A=z+60|0;do{c[z>>2]=c[C>>2];z=z+4|0;C=C+4|0}while((z|0)<(A|0));Sh(na|0,L|0,J|0)|0;Sh(oa|0,M|0,J|0)|0;if(!N)Sh(pa|0,ua+(b[O>>1]<>2]=e;c[W>>2]=q;c[X>>2]=c[Ba>>2];c[X+4>>2]=c[Ba+4>>2];c[X+8>>2]=c[Ba+8>>2];c[X+12>>2]=c[Ba+12>>2];c[Y>>2]=D;c[ca>>2]=c[Ca>>2];c[ca+4>>2]=c[Ca+4>>2];c[ca+8>>2]=c[Ca+8>>2];c[ca+12>>2]=c[Ca+12>>2];c[ca+16>>2]=c[Ca+16>>2];z=Ka;C=Ma;A=z+60|0;do{c[z>>2]=c[C>>2];z=z+4|0;C=C+4|0}while((z|0)<(A|0));Sh(L|0,la|0,J|0)|0;Sh(M|0,ma|0,J|0)|0;if((V|0)==(aa|0))Ha(c[Qa>>2]|0,ua,wa,f,Aa,0);c[da>>2]=1;if(N)z=0;else z=ua+(b[O>>1]<>2];Wa=Wa*+xa(la,L,S);Va=+g[$>>2];if(!(G>=Wa+Va*+xa(ma,M,S))){q=0;C=z}else{z=v;C=La;A=z+48|0;do{c[z>>2]=c[C>>2];z=z+4|0;C=C+4|0}while((z|0)<(A|0));z=Ka;C=Na;A=z+60|0;do{c[z>>2]=c[C>>2];z=z+4|0;C=C+4|0}while((z|0)<(A|0));Sh(L|0,na|0,J|0)|0;Sh(M|0,oa|0,J|0)|0;if(!N)Sh(ua+(b[O>>1]<>0]=z;a[k+(e+Sa+-1)>>0]=C;z=c[n+(V<<2)>>2]|0;c[fa>>2]=0;e=(P|0)>(S<<3|0)&1;z=Q+(z+T)|0;V=U}c[y>>2]=c[ka>>2];l=Ua;return}function Da(a,b){a=a|0;b=b|0;return (a|0)/(b|0)|0|0}function Ea(b,e,f,h,i,j,k,l,m,n,o){b=b|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=+m;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;p=c[b>>2]|0;q=c[b+24>>2]|0;v=(i|0)==1&1;r=za(f,i)|0;if((f|0)==1){Ia(b,e,0,h,l);l=1;return l|0}w=(q|0)>0?q:0;do if(n)if(!j)n=0;else{if((q|0)<1?!((r&1|0)==0&(q|0)!=0|(i|0)>1):0){n=j;break}Sh(n|0,j|0,f<<2|0)|0}else n=j;while(0);s=(p|0)==0;t=(n|0)==0;p=o;j=0;while(1){if((j|0)>=(w|0))break;if(!s)Ba(e,f>>j,1<>j,1<>0]|0|(d[28802+(p>>4)>>0]|0)<<2;j=j+1|0}u=0;j=r<>w;while(1){if(!((j&1|0)==0&(q|0)<0))break;if(!s)Ba(e,j,o);if(!t)Ba(n,j,o);i=p|p<>1;q=q+1|0;o=o<<1;p=i}q=(o|0)>1;if(q){if(!s)Ja(e,j>>w,o<>w,o<>2]|0)){l=p;return l|0}if(q){La(e,j>>w,o<=(u|0)){j=0;break}v=o>>1;b=j<<1;Ba(e,b,v);p=p|p>>>v;n=n+1|0;j=b;o=v}while(1){if((j|0)>=(w|0))break;v=a[28818+p>>0]|0;Ba(e,f>>j,1<=(f|0))break a;g[l+(j<<2)>>2]=m*+g[e+(j<<2)>>2];j=j+1|0}}while(0);l=p&(1<>2]=d+a;g[c+4>>2]=d+b;return}function Ga(a,b,d,e,f,h,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0.0,A=0,B=0,C=0.0;B=l;l=l+32|0;o=B+28|0;s=B+24|0;p=B;c[o>>2]=f;c[s>>2]=n;t=c[a>>2]|0;u=c[a+28>>2]|0;if((e|0)==1){Ia(a,b,d,f,k);e=1;l=B;return e|0}Ma(a,p,b,d,e,o,h,h,j,1,s);y=c[p>>2]|0;w=c[p+16>>2]|0;v=c[p+20>>2]|0;z=+(c[p+4>>2]|0)*.000030517578125;x=+(c[p+8>>2]|0)*.000030517578125;A=(e|0)==2;do if(A){f=c[o>>2]|0;if((w|0)<16384)switch(w|0){case 0:{r=0;break}default:q=5}else switch(w|0){case 16384:{r=0;break}default:q=5}if((q|0)==5)r=8;q=f-r|0;p=(w|0)>8192;o=a+32|0;c[o>>2]=(c[o>>2]|0)-(v+r);o=p?d:b;p=p?b:d;do if(r)if(!t){f=Hb(u,1)|0;break}else{f=+g[o>>2]*+g[p+4>>2]-+g[o+4>>2]*+g[p>>2]<0.0&1;Tb(u,f,1);break}else f=0;while(0);w=1-(f<<1)|0;f=Ea(a,o,2,q,h,i,j,k,1.0,m,n)|0;g[p>>2]=+(0-w|0)*+g[o+4>>2];g[p+4>>2]=+(w|0)*+g[o>>2];if(c[a+4>>2]|0){g[b>>2]=z*+g[b>>2];k=b+4|0;g[k>>2]=z*+g[k>>2];C=x*+g[d>>2];g[d>>2]=C;m=d+4|0;g[m>>2]=x*+g[m>>2];x=+g[b>>2];g[b>>2]=x-C;g[d>>2]=x+ +g[d>>2];x=+g[k>>2];g[k>>2]=x-+g[m>>2];g[m>>2]=x+ +g[m>>2]}}else{q=c[o>>2]|0;p=(q-(c[p+12>>2]|0)|0)/2|0;r=(q|0)<(p|0);p=((r?q:p)|0)<0?0:r?q:p;q=q-p|0;r=a+32|0;o=(c[r>>2]|0)-v|0;c[r>>2]=o;f=c[s>>2]|0;if((p|0)<(q|0)){v=Ea(a,d,e,q,h,0,j,0,x,0,f>>h)|0;n=q+((c[r>>2]|0)-o)|0;f=v|(Ea(a,b,e,p+((n|0)<25|(w|0)==16384?0:n+-24|0)|0,h,i,j,k,1.0,m,f)|0);break}else{k=Ea(a,b,e,p,h,i,j,k,1.0,m,f)|0;m=p+((c[r>>2]|0)-o)|0;f=k|(Ea(a,d,e,q+((m|0)<25|(w|0)==0?0:m+-24|0)|0,h,0,j,0,x,0,f>>h)|0);break}}while(0);if(!(c[a+4>>2]|0)){e=f;l=B;return e|0}if(!A)Ta(b,d,z,e);if(!y){e=f;l=B;return e|0}else o=0;while(1){if((o|0)>=(e|0))break;b=d+(o<<2)|0;g[b>>2]=-+g[b>>2];o=o+1|0}l=B;return f|0}function Ha(a,c,d,e,f,g){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=b[a+(e+1<<1)>>1]|0;h=R(i-(b[a+(e<<1)>>1]|0)|0,f)|0;e=R((b[a+(e+2<<1)>>1]|0)-i|0,f)|0;a=(h<<1)-e|0;e=e-h<<2;Sh(c+(h<<2)|0,c+(a<<2)|0,e|0)|0;if(!g)return;Sh(d+(h<<2)|0,d+(a<<2)|0,e|0)|0;return}function Ia(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0;l=c[a+28>>2]|0;m=a+32|0;k=(c[a>>2]|0)==0;i=a+4|0;j=d|0?2:1;a=b;h=0;while(1){if((c[m>>2]|0)>7){if(k)e=Hb(l,1)|0;else{e=+g[a>>2]<0.0&1;Tb(l,e,1)}c[m>>2]=(c[m>>2]|0)+-8}else e=0;if(c[i>>2]|0)g[a>>2]=e|0?-1.0:1.0;h=h+1|0;if((h|0)>=(j|0))break;else a=d}if(!f)return;c[f>>2]=c[b>>2];return}function Ja(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;k=l;i=R(b,d)|0;j=l;l=l+((1*(i<<2)|0)+15&-16)|0;if(!e){f=0;while(1){if((f|0)>=(d|0))break;g=R(f,b)|0;e=0;while(1){if((e|0)>=(b|0))break;c[j+(g+e<<2)>>2]=c[a+((R(e,d)|0)+f<<2)>>2];e=e+1|0}f=f+1|0}i=i<<2;Sh(a|0,j|0,i|0)|0;l=k;return}h=1416+(d<<2)+-8|0;f=0;while(1){if((f|0)>=(d|0))break;g=h+(f<<2)|0;e=0;while(1){if((e|0)>=(b|0))break;m=c[a+((R(e,d)|0)+f<<2)>>2]|0;c[j+((R(c[g>>2]|0,b)|0)+e<<2)>>2]=m;e=e+1|0}f=f+1|0}m=i<<2;Sh(a|0,j|0,m|0)|0;l=k;return}function Ka(a,e,f,h,i,j,k,m,n){a=a|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=+m;n=n|0;var o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=l;l=l+32|0;z=B+28|0;A=B+24|0;y=B;c[z>>2]=h;c[A>>2]=n;u=c[a>>2]|0;r=c[a+8>>2]|0;t=c[a+12>>2]|0;w=c[a+20>>2]|0;x=c[a+28>>2]|0;o=c[r+100>>2]|0;p=c[r+96>>2]|0;q=c[r+8>>2]|0;C=o+(b[p+((R(k+1|0,q)|0)+t<<1)>>1]|0)|0;if((k|0)!=-1?((f|0)>2?((d[C+(d[C>>0]|0)>>0]|0)+12|0)<(h|0):0):0){w=f>>1;x=e+(w<<2)|0;f=k+-1|0;if((i|0)==1)c[A>>2]=n&1|n<<1;t=i+1>>1;Ma(a,y,e,x,w,z,t,i,f,0,A);o=c[y+12>>2]|0;u=c[y+16>>2]|0;p=c[y+20>>2]|0;v=+(c[y+4>>2]|0)*.000030517578125;s=+(c[y+8>>2]|0)*.000030517578125;do if(!((i|0)<2|(u&16383|0)==0))if((u|0)>8192){o=o-(o>>5-k)|0;break}else{o=o+(w<<3>>6-k)|0;o=(o|0)<0?o:0;break}while(0);h=c[z>>2]|0;q=(h-o|0)/2|0;r=(h|0)<(q|0);q=((r?h:q)|0)<0?0:r?h:q;h=h-q|0;r=a+32|0;p=(c[r>>2]|0)-p|0;c[r>>2]=p;o=(j|0)==0?0:j+(w<<2)|0;if((q|0)<(h|0)){C=c[A>>2]|0;i=(Ka(a,x,w,h,t,o,f,s*m,C>>t)|0)<<(i>>1);A=h+((c[r>>2]|0)-p)|0;C=i|(Ka(a,e,w,q+((A|0)<25|(u|0)==16384?0:A+-24|0)|0,t,j,f,v*m,C)|0);l=B;return C|0}else{C=c[A>>2]|0;j=Ka(a,e,w,q,t,j,f,v*m,C)|0;e=q+((c[r>>2]|0)-p)|0;C=j|(Ka(a,x,w,h+((e|0)<25|(u|0)==0?0:e+-24|0)|0,t,o,f,s*m,C>>t)|0)<<(i>>1);l=B;return C|0}}o=Na(q,p,o,t,k,h)|0;h=Oa(r,t,k,o)|0;q=a+32|0;p=h;h=(c[q>>2]|0)-h|0;while(1){c[q>>2]=h;if(!((h|0)<0&(o|0)>0))break;z=h+p|0;c[q>>2]=z;y=o+-1|0;C=Oa(r,t,k,y)|0;o=y;p=C;h=z-C|0}if(o|0){o=Pa(o)|0;if(!u){C=Mc(e,f,o,w,i,x,m)|0;l=B;return C|0}else{C=Jc(e,f,o,w,i,x,m,c[a+4>>2]|0)|0;l=B;return C|0}}if(!(c[a+4>>2]|0)){C=0;l=B;return C|0}o=(1<>2]=p;if(!p){Qh(e|0,0,f<<2|0)|0;C=0;l=B;return C|0}q=a+40|0;a:do if(!j){p=0;while(1){if((p|0)>=(f|0))break a;C=ta(c[q>>2]|0)|0;c[q>>2]=C;g[e+(p<<2)>>2]=+(C>>20|0);p=p+1|0}}else{o=0;while(1){if((o|0)>=(f|0)){o=p;break a}C=ta(c[q>>2]|0)|0;c[q>>2]=C;g[e+(o<<2)>>2]=+g[j+(o<<2)>>2]+((C&32768|0)==0?-.00390625:.00390625);o=o+1|0}}while(0);Nc(e,f,m);C=o;l=B;return C|0}function La(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=l;i=R(b,d)|0;j=l;l=l+((1*(i<<2)|0)+15&-16)|0;if(!e){f=0;while(1){if((f|0)>=(d|0))break;g=R(f,b)|0;e=0;while(1){if((e|0)>=(b|0))break;c[j+((R(e,d)|0)+f<<2)>>2]=c[a+(g+e<<2)>>2];e=e+1|0}f=f+1|0}i=i<<2;Sh(a|0,j|0,i|0)|0;l=k;return}h=1416+(d<<2)+-8|0;f=0;while(1){if((f|0)>=(d|0))break;g=h+(f<<2)|0;e=0;while(1){if((e|0)>=(b|0))break;c[j+((R(e,d)|0)+f<<2)>>2]=c[a+((R(c[g>>2]|0,b)|0)+e<<2)>>2];e=e+1|0}f=f+1|0}i=i<<2;Sh(a|0,j|0,i|0)|0;l=k;return}function Ma(a,d,e,f,h,i,j,k,l,m,n){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;u=c[a>>2]|0;r=c[a+8>>2]|0;s=c[a+12>>2]|0;z=c[a+16>>2]|0;w=c[a+28>>2]|0;t=c[a+36>>2]|0;v=(b[(c[r+56>>2]|0)+(s<<1)>>1]|0)+(l<<3)|0;p=(m|0)==0;o=c[i>>2]|0;v=Qa(h,o,(v>>1)-((h|0)==2&(p^1)?16:4)|0,v,m)|0;v=p|(s|0)<(z|0)?v:1;u=(u|0)==0;if(u)m=0;else m=Pc(e,f,m,h)|0;x=w+20|0;y=w+28|0;z=zb(c[x>>2]|0,c[y>>2]|0)|0;a:do if((v|0)==1)if(p){o=0;q=57}else{if(u)l=0;else{b:do if((m|0)>8192){v=(c[a+52>>2]|0)==0;l=v&1;if(v){o=0;while(1){if((o|0)>=(h|0))break b;v=f+(o<<2)|0;g[v>>2]=-+g[v>>2];o=o+1|0}}}else l=0;while(0);Ra(c[r+8>>2]|0,e,f,t,s,h);o=c[i>>2]|0}do if((o|0)>16?(c[a+32>>2]|0)>16:0)if(u){l=Fb(w,2)|0;break}else{Qb(w,l,2);break}else l=0;while(0);o=(c[a+52>>2]|0)==0?l:0;q=56}else{do if(u)if(p)q=26;else q=13;else if(!p){l=c[a+48>>2]|0;if(!l){m=(R(m,v)|0)+8192>>14;q=13;break}else{m=(R(m,v)|0)+((((m|0)>8192?32767:-32767)|0)/(v|0)|0)|0;q=(m|0)<0;m=((v|0)>((q?0:m>>14)|0)?(q?0:m>>14):v+-1|0)+(l>>>31^1)|0;q=13;break}}else{m=(R(m,v)|0)+8192>>14;if(!((c[a+56>>2]|0)!=0&(m|0)>0&(m|0)<(v|0))){q=26;break}q=za(m<<14,v)|0;l=(ua(q&65535)|0)<<16>>16;l=(R((h<<23)+-8388608>>16,(va((ua(16384-q&65535)|0)<<16>>16,l)|0)<<16>>16)|0)+16384>>15;if((l|0)>(o|0)){m=v;q=26;break}m=(l|0)<(0-o|0)?0:m;q=26;break}while(0);do if((q|0)==13)if((h|0)>2){k=(v|0)/2|0;a=(k*3|0)+3|0;p=a+k|0;if(!u){o=(m|0)>(k|0);if(o)l=m+-1-k+a|0;else l=m*3|0;Kb(w,l,o?m-k+a|0:(m*3|0)+3|0,p);m=za(m<<14,v)|0;break}l=Cb(w,p)|0;if((l|0)<(a|0))l=(l|0)/3|0;else l=k+1+(l-a)|0;o=(l|0)>(k|0);if(o)m=l+-1-k+a|0;else m=l*3|0;Eb(w,m,o?l-k+a|0:(l*3|0)+3|0,p);q=38}else q=27;else if((q|0)==26)if(!((k|0)>1|p^1)){o=v>>1;k=o+1|0;a=R(k,k)|0;if(u){l=Cb(w,a)|0;if((l|0)<((R(o,k)|0)>>1|0)){l=((ec(l<<3|1)|0)+-1|0)>>>1;m=l+1|0;o=(R(l,m)|0)>>>1}else{l=((v<<1)+2-(ec((a-l<<3)+-7|0)|0)|0)>>>1;m=v+1-l|0;o=a-((R(m,v+2-l|0)|0)>>1)|0}Eb(w,o,o+m|0,a);q=38;break}else{l=(m|0)>(o|0);if(l)o=a-((R(v+1-m|0,v+2-m|0)|0)>>1)|0;else o=(R(m,m+1|0)|0)>>1;Kb(w,o,o+(l?v+1-m|0:m+1|0)|0,a);m=za(m<<14,v)|0;o=0;q=57;break a}}else q=27;while(0);do if((q|0)==27){l=v+1|0;if(!u){Sb(w,m,l);m=za(m<<14,v)|0;if(p){o=0;q=57;break a}else break}else{l=Gb(w,l)|0;q=38;break}}while(0);if((q|0)==38){m=za(l<<14,v)|0;o=0;q=57;break}if(!m){Ra(c[r+8>>2]|0,e,f,t,s,h);o=0;q=56;break}else{Sa(e,f,h);o=0;q=57;break}}while(0);c:do if((q|0)==56){l=(zb(c[x>>2]|0,c[y>>2]|0)|0)-z|0;c[i>>2]=(c[i>>2]|0)-l;m=0}else if((q|0)==57){l=(zb(c[x>>2]|0,c[y>>2]|0)|0)-z|0;c[i>>2]=(c[i>>2]|0)-l;d:do if((m|0)<16384)switch(m|0){case 0:break c;default:{}}else{switch(m|0){case 16384:break;default:break d}c[n>>2]=c[n>>2]&(1<>2]=j;j=d+4|0;c[j>>2]=x;j=d+8|0;c[j>>2]=y;j=d+12|0;c[j>>2]=z;j=d+16|0;c[j>>2]=i;j=d+20|0;c[j>>2]=n;return}while(0);x=(ua(m&65535)|0)<<16>>16;y=(ua(16384-m&65535)|0)<<16>>16;z=(R((h<<23)+-8388608>>16,(va(y,x)|0)<<16>>16)|0)+16384>>15;i=m;j=o;n=l;c[d>>2]=j;j=d+4|0;c[j>>2]=x;j=d+8|0;c[j>>2]=y;j=d+12|0;c[j>>2]=z;j=d+16|0;c[j>>2]=i;j=d+20|0;c[j>>2]=n;return}while(0);c[n>>2]=c[n>>2]&(1<>2]=j;j=d+4|0;c[j>>2]=x;j=d+8|0;c[j>>2]=y;j=d+12|0;c[j>>2]=z;j=d+16|0;c[j>>2]=i;j=d+20|0;c[j>>2]=n;return}function Na(a,c,e,f,g,h){a=a|0;c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0;g=e+(b[c+((R(g+1|0,a)|0)+f<<1)>>1]|0)|0;f=h+-1|0;e=d[g>>0]|0;a=0;c=0;while(1){if((c|0)==6)break;h=a+e+1>>1;i=(d[g+h>>0]|0)<(f|0);e=i?e:h;a=i?h:a;c=c+1|0}if(!a)c=-1;else c=d[g+a>>0]|0;return ((f-c|0)>((d[g+e>>0]|0)-f|0)?e:a)|0}function Oa(a,e,f,g){a=a|0;e=e|0;f=f|0;g=g|0;if(!g){g=0;return g|0}g=(d[(c[a+100>>2]|0)+(b[(c[a+96>>2]|0)+((R(f+1|0,c[a+8>>2]|0)|0)+e<<1)>>1]|0)+g>>0]|0)+1|0;return g|0}function Pa(a){a=a|0;if((a|0)<8)return a|0;a=(a&7|8)<<(a>>3)+-1;return a|0}function Qa(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;a=(a<<1)+((f|0)!=0&(a|0)==2?-2:-1)|0;a=Da((R(a,d)|0)+c|0,a)|0;f=c-e+-32|0;a=(f|0)<(a|0)?f:a;if((a|0)<=64){if((a|0)<4){f=1;return f|0}}else a=64;f=(b[24296+((a&7)<<1)>>1]>>14-(a>>3))+1&-2;return f|0}function Ra(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0;h=+g[d+(e<<2)>>2];j=+g[d+(a+e<<2)>>2];i=+F(+(h*h+1.0000000036274937e-15+j*j))+1.0000000036274937e-15;h=h/i;i=j/i;a=0;while(1){if((a|0)>=(f|0))break;e=b+(a<<2)|0;g[e>>2]=h*+g[e>>2]+i*+g[c+(a<<2)>>2];a=a+1|0}return}function Sa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,h=0.0,i=0;d=0;while(1){if((d|0)>=(c|0))break;i=a+(d<<2)|0;f=+g[i>>2]*.7071067690849304;e=b+(d<<2)|0;h=+g[e>>2]*.7071067690849304;g[i>>2]=f+h;g[e>>2]=h-f;d=d+1|0}return}function Ta(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0.0,f=0,h=0.0,i=0.0,j=0,k=0,m=0.0,n=0;j=l;l=l+16|0;k=j+4|0;f=j;g[k>>2]=0.0;g[f>>2]=0.0;Ua(b,a,b,d,k,f);h=+g[k>>2]*c;g[k>>2]=h;i=c*c+ +g[f>>2];h=h*2.0;e=i-h;h=i+h;if(h<6.000000284984708e-04|e<6.000000284984708e-04){Sh(b|0,a|0,d<<2|0)|0;l=j;return}i=1.0/+F(+e);e=1.0/+F(+h);f=0;while(1){if((f|0)>=(d|0))break;n=a+(f<<2)|0;m=+g[n>>2]*c;k=b+(f<<2)|0;h=+g[k>>2];g[n>>2]=i*(m-h);g[k>>2]=e*(m+h);f=f+1|0}l=j;return}function Ua(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0,k=0.0;h=0.0;i=0.0;j=0;while(1){if((j|0)>=(d|0))break;k=+g[a+(j<<2)>>2];h=h+k*+g[c+(j<<2)>>2];i=i+k*+g[b+(j<<2)>>2];j=j+1|0}g[e>>2]=i;g[f>>2]=h;return}function Va(a){a=a|0;var b=0;a:do if((a|0)<16e3)if((a|0)<12e3){switch(a|0){case 8e3:break;default:{b=6;break a}}a=6;break}else{switch(a|0){case 12e3:break;default:{b=6;break a}}a=4;break}else{if((a|0)<24e3){switch(a|0){case 16e3:break;default:{b=6;break a}}a=3;break}if((a|0)>=48e3)switch(a|0){case 48e3:{a=1;break a}default:{b=6;break a}}switch(a|0){case 24e3:break;default:{b=6;break a}}a=2}while(0);if((b|0)==6)a=0;return a|0}function Wa(a,b,c,d,e,f,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;k=k|0;l=l|0;var m=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0;if(f==0.0&h==0.0){if((b|0)==(a|0))return;Wh(a|0,b|0,e<<2|0)|0;return}w=(c|0)>15?c:15;p=(d|0)>15?d:15;q=+g[1536+(i*12|0)>>2]*f;r=+g[1536+(i*12|0)+4>>2]*f;s=+g[1536+(i*12|0)+8>>2]*f;t=+g[1536+(j*12|0)>>2]*h;u=+g[1536+(j*12|0)+4>>2]*h;v=+g[1536+(j*12|0)+8>>2]*h;d=f==h&(w|0)==(p|0)&(i|0)==(j|0)?0:l;f=+g[b+(-2-p<<2)>>2];m=+g[b+(~p<<2)>>2];n=+g[b+(0-p<<2)>>2];o=+g[b+(1-p<<2)>>2];c=0;while(1){if((c|0)>=(d|0))break;A=+g[b+(c-p+2<<2)>>2];z=+g[k+(c<<2)>>2];z=z*z;y=1.0-z;j=c-w|0;g[a+(c<<2)>>2]=+g[b+(c<<2)>>2]+y*q*+g[b+(j<<2)>>2]+y*r*(+g[b+(j+1<<2)>>2]+ +g[b+(j+-1<<2)>>2])+y*s*(+g[b+(j+2<<2)>>2]+ +g[b+(j+-2<<2)>>2])+z*t*n+z*u*(o+m)+z*v*(A+f);z=o;y=n;x=m;o=A;c=c+1|0;n=z;m=y;f=x}if(!(h==0.0)){Xa(a+(c<<2)|0,b+(c<<2)|0,p,e-c|0,t,u,v);return}if((b|0)==(a|0))return;Wh(a+(d<<2)|0,b+(d<<2)|0,e-d<<2|0)|0;return}function Xa(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;h=+h;var i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;i=0;j=+g[b+(-2-c<<2)>>2];k=+g[b+(~c<<2)>>2];l=+g[b+(0-c<<2)>>2];m=+g[b+(1-c<<2)>>2];while(1){if((i|0)>=(d|0))break;q=+g[b+(i-c+2<<2)>>2];g[a+(i<<2)>>2]=+g[b+(i<<2)>>2]+l*e+(m+k)*f+(q+j)*h;p=m;o=l;n=k;i=i+1|0;m=q;l=p;k=o;j=n}return}function Ya(a,e,f,g){a=a|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=a+8|0;l=a+32|0;i=a+104|0;j=(f<<1)+g+-1|0;a=0;while(1){h=c[k>>2]|0;if((a|0)>=(h|0))break;n=c[l>>2]|0;m=a+1|0;c[e+(a<<2)>>2]=(R(R((d[(c[i>>2]|0)+((R(h,j)|0)+a)>>0]|0)+64|0,g)|0,(b[n+(m<<1)>>1]|0)-(b[n+(a<<1)>>1]|0)<>2;a=m}return}function Za(a){a=a|0;var b=0;b=gc()|0;return _a(c[b+4>>2]|0,c[b+8>>2]|0,a)|0}function _a(a,b,c){a=a|0;b=b|0;c=c|0;return ((R(a,c)|0)<<2)+236+(c<<12)+((R(c<<2,b)|0)<<2)|0}function $a(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;d=ab(a,gc()|0,d,e)|0;if(d|0){b=d;return b|0}c[a+28>>2]=Va(b)|0;b=0;return b|0}function ab(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=l;l=l+16|0;if(d>>>0>2){e=-1;l=f;return e|0}if((a|0)==0|(b|0)==0){e=-7;l=f;return e|0}Qh(a|0,0,_a(c[b+4>>2]|0,c[b+8>>2]|0,d)|0)|0;c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=d;c[a+28>>2]=1;c[a+32>>2]=0;c[a+36>>2]=c[b+12>>2];c[a+48>>2]=1;c[a+72>>2]=e;c[a+52>>2]=1;c[a+16>>2]=1;c[a+40>>2]=-1;c[a+44>>2]=0;c[a+12>>2]=0;c[a+24>>2]=5;c[a+60>>2]=24;bb(a,4028,f)|0;e=0;l=f;return e|0}function bb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0;j=l;l=l+16|0;e=j;c[e>>2]=d;do switch(b|0){case 4010:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;if(b>>>0>10)b=43;else{c[a+24>>2]=b;b=42}break}case 10010:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;if((b|0)>=0?(b|0)<(c[(c[a>>2]|0)+8>>2]|0):0){c[a+32>>2]=b;b=42}else b=43;break}case 10012:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;if((b|0)>=1?(b|0)<=(c[(c[a>>2]|0)+8>>2]|0):0){c[a+36>>2]=b;b=42}else b=43;break}case 10002:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;if(b>>>0>2)b=43;else{c[a+20>>2]=(b|0)!=2&1;c[a+12>>2]=(b|0)==0&1;b=42}break}case 4014:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;if(b>>>0>100)b=43;else{c[a+56>>2]=b;b=42}break}case 4020:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;c[a+52>>2]=b;b=42;break}case 4006:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;c[a+44>>2]=b;b=42;break}case 4002:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;if((b|0)>500|(b|0)==-1){i=(c[a+4>>2]|0)*26e4|0;c[a+40>>2]=(b|0)<(i|0)?b:i;b=42}else b=43;break}case 10008:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;if((b+-1|0)>>>0>1)b=43;else{c[a+8>>2]=b;b=42}break}case 4036:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;if((b+-8|0)>>>0>16)b=43;else{c[a+60>>2]=b;b=42}break}case 4037:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;c[b>>2]=c[a+60>>2];b=42;break}case 4046:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;if(b>>>0>1)b=43;else{c[a+68>>2]=b;b=42}break}case 4047:{i=(c[e>>2]|0)+(4-1)&~(4-1);b=c[i>>2]|0;c[e>>2]=i+4;if(!b)b=43;else{c[b>>2]=c[a+68>>2];b=42}break}case 4028:{d=a+4|0;i=c[d>>2]|0;h=c[a>>2]|0;k=c[h+4>>2]|0;e=a+236+((R(i,k+1024|0)|0)<<2)|0;b=c[h+8>>2]|0;f=R(i,b)|0;e=e+(f<<2)|0;f=e+(f<<2)|0;Qh(a+76|0,0,(_a(k,b,i)|0)+-76|0)|0;b=0;while(1){if((b|0)>=(R(i,c[h+8>>2]|0)|0))break;g[f+(b<<2)>>2]=-28.0;g[e+(b<<2)>>2]=-28.0;b=b+1|0;h=c[a>>2]|0;i=c[d>>2]|0}c[a+208>>2]=0;g[a+84>>2]=1.0;c[a+80>>2]=2;c[a+88>>2]=256;c[a+96>>2]=0;c[a+100>>2]=0;b=42;break}case 10016:{k=(c[e>>2]|0)+(4-1)&~(4-1);b=c[k>>2]|0;c[e>>2]=k+4;c[a+48>>2]=b;b=42;break}case 10022:{k=(c[e>>2]|0)+(4-1)&~(4-1);b=c[k>>2]|0;c[e>>2]=k+4;if(!b)b=42;else{e=a+120|0;d=e+56|0;do{c[e>>2]=c[b>>2];e=e+4|0;b=b+4|0}while((e|0)<(d|0));b=42}break}case 10028:{k=(c[e>>2]|0)+(4-1)&~(4-1);b=c[k>>2]|0;c[e>>2]=k+4;if(!b)b=42;else{i=b;k=c[i+4>>2]|0;b=a+176|0;c[b>>2]=c[i>>2];c[b+4>>2]=k;b=42}break}case 10015:{k=(c[e>>2]|0)+(4-1)&~(4-1);b=c[k>>2]|0;c[e>>2]=k+4;if(!b)b=43;else{c[b>>2]=c[a>>2];b=42}break}case 4031:{k=(c[e>>2]|0)+(4-1)&~(4-1);b=c[k>>2]|0;c[e>>2]=k+4;if(!b)b=43;else{c[b>>2]=c[a+76>>2];b=42}break}case 10024:{k=(c[e>>2]|0)+(4-1)&~(4-1);b=c[k>>2]|0;c[e>>2]=k+4;c[a+64>>2]=b;b=42;break}case 10026:{k=(c[e>>2]|0)+(4-1)&~(4-1);b=c[k>>2]|0;c[e>>2]=k+4;c[a+228>>2]=b;b=42;break}default:{k=-5;l=j;return k|0}}while(0);if((b|0)==42){k=0;l=j;return k|0}else if((b|0)==43){k=-1;l=j;return k|0}return 0}function cb(a,b,c,d,e,f,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;h=+h;i=i|0;j=j|0;var k=0.0,l=0,m=0,n=0;k=+g[i>>2];do if(h==0.0){if((e|0)!=1){l=(c|0)/(e|0)|0;n=8;break}if(!j){l=0;while(1){if((l|0)>=(c|0))break;h=+g[a+((R(l,d)|0)<<2)>>2]*32768.0;g[b+(l<<2)>>2]=h-k;k=h*f;l=l+1|0}g[i>>2]=k;return}else m=c}else{l=(c|0)/(e|0)|0;if((e|0)==1)m=l;else n=8}while(0);if((n|0)==8){Qh(b|0,0,c<<2|0)|0;m=l}l=0;while(1){if((l|0)>=(m|0))break;g[b+((R(l,e)|0)<<2)>>2]=+g[a+((R(l,d)|0)<<2)>>2]*32768.0;l=l+1|0}a:do if(!j)l=0;else{l=0;while(1){if((l|0)>=(m|0)){l=0;break a}d=b+((R(l,e)|0)<<2)|0;h=+g[d>>2];j=h>65536.0;a=h<-65536.0&(j^1);g[d>>2]=a|j?(a?-65536.0:65536.0):h;l=l+1|0}}while(0);while(1){if((l|0)>=(c|0))break;d=b+(l<<2)|0;h=+g[d>>2];g[d>>2]=h-k;k=h*f;l=l+1|0}g[i>>2]=k;return}function db(a,d,e,f,h,i){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0,y=0.0,z=0,A=0,B=0.0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,ga=0.0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,ta=0,ua=0,va=0,xa=0,za=0,Ba=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0;Qa=l;l=l+96|0;q=Qa+40|0;Ia=Qa+32|0;F=Qa+28|0;Ea=Qa+24|0;Ba=Qa+20|0;P=Qa+16|0;ma=Qa+12|0;na=Qa+8|0;Q=Qa+4|0;G=Qa;Ma=c[a+4>>2]|0;Ha=c[a+8>>2]|0;c[Ia>>2]=15;g[F>>2]=0.0;c[Ea>>2]=0;c[P>>2]=0;c[Q>>2]=0;Da=c[a>>2]|0;oa=Da+8|0;Na=c[oa>>2]|0;C=c[Da+4>>2]|0;pa=Da+32|0;da=c[pa>>2]|0;Oa=c[a+32>>2]|0;Pa=c[a+36>>2]|0;la=(Oa|0)!=0;g[ma>>2]=0.0;if((h|0)<2|(d|0)==0){Pa=-1;l=Qa;return Pa|0}J=a+28|0;k=R(c[J>>2]|0,e)|0;j=Da+44|0;ia=Da+36|0;e=c[ia>>2]|0;za=0;while(1){if((za|0)>(e|0)){e=-1;X=221;break}if((c[j>>2]<>2]<>2]|0;A=c[i+28>>2]|0;ka=zb(x,A)|0;A=eb(x,A)|0;x=A+4>>3}j=(h|0)<1275?h:1275;p=j-x|0;W=a+44|0;e=c[a+40>>2]|0;if(!(c[W>>2]|0))if((e|0)==-1)X=13;else{va=R(e,k)|0;X=c[Da>>2]|0;X=((va+((A|0)>1?A:0)+(X<<2)|0)/(X<<3|0)|0)-((c[a+48>>2]|0)!=0&1)|0;va=(j|0)<(X|0);j=((va?j:X)|0)<2?2:va?j:X;X=13}else if((e|0)==-1){e=-1;X=13}else{qa=c[Da>>2]|0;qa=((R(e,k)|0)+(qa>>4)|0)/(qa>>3|0)|0;z=qa>>6}if((X|0)==13){z=j-x|0;qa=0}ea=3-za|0;h=R((Ha*40|0)+20|0,(400>>>za)+-50|0)|0;k=(j*400>>ea)-h|0;if((e|0)==-1)ta=k;else{ta=e-h|0;ta=(k|0)<(ta|0)?k:ta}if(o){Jb(q,f,j);va=q}else va=i;$=(qa|0)>0;if((($?(c[a+52>>2]|0)!=0:0)?(r=(A|0)==1?2:0,s=(qa<<1)-(c[a+200>>2]|0)>>6,t=(r|0)>(s|0),((t?r:s)|0)<(p|0)):0)?(n=t?r:s,(n|0)<(p|0)):0){j=x+n|0;Wb(va,j)}else n=p;h=j<<3;O=c[Da+12>>2]|0;O=(Pa|0)>(O|0)?O:Pa;q=xa+C|0;S=R(Ma,q)|0;ua=fa()|0;I=l;l=l+((1*(S<<2)|0)+15&-16)|0;S=a+216|0;m=+g[S>>2];o=R(Ha,xa-C|0)|0;e=c[J>>2]|0;o=(o|0)/(e|0)|0;ga=+fb(d,o);ga=m>ga?m:ga;m=+fb(d+(o<<2)|0,(R(Ha,C)|0)/(e|0)|0);g[S>>2]=m;m=ga>m?ga:m;S=a+60|0;e=m<=1.0/+(1<>2]|0);o=e&1;if((A|0)==1){Qb(va,o,15);if(e){if($){e=x+2|0;j=(j|0)<(e|0)?j:e;Wb(va,j);e=j<<3;k=j;n=2}else{e=h;k=z}i=j<<3;ra=va+20|0;h=c[ra>>2]|0;c[ra>>2]=h+(i-(eb(h,c[va+28>>2]|0)|0));ra=o;h=e;t=j}else{ra=0;i=1;k=z;t=j}}else{ra=0;i=A;k=z;t=j}p=a+16|0;f=Da+16|0;o=Da+20|0;j=m>65536.0;e=0;do{ja=I+((R(e,q)|0)<<2)+(C<<2)|0;cb(d+(e<<2)|0,ja,xa,Ma,c[J>>2]|0,+g[f>>2],+g[o>>2],a+184+(e<<2)|0,j&(c[p>>2]|0)!=0&1);e=e+1|0}while((e|0)<(Ma|0));ba=a+64|0;if(((c[ba>>2]|0)!=0&(n|0)>3|(n|0)>(Ha*12|0))&(la^1)&(ra|0)==0?(c[a+20>>2]|0)==0:0)e=(c[a+24>>2]|0)>4;else e=0;M=a+100|0;ja=c[M>>2]|0;e=gb(a,I,D,Ma,xa,ja,Ia,F,G,e&1,n)|0;ga=+g[F>>2];if(!(ga>.4000000059604645)?!(+g[a+108>>2]>.4000000059604645):0)V=0;else X=35;do if((X|0)==35){if(c[a+120>>2]|0?!(+g[a+124>>2]>.3):0){V=0;break}y=+(c[Ia>>2]|0);B=+(c[a+104>>2]|0);V=(y>B*1.26|y(h|0)))Qb(va,0,1)}else{Qb(va,1,1);ca=c[Ia>>2]|0;Z=ca+1|0;aa=32-(U(Z|0)|0)|0;_=aa+-5|0;Sb(va,_,6);Tb(va,Z-(16<<_)|0,aa+-1|0);c[Ia>>2]=ca;Tb(va,c[G>>2]|0,3);Rb(va,ja,28866,2)}aa=a+24|0;if((c[aa>>2]|0)>0?(c[ba>>2]|0)==0:0){if(la&(k|0)<15)e=(c[a+180>>2]|0)>99;else e=0;j=hb(I,q,Ma,ma,P,e&1,Q)|0}else j=0;d=(za|0)>0;a:do if(d?((eb(c[va+20>>2]|0,c[va+28>>2]|0)|0)+3|0)<=(h|0):0)if(j){f=(R(Ma,xa)|0)<<2;p=l;l=l+((1*f|0)+15&-16)|0;f=l;l=l+((1*(Ga<<2)|0)+15&-16)|0;i=l;l=l+((1*(Ga<<2)|0)+15&-16)|0;o=R(Ha,Na)|0;q=l;l=l+((1*(o<<2)|0)+15&-16)|0;if((c[aa>>2]|0)>7){ib(Da,0,I,p,Ha,Ma,za,c[J>>2]|0);wa(Da,p,f,O,Ha,za);Bc(Da,O,Pa,f,q,Ha);m=+(za|0)*.5;e=0;while(1){if((e|0)>=(o|0)){ca=0;C=T;z=0;A=1;break a}ca=q+(e<<2)|0;g[ca>>2]=+g[ca>>2]+m;e=e+1|0}}else{ca=0;C=T;z=0;A=0}}else{e=0;X=50}else{e=1;j=0;X=50}while(0);if((X|0)==50){f=(R(Ma,xa)|0)<<2;p=l;l=l+((1*f|0)+15&-16)|0;f=l;l=l+((1*(Ga<<2)|0)+15&-16)|0;i=l;l=l+((1*(Ga<<2)|0)+15&-16)|0;ca=(R(Ha,Na)|0)<<2;q=l;l=l+((1*ca|0)+15&-16)|0;ca=e;C=0;z=1;A=0}ib(Da,C,I,p,Ha,Ma,za,c[J>>2]|0);_=(Ma|0)==2;if(_&(Ha|0)==1)c[P>>2]=0;wa(Da,p,f,O,Ha,za);b:do if(!(c[ba>>2]|0))Y=f;else{e=2;while(1){if((e|0)>=(Pa|0)){Y=f;break b}Z=f+(e<<2)|0;y=+g[Z>>2];B=+g[f>>2]*9.999999747378752e-05;B=y>2]=B>1.0000000036274937e-15?B:1.0000000036274937e-15;e=e+1|0}}while(0);Bc(Da,O,Pa,Y,i,Ha);Z=R(Ha,Na)|0;D=l;l=l+((1*(Z<<2)|0)+15&-16)|0;Qh(D|0,0,Pa<<2|0)|0;do if(!la?(H=c[a+228>>2]|0,(H|0)!=0):0){e=c[ba>>2]|0;if(e|0){y=0.0;u=0.0;B=0.0;e=(e|0)==0;break}x=c[a+92>>2]|0;x=(x|0)>2?x:2;e=0;u=0.0;m=0.0;r=0;while(1){if((r|0)>=(Ha|0))break;s=R(Na,r)|0;v=m;f=0;while(1){if((f|0)>=(x|0))break;m=+g[H+(s+f<<2)>>2];o=m<.25;do if(m>-2.0|o^1){if(o){if(!(m>0.0))break}else m=.25;m=m*.5}else m=-2.0;while(0);X=f+1|0;N=(b[da+(X<<1)>>1]|0)-(b[da+(f<<1)>>1]|0)|0;e=e+N|0;u=u+m*+((f<<1|1)-x|0);v=v+m*+(N|0);f=X}m=v;r=r+1|0}m=m/+(e|0)+.20000000298023224;u=u*6.0/+(R(R(R(Ha,x+-1|0)|0,x+1|0)|0,x)|0)*.5;e=u<.03099999949336052;u=e?(e&!(u>-.03099999949336052)?-.03099999949336052:u):.03099999949336052;e=(b[da+(x<<1)>>1]|0)/2|0;s=0;while(1){o=s+1|0;if((b[da+(o<<1)>>1]|0)>16)s=o;else break}r=(Ha|0)==2;e=0;f=0;while(1){if((f|0)>=(x|0))break;o=H+(f<<2)|0;if(r){X=H+(Na+f<<2)|0;o=+g[o>>2]>+g[X>>2]?o:X}v=+g[o>>2];v=(v<0.0?v:0.0)-(m+u*+(f-s|0));if(v>.25){g[D+(f<<2)>>2]=v+-.25;e=e+1|0}f=f+1|0}c:do if((e|0)>2){m=m+.25;if(m>0.0){Qh(D|0,0,x<<2|0)|0;u=0.0;m=0.0;break}else e=0;while(1){if((e|0)>=(x|0))break c;X=D+(e<<2)|0;B=+g[X>>2]+-.25;g[X>>2]=B<0.0?0.0:B;e=e+1|0}}while(0);y=m+.20000000298023224;B=u*64.0;X=89}else{y=0.0;B=0.0;X=89}while(0);if((X|0)==89){e=(c[ba>>2]|0)==0;if(e){w=z?0.0:+(za|0)*.5;f=(Ha|0)==2;v=0.0;m=-10.0;o=Oa;while(1){if((o|0)>=(Pa|0))break;u=m+-1.0;m=+g[i+(o<<2)>>2]-w;m=u>m?u:m;do if(f){u=+g[i+(o+Na<<2)>>2]-w;if(m>u)break;m=u}while(0);v=v+m;o=o+1|0}N=a+232|0;w=+g[N>>2];u=v/+(Pa-Oa|0)-w;K=u<-1.5;L=u>3.0&(K^1);u=L|K?(L?3.0:-1.5):u;g[N>>2]=w+u*.019999999552965164}else u=0.0}if(!A)Sh(q|0,i|0,Z<<2|0)|0;if(d){r=va+20|0;f=c[r>>2]|0;s=va+28|0;o=c[s>>2]|0;do if(((eb(f,o)|0)+3|0)<=(h|0)&(j|0)==0){if((c[aa>>2]|0)<=4){e=C;j=0;break}if(!e){e=C;j=0;break}if(la){e=C;j=0;break}if(!(jb(i,Ja,Na,0,Pa,Ha)|0)){e=C;j=0;break}ib(Da,T,I,p,Ha,Ma,za,c[J>>2]|0);wa(Da,p,Y,O,Ha,za);Bc(Da,O,Pa,Y,i,Ha);m=+(za|0)*.5;e=0;while(1){if((e|0)>=(Z|0))break;N=q+(e<<2)|0;g[N>>2]=+g[N>>2]+m;e=e+1|0}g[ma>>2]=.20000000298023224;f=c[r>>2]|0;o=c[s>>2]|0;e=T;j=1}else e=C;while(0);if(((eb(f,o)|0)+3|0)>(h|0)){L=e;N=j}else{Qb(va,j,3);L=e;N=j}}else{L=C;N=j}J=(R(Ha,xa)|0)<<2;K=l;l=l+((1*J|0)+15&-16)|0;ya(Da,p,K,Y,O,Ha,T);J=l;l=l+((1*(Na<<2)|0)+15&-16)|0;d:do if((k|0)<(Ha*15|0))if(la)X=119;else{e=0;X=125}else if(la)X=119;else{if((c[aa>>2]|0)<=1){e=0;X=125;break}if(c[ba>>2]|0){e=0;X=125;break}j=(1280/(k|0)|0)+2|0;j=kb(Da,O,N,J,(j|0)>5?j:5,K,xa,za,+g[ma>>2],c[P>>2]|0)|0;o=J+(O+-1<<2)|0;e=O;while(1){if((e|0)>=(Pa|0))break d;c[J+(e<<2)>>2]=c[o>>2];e=e+1|0}}while(0);e:do if((X|0)==119){if(c[Q>>2]|0){e=0;while(1){if((e|0)>=(Pa|0)){j=0;break e}c[J+(e<<2)>>2]=1;e=e+1|0}}if((k|0)<15)e=0;else{e=0;X=125;break}while(1){if((e|0)>=(Pa|0)){j=N;break e}c[J+(e<<2)>>2]=0;e=e+1|0}}while(0);f:do if((X|0)==125)while(1){X=0;if((e|0)>=(Pa|0)){j=0;break f}c[J+(e<<2)>>2]=N;e=e+1|0;X=125}while(0);H=l;l=l+((1*(Z<<2)|0)+15&-16)|0;o=0;do{p=R(o,Na)|0;e=Oa;while(1){if((e|0)>=(Pa|0))break;f=e+p|0;r=i+(f<<2)|0;m=+g[r>>2];if(+E(+(m-+g[Ja+(f<<2)>>2]))<2.0)g[r>>2]=m-+g[Fa+(f<<2)>>2]*.25;e=e+1|0}o=o+1|0}while((o|0)<(Ha|0));uc(Da,Oa,Pa,O,i,Ja,h,H,va,Ha,za,n,c[a+12>>2]|0,a+84|0,(c[aa>>2]|0)>3&1,c[a+56>>2]|0,c[ba>>2]|0);lb(Oa,Pa,N,J,za,j,va);G=va+20|0;I=va+28|0;if(((eb(c[G>>2]|0,c[I>>2]|0)|0)+4|0)<=(h|0)){do if(!(c[ba>>2]|0))if(la){if(!(c[aa>>2]|0)){c[a+80>>2]=0;e=0;break}e=a+80|0;if(!N){c[e>>2]=3;e=3;break}else{c[e>>2]=2;e=2;break}}else{j=c[aa>>2]|0;if(!((L|0)!=0|(j|0)<3|(n|0)<(Ha*10|0))){Q=a+80|0;e=Aa(Da,K,a+88|0,c[Q>>2]|0,a+96|0,M,(F^1)&1,O,Ha,T)|0;c[Q>>2]=e;break}e=a+80|0;if(!j){c[e>>2]=0;e=0;break}else{c[e>>2]=2;e=2;break}}else{c[M>>2]=0;c[a+80>>2]=2;e=2}while(0);Rb(va,e,28869,5)}F=l;l=l+((1*(Na<<2)|0)+15&-16)|0;A=a+52|0;d=a+120|0;m=+mb(i,q,Na,Oa,Pa,Ha,F,c[S>>2]|0,c[Da+56>>2]|0,N,c[W>>2]|0,c[A>>2]|0,da,za,k,na,c[ba>>2]|0,D,d);if(c[ba>>2]|0)c[F>>2]=(k|0)>26?8:(k|0)/3|0;D=l;l=l+((1*(Na<<2)|0)+15&-16)|0;Ya(Da,D,za,Ha);z=h<<3;W=c[G>>2]|0;k=c[I>>2]|0;h=6;o=0;j=W;e=k;n=Oa;k=zb(W,k)|0;while(1){if((n|0)>=(Pa|0))break;x=n+1|0;p=(R(Ha,(b[da+(x<<1)>>1]|0)-(b[da+(n<<1)>>1]|0)|0)|0)<=(z-o|0))break;if((r|0)>=(c[f>>2]|0))break;W=(q|0)<(c[s>>2]|0);Qb(va,W&1,n);j=c[G>>2]|0;e=c[I>>2]|0;k=zb(j,e)|0;if(!W)break;q=q+1|0;r=r+p|0;n=1;o=o+p|0}if(q)h=(h|0)<3?2:h+-1|0;c[s>>2]=r;n=x}C=(Ha|0)==2;if(C){if(za|0)c[Ea>>2]=nb(Da,K,za,xa)|0;da=a+224|0;W=sa(+((ta|0)/1e3|0|0),c[da>>2]|0)|0;T=(Oa|0)>(W|0);c[da>>2]=(Pa|0)<((T?Oa:W)|0)?Pa:T?Oa:W}if((k+48|0)>(z-o|0))x=5;else{do if((Oa|0)>0)X=168;else{if(c[ba>>2]|0){X=168;break}h=ob(Da,K,i,Pa,za,Ha,xa,d,a+220|0,+g[ma>>2],c[a+224>>2]|0,B,ta)|0}while(0);if((X|0)==168){g[a+220>>2]=0.0;h=5}Rb(va,h,28873,7);da=c[G>>2]|0;k=c[I>>2]|0;j=da;e=k;x=h;k=zb(da,k)|0}if($){f=(c[ia>>2]|0)-za|0;i=1275>>>ea;i=(t|0)<(i|0)?t:i;if(la){e=(Ha*72|0)+32|0;e=(qa|0)<(e|0)?0:qa-e|0}else e=qa-((Ha*320|0)+160)|0;h=c[A>>2]|0;p=(h|0)==0;if(!p)e=e+(c[a+208>>2]>>f)|0;if(la){pa=c[a+180>>2]|0;B=+g[ma>>2];e=e+((pa|0)<100?96>>>ea:0)-((pa|0)>100?144>>>ea:0)+~~((B+-.25)*400.0)|0;pa=(k+o+63>>6)+2|0;j=ka+296+o+63>>6;j=(pa|0)>(j|0)?pa:j;e=!(B>.699999988079071)|(e|0)>400?e:400}else{j=(k+o+63>>6)+2|0;e=pb(c[oa>>2]|0,c[pa>>2]|0,d,e,za,ta,c[a+92>>2]|0,Ha,c[a+224>>2]|0,h,+g[a+220>>2],c[na>>2]|0,+g[ma>>2],V,m,c[ba>>2]|0,(c[a+228>>2]|0)!=0&1,y,u)|0}k=e+k|0;n=k+32>>6;n=(j|0)>(n|0)?j:n;n=(i|0)<(n|0)?i:n;o=(ra|0)==0;e=o?n:2;j=a+212|0;h=c[j>>2]|0;if((h|0)<970){c[j>>2]=h+1;m=1.0/+(h+21|0)}else m=1.0000000474974513e-03;do if(!p){j=a+200|0;c[j>>2]=(c[j>>2]|0)+((o?n<<6:128)-qa);j=a+208|0;pa=a+204|0;h=c[pa>>2]|0;h=h+~~(m*+(((o?k-qa|0:0)<>2]|0)-h|0))|0;c[pa>>2]=h;c[j>>2]=0-h;j=a+200|0;h=c[j>>2]|0;if((h|0)>=0)break;c[j>>2]=0;e=o?n+((h|0)/-64|0)|0:2}while(0);t=(i|0)<(e|0)?i:e;Wb(va,t);j=c[G>>2]|0;e=c[I>>2]|0}f=l;l=l+((1*(Na<<2)|0)+15&-16)|0;i=l;l=l+((1*(Na<<2)|0)+15&-16)|0;q=l;l=l+((1*(Na<<2)|0)+15&-16)|0;r=t<<6;e=r-(zb(j,e)|0)+-1|0;s=(N|0)==0;if((za|0)>1&(s^1))o=(e|0)>=((za<<3)+16|0);else o=0;n=o?8:0;j=e-n|0;if(!(c[a+120>>2]|0))e=Pa+-1|0;else{do if((ta|0)<(Ha*32e3|0))e=13;else{if((ta|0)<(Ha*48e3|0)){e=16;break}if((ta|0)<(Ha*6e4|0)){e=18;break}e=(ta|0)<(Ha*8e4|0)?19:20}while(0);ta=c[a+148>>2]|0;e=(ta|0)>(e|0)?ta:e}k=a+224|0;h=a+92|0;j=Cc(Da,Oa,Pa,F,D,x,k,Ea,j,Ba,i,f,q,Ha,za,va,c[h>>2]|0,(c[ba>>2]|0)==0?e:1)|0;e=c[h>>2]|0;if(!e)e=j;else{qa=e+1|0;e=e+-1|0;ta=(e|0)>(j|0);e=(qa|0)<((ta?e:j)|0)?qa:ta?e:j}c[h>>2]=e;zc(Da,Oa,Pa,Ja,H,f,va,Ha);ta=l;l=l+((1*Z|0)+15&-16)|0;p=a+76|0;Ca(Da,Oa,Pa,K,C?K+(xa<<2)|0:0,ta,Y,i,L,c[a+80>>2]|0,c[Ea>>2]|0,c[k>>2]|0,J,r-n|0,c[Ba>>2]|0,va,za,j,p,c[aa>>2]|0,c[a+72>>2]|0,c[a+68>>2]|0);if(o)Tb(va,(c[a+116>>2]|0)<2&1,1);Ac(Da,Oa,Pa,Ja,H,f,q,(t<<3)-(eb(c[G>>2]|0,c[I>>2]|0)|0)|0,va,Ha);k=Ga<<2;Qh(Fa|0,0,k|0)|0;j=0;do{h=R(j,Na)|0;e=Oa;while(1){if((e|0)>=(Pa|0))break;Ea=e+h|0;B=+g[H+(Ea<<2)>>2];Ba=B>.5;Da=B<-.5&(Ba^1);g[Fa+(Ea<<2)>>2]=Da|Ba?(Da?-.5:.5):B;e=e+1|0}j=j+1|0}while((j|0)<(Ha|0));g:do if(ra|0){e=0;while(1){if((e|0)>=(Z|0))break g;g[Ja+(e<<2)>>2]=-28.0;e=e+1|0}}while(0);c[a+104>>2]=c[Ia>>2];g[a+108>>2]=ga;c[a+112>>2]=ja;if(_&(Ha|0)==1)Sh(Ja+(Na<<2)|0,Ja|0,Na<<2|0)|0;h:do if(s){Sh(La|0,Ka|0,k|0)|0;Sh(Ka|0,Ja|0,k|0)|0;j=0}else{e=0;while(1){if((e|0)>=(Ga|0)){j=0;break h}Ia=Ka+(e<<2)|0;B=+g[Ia>>2];ga=+g[Ja+(e<<2)>>2];g[Ia>>2]=B=(Oa|0)){e=Pa;break}Ia=h+e|0;g[Ja+(Ia<<2)>>2]=0.0;g[La+(Ia<<2)>>2]=-28.0;g[Ka+(Ia<<2)>>2]=-28.0;e=e+1|0}while(1){if((e|0)>=(Na|0))break;Ia=h+e|0;g[Ja+(Ia<<2)>>2]=0.0;g[La+(Ia<<2)>>2]=-28.0;g[Ka+(Ia<<2)>>2]=-28.0;e=e+1|0}j=j+1|0}while((j|0)<(Ma|0));j=a+116|0;if(!(N|ca))e=0;else e=(c[j>>2]|0)+1|0;c[j>>2]=e;c[p>>2]=c[I>>2];Xb(va);Pa=(qb(c[va+44>>2]|0)|0)==0;ha(ua|0);Pa=Pa?t:-3;l=Qa;return Pa|0}function eb(a,b){a=a|0;b=b|0;return (U(b|0)|0)+-32+a|0}function fb(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0,f=0.0;c=0.0;d=0.0;e=0;while(1){if((e|0)>=(b|0))break;f=+g[a+(e<<2)>>2];c=cf?d:f;e=e+1|0}f=-c;return +(d>f?d:f)}function gb(a,b,d,e,f,h,i,j,k,m,n){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0.0,q=0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;N=l;l=l+16|0;J=N+8|0;s=N;v=c[a>>2]|0;K=c[v+4>>2]|0;q=f+1024|0;M=(R(q,e)|0)<<2;L=l;l=l+((1*M|0)+15&-16)|0;c[J>>2]=L;c[J+4>>2]=L+(q<<2);L=K+f|0;M=f<<2;o=0;do{I=c[J+(o<<2)>>2]|0;Sh(I|0,d+(o<<10<<2)|0,4096)|0;Sh(I+4096|0,b+((R(o,L)|0)<<2)+(K<<2)|0,M|0)|0;o=o+1|0}while((o|0)<(e|0));if(!m){c[s>>2]=15;t=0.0;q=a+104|0;I=15}else{m=fa()|0;o=l;l=l+((1*(q>>1<<2)|0)+15&-16)|0;hc(J,o,q,e);mc(o+2048|0,o,f,s);c[s>>2]=1024-(c[s>>2]|0);q=a+104|0;p=+oc(o,f,s,c[q>>2]|0,+g[a+108>>2]);o=c[s>>2]|0;if((o|0)>1022){c[s>>2]=1022;o=1022}t=p*.699999988079071;I=c[a+56>>2]|0;t=(I|0)>2?t*.5:t;ha(m|0);t=(I|0)>8?0.0:(I|0)>4?t*.5:t;I=o}s=c[q>>2]|0;H=I-s|0;p=(((H|0)>-1?H:0-H|0)*10|0)>(I|0)?.4000000059604645:.20000000298023224;if((n|0)>=25){if((n|0)<35)u=11}else{p=p+.10000000149011612;u=11}if((u|0)==11)p=p+.10000000149011612;H=a+108|0;r=+g[H>>2];p=r>.4000000059604645?p+-.10000000149011612:p;p=r>.550000011920929?p+-.10000000149011612:p;if(t<(p>.20000000298023224?p:.20000000298023224)){F=0;G=0;p=0.0}else{m=+E(+(t-r))<.10000000149011612;m=~~+D(+((m?r:t)*32.0/3.0+.5));o=m+-1|0;if((o|0)<=7)if((m|0)<1)o=0;else u=15;else{o=7;u=15}F=o;G=1;p=+(o+1|0)*.09375}A=v+44|0;B=K<<2;r=-p;C=a+112|0;w=v+60|0;x=(f|0)>1024;y=1024-f<<2;z=0-f|0;o=0;m=s;while(1){v=(c[A>>2]|0)-K|0;c[q>>2]=(m|0)>15?m:15;m=b+((R(o,L)|0)<<2)|0;s=a+236+((R(o,K)|0)<<2)|0;Sh(m|0,s|0,B|0)|0;if(!v)u=c[J+(o<<2)>>2]|0;else{u=c[J+(o<<2)>>2]|0;O=c[q>>2]|0;t=-+g[H>>2];n=c[C>>2]|0;Wa(m+(K<<2)|0,u+4096|0,O,O,v,t,t,n,n,0,0)}n=u+4096|0;Wa(m+(K<<2)+(v<<2)|0,n+(v<<2)|0,c[q>>2]|0,I,f-v|0,-+g[H>>2],r,c[C>>2]|0,h,c[w>>2]|0,K);Sh(s|0,m+(f<<2)|0,B|0)|0;m=d+(o<<10<<2)|0;if(x)Sh(m|0,u+(f<<2)|0,4096)|0;else{Wh(m|0,m+(f<<2)|0,y|0)|0;Sh(m+4096+(z<<2)|0,n|0,M|0)|0}o=o+1|0;if((o|0)>=(e|0))break;m=c[q>>2]|0}g[j>>2]=p;c[i>>2]=I;c[k>>2]=F;l=N;return G|0}function hb(a,b,e,f,h,i,j){a=a|0;b=b|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,E=0,G=0;A=l;y=l;l=l+((1*(b<<2)|0)+15&-16)|0;c[j>>2]=0;w=(i|0)==0;p=w?.0625:.03125;x=(b|0)/2|0;s=+(x|0);t=+(x|0);u=x+-5|0;v=(x*6|0)+-102|0;q=0;r=0;while(1){if((q|0)>=(e|0))break;n=R(q,b)|0;k=0.0;i=0;m=0.0;while(1){if((i|0)>=(b|0))break;C=+g[a+(i+n<<2)>>2];B=m+C;g[y+(i<<2)>>2]=B;o=k+B-C*2.0;k=C-B*.5;i=i+1|0;m=o}i=y;n=i+48|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(n|0));o=0.0;k=0.0;i=0;while(1){if((i|0)>=(x|0)){i=x;m=0.0;break}n=i<<1;C=+g[y+(n<<2)>>2];B=+g[y+((n|1)<<2)>>2];B=C*C+B*B;C=k+p*(B-k);g[y+(i<<2)>>2]=C;o=o+B;k=C;i=i+1|0}a:while(1){n=i;k=m;while(1){i=n+-1|0;if((n|0)<=0)break a;n=y+(i<<2)|0;k=k+(+g[n>>2]-k)*.125;g[n>>2]=k;if(m>k)n=i;else{m=k;continue a}}}k=t/(+F(+(o*m*.5*s))+1.0000000036274937e-15)*64.0;i=0;n=12;while(1){if((n|0)>=(u|0))break;C=+D(+(k*(+g[y+(n<<2)>>2]+1.0000000036274937e-15)));G=C>127.0;E=C<0.0&(G^1);i=i+(d[28884+~~(E|G?(E?0.0:127.0):C)>>0]|0)|0;n=n+4|0}i=(i<<8|0)/(v|0)|0;if((i|0)>(r|0))c[h>>2]=q;else i=r;q=q+1|0;r=i}if((r+-201|0)>>>0<399&(w^1)){c[j>>2]=1;i=0}else i=(r|0)>200&1;k=+F(+(+(r*27|0)))+-42.0;if(!(k<0.0))if(k>163.0)m=163.0;else z=22;else{k=0.0;z=22}if((z|0)==22)m=k;if(m*.006899999920278788+-.139<0.0){C=0.0;C=+F(+C);g[f>>2]=C;l=A;return i|0}C=(k>163.0?163.0:k)*.006899999920278788+-.139;C=+F(+C);g[f>>2]=C;l=A;return i|0}function ib(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;q=c[a+4>>2]|0;n=(b|0)==0;t=c[a+44>>2]<<(n?i:0);s=n?1:b;n=(c[a+36>>2]|0)-(n?i:0)|0;o=a+64|0;r=R(s,t)|0;p=r+q|0;a=a+60|0;b=0;do{k=d+((R(b,p)|0)<<2)|0;m=R(R(b,t)|0,s)|0;i=0;while(1){if((i|0)>=(s|0))break;u=k+((R(i,t)|0)<<2)|0;fc(o,u,e+(i+m<<2)|0,c[a>>2]|0,q,n,s);i=i+1|0}b=b+1|0}while((b|0)<(h|0));a:do if((h|0)==2&(f|0)==1){b=0;while(1){if((b|0)>=(r|0))break a;u=e+(b<<2)|0;g[u>>2]=+g[u>>2]*.5+ +g[e+(r+b<<2)>>2]*.5;b=b+1|0}}while(0);if((j|0)==1)return;m=(r|0)/(j|0)|0;l=+(j|0);a=r-m<<2;b=0;do{k=R(R(b,s)|0,t)|0;i=0;while(1){if((i|0)>=(m|0))break;u=e+(k+i<<2)|0;g[u>>2]=+g[u>>2]*l;i=i+1|0}Qh(e+(k+m<<2)|0,0,a|0)|0;b=b+1|0}while((b|0)<(f|0));return}function jb(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,k=0.0,m=0,n=0.0,o=0.0,p=0,q=0,r=0;r=l;l=l+112|0;q=r;i=b+(e<<2)|0;a:do if((h|0)==1){p=c[i>>2]|0;c[q+(e<<2)>>2]=p;i=e;k=(c[j>>2]=p,+g[j>>2]);while(1){i=i+1|0;if((i|0)>=(f|0))break a;o=+g[b+(i<<2)>>2];o=k+-1.0>o?k+-1.0:o;g[q+(i<<2)>>2]=o;k=o}}else{o=+g[i>>2];k=+g[b+(e+d<<2)>>2];i=e;k=o>k?o:k;while(1){g[q+(i<<2)>>2]=k;i=i+1|0;if((i|0)>=(f|0))break a;n=+g[b+(i<<2)>>2];o=+g[b+(i+d<<2)>>2];m=n>o;if(k+-1.0>(m?n:o)){k=k+-1.0;continue}else{k=m?n:o;continue}}}while(0);i=f+-2|0;while(1){if((i|0)<(e|0))break;p=q+(i<<2)|0;n=+g[p>>2];o=+g[q+(i+1<<2)>>2]+-1.0;g[p>>2]=n>o?n:o;i=i+-1|0}p=(e|0)<2;b=f+-1|0;k=0.0;m=0;do{f=R(m,d)|0;i=p?2:e;while(1){if((i|0)>=(b|0))break;n=+g[a+(i+f<<2)>>2];o=+g[q+(i<<2)>>2];o=(n<0.0?0.0:n)-(o<0.0?0.0:o);k=k+(o<0.0?0.0:o);i=i+1|0}m=m+1|0}while((m|0)<(h|0));q=k/+(R(b-(p?2:e)|0,h)|0)>1.0&1;l=r;return q|0}function kb(d,e,f,g,h,i,j,k,m,n){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=+m;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0,J=0;G=l;l=l+16|0;A=G;y=.5-m;y=(y<-.25?-.25:y)*.03999999910593033;D=l;l=l+((1*(e<<2)|0)+15&-16)|0;v=d+32|0;E=c[v>>2]|0;C=e+-1|0;E=(b[E+(e<<1)>>1]|0)-(b[E+(C<<1)>>1]|0)<=(e|0))break;u=c[v>>2]|0;t=o+1|0;j=b[u+(o<<1)>>1]|0;u=(b[u+(t<<1)>>1]|0)-j|0;n=u<>k,q),z=+ub(x,n,r,y),z=((B&(u^1)&1)+k|0))break;Ba(w,n>>d,1<>2]=j;if(!u){o=t;continue}if(!((j|0)==0|(j|0)==(s|0))){o=t;continue}c[d>>2]=j+-1;o=t}r=f<<2;n=0;while(1){if((n|0)==2)break;q=r+(n<<1)|0;p=28834+(k<<3)+q|0;q=(q|1)+(28834+(k<<3))|0;d=0;j=B?h:0;o=1;while(1){if((o|0)>=(e|0))break;f=j+h|0;I=d+h|0;J=c[D+(o<<2)>>2]|0;i=J-(a[p>>0]<<1)|0;J=J-(a[q>>0]<<1)|0;d=((d|0)<(f|0)?d:f)+((i|0)>-1?i:0-i|0)|0;j=((I|0)<(j|0)?I:j)+((J|0)>-1?J:0-J|0)|0;o=o+1|0}c[A+(n<<2)>>2]=(d|0)<(j|0)?d:j;n=n+1|0}q=(c[A+4>>2]|0)<(c[A>>2]|0)&(B^1)&1;o=r|q<<1;p=28834+(k<<3)+o|0;o=(o|1)+(28834+(k<<3))|0;n=0;d=B?h:0;j=1;while(1){if((j|0)>=(e|0))break;A=d+h|0;i=(n|0)<(A|0);c[E+(j<<2)>>2]=(i^1)&1;I=n+h|0;k=(I|0)<(d|0);c[F+(j<<2)>>2]=(k^1)&1;J=c[D+(j<<2)>>2]|0;B=J-(a[p>>0]<<1)|0;J=J-(a[o>>0]<<1)|0;n=(i?n:A)+((B|0)>-1?B:0-B|0)|0;d=(k?I:d)+((J|0)>-1?J:0-J|0)|0;j=j+1|0}j=(n|0)>=(d|0)&1;c[g+(C<<2)>>2]=j;d=e+-2|0;while(1){if((d|0)<=-1)break;J=c[((j|0)==1?F:E)+(d+1<<2)>>2]|0;c[g+(d<<2)>>2]=J;d=d+-1|0;j=J}l=G;return q|0}function lb(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;j=c[i+4>>2]<<3;r=i+20|0;s=i+28|0;l=eb(c[r>>2]|0,c[s>>2]|0)|0;k=(e|0)!=0;m=k?2:4;if((g|0)>0)t=(l+m+1|0)>>>0<=j>>>0;else t=0;q=j-(t&1)|0;p=k?4:5;n=0;o=b;k=0;while(1){if((o|0)>=(d|0))break;j=f+(o<<2)|0;if((l+m|0)>>>0>q>>>0){c[j>>2]=k;j=n}else{Qb(i,c[j>>2]^k,m);l=eb(c[r>>2]|0,c[s>>2]|0)|0;k=c[j>>2]|0;j=n|k}m=p;n=j;o=o+1|0}k=e<<2;if(t?(a[k+n+(28834+(g<<3))>>0]|0)!=(a[(k|2)+n+(28834+(g<<3))>>0]|0):0){Qb(i,h,1);j=h<<1}else j=0;j=k+j|0;while(1){if((b|0)>=(d|0))break;i=f+(b<<2)|0;c[i>>2]=a[j+(c[i>>2]|0)+(28834+(g<<3))>>0];b=b+1|0}return}function mb(a,e,f,h,i,k,m,n,o,p,q,r,s,t,u,v,w,x,y){a=a|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;y=y|0;var z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0,J=0,K=0,L=0.0,M=0,N=0,O=0.0;K=l;F=R(k,f)|0;I=l;l=l+((1*(F<<2)|0)+15&-16)|0;G=l;l=l+((1*(F<<2)|0)+15&-16)|0;Qh(m|0,0,f<<2|0)|0;z=+(9-n|0);n=0;while(1){if((n|0)>=(i|0)){n=0;z=-31.899999618530273;break}F=n+5|0;g[G+(n<<2)>>2]=+(b[o+(n<<1)>>1]|0)*.0625+.5+z-+g[18836+(n<<2)>>2]+ +(R(F,F)|0)*.006200000178068876;n=n+1|0}while(1){A=R(n,f)|0;o=0;H=z;while(1){if((o|0)>=(i|0))break;z=+g[a+(A+o<<2)>>2]-+g[G+(o<<2)>>2];o=o+1|0;H=H>z?H:z}n=n+1|0;if((n|0)>=(k|0))break;else z=H}if(!((u|0)>50&(t|0)>0&(w|0)==0)){J=0;c[v>>2]=J;l=K;return +H}D=i+-2|0;E=i+-1|0;n=0;C=0;while(1){w=R(C,f)|0;F=I+(w<<2)|0;B=e+(w<<2)|0;o=c[B>>2]|0;c[F>>2]=o;A=n;n=1;z=(c[j>>2]=o,+g[j>>2]);while(1){if((n|0)>=(i|0)){o=A;break}o=w+n|0;L=+g[e+(o<<2)>>2];o=L>+g[e+(o+-1<<2)>>2]+.5?n:A;L=z+1.5>2]=L;A=o;n=n+1|0;z=L}while(1){n=o+-1|0;if((o|0)<=0){n=2;break}M=F+(n<<2)|0;O=+g[M>>2];z=+g[F+(o<<2)>>2]+2.0;L=+g[e+(w+n<<2)>>2];N=z>2]=O<(N?z:L)?O:N?z:L;o=n}while(1){if((n|0)>=(D|0))break;N=F+(n<<2)|0;L=+g[N>>2];O=+sb(e+(w+n+-2<<2)|0)+-1.0;g[N>>2]=L>O?L:O;n=n+1|0}O=+tb(B)+-1.0;L=+g[F>>2];g[F>>2]=L>O?L:O;n=F+4|0;L=+g[n>>2];g[n>>2]=L>O?L:O;O=+tb(e+(w+i+-3<<2)|0)+-1.0;n=F+(D<<2)|0;L=+g[n>>2];g[n>>2]=L>O?L:O;n=F+(E<<2)|0;L=+g[n>>2];g[n>>2]=L>O?L:O;n=0;while(1){if((n|0)>=(i|0))break;N=F+(n<<2)|0;L=+g[N>>2];O=+g[G+(n<<2)>>2];g[N>>2]=L>O?L:O;n=n+1|0}C=C+1|0;if((C|0)>=(k|0))break;else n=A}a:do if((k|0)==2){n=h;while(1){if((n|0)>=(i|0)){n=h;break a}G=n+f|0;M=I+(G<<2)|0;O=+g[M>>2];N=I+(n<<2)|0;L=+g[N>>2]+-4.0;L=O>L?O:L;g[M>>2]=L;O=+g[N>>2];L=L+-4.0;L=O>L?O:L;g[N>>2]=L;L=+g[a+(n<<2)>>2]-L;O=+g[a+(G<<2)>>2]-+g[M>>2];g[N>>2]=((L<0.0?0.0:L)+(O<0.0?0.0:O))*.5;n=n+1|0}}else{n=h;while(1){if((n|0)>=(i|0)){n=h;break a}N=I+(n<<2)|0;O=+g[a+(n<<2)>>2]-+g[N>>2];g[N>>2]=O<0.0?0.0:O;n=n+1|0}}while(0);while(1){if((n|0)>=(i|0))break;N=I+(n<<2)|0;L=+g[N>>2];O=+g[x+(n<<2)>>2];g[N>>2]=L>O?L:O;n=n+1|0}D=(q|0)==0;b:do if((D|(r|0)!=0)&(p|0)==0){n=h;while(1){if((n|0)>=(i|0)){n=h;break b}N=I+(n<<2)|0;g[N>>2]=+g[N>>2]*.5;n=n+1|0}}else n=h;while(0);while(1){if((n|0)>=(i|0))break;if((n|0)>=8){if((n|0)>11){z=.5;J=34}}else{z=2.0;J=34}if((J|0)==34){J=0;N=I+(n<<2)|0;g[N>>2]=+g[N>>2]*z}n=n+1|0}c:do if(c[y>>2]|0){n=h;while(1){if((n|0)>=(((i|0)<19?i:19)|0))break c;N=I+(n<<2)|0;g[N>>2]=+g[N>>2]+ +(d[y+36+n>>0]|0)*.015625;n=n+1|0}}while(0);C=(u<<1|0)/3|0;B=(r|0)==0;n=0;while(1){if((h|0)>=(i|0)){J=50;break}w=I+(h<<2)|0;z=+g[w>>2];z=z<4.0?z:4.0;g[w>>2]=z;w=h+1|0;o=(R((b[s+(w<<1)>>1]|0)-(b[s+(h<<1)>>1]|0)|0,k)|0)<=6)if((o|0)>48){A=~~(z*8.0);o=((R(A,o)|0)<<3|0)/8|0;break}else{A=~~(z*+(o|0)/6.0);o=A*48|0;break}else{A=~~z;o=(R(A,o)|0)<<3}while(0);if(!((B|(p|0)!=0)&(D^1))?(n+o>>6|0)>(C|0):0)break;c[m+(h<<2)>>2]=A;n=n+o|0;h=w}if((J|0)==50){c[v>>2]=n;l=K;return +H}N=C<<6;c[m+(h<<2)>>2]=N-n;c[v>>2]=N;l=K;return +H}function nb(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0.0,o=0.0;l=a+32|0;h=1.0000000036274937e-15;i=1.0000000036274937e-15;a=0;a:while(1){if((a|0)==13)break;m=c[l>>2]|0;j=a+1|0;k=b[m+(j<<1)>>1]<>1]<=(k|0)){a=j;continue a}o=+g[d+(a<<2)>>2];n=+g[d+(a+f<<2)>>2];a=a+1|0;h=h+(+E(+(o+n))+ +E(+(o-n)));i=i+(+E(+o)+ +E(+n))}}m=b[(c[l>>2]|0)+26>>1]<+(m|0)*i|0}function ob(a,d,e,f,h,i,j,k,l,m,n,o,p){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=+m;n=n|0;o=+o;p=p|0;var q=0.0,r=0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;if((p|0)>=64e3)if((p|0)<8e4)s=+(p+-64e3>>10|0)*.0625+4.0;else s=5.0;else s=4.0;if((i|0)==2){r=a+32|0;q=0.0;p=0;while(1){if((p|0)==8)break;w=c[r>>2]|0;v=b[w+(p<<1)>>1]|0;x=v<>1]|0)-v<1.0?1.0:t;q=t;p=8;while(1){if((p|0)>=(n|0))break;v=c[r>>2]|0;w=b[v+(p<<1)>>1]|0;u=w<>1]|0)-w<1.0?1.0:q;y=+P(+(1.0010000467300415-t*t))*1.4426950408889634;z=y*.5;t=+P(+(1.0010000467300415-q*q))*1.4426950408889634;y=y*.75;q=+g[l>>2]+.25;t=-((z>t?z:t)*.5);g[l>>2]=q=(n|0))break;q=q+ +g[e+(p+(R(r,c[d>>2]|0)|0)<<2)>>2]*+((p<<1)+2-f|0);p=p+1|0}r=r+1|0}while((r|0)<(i|0));q=(q/+(R(n,i)|0)+1.0)/6.0;w=q>2.0;x=q<-2.0&(w^1);q=s-(x|w?(x?-2.0:2.0):q)-o-m*2.0;if(c[k>>2]|0){z=(+g[k+8>>2]+.05000000074505806)*2.0;w=z>2.0;x=z<-2.0&(w^1);q=q-(x|w?(x?-2.0:2.0):z)}p=~~+D(+(q+.5));if((p|0)<=10){if((p|0)<0){x=0;return x|0}}else p=10;x=p;return x|0}function pb(a,d,e,f,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=+n;o=o|0;p=+p;q=q|0;r=+r;s=s|0;t=t|0;u=+u;v=+v;var w=0.0,x=0,y=0,z=0,A=0;x=(j|0)==0?a:j;j=b[d+(x<<1)>>1]<(l|0)?l:x)<<1)>>1]<>2]|0)==0;if(!z?(w=+g[e+16>>2],w<.4):0)j=f-~~(+(A<<3|0)*(.4000000059604645-w))|0;else j=f;if(y){l=(x|0)>(l|0)?l:x;l=(b[d+(l<<1)>>1]<>2]+-.15000000596046448;w=+(A<<3|0);j=j+~~(w*1.2000000476837158*(n<0.0?-.11999999731779099:n+-.11999999731779099))|0;if(q)j=j+~~(w*.800000011920929)|0}x=(t|0)==0;if((s|0)==0&(x^1)){t=j+~~(+(A<<3|0)*u)|0;j=(j|0)/4|0;j=(j|0)>(t|0)?j:t}h=~~(+((R(b[d+(a+-2<<1)>>1]<>2;k=(h|0)>(k|0)?h:k;j=(j|0)<(k|0)?j:k;if((s|0)==0&(x^1)){i=j;f=f<<1;m=(f|0)<(i|0);i=m?f:i;return i|0}if(m)j=~~(+(j-f|0)*.6700000166893005)+f|0;if(!(x&p<.20000000298023224)){i=j;f=f<<1;m=(f|0)<(i|0);i=m?f:i;return i|0}m=96e3-i|0;s=(m|0)>32e3;i=(i|0)>96e3&(s^1);i=j+~~((i|s?(i?0.0:.09919999539852142):+(m|0)*3.099999958067201e-06)*v*+(j|0))|0;f=f<<1;m=(f|0)<(i|0);i=m?f:i;return i|0}function qb(a){a=a|0;return a|0}function rb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=0.0;e=0;while(1){if((e|0)>=(c|0))break;d=d+ +g[a+(e<<2)>>2]*+g[b+(e<<2)>>2];e=e+1|0}return +d}function sb(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,h=0.0,i=0;e=+g[a+8>>2];c=+g[a>>2];h=+g[a+4>>2];i=c>h;f=i?c:h;c=i?h:c;h=+g[a+12>>2];b=+g[a+16>>2];a=h>b;d=a?b:h;b=a?h:b;a=c>d;d=a?c:d;c=a?b:f;b=a?f:b;if(e>c)if(c>2];d=+g[a+4>>2];e=b>d;c=e?d:b;d=e?b:d;b=+g[a+8>>2];if(d=(b|0))break;e=e+ +E(+(+g[a+(f<<2)>>2]));f=f+1|0}return +(e+ +(c|0)*d*e)}function vb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=wb(b,a)|0;f=(b|0)>(d|0);a=d+1|0;Sb(e,g,(c[(c[1740+(((b|0)<(d|0)?b:d)<<2)>>2]|0)+((f?b:d)<<2)>>2]|0)+(c[(c[1740+((f?a:b)<<2)>>2]|0)+(((a|0)<(b|0)?b:a)<<2)>>2]|0)|0);return}function wb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=a+-1|0;d=c[b+(g<<2)>>2]|0;f=(d|0)>-1?d:0-d|0;d=d>>>31;do{h=g;g=g+-1|0;e=a-g|0;d=d+(c[(c[1740+(((e|0)<(f|0)?e:f)<<2)>>2]|0)+(((e|0)>(f|0)?e:f)<<2)>>2]|0)|0;i=c[b+(g<<2)>>2]|0;f=f+((i|0)>-1?i:0-i|0)|0;if((i|0)<0){i=f+1|0;d=d+(c[(c[1740+(((e|0)>(f|0)?i:e)<<2)>>2]|0)+(((e|0)>(i|0)?e:i)<<2)>>2]|0)|0}}while((h|0)>1);return d|0}function xb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=(b|0)>(d|0);f=d+1|0;return +(+yb(b,d,Gb(e,(c[(c[1740+(((b|0)<(d|0)?b:d)<<2)>>2]|0)+((g?b:d)<<2)>>2]|0)+(c[(c[1740+((g?f:b)<<2)>>2]|0)+(((f|0)<(b|0)?b:f)<<2)>>2]|0)|0)|0,a))}function yb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0.0,i=0,j=0,k=0.0;h=0.0;j=e;while(1){if((a|0)<=2)break;do if((b|0)<(a|0)){e=c[(c[1740+(b<<2)>>2]|0)+(a<<2)>>2]|0;f=c[(c[1740+(b+1<<2)>>2]|0)+(a<<2)>>2]|0;if(d>>>0>=e>>>0&d>>>0>>0){c[j>>2]=0;e=d-e|0;break}g=d>>>0>=f>>>0;d=d-(g?f:0)|0;f=b;do{f=f+-1|0;e=c[(c[1740+(f<<2)>>2]|0)+(a<<2)>>2]|0}while(d>>>0>>0);i=g<<31>>31;b=b-f+i^i;c[j>>2]=b<<16>>16;k=+((b&65535)<<16>>16);h=h+k*k;e=d-e|0;b=f}else{f=c[1740+(a<<2)>>2]|0;i=c[f+(b+1<<2)>>2]|0;e=d>>>0>=i>>>0;g=e<<31>>31;i=d-(e?i:0)|0;a:do if((c[f+(a<<2)>>2]|0)>>>0>i>>>0){d=a;do{d=d+-1|0;e=c[(c[1740+(d<<2)>>2]|0)+(a<<2)>>2]|0}while(e>>>0>i>>>0)}else{d=b;while(1){e=c[f+(d<<2)>>2]|0;if(e>>>0<=i>>>0)break a;d=d+-1|0}}while(0);b=b-d+g^g;c[j>>2]=b<<16>>16;k=+((b&65535)<<16>>16);h=h+k*k;e=i-e|0;b=d}while(0);a=a+-1|0;d=e;j=j+4|0}a=b<<1|1;i=d>>>0>=a>>>0;e=i<<31>>31;a=d-(i?a:0)|0;d=(a+1|0)>>>1;if(!d){f=a;g=b-d|0;g=g+e|0;e=g^e;g=e&65535;e=e<<16;e=e>>16;i=j+4|0;c[j>>2]=e;k=+(g<<16>>16);k=k*k;h=h+k;g=0-f|0;j=d-f|0;g=j^g;j=g&65535;g=g<<16;g=g>>16;c[i>>2]=g;k=+(j<<16>>16);k=k*k;k=h+k;return +k}f=a-((d<<1)+-1)|0;g=b-d|0;g=g+e|0;e=g^e;g=e&65535;e=e<<16;e=e>>16;i=j+4|0;c[j>>2]=e;k=+(g<<16>>16);k=k*k;h=h+k;g=0-f|0;j=d-f|0;g=j^g;j=g&65535;g=g<<16;g=g>>16;c[i>>2]=g;k=+(j<<16>>16);k=k*k;k=h+k;return +k}function zb(a,b){a=a|0;b=b|0;var d=0,e=0;e=32-(U(b|0)|0)|0;d=b>>>(e+-16|0);b=(d>>>12)+-8|0;return (a<<3)-((e<<3)+(b+(d>>>0>(c[6888+(b<<2)>>2]|0)>>>0&1)))|0}function Ab(a){a=a|0;var b=0,e=0;b=a+24|0;e=c[b>>2]|0;if(e>>>0>=(c[a+4>>2]|0)>>>0){e=0;return e|0}a=c[a>>2]|0;c[b>>2]=e+1;e=d[a+e>>0]|0;return e|0}function Bb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+28|0;d=a+20|0;e=a+40|0;f=a+32|0;while(1){g=c[b>>2]|0;if(g>>>0>=8388609)break;c[d>>2]=(c[d>>2]|0)+8;c[b>>2]=g<<8;h=c[e>>2]|0;g=Ab(a)|0;c[e>>2]=g;c[f>>2]=((h<<8|g)>>>1&255|c[f>>2]<<8&2147483392)^255}return}function Cb(a,b){a=a|0;b=b|0;var d=0;d=Db(c[a+28>>2]|0,b)|0;c[a+36>>2]=d;a=(((c[a+32>>2]|0)>>>0)/(d>>>0)|0)+1|0;return b-(a>>>0>b>>>0?b:a)|0}function Db(a,b){a=a|0;b=b|0;return (a>>>0)/(b>>>0)|0|0}function Eb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[a+36>>2]|0;e=R(f,e-d|0)|0;g=a+32|0;c[g>>2]=(c[g>>2]|0)-e;if(!b){f=a+28|0;g=f;f=(c[f>>2]|0)-e|0;c[g>>2]=f;Bb(a);return}else{g=a+28|0;f=R(f,d-b|0)|0;c[g>>2]=f;Bb(a);return}}function Fb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=a+28|0;d=c[h>>2]|0;e=a+32|0;f=c[e>>2]|0;b=d>>>b;g=f>>>0>>0;if(!g){c[e>>2]=f-b;b=d-b|0}c[h>>2]=b;Bb(a);return g&1|0}function Gb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=b+-1|0;d=32-(U(e|0)|0)|0;if((d|0)<=8){e=Cb(a,b)|0;Eb(a,e,e+1|0,b);return e|0}b=d+-8|0;f=(e>>>b)+1|0;d=Cb(a,f)|0;Eb(a,d,d+1|0,f);b=d<>>0<=e>>>0){f=b;return f|0}c[a+44>>2]=1;f=e;return f|0}function Hb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=a+12|0;d=c[g>>2]|0;h=a+16|0;e=c[h>>2]|0;if(e>>>0>>0){f=e+8|0;f=e+(((f|0)>25?f:25)+-1-e&-8)|0;do{d=d|(Ib(a)|0)<>2]=d>>>b;c[h>>2]=e-b;h=a+20|0;c[h>>2]=(c[h>>2]|0)+b;return d&(1<>2]|0;f=c[a+4>>2]|0;if(e>>>0>=f>>>0){f=0;return f|0}a=c[a>>2]|0;e=e+1|0;c[b>>2]=e;f=d[a+(f-e)>>0]|0;return f|0}function Jb(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=0;c[a+20>>2]=33;c[a+24>>2]=0;c[a+28>>2]=-2147483648;c[a+40>>2]=-1;c[a+32>>2]=0;c[a+36>>2]=0;c[a+4>>2]=d;c[a+44>>2]=0;return}function Kb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+28|0;g=c[f>>2]|0;h=Lb(g,e)|0;if(!b){h=g-(R(h,e-d|0)|0)|0;c[f>>2]=h;Mb(a);return}else{e=g-(R(h,e-b|0)|0)|0;g=a+32|0;c[g>>2]=(c[g>>2]|0)+e;h=R(h,d-b|0)|0;c[f>>2]=h;Mb(a);return}}function Lb(a,b){a=a|0;b=b|0;return (a>>>0)/(b>>>0)|0|0}function Mb(a){a=a|0;var b=0,d=0,e=0,f=0;b=a+28|0;d=a+32|0;e=a+20|0;f=c[b>>2]|0;while(1){if(f>>>0>=8388609)break;Nb(a,(c[d>>2]|0)>>>23);c[d>>2]=c[d>>2]<<8&2147483392;f=c[b>>2]<<8;c[b>>2]=f;c[e>>2]=(c[e>>2]|0)+8}return}function Nb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if((b|0)==255){g=a+36|0;c[g>>2]=(c[g>>2]|0)+1;return}e=b>>8;g=a+40|0;d=c[g>>2]|0;if((d|0)>-1){d=Ob(a,d+e|0)|0;f=a+44|0;c[f>>2]=c[f>>2]|d}f=a+36|0;if(c[f>>2]|0){d=e+255&255;e=a+44|0;do{h=Ob(a,d)|0;c[e>>2]=c[e>>2]|h;h=(c[f>>2]|0)+-1|0;c[f>>2]=h}while((h|0)!=0)}c[g>>2]=b&255;return}function Ob(b,d){b=b|0;d=d|0;var e=0,f=0;e=b+24|0;f=c[e>>2]|0;if((f+(c[b+8>>2]|0)|0)>>>0>=(c[b+4>>2]|0)>>>0){f=-1;return f|0}b=c[b>>2]|0;c[e>>2]=f+1;a[b+f>>0]=d;f=0;return f|0}function Pb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+28|0;f=c[e>>2]|0;g=f>>>15;if(!b){g=f-(R(g,32768-d|0)|0)|0;c[e>>2]=g;Mb(a);return}else{h=f-(R(g,32768-b|0)|0)|0;f=a+32|0;c[f>>2]=(c[f>>2]|0)+h;g=R(g,d-b|0)|0;c[e>>2]=g;Mb(a);return}}function Qb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=a+28|0;e=c[f>>2]|0;d=e>>>d;e=e-d|0;if(!b)d=e;else{b=a+32|0;c[b>>2]=(c[b>>2]|0)+e}c[f>>2]=d;Mb(a);return}function Rb(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=a+28|0;h=c[g>>2]|0;f=h>>>f;if((b|0)>0){i=e+(b+-1)|0;j=h-(R(f,d[i>>0]|0)|0)|0;h=a+32|0;c[h>>2]=(c[h>>2]|0)+j;h=R(f,(d[i>>0]|0)-(d[e+b>>0]|0)|0)|0;c[g>>2]=h;Mb(a);return}else{j=h-(R(f,d[e+b>>0]|0)|0)|0;c[g>>2]=j;Mb(a);return}}function Sb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=c+-1|0;e=32-(U(d|0)|0)|0;if((e|0)>8){e=e+-8|0;c=b>>>e;Kb(a,c,c+1|0,(d>>>e)+1|0);Tb(a,(1<>2]|0;k=a+16|0;f=c[k>>2]|0;if((f+d|0)>>>0>32){i=a+44|0;h=7-f|0;h=f+((h|0)>-8?h:-8)&-8;g=f;do{l=Ub(a,e&255)|0;c[i>>2]=c[i>>2]|l;e=e>>>8;g=g+-8|0}while((g|0)>7);f=f+-8-h|0}c[j>>2]=e|b<>2]=f+d;l=a+20|0;c[l>>2]=(c[l>>2]|0)+d;return}function Ub(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+8|0;f=c[e>>2]|0;g=c[b+4>>2]|0;if(((c[b+24>>2]|0)+f|0)>>>0>=g>>>0){g=-1;return g|0}b=c[b>>2]|0;f=f+1|0;c[e>>2]=f;a[b+(g-f)>>0]=d;g=0;return g|0}function Vb(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=8-f|0;j=(1<>2]|0){f=c[b>>2]|0;a[f>>0]=(d[f>>0]|0)&(j^255)|e<>2]|0;if((h|0)>-1){c[g>>2]=h&~j|e<>2]|0)>>>0>-2147483648>>>f>>>0){c[b+44>>2]=-1;return}else{f=b+32|0;c[f>>2]=c[f>>2]&~(j<<23)|e<>2]|0;d=c[a+8>>2]|0;e=0-d|0;a=a+4|0;Wh(f+b+e|0,f+(c[a>>2]|0)+e|0,d|0)|0;c[a>>2]=b;return}function Xb(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=c[b+28>>2]|0;f=U(m|0)|0;g=2147483647>>>f;h=c[b+32>>2]|0;e=h+g&~g;if((e|g)>>>0>=(h+m|0)>>>0){e=g>>>1;f=f+1|0;e=h+e&~e}m=~f;m=f+((m|0)>-1?m:-1)+8&-8;g=f;while(1){if((g|0)<=0)break;Nb(b,e>>>23);g=g+-8|0;e=e<<8&2147483392}if(!((c[b+40>>2]|0)<=-1?!(c[b+36>>2]|0):0))Nb(b,0);h=c[b+16>>2]|0;l=b+44|0;i=~h;i=h+((i|0)>-8?i:-8)+8&-8;e=c[b+12>>2]|0;g=h;while(1){if((g|0)<=7)break;k=Ub(b,e&255)|0;c[l>>2]=c[l>>2]|k;e=e>>>8;g=g+-8|0}i=h-i|0;if(c[l>>2]|0)return;j=b+24|0;k=c[j>>2]|0;h=b+4|0;g=b+8|0;Qh((c[b>>2]|0)+k|0,0,(c[h>>2]|0)-k-(c[g>>2]|0)|0)|0;if((i|0)<=0)return;k=c[g>>2]|0;g=c[h>>2]|0;if(g>>>0<=k>>>0){c[l>>2]=-1;return}f=m-f|0;if((i|0)>(f|0)?((c[j>>2]|0)+k|0)>>>0>=g>>>0:0){c[l>>2]=-1;e=e&(1<>2]|0)+(g-k+-1)|0;a[b>>0]=d[b>>0]|0|e;return}function Yb(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;k=m;j=c[a+8>>2]|0;j=(j|0)>0?j:0;c[k>>2]=1;f=0;e=1;while(1){g=f<<1;i=b[a+12+((g|1)<<1)>>1]|0;e=R(e,b[a+12+(g<<1)>>1]|0)|0;g=f+1|0;c[k+(g<<2)>>2]=e;if(i<<16>>16==1)break;else f=g}i=a+48|0;g=b[a+12+((g<<1)+-1<<1)>>1]|0;while(1){if((f|0)<=-1)break;h=f<<1;if(!f)e=1;else e=b[a+12+(h+-1<<1)>>1]|0;switch(b[a+12+(h<<1)>>1]|0){case 2:{Zb(d,c[k+(f<<2)>>2]|0);break}case 4:{h=c[k+(f<<2)>>2]|0;_b(d,h<>2]|0;$b(d,h<>2]|0;ac(d,h<>2]|0,g,h,e);break}default:{}}f=f+-1|0;g=e}l=m;return}function Zb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0,f=0.0,h=0,i=0.0,j=0.0,k=0;c=0;while(1){if((c|0)>=(b|0))break;h=a+32|0;f=+g[h>>2];d=a+36|0;i=+g[d>>2];j=+g[a>>2];g[h>>2]=j-f;h=a+4|0;e=+g[h>>2];g[d>>2]=e-i;g[a>>2]=j+f;g[h>>2]=e+i;h=a+40|0;i=+g[h>>2];d=a+44|0;e=+g[d>>2];f=(i+e)*.7071067690849304;i=(e-i)*.7071067690849304;k=a+8|0;e=+g[k>>2];g[h>>2]=e-f;h=a+12|0;j=+g[h>>2];g[d>>2]=j-i;g[k>>2]=e+f;g[h>>2]=j+i;h=a+52|0;i=+g[h>>2];k=a+48|0;j=+g[k>>2];d=a+16|0;f=+g[d>>2];g[k>>2]=f-i;k=a+20|0;e=+g[k>>2];g[h>>2]=e+j;g[d>>2]=f+i;g[k>>2]=e-j;k=a+60|0;j=+g[k>>2];d=a+56|0;e=+g[d>>2];i=(j-e)*.7071067690849304;e=(j+e)*-.7071067690849304;h=a+24|0;j=+g[h>>2];g[d>>2]=j-i;d=a+28|0;f=+g[d>>2];g[k>>2]=f-e;g[h>>2]=j+i;g[d>>2]=f+e;a=a+64|0;c=c+1|0}return}function _b(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;if((e|0)==1){d=0;while(1){if((d|0)>=(f|0))break;s=+g[a>>2];o=a+16|0;B=+g[o>>2];v=s-B;b=a+4|0;x=+g[b>>2];p=a+20|0;z=+g[p>>2];t=x-z;B=s+B;z=x+z;e=a+8|0;x=+g[e>>2];r=a+24|0;s=+g[r>>2];A=x+s;q=a+12|0;w=+g[q>>2];h=a+28|0;u=+g[h>>2];y=w+u;g[o>>2]=B-A;g[p>>2]=z-y;g[a>>2]=B+A;g[b>>2]=z+y;s=x-s;u=w-u;g[e>>2]=v+u;g[q>>2]=t-s;g[r>>2]=v-u;g[h>>2]=t+s;a=a+32|0;d=d+1|0}return}q=e<<1;r=e*3|0;n=d+48|0;o=b<<1;p=b*3|0;m=0;while(1){if((m|0)>=(f|0))break;l=a+((R(m,h)|0)<<3)|0;j=c[n>>2]|0;d=j;i=j;k=0;while(1){if((k|0)>=(e|0))break;F=l+(e<<3)|0;w=+g[F>>2];t=+g[j>>2];E=l+(e<<3)+4|0;x=+g[E>>2];v=+g[j+4>>2];s=w*t-x*v;t=w*v+x*t;I=l+(q<<3)|0;x=+g[I>>2];v=+g[i>>2];H=l+(q<<3)+4|0;w=+g[H>>2];z=+g[i+4>>2];u=x*v-w*z;v=x*z+w*v;D=l+(r<<3)|0;w=+g[D>>2];z=+g[d>>2];C=l+(r<<3)+4|0;x=+g[C>>2];y=+g[d+4>>2];B=w*z-x*y;z=w*y+x*z;x=+g[l>>2];y=x-u;G=l+4|0;w=+g[G>>2];A=w-v;u=x+u;g[l>>2]=u;v=w+v;g[G>>2]=v;w=s+B;x=t+z;B=s-B;z=t-z;g[I>>2]=u-w;g[H>>2]=v-x;g[l>>2]=+g[l>>2]+w;g[G>>2]=+g[G>>2]+x;g[F>>2]=y+z;g[E>>2]=A-B;g[D>>2]=y-z;g[C>>2]=A+B;d=d+(p<<3)|0;i=i+(o<<3)|0;j=j+(b<<3)|0;k=k+1|0;l=l+8|0}m=m+1|0}return}function $b(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0;p=e<<1;o=d+48|0;m=+g[(c[o>>2]|0)+((R(b,e)|0)<<3)+4>>2];n=b<<1;l=0;while(1){if((l|0)>=(f|0))break;d=a+((R(l,h)|0)<<3)|0;j=c[o>>2]|0;i=j;k=e;while(1){s=d+(e<<3)|0;y=+g[s>>2];z=+g[j>>2];q=d+(e<<3)+4|0;B=+g[q>>2];t=+g[j+4>>2];A=y*z-B*t;z=y*t+B*z;v=d+(p<<3)|0;B=+g[v>>2];t=+g[i>>2];u=d+(p<<3)+4|0;y=+g[u>>2];x=+g[i+4>>2];r=B*t-y*x;t=B*x+y*t;y=A+r;x=z+t;g[s>>2]=+g[d>>2]-y*.5;w=d+4|0;g[q>>2]=+g[w>>2]-x*.5;r=(A-r)*m;t=(z-t)*m;g[d>>2]=+g[d>>2]+y;g[w>>2]=+g[w>>2]+x;g[v>>2]=+g[s>>2]+t;g[u>>2]=+g[q>>2]-r;g[s>>2]=+g[s>>2]-t;g[q>>2]=+g[q>>2]+r;k=k+-1|0;if(!k)break;else{d=d+8|0;i=i+(n<<3)|0;j=j+(b<<3)|0}}l=l+1|0}return}function ac(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0.0,u=0.0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0;q=R(b,d)|0;t=+g[c+(q<<3)>>2];u=+g[c+(q<<3)+4>>2];q=R(b<<1,d)|0;o=+g[c+(q<<3)>>2];p=+g[c+(q<<3)+4>>2];q=d<<1;r=d*3|0;s=d<<2;i=0;while(1){if((i|0)>=(e|0))break;n=a+((R(i,f)|0)<<3)|0;h=0;j=n+(s<<3)|0;k=n+(r<<3)|0;l=n+(q<<3)|0;m=n;n=n+(d<<3)|0;while(1){if((h|0)>=(d|0))break;G=+g[m>>2];N=m+4|0;E=+g[N>>2];F=+g[n>>2];O=R(h,b)|0;z=+g[c+(O<<3)>>2];M=n+4|0;K=+g[M>>2];L=+g[c+(O<<3)+4>>2];x=F*z-K*L;z=F*L+K*z;K=+g[l>>2];O=R(h<<1,b)|0;L=+g[c+(O<<3)>>2];A=l+4|0;F=+g[A>>2];C=+g[c+(O<<3)+4>>2];J=K*L-F*C;L=K*C+F*L;F=+g[k>>2];O=R(h*3|0,b)|0;C=+g[c+(O<<3)>>2];v=k+4|0;K=+g[v>>2];y=+g[c+(O<<3)+4>>2];w=F*C-K*y;C=F*y+K*C;K=+g[j>>2];O=R(h<<2,b)|0;y=+g[c+(O<<3)>>2];H=j+4|0;F=+g[H>>2];D=+g[c+(O<<3)+4>>2];B=K*y-F*D;y=K*D+F*y;F=x+B;D=z+y;B=x-B;y=z-y;z=J+w;x=L+C;w=J-w;C=L-C;g[m>>2]=G+(F+z);g[N>>2]=E+(D+x);L=G+(F*t+z*o);J=E+(D*t+x*o);K=y*u+C*p;I=B*u+w*p;g[n>>2]=L-K;g[M>>2]=J+I;g[j>>2]=L+K;g[H>>2]=J-I;z=G+(F*o+z*t);x=E+(D*o+x*t);y=C*u-y*p;w=B*p-w*u;g[l>>2]=z+y;g[A>>2]=x+w;g[k>>2]=z-y;g[v>>2]=x-w;h=h+1|0;j=j+8|0;k=k+8|0;l=l+8|0;m=m+8|0;n=n+8|0}i=i+1|0}return}function bc(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,h=0.0,i=0,j=0.0;h=+g[a+4>>2];i=a+44|0;f=0;while(1){if((f|0)>=(c[a>>2]|0))break;j=+g[d+(f<<3)+4>>2];g[e+(b[(c[i>>2]|0)+(f<<1)>>1]<<3)>>2]=h*+g[d+(f<<3)>>2];g[e+(b[(c[i>>2]|0)+(f<<1)>>1]<<3)+4>>2]=h*j;f=f+1|0}Yb(a,e);return}function cc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=c[b>>2]|0;if(!f){j=d;b=0;j=b+j|0;Pb(a,b,j);return}j=f>>31;i=f+j^j;g=1;h=dc(d,e)|0;while(1){if(!h){f=6;break}if((i|0)<=(g|0)){f=7;break}f=h<<1;g=g+1|0;h=(R(f,e)|0)>>>15;d=d+(f+2)|0}if((f|0)==6){i=i-g|0;e=(32768-d-j>>1)+-1|0;e=(i|0)<(e|0)?i:e;i=d+((e<<1|1)+j)|0;c[b>>2]=g+e+j^j;j=(i|0)!=32768&1;b=i;j=b+j|0;Pb(a,b,j);return}else if((f|0)==7){b=h+1|0;i=b;b=d+(b&~j)|0;j=b+i|0;Pb(a,b,j);return}}function dc(a,b){a=a|0;b=b|0;return (R(32736-a|0,16384-b|0)|0)>>>15|0}function ec(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;d=32-(U(a|0)|0)+-1>>1;b=1<>>0>>0;c=c+(f?0:b)|0;if((d|0)<=0)break;else{a=a-(f?0:e)|0;b=b>>>1;d=d+-1|0}}return c|0}function fc(a,d,e,f,h,i,j){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0;x=l;t=c[a+8+(i<<2)>>2]|0;s=+g[t+4>>2];k=0;m=c[a>>2]|0;w=c[a+24>>2]|0;while(1){u=m>>1;if((k|0)>=(i|0))break;k=k+1|0;m=u;w=w+(u<<2)|0}v=m>>2;k=l;l=l+((1*(u<<2)|0)+15&-16)|0;a=l;l=l+((1*(v<<3)|0)+15&-16)|0;m=h>>1;p=f+(m<<2)|0;q=h+3>>2;r=0-u|0;i=d+(m<<2)|0;o=p+-4|0;n=k;d=d+(u<<2)+-4+(m<<2)|0;m=0;while(1){if((m|0)>=(q|0))break;y=+g[o>>2];z=+g[p>>2];g[n>>2]=y*+g[i+(u<<2)>>2]+z*+g[d>>2];g[n+4>>2]=z*+g[i>>2]-y*+g[d+(r<<2)>>2];i=i+8|0;o=o+-8|0;p=p+8|0;n=n+8|0;d=d+-8|0;m=m+1|0}p=f+(h<<2)|0;o=v-q|0;while(1){if((m|0)>=(o|0))break;c[n>>2]=c[d>>2];c[n+4>>2]=c[i>>2];d=d+-8|0;i=i+8|0;n=n+8|0;m=m+1|0}p=p+-4|0;o=f;while(1){if((m|0)>=(v|0))break;g[n>>2]=+g[p>>2]*+g[d>>2]-+g[o>>2]*+g[i+(r<<2)>>2];g[n+4>>2]=+g[p>>2]*+g[i>>2]+ +g[o>>2]*+g[d+(u<<2)>>2];p=p+-8|0;o=o+8|0;n=n+8|0;d=d+-8|0;i=i+8|0;m=m+1|0}i=t+44|0;m=0;while(1){if((m|0)>=(v|0))break;A=+g[w+(m<<2)>>2];z=+g[w+(v+m<<2)>>2];y=+g[k>>2];B=+g[k+4>>2];r=b[(c[i>>2]|0)+(m<<1)>>1]|0;g[a+(r<<3)>>2]=s*(y*A-B*z);g[a+(r<<3)+4>>2]=s*(B*A+y*z);k=k+8|0;m=m+1|0}Yb(t,a);i=j<<1;d=0-i|0;m=e+((R(u+-1|0,j)|0)<<2)|0;k=0;while(1){if((k|0)>=(v|0))break;A=+g[a+4>>2];z=+g[w+(v+k<<2)>>2];y=+g[a>>2];B=+g[w+(k<<2)>>2];g[e>>2]=A*z-y*B;g[m>>2]=y*z+A*B;m=m+(d<<2)|0;e=e+(i<<2)|0;a=a+8|0;k=k+1|0}l=x;return}function gc(){return 6920}function hc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0;o=l;l=l+80|0;i=o+56|0;k=o+40|0;m=o+20|0;n=o;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;j=d>>1;d=1;while(1){h=c[a>>2]|0;if((d|0)>=(j|0))break;p=d<<1;g[b+(d<<2)>>2]=((+g[h+(p+-1<<2)>>2]+ +g[h+((p|1)<<2)>>2])*.5+ +g[h+(p<<2)>>2])*.5;d=d+1|0}g[b>>2]=(+g[h+4>>2]*.5+ +g[h>>2])*.5;if((e|0)==2){h=a+4|0;d=1;while(1){a=c[h>>2]|0;if((d|0)>=(j|0))break;e=d<<1;p=b+(d<<2)|0;g[p>>2]=+g[p>>2]+((+g[a+(e+-1<<2)>>2]+ +g[a+((e|1)<<2)>>2])*.5+ +g[a+(e<<2)>>2])*.5;d=d+1|0}g[b>>2]=+g[b>>2]+(+g[a+4>>2]*.5+ +g[a>>2])*.5}tc(b,i,j);g[i>>2]=+g[i>>2]*1.000100016593933;d=1;while(1){if((d|0)==5)break;p=i+(d<<2)|0;q=+g[p>>2];f=+(d|0)*.00800000037997961;g[p>>2]=q-q*f*f;d=d+1|0}sc(k,i);f=1.0;d=0;while(1){if((d|0)==4)break;q=f*.8999999761581421;p=k+(d<<2)|0;g[p>>2]=+g[p>>2]*q;f=q;d=d+1|0}f=+g[k>>2];g[n>>2]=f+.800000011920929;q=+g[k+4>>2];g[n+4>>2]=q+f*.800000011920929;f=+g[k+8>>2];g[n+8>>2]=f+q*.800000011920929;q=+g[k+12>>2];g[n+12>>2]=q+f*.800000011920929;g[n+16>>2]=q*.800000011920929;ic(b,n,b,j,m);l=o;return}function ic(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0;r=+g[b>>2];s=+g[b+4>>2];t=+g[b+8>>2];q=+g[b+12>>2];l=+g[b+16>>2];m=e+4|0;n=e+8|0;o=e+12|0;p=e+16|0;f=+g[p>>2];h=+g[o>>2];i=+g[n>>2];j=+g[m>>2];k=+g[e>>2];b=0;while(1){if((b|0)>=(d|0))break;y=+g[a+(b<<2)>>2];g[c+(b<<2)>>2]=y+r*k+s*j+t*i+q*h+l*f;x=k;w=j;v=i;u=h;k=y;b=b+1|0;j=x;i=w;h=v;f=u}g[e>>2]=k;g[m>>2]=j;g[n>>2]=i;g[o>>2]=h;g[p>>2]=f;return}function jc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;j=p;k=f+-3|0;m=j+4|0;n=j+8|0;o=j+12|0;h=((k|0)>0?k:0)+3&-4;i=0;while(1){if((i|0)>=(k|0))break;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;kc(a,b+(i<<2)|0,j,e);c[d+(i<<2)>>2]=c[j>>2];c[d+((i|1)<<2)>>2]=c[m>>2];c[d+((i|2)<<2)>>2]=c[n>>2];c[d+((i|3)<<2)>>2]=c[o>>2];i=i+4|0}while(1){if((h|0)>=(f|0))break;g[d+(h<<2)>>2]=+lc(a,b+(h<<2)|0,e);h=h+1|0}l=p;return}function kc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;l=d+-3|0;p=c+4|0;q=c+8|0;r=c+12|0;e=((l|0)>0?l:0)+3|0;m=e&-4;e=b+((e|3)<<2)|0;i=a;j=b+12|0;n=+g[b+4>>2];h=0.0;o=+g[b+8>>2];k=0;f=+g[b>>2];while(1){if((k|0)>=(l|0))break;w=+g[i>>2];h=+g[j>>2];z=+g[c>>2]+w*f;g[c>>2]=z;y=+g[p>>2]+w*n;g[p>>2]=y;x=+g[q>>2]+w*o;g[q>>2]=x;w=+g[r>>2]+w*h;g[r>>2]=w;v=+g[i+4>>2];s=+g[j+4>>2];z=z+v*n;g[c>>2]=z;y=y+v*o;g[p>>2]=y;x=x+v*h;g[q>>2]=x;v=w+v*s;g[r>>2]=v;w=+g[i+8>>2];u=+g[j+8>>2];z=z+w*o;g[c>>2]=z;y=y+w*h;g[p>>2]=y;x=x+w*s;g[q>>2]=x;w=v+w*u;g[r>>2]=w;v=+g[i+12>>2];t=+g[j+12>>2];g[c>>2]=z+v*h;g[p>>2]=y+v*s;g[q>>2]=x+v*u;g[r>>2]=w+v*t;i=i+16|0;j=j+16|0;n=u;o=t;k=k+4|0;f=s}b=a+(m<<2)|0;i=m|1;if((m|0)<(d|0)){z=+g[b>>2];h=+g[e>>2];g[c>>2]=+g[c>>2]+z*f;g[p>>2]=+g[p>>2]+z*n;g[q>>2]=+g[q>>2]+z*o;g[r>>2]=+g[r>>2]+z*h;b=b+4|0;e=e+4|0}if((i|0)<(d|0)){z=+g[b>>2];f=+g[e>>2];g[c>>2]=+g[c>>2]+z*n;g[p>>2]=+g[p>>2]+z*o;g[q>>2]=+g[q>>2]+z*h;g[r>>2]=+g[r>>2]+z*f;b=b+4|0;e=e+4|0}if((i+1|0)>=(d|0))return;y=+g[b>>2];z=+g[e>>2];g[c>>2]=+g[c>>2]+y*o;g[p>>2]=+g[p>>2]+y*h;g[q>>2]=+g[q>>2]+y*f;g[r>>2]=+g[r>>2]+y*z;return}function lc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=0.0;e=0;while(1){if((e|0)>=(c|0))break;d=d+ +g[a+(e<<2)>>2]*+g[b+(e<<2)>>2];e=e+1|0}return +d}function mc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+1968|0;p=r;k=p;c[k>>2]=0;c[k+4>>2]=0;k=d>>2;m=l;l=l+((1*(k<<2)|0)+15&-16)|0;n=d+979>>2;o=l;l=l+((1*(n<<2)|0)+15&-16)|0;q=r+8|0;h=0;while(1){if((h|0)>=(k|0))break;c[m+(h<<2)>>2]=c[a+(h<<1<<2)>>2];h=h+1|0}h=0;while(1){if((h|0)>=(n|0))break;c[o+(h<<2)>>2]=c[b+(h<<1<<2)>>2];h=h+1|0}jc(m,o,q,k,244);nc(q,o,k,244,p);n=c[p>>2]<<1;o=c[p+4>>2]<<1;k=d>>1;h=0;while(1){if((h|0)==489)break;m=q+(h<<2)|0;g[m>>2]=0.0;d=h-n|0;if(!((((d|0)>-1?d:0-d|0)|0)>2?(d=h-o|0,(((d|0)>-1?d:0-d|0)|0)>2):0)){j=+lc(a,b+(h<<2)|0,k);g[m>>2]=j<-1.0?-1.0:j}h=h+1|0}nc(q,b,k,489,p);h=c[p>>2]|0;if((h+-1|0)>>>0>=487){q=0;p=h<<1;q=p-q|0;c[e>>2]=q;l=r;return}i=+g[q+(h+-1<<2)>>2];j=+g[q+(h<<2)>>2];f=+g[q+(h+1<<2)>>2];if(f-i>(j-i)*.699999988079071){q=1;p=h<<1;q=p-q|0;c[e>>2]=q;l=r;return}if(i-f>(j-f)*.699999988079071){q=-1;p=h<<1;q=p-q|0;c[e>>2]=q;l=r;return}q=0;p=h<<1;q=p-q|0;c[e>>2]=q;l=r;return}function nc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0,t=0.0;c[f>>2]=0;s=f+4|0;c[s>>2]=1;i=1.0;h=0;while(1){if((h|0)>=(d|0)){q=0;p=0.0;n=-1.0;k=0.0;m=-1.0;h=0;l=-1.0;o=0.0;break}p=+g[b+(h<<2)>>2];i=i+p*p;h=h+1|0}while(1){if((q|0)>=(e|0))break;j=+g[a+(q<<2)>>2];do if(j>0.0?(r=j*9.999999960041972e-13,r=r*r,r*p>n*i):0)if(r*k>m*i){c[s>>2]=h;c[f>>2]=q;h=q;n=l;l=r;m=r;j=o;o=i;k=i;break}else{c[s>>2]=q;n=r;j=i;break}else j=p;while(0);t=+g[b+(q+d<<2)>>2];p=+g[b+(q<<2)>>2];p=i+(t*t-p*p);q=q+1|0;i=p<1.0?1.0:p;p=j}return}function oc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=l;l=l+2080|0;B=F+2072|0;z=F+2068|0;C=F+2064|0;E=F+2052|0;u=c[d>>2]|0;x=(e|0)/2|0;D=(b|0)/2|0;A=a+2048|0;u=(u|0)>1023?511:(u|0)/2|0;c[d>>2]=u;w=F;pc(A,A,A+(0-u<<2)|0,D,z,B);e=c[z>>2]|0;c[w>>2]=e;v=(c[j>>2]=e,+g[j>>2]);h=v;e=1;while(1){if((e|0)==513)break;t=+g[A+(0-e<<2)>>2];y=+g[A+(D-e<<2)>>2];y=h+t*t-y*y;g[w+(e<<2)>>2]=y<0.0?0.0:y;h=y;e=e+1|0}p=+g[w+(u<<2)>>2];h=+g[B>>2];y=+qc(h,v,p);q=u<<1;r=y*.699999988079071;s=y*.8500000238418579;t=f*.5;a=2;z=u;while(1){if((a|0)>=16)break;e=a<<1;b=rc(q+a|0,e)|0;if((b|0)<7)break;if((a|0)==2){e=b+u|0;e=(e|0)>512?u:e}else e=rc((R(c[18772+(a<<2)>>2]<<1,u)|0)+a|0,e)|0;pc(A,A+(0-b<<2)|0,A+(0-e<<2)|0,D,B,C);o=(+g[B>>2]+ +g[C>>2])*.5;g[B>>2]=o;n=(+g[w+(b<<2)>>2]+ +g[w+(e<<2)>>2])*.5;k=+qc(o,v,n);e=b-x|0;e=(e|0)>-1?e:0-e|0;if((e|0)>=2)if((e|0)==2){e=(R(a*5|0,a)|0)<(u|0);m=e?t:0.0}else m=0.0;else m=f;i=r-m;i=i<.30000001192092896?.30000001192092896:i;if((b|0)<21){i=s-m;if(i<.4000000059604645)i=.4000000059604645}if(k>i){i=n;h=o;e=b}else{k=y;i=p;e=z}y=k;p=i;a=a+1|0;z=e}h=h<0.0?0.0:h;if(!(p<=h))m=h/(p+1.0);else m=1.0;e=0;while(1){if((e|0)==3)break;g[E+(e<<2)>>2]=+lc(A,A+(1-(z+e)<<2)|0,D);e=e+1|0}i=+g[E+8>>2];k=+g[E>>2];h=+g[E+4>>2];if(i-k>(h-k)*.699999988079071){E=1;D=m>y;f=D?y:m;D=z<<1;E=D+E|0;D=(E|0)>15;E=D?E:15;c[d>>2]=E;l=F;return +f}if(k-i>(h-i)*.699999988079071){E=-1;D=m>y;f=D?y:m;D=z<<1;E=D+E|0;D=(E|0)>15;E=D?E:15;c[d>>2]=E;l=F;return +f}E=0;D=m>y;f=D?y:m;D=z<<1;E=D+E|0;D=(E|0)>15;E=D?E:15;c[d>>2]=E;l=F;return +f}function pc(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0,k=0.0;h=0.0;i=0.0;j=0;while(1){if((j|0)>=(d|0))break;k=+g[a+(j<<2)>>2];h=h+k*+g[c+(j<<2)>>2];i=i+k*+g[b+(j<<2)>>2];j=j+1|0}g[e>>2]=i;g[f>>2]=h;return}function qc(a,b,c){a=+a;b=+b;c=+c;return +(a/+F(+(b*c+1.0)))}function rc(a,b){a=a|0;b=b|0;return (a>>>0)/(b>>>0)|0|0}function sc(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0;e=+g[b>>2];c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;if(+g[b>>2]!=0.0)k=0;else return;while(1){if((k|0)<4){f=0.0;d=0}else{d=9;break}while(1){if((k|0)==(d|0))break;f=f+ +g[a+(d<<2)>>2]*+g[b+(k-d<<2)>>2];d=d+1|0}j=k;k=k+1|0;f=(f+ +g[b+(k<<2)>>2])/e;h=-f;g[a+(j<<2)>>2]=h;i=k>>1;j=j+-1|0;d=0;while(1){if((d|0)>=(i|0))break;o=a+(d<<2)|0;m=+g[o>>2];l=a+(j-d<<2)|0;n=+g[l>>2];g[o>>2]=m+n*h;g[l>>2]=n+m*h;d=d+1|0}e=e-f*f*e;if(e<+g[b>>2]*1.0000000474974513e-03){d=9;break}}if((d|0)==9)return}function tc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0,h=0;h=c+-4|0;jc(a,a,b,h,5);d=0;while(1){if((d|0)==5)break;e=0.0;f=d+h|0;while(1){if((f|0)>=(c|0))break;e=e+ +g[a+(f<<2)>>2]*+g[a+(f-d<<2)>>2];f=f+1|0}f=b+(d<<2)|0;g[f>>2]=+g[f>>2]+e;d=d+1|0}return}function uc(a,b,d,e,f,h,i,j,k,m,n,o,p,q,r,s,t){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;var u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;Q=l;l=l+96|0;M=Q+72|0;N=Q+48|0;O=Q+24|0;P=Q;if(!p)if((r|0)==0?(u=d-b|0,+g[q>>2]>+(R(m<<1,u)|0)):0)w=(R(u,m)|0)<(o|0);else w=0;else w=1;K=~~(+(i>>>0)*+g[q>>2]*+(s|0)/+(m<<9|0));L=a+8|0;s=c[L>>2]|0;J=+vc(f,h,b,e,s,m);I=k+20|0;u=c[I>>2]|0;H=k+28|0;p=c[H>>2]|0;G=wc(u,p)|0;e=(G+3|0)>>>0>i>>>0;F=w&(e^1)&1;if(!((d-b|0)>10?(v=+(o|0)*.125,!(v>16.0)):0))v=16.0;v=(t|0)==0?v:3.0;c[M>>2]=c[k>>2];c[M+4>>2]=c[k+4>>2];c[M+8>>2]=c[k+8>>2];c[M+12>>2]=c[k+12>>2];c[M+16>>2]=c[k+16>>2];c[M+20>>2]=c[k+20>>2];E=k+24|0;B=c[E>>2]|0;c[N>>2]=c[H>>2];c[N+4>>2]=c[H+4>>2];c[N+8>>2]=c[H+8>>2];c[N+12>>2]=c[H+12>>2];c[N+16>>2]=c[H+16>>2];A=R(s,m)|0;C=l;l=l+((1*(A<<2)|0)+15&-16)|0;D=l;l=l+((1*(A<<2)|0)+15&-16)|0;Sh(C|0,h|0,A<<2|0)|0;A=e|(r|0)==0;if(A)if(e|w^1){z=0;y=B}else{xc(a,b,d,f,C,i,G,29803+(n*84|0)+42|0,D,k,m,n,1,v,t)|0;x=17}else{p=xc(a,b,d,f,C,i,G,29803+(n*84|0)+42|0,D,k,m,n,1,v,t)|0;if(e|w^1){z=p;u=c[I>>2]|0;p=c[H>>2]|0;y=c[E>>2]|0}else x=17}if((x|0)==17){Sh(h|0,C|0,(R(c[L>>2]|0,m)|0)<<2|0)|0;Sh(j|0,D|0,(R(c[L>>2]|0,m)|0)<<2|0)|0;g[q>>2]=J;l=Q;return}e=zb(u,p)|0;u=c[k>>2]|0;s=k+4|0;c[O>>2]=c[s>>2];c[O+4>>2]=c[s+4>>2];c[O+8>>2]=c[s+8>>2];c[O+12>>2]=c[s+12>>2];c[O+16>>2]=c[s+16>>2];c[P>>2]=c[H>>2];c[P+4>>2]=c[H+4>>2];c[P+8>>2]=c[H+8>>2];c[P+12>>2]=c[H+12>>2];c[P+16>>2]=c[H+16>>2];r=yc(B)|0;o=u+r|0;r=(yc(y)|0)-r|0;w=fa()|0;x=l;l=l+((1*((r|0)==0?1:r)|0)+15&-16)|0;Sh(x|0,o|0,r|0)|0;c[k>>2]=c[M>>2];c[k+4>>2]=c[M+4>>2];c[k+8>>2]=c[M+8>>2];c[k+12>>2]=c[M+12>>2];c[k+16>>2]=c[M+16>>2];c[k+20>>2]=c[M+20>>2];c[E>>2]=B;c[H>>2]=c[N>>2];c[H+4>>2]=c[N+4>>2];c[H+8>>2]=c[N+8>>2];c[H+12>>2]=c[N+12>>2];c[H+16>>2]=c[N+16>>2];p=xc(a,b,d,f,h,i,G,29803+(n*84|0)+(F*42|0)|0,j,k,m,n,0,v,t)|0;do if(!A){if((z|0)>=(p|0)){if((z|0)!=(p|0))break;if(((zb(c[I>>2]|0,c[H>>2]|0)|0)+K|0)<=(e|0))break}c[k>>2]=u;c[s>>2]=c[O>>2];c[s+4>>2]=c[O+4>>2];c[s+8>>2]=c[O+8>>2];c[s+12>>2]=c[O+12>>2];c[s+16>>2]=c[O+16>>2];c[E>>2]=y;c[H>>2]=c[P>>2];c[H+4>>2]=c[P+4>>2];c[H+8>>2]=c[P+8>>2];c[H+12>>2]=c[P+12>>2];c[H+16>>2]=c[P+16>>2];Sh(o|0,x|0,r|0)|0;Sh(h|0,C|0,(R(c[L>>2]|0,m)|0)<<2|0)|0;Sh(j|0,D|0,(R(c[L>>2]|0,m)|0)<<2|0)|0;ha(w|0);g[q>>2]=J;l=Q;return}while(0);ha(w|0);v=+g[18936+(n<<2)>>2];J=v*v*+g[q>>2]+J;g[q>>2]=J;l=Q;return}function vc(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,l=0.0,m=0;h=0.0;j=0;do{k=R(j,e)|0;i=c;while(1){if((i|0)>=(d|0))break;m=i+k|0;l=+g[a+(m<<2)>>2]-+g[b+(m<<2)>>2];i=i+1|0;h=h+l*l}j=j+1|0}while((j|0)<(f|0));return +(h>200.0?200.0:h)}function wc(a,b){a=a|0;b=b|0;return (U(b|0)|0)+-32+a|0}function xc(a,b,e,f,h,i,j,k,m,n,o,p,q,r,s){a=a|0;b=b|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=+r;s=s|0;var t=0.0,u=0.0,v=0,w=0.0,x=0,y=0.0,z=0.0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0,O=0,P=0;P=l;l=l+16|0;N=P;O=P+8|0;K=N;c[K>>2]=0;c[K+4>>2]=0;if((j+3|0)<=(i|0))Qb(n,q,3);if(!q){M=+g[18952+(p<<2)>>2];L=+g[18936+(p<<2)>>2]}else{M=.149993896484375;L=0.0}J=a+8|0;H=n+20|0;I=n+28|0;K=o*3|0;C=(s|0)==0;q=0;B=b;while(1){if((B|0)>=(e|0))break;E=R(K,e-B|0)|0;F=(B|0)!=(b|0);G=(B|0)<20;A=0;do{x=B+(R(A,c[J>>2]|0)|0)|0;t=+g[f+(x<<2)>>2];u=+g[h+(x<<2)>>2];w=L*(u<-9.0?-9.0:u);x=N+(A<<2)|0;y=+g[x>>2];z=t-w-y;j=~~+D(+(z+.5));u=(u<-28.0?-28.0:u)-r;if((j|0)<0&t>2]=v;a=wc(c[H>>2]|0,c[I>>2]|0)|0;s=i-a|0;p=s-E|0;if((p|0)<24&F){j=(v|0)<1?v:1;c[O>>2]=j;if((p|0)<16){j=(j|0)>-1?j:-1;c[O>>2]=j}}else j=v;if(!(C|(B|0)<2)){j=(j|0)<0?j:0;c[O>>2]=j}do if((s|0)<=14){if((s|0)>1){j=(j|0)<-1?-1:(j|0)<1?j:1;c[O>>2]=j;Rb(n,j<<1^j>>31,30139,2);break}if((a|0)<(i|0)){j=(j|0)<0?j:0;c[O>>2]=j;Qb(n,0-j|0,1);break}else{c[O>>2]=-1;j=-1;break}}else{j=(G?B:20)<<1;cc(n,O,(d[k+j>>0]|0)<<7,(d[k+(j|1)>>0]|0)<<6);j=c[O>>2]|0}while(0);u=+(j|0);g[m+(B+(R(A,c[J>>2]|0)|0)<<2)>>2]=z-u;v=v-j|0;q=q+((v|0)>-1?v:0-v|0)|0;g[h+(B+(R(A,c[J>>2]|0)|0)<<2)>>2]=w+y+u;g[x>>2]=y+u-M*u;A=A+1|0}while((A|0)<(o|0));B=B+1|0}l=P;return (C?q:0)|0}function yc(a){a=a|0;return a|0}function zc(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0.0,m=0,n=0,o=0,p=0,q=0.0;o=a+8|0;while(1){if((b|0)>=(d|0))break;n=h+(b<<2)|0;a=c[n>>2]|0;if((a|0)>=1){k=65536<>16;l=+(k|0);m=k+-1|0;a=0;do{p=~~+D(+((+g[f+(b+(R(a,c[o>>2]|0)|0)<<2)>>2]+.5)*l));p=(p|0)<(k|0)?p:m;p=(p|0)>0?p:0;Tb(i,p,c[n>>2]|0);q=(+(p|0)+.5)*+(1<<14-(c[n>>2]|0)|0)*.00006103515625+-.5;p=e+(b+(R(a,c[o>>2]|0)|0)<<2)|0;g[p>>2]=+g[p>>2]+q;p=f+(b+(R(a,c[o>>2]|0)|0)<<2)|0;g[p>>2]=+g[p>>2]-q;a=a+1|0}while((a|0)<(j|0))}b=b+1|0}return}function Ac(a,b,d,e,f,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0.0;p=a+8|0;o=0;a=j;while(1){if((o|0)==2)break;else n=b;while(1){if(!((n|0)<(d|0)&(a|0)>=(l|0)))break;m=h+(n<<2)|0;if((c[m>>2]|0)<=7?(c[i+(n<<2)>>2]|0)==(o|0):0){j=0;do{q=!(+g[f+(n+(R(j,c[p>>2]|0)|0)<<2)>>2]<0.0);Tb(k,q&1,1);r=(+(q&1)+-.5)*+(1<<14-(c[m>>2]|0)+-1|0)*.00006103515625;q=e+(n+(R(j,c[p>>2]|0)|0)<<2)|0;g[q>>2]=+g[q>>2]+r;q=f+(n+(R(j,c[p>>2]|0)|0)<<2)|0;g[q>>2]=+g[q>>2]-r;a=a+-1|0;j=j+1|0}while((j|0)<(l|0))}n=n+1|0}o=o+1|0}return}function Bc(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0.0;j=a+8|0;i=0;do{a=0;while(1){if((a|0)>=(b|0)){a=b;break}k=a+(R(i,c[j>>2]|0)|0)|0;l=+P(+(+g[e+(k<<2)>>2]))*1.4426950408889634;g[f+(k<<2)>>2]=l-+g[18836+(a<<2)>>2];a=a+1|0}while(1){if((a|0)>=(d|0))break;g[f+((R(i,c[j>>2]|0)|0)+a<<2)>>2]=-14.0;a=a+1|0}i=i+1|0}while((i|0)<(h|0));return}function Cc(a,e,f,g,h,i,j,k,m,n,o,p,q,r,s,t,u,v){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;var w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;Q=l;m=(m|0)>0?m:0;F=c[a+8>>2]|0;P=(m|0)>7?8:0;m=m-P|0;if((r|0)==2?(w=d[30142+(f-e)>>0]|0,(m|0)>=(w|0)):0){m=m-w|0;J=(m|0)>7?8:0;m=m-J|0}else{w=0;J=0}K=l;l=l+((1*(F<<2)|0)+15&-16)|0;L=l;l=l+((1*(F<<2)|0)+15&-16)|0;M=l;l=l+((1*(F<<2)|0)+15&-16)|0;N=l;l=l+((1*(F<<2)|0)+15&-16)|0;D=r<<3;O=a+32|0;x=i+-5-s|0;y=s+3|0;i=e;while(1){if((i|0)>=(f|0))break;H=c[O>>2]|0;I=i+1|0;H=(b[H+(I<<1)>>1]|0)-(b[H+(i<<1)>>1]|0)|0;G=H*3<>4;c[M+(i<<2)>>2]=(D|0)>(G|0)?D:G;G=(R(R(R(H,r)|0,x)|0,f-i+-1|0)|0)<>6;c[N+(i<<2)>>2]=G-((H<>2]|0;I=a+52|0;z=H+-1|0;G=1;do{B=G+z>>1;C=R(B,F)|0;x=0;A=0;i=f;a:while(1){y=x;b:while(1){do{x=i;i=i+-1|0;if((x|0)<=(e|0))break a;E=c[O>>2]|0;x=R((b[E+(x<<1)>>1]|0)-(b[E+(i<<1)>>1]|0)|0,r)|0;x=(R(x,d[(c[I>>2]|0)+(C+i)>>0]|0)|0)<>2;if((x|0)>0){x=x+(c[N+(i<<2)>>2]|0)|0;x=(x|0)>0?x:0}x=x+(c[g+(i<<2)>>2]|0)|0;if((x|0)>=(c[M+(i<<2)>>2]|0)|A)break b}while((x|0)<(D|0));y=y+D|0}A=c[h+(i<<2)>>2]|0;x=y+((x|0)<(A|0)?x:A)|0;A=1}E=(y|0)>(m|0);G=E?G:B+1|0;z=E?B+-1|0:z}while((G|0)<=(z|0));E=R(G+-1|0,F)|0;B=R(G,F)|0;C=(G|0)>1;z=e;A=e;while(1){if((A|0)>=(f|0))break;i=c[O>>2]|0;D=A+1|0;i=R((b[i+(D<<1)>>1]|0)-(b[i+(A<<1)>>1]|0)|0,r)|0;y=c[I>>2]|0;x=(R(i,d[y+(E+A)>>0]|0)|0)<>2;if((G|0)<(H|0))i=(R(i,d[y+(B+A)>>0]|0)|0)<>2;else i=c[h+(A<<2)>>2]|0;if((x|0)>0){x=x+(c[N+(A<<2)>>2]|0)|0;x=(x|0)>0?x:0}if((i|0)>0){i=i+(c[N+(A<<2)>>2]|0)|0;i=(i|0)>0?i:0}F=c[g+(A<<2)>>2]|0;y=x+(C?F:0)|0;x=i+F|0;c[K+(A<<2)>>2]=y;c[L+(A<<2)>>2]=(x|0)<(y|0)?0:x-y|0;z=(F|0)>0?A:z;A=D}n=Dc(a,e,f,z,K,L,M,h,m,n,P,j,w,k,J,o,p,q,r,s,t,1,u,v)|0;l=Q;return n|0}function Dc(a,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;y=y|0;z=z|0;A=A|0;var B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;O=v<<3;K=(v|0)>1;P=K&1;E=0;F=64;I=0;while(1){if((E|0)==6)break;H=I+F>>1;B=f;C=0;G=0;a:while(1){b:while(1){do{N=B;B=B+-1|0;if((N|0)<=(e|0))break a;D=(c[h+(B<<2)>>2]|0)+((R(H,c[i+(B<<2)>>2]|0)|0)>>6)|0;if((D|0)>=(c[j+(B<<2)>>2]|0)|G)break b}while((D|0)<(O|0));C=C+O|0}G=c[k+(B<<2)>>2]|0;C=C+((D|0)<(G|0)?D:G)|0;G=1}N=(C|0)>(l|0);E=E+1|0;F=N?H:F;I=N?I:H}N=w<<3;B=f;C=0;E=0;while(1){D=B+-1|0;if((B|0)<=(e|0))break;B=(c[h+(D<<2)>>2]|0)+((R(I,c[i+(D<<2)>>2]|0)|0)>>6)|0;H=(B|0)<(c[j+(D<<2)>>2]|0);L=(C|0)==0;B=H&L?((B|0)<(O|0)?0:O):B;M=c[k+(D<<2)>>2]|0;M=(B|0)<(M|0)?B:M;c[s+(D<<2)>>2]=M;B=D;C=(H&L^1)&1;E=E+M|0}M=a+32|0;h=O+8|0;i=(y|0)==0;I=e+2|0;L=f;H=p;D=E;while(1){F=L+-1|0;if((F|0)<=(g|0)){J=17;break}y=l-D|0;C=c[M>>2]|0;G=b[C+(L<<1)>>1]|0;E=b[C+(e<<1)>>1]|0;B=G-E|0;p=Ec(y,B)|0;B=y-(R(B,p)|0)|0;C=b[C+(F<<1)>>1]|0;E=B+(E-C)|0;C=G-C|0;G=s+(F<<2)|0;B=c[G>>2]|0;E=B+(R(p,C)|0)+((E|0)>0?E:0)|0;p=c[j+(F<<2)>>2]|0;if((E|0)>=(((p|0)>(h|0)?p:h)|0)){if(i){if(Fb(x,1)|0)break}else{if((L|0)<=(I|0)){J=22;break}if(!((F|0)>(A|0)?1:(E|0)<=((R((L|0)>17?((L|0)<=(z|0)?7:9):0,C)|0)<>4|0))){J=22;break}Qb(x,0,1)}E=E+-8|0;D=D+8|0;B=c[G>>2]|0}if((H|0)>0)C=d[30142+(F-e)>>0]|0;else C=H;L=(E|0)<(O|0);D=D-(B+H)+C+(L?0:O)|0;c[G>>2]=L?0:O;L=F;H=C}if((J|0)==17)l=l+n|0;else if((J|0)==22)Qb(x,1,1);do if((H|0)>0)if(i){B=(Gb(x,L+1-e|0)|0)+e|0;c[o>>2]=B;break}else{B=c[o>>2]|0;B=(B|0)<(L|0)?B:L;c[o>>2]=B;Sb(x,B-e|0,L+1-e|0);B=c[o>>2]|0;break}else{c[o>>2]=0;B=0}while(0);do if((B|0)>(e|0))if((r|0)>0)if(i){c[q>>2]=Fb(x,1)|0;break}else{Qb(x,c[q>>2]|0,1);break}else J=40;else{l=l+r|0;J=40}while(0);if((J|0)==40)c[q>>2]=0;B=l-D|0;D=c[M>>2]|0;D=(b[D+(L<<1)>>1]|0)-(b[D+(e<<1)>>1]|0)|0;C=Ec(B,D)|0;D=R(D,C)|0;l=e;while(1){if((l|0)>=(L|0))break;r=c[M>>2]|0;J=l+1|0;r=R(C,(b[r+(J<<1)>>1]|0)-(b[r+(l<<1)>>1]|0)|0)|0;x=s+(l<<2)|0;c[x>>2]=(c[x>>2]|0)+r;l=J}l=B-D|0;B=e;while(1){if((B|0)>=(L|0))break;x=c[M>>2]|0;J=B+1|0;x=(b[x+(J<<1)>>1]|0)-(b[x+(B<<1)>>1]|0)|0;x=(l|0)<(x|0)?l:x;r=s+(B<<2)|0;c[r>>2]=(c[r>>2]|0)+x;l=l-x|0;B=J}p=(v|0)==2;y=a+56|0;i=K?4:3;h=0;while(1){if((e|0)>=(L|0))break;E=c[M>>2]|0;I=e+1|0;E=(b[E+(I<<1)>>1]|0)-(b[E+(e<<1)>>1]|0)<>2]|0)+h|0;if((E|0)>1){l=c[k+(e<<2)>>2]|0;l=(B|0)>(l|0)?B-l|0:0;F=B-l|0;c[H>>2]=F;B=R(E,v)|0;if(p&(E|0)!=2?(c[q>>2]|0)==0:0)C=(e|0)<(c[o>>2]|0);else C=0;G=B+(C&1)|0;D=R(G,(b[(c[y>>2]|0)+(e<<1)>>1]|0)+N|0)|0;B=(D>>1)+(R(G,-21)|0)|0;if((E|0)==2)B=B+(G<<3>>2)|0;C=F+B|0;if((C|0)>=(G<<4|0))if((C|0)<(G*24|0))E=B+(D>>3)|0;else E=B;else E=B+(D>>2)|0;B=F+E+(G<<2)|0;B=(Ec((B|0)>0?B:0,G)|0)>>>3;D=t+(e<<2)|0;c[D>>2]=B;K=R(B,v)|0;C=c[H>>2]|0;if((K|0)>(C>>3|0)){B=C>>P>>3;c[D>>2]=B}K=(B|0)<8?B:8;c[D>>2]=K;K=R(K,G<<3)|0;c[u+(e<<2)>>2]=(K|0)>=((c[H>>2]|0)+E|0)&1;K=(R(c[D>>2]|0,v)|0)<<3;c[H>>2]=(c[H>>2]|0)-K}else{l=(B|0)<(O|0)?0:B-O|0;c[H>>2]=B-l;c[t+(e<<2)>>2]=0;c[u+(e<<2)>>2]=1}if(!l){h=l;e=I;continue}x=l>>>i;a=t+(e<<2)|0;J=c[a>>2]|0;K=8-J|0;K=(x|0)<(K|0)?x:K;c[a>>2]=J+K;K=(R(K,v)|0)<<3;c[u+(e<<2)>>2]=(K|0)>=(l-h|0)&1;h=l-K|0;e=I}c[m>>2]=h;while(1){if((e|0)>=(f|0))break;k=s+(e<<2)|0;m=t+(e<<2)|0;c[m>>2]=c[k>>2]>>P>>3;c[k>>2]=0;c[u+(e<<2)>>2]=(c[m>>2]|0)<1&1;e=e+1|0}return L|0}function Ec(a,b){a=a|0;b=b|0;return (a>>>0)/(b>>>0)|0|0}function Fc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0.0,j=0.0,k=0,l=0.0,m=0.0;if((f<<1|0)>=(b|0)|(g|0)==0)return;m=+(b|0)/+((R(c[18968+(g+-1<<2)>>2]|0,f)|0)+b|0);m=m*m*.5;l=+H(+(m*1.5707963705062866));m=+H(+((1.0-m)*1.5707963705062866));a:do if((e<<3|0)>(b|0))f=0;else{g=e>>2;f=1;while(1){if(((R((R(f,f)|0)+f|0,e)|0)+g|0)>=(b|0))break a;f=f+1|0}}while(0);k=Gc(b,e)|0;d=(d|0)<0;h=(f|0)==0;i=-m;j=-l;g=0;while(1){if((g|0)>=(e|0))break;b=a+((R(g,k)|0)<<2)|0;if(!d){Hc(b,k,1,l,i);if(!h)Hc(b,k,f,m,j)}else{if(!h)Hc(b,k,f,m,l);Hc(b,k,1,l,m)}g=g+1|0}return}function Gc(a,b){a=a|0;b=b|0;return (a>>>0)/(b>>>0)|0|0}function Hc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0;j=-e;i=b-c|0;f=a;h=0;while(1){if((h|0)>=(i|0))break;l=+g[f>>2];m=f+(c<<2)|0;k=+g[m>>2];g[m>>2]=k*d+l*e;g[f>>2]=l*d+k*j;f=f+4|0;h=h+1|0}h=b-(c<<1)|0;f=a+(h+-1<<2)|0;while(1){if((h|0)<=0)break;k=+g[f>>2];m=f+(c<<2)|0;l=+g[m>>2];g[m>>2]=l*d+k*e;g[f>>2]=k*d+l*j;f=f+-4|0;h=h+-1|0}return}function Ic(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0;t=l;r=l;l=l+((1*(e<<2)|0)+15&-16)|0;s=l;l=l+((1*(e<<2)|0)+15&-16)|0;f=0;do{q=a+(f<<2)|0;o=+g[q>>2];c[s+(f<<2)>>2]=o<0.0&1;g[q>>2]=+E(+o);c[b+(f<<2)>>2]=0;g[r+(f<<2)>>2]=0.0;f=f+1|0}while((f|0)<(e|0));if((e>>1|0)<(d|0)){h=0.0;f=0;do{h=h+ +g[a+(f<<2)>>2];f=f+1|0}while((f|0)<(e|0));if(!(h>1.0000000036274937e-15&h<64.0)){g[a>>2]=1.0;f=1;do{g[a+(f<<2)>>2]=0.0;f=f+1|0}while((f|0)<(e|0));h=1.0}j=(+(d|0)+.800000011920929)*(1.0/h);i=0.0;h=0.0;f=d;d=0;do{p=a+(d<<2)|0;q=~~+D(+(j*+g[p>>2]));c[b+(d<<2)>>2]=q;o=+(q|0);h=h+o*o;i=i+ +g[p>>2]*o;g[r+(d<<2)>>2]=o*2.0;f=f-q|0;d=d+1|0}while((d|0)<(e|0))}else{i=0.0;h=0.0;f=d}if((f|0)>(e+3|0)){o=+(f|0);h=h+o*o+o*+g[r>>2];c[b>>2]=(c[b>>2]|0)+f;f=0}q=0;while(1){if((q|0)>=(f|0)){f=0;break}m=h+1.0;j=i+ +g[a>>2];h=m+ +g[r>>2];j=j*j;d=0;k=1;while(1){o=i+ +g[a+(k<<2)>>2];n=m+ +g[r+(k<<2)>>2];o=o*o;p=h*o>n*j;d=p?k:d;k=k+1|0;if((k|0)>=(e|0))break;else{h=p?n:h;j=p?o:j}}o=+g[a+(d<<2)>>2];p=r+(d<<2)|0;h=+g[p>>2];g[p>>2]=h+2.0;p=b+(d<<2)|0;c[p>>2]=(c[p>>2]|0)+1;q=q+1|0;i=i+o;h=m+h}do{r=b+(f<<2)|0;a=c[s+(f<<2)>>2]|0;c[r>>2]=(c[r>>2]^0-a)+a;f=f+1|0}while((f|0)<(e|0));l=t;return +h}function Jc(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;h=h|0;var i=0.0,j=0,k=0;k=l;j=l;l=l+((1*(b+3<<2)|0)+15&-16)|0;Fc(a,b,1,e,c,d);i=+Ic(a,j,c,b);vb(j,b,c,f);if(!h){j=Lc(j,b,e)|0;l=k;return j|0}Kc(j,a,b,i,g);Fc(a,b,-1,e,c,d);j=Lc(j,b,e)|0;l=k;return j|0}function Kc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=+f;var h=0;e=1.0/+F(+e)*f;h=0;do{g[b+(h<<2)>>2]=e*+(c[a+(h<<2)>>2]|0);h=h+1|0}while((h|0)<(d|0));return}function Lc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if((d|0)<2){d=1;return d|0}i=Gc(b,d)|0;h=0;b=0;do{g=R(h,i)|0;e=0;f=0;do{e=e|c[a+(g+f<<2)>>2];f=f+1|0}while((f|0)<(i|0));b=b|((e|0)!=0&1)<=(b|0))break;g[a>>2]=c*+g[a>>2];a=a+4|0;d=d+1|0}return}function Oc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=0.0;e=0;while(1){if((e|0)>=(c|0))break;d=d+ +g[a+(e<<2)>>2]*+g[b+(e<<2)>>2];e=e+1|0}return +d}function Pc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;a:do if(!c){e=+Oc(a,a,d)+1.0000000036274937e-15;f=+Oc(b,b,d)+1.0000000036274937e-15}else{f=1.0000000036274937e-15;e=1.0000000036274937e-15;c=0;while(1){if((c|0)>=(d|0))break a;j=+g[a+(c<<2)>>2];i=+g[b+(c<<2)>>2];h=j+i;i=j-i;f=f+i*i;e=e+h*h;c=c+1|0}}while(0);return ~~+D(+(+Qc(+F(+f),+F(+e))*10430.3818359375+.5))|0}function Qc(a,b){a=+a;b=+b;var c=0.0,d=0.0;c=b*b;d=a*a;if(c+d<1.000000045813705e-18){d=0.0;return +d}if(c>0]=0;j=33599+(((f<<1)+g<<16>>16)*7|0)|0;i=e+8>>4;e=0;while(1){if((e|0)>=(i|0))break;f=c[h+(e<<2)>>2]|0;a:do if((f|0)>0){a[k>>0]=a[j+((f&30)>>>0<6?f&31:6)>>0]|0;f=0;while(1){if((f|0)==16)break a;g=a[d+f>>0]|0;if(g<<24>>24)Rb(b,(g<<24>>24>>15)+1|0,k,8);f=f+1|0}}while(0);d=d+16|0;e=e+1|0}l=m;return}function Sc(a){a=a|0;c[a>>2]=20208;return 0}function Tc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;Qh(a|0,0,20208)|0;e=0;f=0;while(1){if((f|0)==2)break;e=e+(be(a+(f*10060|0)|0,b)|0)|0;f=f+1|0}c[a+20184>>2]=1;c[a+20188>>2]=1;return e+(Uc(a,d)|0)|0}function Uc(a,b){a=a|0;b=b|0;var d=0;c[b>>2]=c[a+20184>>2];c[b+4>>2]=c[a+20188>>2];c[b+8>>2]=c[a+4552>>2];c[b+12>>2]=c[a+4560>>2];c[b+16>>2]=c[a+4564>>2];c[b+20>>2]=c[a+4568>>2];c[b+24>>2]=c[a+4608>>2];c[b+28>>2]=c[a+4604>>2];c[b+32>>2]=c[a+4612>>2];c[b+36>>2]=c[a+4620>>2];c[b+40>>2]=c[a+6084>>2];c[b+48>>2]=c[a+6072>>2];c[b+52>>2]=c[a+4672>>2];d=a+4572|0;c[b+72>>2]=(c[d>>2]<<16>>16)*1e3;c[b+76>>2]=c[a+4532>>2];if((c[d>>2]|0)!=16){a=0;a=a&1;d=b+80|0;c[d>>2]=a;return 0}a=(c[a+28>>2]|0)==0;a=a&1;d=b+80|0;c[d>>2]=a;return 0}function Vc(d,f,g,h,i,j,k){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,ga=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0;Ka=l;l=l+16|0;Fa=Ka;Ga=Ka+8|0;if(c[f+68>>2]|0){c[d+4660>>2]=1;c[d+14720>>2]=1}c[d+15804>>2]=0;Ca=d+5744|0;c[Ca>>2]=0;m=$d(f)|0;if(m|0){f=m;l=Ka;return f|0}c[f+88>>2]=0;Ja=f+4|0;o=d+20188|0;if((c[Ja>>2]|0)>(c[o>>2]|0)){m=d+10060|0;n=be(m,c[d+5088>>2]|0)|0;c[d+20120>>2]=0;c[d+20128>>2]=0;c[d+20132>>2]=0;c[d+20136>>2]=1;c[d+20140>>2]=0;c[d+20144>>2]=1;b[d+20150>>1]=0;b[d+20148>>1]=16384;if((c[d+20184>>2]|0)==2){Sh(d+15832|0,d+5772|0,300)|0;Aa=d;Ba=c[Aa+4>>2]|0;Ha=m;c[Ha>>2]=c[Aa>>2];c[Ha+4>>2]=Ba}}else n=0;Ha=f+24|0;if((c[Ha>>2]|0)==(c[d+4608>>2]|0))s=(c[o>>2]|0)!=(c[Ja>>2]|0);else s=1;c[d+20184>>2]=c[f>>2];c[o>>2]=c[Ja>>2];m=h*100|0;o=c[f+8>>2]|0;r=(m|0)/(o|0)|0;Aa=(r|0)>1?r>>1:1;Ba=(k|0)==0;a:do if(Ba){if((R(r,o)|0)!=(m|0)|(h|0)<0){f=-101;l=Ka;return f|0}if((h*1e3|0)>(R(c[Ha>>2]|0,o)|0)){f=-101;l=Ka;return f|0}else{p=0;q=0;za=d;break}}else{if((r|0)!=1){f=-101;l=Ka;return f|0}m=0;while(1){k=c[Ja>>2]|0;if((m|0)>=(k|0))break;n=be(d+(m*10060|0)|0,c[d+(m*10060|0)+5088>>2]|0)|0;m=m+1|0}p=c[Ha>>2]|0;c[Ha>>2]=10;o=f+36|0;q=c[o>>2]|0;c[o>>2]=0;o=0;m=k;while(1){if((o|0)>=(m|0)){za=d;break a}c[d+(o*10060|0)+4664>>2]=0;c[d+(o*10060|0)+4676>>2]=1;o=o+1|0;m=c[Ja>>2]|0}}while(0);ya=d+4572|0;xa=d+20200|0;wa=d+5740|0;o=0;while(1){if((o|0)>=(c[Ja>>2]|0))break;if((o|0)==1)m=c[ya>>2]|0;else m=0;m=ce(za+(o*10060|0)|0,f,c[xa>>2]|0,o,m)|0;if(m|0){Ia=145;break}b:do if((c[za+(o*10060|0)+4660>>2]|0)!=0|s){m=0;while(1){if((m|0)>=(c[wa>>2]|0))break b;c[za+(o*10060|0)+4720+(m<<2)>>2]=0;m=m+1|0}}while(0);c[za+(o*10060|0)+6076>>2]=c[za+(o*10060|0)+6072>>2];o=o+1|0;n=0}if((Ia|0)==145){l=Ka;return m|0}B=r*10|0;F=c[ya>>2]|0;C=R(B,F)|0;D=d+4552|0;F=(R(C,c[D>>2]|0)|0)/(F*1e3|0)|0;va=fa()|0;E=l;l=l+((1*(F<<1)|0)+15&-16)|0;F=d+4580|0;G=d+5736|0;ta=d+20192|0;H=d+15832|0;I=d+5772|0;J=d+5092|0;K=d+14640|0;L=d+15796|0;M=d+14632|0;N=d+15152|0;O=d+20154|0;P=d+14780|0;Q=d+20172|0;z=i+20|0;A=i+28|0;S=d+20176|0;T=f+28|0;U=d+20180|0;V=d+20120|0;W=d+5096|0;X=d+15156|0;Y=d+4528|0;ua=f+60|0;Z=d+20204|0;_=d+17224|0;$=d+10204|0;aa=d+10076|0;ba=d+14600|0;ca=d+14532|0;da=d+14597|0;ea=d+14548|0;ga=d+14720|0;ia=d+10060|0;ja=d+14776|0;ka=f+56|0;la=f+52|0;ma=Fa+4|0;na=Aa<<1;oa=Aa+-1|0;pa=d+6076|0;qa=d+20196|0;ra=d+16136|0;sa=d+20124|0;y=0;while(1){k=c[G>>2]|0;r=(c[F>>2]|0)-k|0;r=(r|0)<(C|0)?r:C;s=R(r,c[D>>2]|0)|0;s=(s|0)/((c[ya>>2]|0)*1e3|0)|0;do if((c[f>>2]|0)==2)if((c[Ja>>2]|0)==2){o=c[Ca>>2]|0;m=0;while(1){if((m|0)>=(s|0))break;b[E+(m<<1)>>1]=b[g+(m<<1<<1)>>1]|0;m=m+1|0}if((c[ta>>2]|0)==1&(o|0)==0)Sh(H|0,I|0,300)|0;Ne(I,J+(k+2<<1)|0,E,s);c[G>>2]=(c[G>>2]|0)+r;k=c[L>>2]|0;m=(c[K>>2]|0)-k|0;o=R(B,c[M>>2]|0)|0;o=(m|0)<(o|0)?m:o;m=0;while(1){if((m|0)>=(s|0))break;b[E+(m<<1)>>1]=b[g+((m<<1|1)<<1)>>1]|0;m=m+1|0}Ne(H,N+(k+2<<1)|0,E,s);c[L>>2]=(c[L>>2]|0)+o;m=c[G>>2]|0;break}else{if((c[Ja>>2]|0)==1)m=0;else{Ia=50;break}while(1){if((m|0)>=(s|0))break;x=m<<1;x=(b[g+(x<<1)>>1]|0)+(b[g+((x|1)<<1)>>1]|0)|0;b[E+(m<<1)>>1]=(x>>>1)+(x&1);m=m+1|0}Ne(I,J+(k+2<<1)|0,E,s);c:do if((c[ta>>2]|0)==2?(c[Ca>>2]|0)==0:0){Ne(H,N+((c[L>>2]|0)+2<<1)|0,E,s);m=0;while(1){if((m|0)>=(c[F>>2]|0))break c;x=J+((c[G>>2]|0)+m+2<<1)|0;b[x>>1]=((b[x>>1]|0)+(b[N+((c[L>>2]|0)+m+2<<1)>>1]|0)|0)>>>1;m=m+1|0}}while(0);m=(c[G>>2]|0)+r|0;c[G>>2]=m;break}else Ia=50;while(0);if((Ia|0)==50){Ia=0;Sh(E|0,g|0,s<<1|0)|0;Ne(I,J+(k+2<<1)|0,E,s);m=(c[G>>2]|0)+r|0;c[G>>2]=m}x=g+((R(s,c[f>>2]|0)|0)<<1)|0;w=h-s|0;c[xa>>2]=0;if((m|0)<(c[F>>2]|0)){m=0;break}if(!((c[Ca>>2]|0)!=0|Ba^1)){b[Ga>>1]=0;a[Ga>>0]=256-(256>>>(R((c[wa>>2]|0)+1|0,c[Ja>>2]|0)|0));Rb(i,0,Ga,8);r=0;while(1){m=c[Ja>>2]|0;if((r|0)>=(m|0)){t=0;break}k=c[za+(r*10060|0)+5740>>2]|0;m=0;o=0;while(1){if((o|0)>=(k|0))break;m=m|c[za+(r*10060|0)+4720+(o<<2)>>2]<>0]=(m|0)>0&1;if((m|0)!=0&(k|0)>1)Rb(i,m+-1|0,c[19204+(k+-2<<2)>>2]|0,8);r=r+1|0}while(1){if((t|0)>=(c[wa>>2]|0)){o=0;break}k=O+(t*6|0)|0;r=P+(t<<2)|0;s=Q+t|0;h=(t|0)>0;g=t+-1|0;o=0;while(1){if((o|0)>=(m|0))break;if(c[za+(o*10060|0)+4720+(t<<2)>>2]|0){if((m|0)==2&(o|0)==0?(bf(i,k),(c[r>>2]|0)==0):0)cf(i,a[s>>0]|0);if(h?(c[za+(o*10060|0)+4720+(g<<2)>>2]|0)!=0:0)m=2;else m=0;Xc(za+(o*10060|0)|0,i,t,1,m);Yc(i,a[za+(o*10060|0)+6096+(t*36|0)+29>>0]|0,a[za+(o*10060|0)+6096+(t*36|0)+30>>0]|0,za+(o*10060|0)+6204+(t*320|0)|0,c[za+(o*10060|0)+4580>>2]|0);m=c[Ja>>2]|0}o=o+1|0}t=t+1|0}while(1){if((o|0)>=(m|0))break;m=za+(o*10060|0)+4720|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;o=o+1|0;m=c[Ja>>2]|0}c[S>>2]=Wc(c[z>>2]|0,c[A>>2]|0)|0}Pd(d);r=c[T>>2]|0;k=c[Ha>>2]|0;m=(R(r,k)|0)/1e3|0;if(Ba)m=m-(c[S>>2]|0)|0;o=(m|0)/(c[wa>>2]|0)|0;m=R(o<<16>>16,(k|0)==10?100:50)|0;m=m-(c[U>>2]<<1)|0;if(Ba?(Da=c[Ca>>2]|0,(Da|0)>0):0){v=Wc(c[z>>2]|0,c[A>>2]|0)|0;m=m-(v-(c[S>>2]|0)-(R(o,Da)|0)<<1)|0}if((r|0)>5e3){if((m|0)<=(r|0))r=(m|0)>5e3?m:5e3}else if((m|0)>5e3)r=5e3;else r=(m|0)<(r|0)?r:m;if((c[Ja>>2]|0)==2){m=c[Ca>>2]|0;Xd(V,W,X,O+(m*6|0)|0,Q+m|0,Fa,r,c[Y>>2]|0,c[ua>>2]|0,c[ya>>2]|0,c[F>>2]|0);m=c[Ca>>2]|0;if(!(a[Q+m>>0]|0)){if((c[Z>>2]|0)==1){c[_>>2]=0;c[_+4>>2]=0;c[_+8>>2]=0;v=aa;c[v>>2]=0;c[v+4>>2]=0;Qh($|0,0,4384)|0;c[ba>>2]=100;c[ca>>2]=100;a[_>>0]=10;a[da>>0]=0;c[ea>>2]=65536;c[ga>>2]=1}qf(ia)}else a[ja+m>>0]=0;if(Ba?(bf(i,O+((c[Ca>>2]|0)*6|0)|0),Ea=c[Ca>>2]|0,(a[ja+Ea>>0]|0)==0):0)cf(i,a[Q+Ea>>0]|0)}else{c[J>>2]=c[sa>>2];v=J+(c[F>>2]<<1)|0;v=e[v>>1]|e[v+2>>1]<<16;b[sa>>1]=v;b[sa+2>>1]=v>>>16}qf(d);g=(y|0)==0;t=c[ma>>2]|0;u=(y|0)==(oa|0);v=(y|0)==1;h=0;while(1){m=c[Ja>>2]|0;if((h|0)>=(m|0))break;s=c[ka>>2]|0;d:do switch(Aa|0){case 2:{if(g)o=(s*3|0)/5|0;else o=s;break}case 3:{if(g){o=(s<<1|0)/5|0;break d}if(v)o=(s*3|0)/4|0;else o=s;break}default:o=s}while(0);k=u&(c[la>>2]|0)!=0&1;if((m|0)!=1){m=c[Fa+(h<<2)>>2]|0;if(!((h|0)!=0|(t|0)<1)){k=0;o=o-((s|0)/(na|0)|0)|0}}else m=r;if((m|0)>0){ae(za+(h*10060|0)|0,m);do if((c[Ca>>2]|0)>(h|0)){if((h|0)>0?c[Z>>2]|0:0){m=1;break}m=2}else m=0;while(0);n=rf(za+(h*10060|0)|0,j,i,m,o,k)|0}c[za+(h*10060|0)+4664>>2]=0;c[za+(h*10060|0)+5736>>2]=0;s=za+(h*10060|0)+5744|0;c[s>>2]=(c[s>>2]|0)+1;h=h+1|0}r=c[Ca>>2]|0;c[Z>>2]=a[Q+(r+-1)>>0];do if((c[j>>2]|0)>0?(r|0)==(c[wa>>2]|0):0){s=c[Ja>>2]|0;m=0;k=0;while(1){if((k|0)>=(s|0))break;h=c[za+(k*10060|0)+5740>>2]|0;o=0;while(1){m=m<<1;if((o|0)>=(h|0))break;m=m|a[za+(k*10060|0)+4716+o>>0];o=o+1|0}m=m|a[za+(k*10060|0)+4719>>0];k=k+1|0}if(Ba)Vb(i,m,R(r+1|0,s)|0);do if(c[pa>>2]|0){if((c[Ja>>2]|0)!=1?(c[ra>>2]|0)==0:0)break;c[j>>2]=0}while(0);m=(c[U>>2]|0)+(c[j>>2]<<3)|0;c[U>>2]=m;m=m-((R(c[T>>2]|0,c[Ha>>2]|0)|0)/1e3|0)|0;c[U>>2]=(m|0)>1e4?1e4:(m|0)>0?m:0;m=c[qa>>2]|0;if((c[Y>>2]|0)<(((m<<16>>16)*3188>>16)+13|0)){c[xa>>2]=1;c[qa>>2]=0;break}else{c[xa>>2]=0;c[qa>>2]=m+(c[Ha>>2]|0);break}}while(0);if(!w){Ia=134;break}g=x;h=w;y=y+1|0}if((Ia|0)==134)m=c[xa>>2]|0;c[ta>>2]=c[Ja>>2];c[f+76>>2]=m;if((c[ya>>2]|0)==16)m=(c[d+28>>2]|0)==0;else m=0;c[f+80>>2]=m&1;c[f+72>>2]=(c[ya>>2]<<16>>16)*1e3;if(!(c[ua>>2]|0))m=b[d+20148>>1]|0;else m=0;c[f+84>>2]=m;e:do if(!Ba){c[Ha>>2]=p;c[f+36>>2]=q;m=0;while(1){if((m|0)>=(c[Ja>>2]|0))break e;c[za+(m*10060|0)+4664>>2]=0;c[za+(m*10060|0)+4676>>2]=0;m=m+1|0}}while(0);Ja=d+4761|0;c[f+92>>2]=a[Ja>>0];c[f+96>>2]=b[28176+(a[Ja>>0]>>1<<2)+(a[d+4762>>0]<<1)>>1];ha(va|0);f=n;l=Ka;return f|0}function Wc(a,b){a=a|0;b=b|0;return (U(b|0)|0)+-32+a|0}function Xc(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+48|0;o=t;i=t+32|0;p=(g|0)==0;q=p?d+4732|0:d+6096+(f*36|0)|0;r=q+29|0;f=(a[r>>0]<<1)+(a[q+30>>0]|0)|0;if((f|0)>1|p^1)Rb(e,f+-2|0,32439,8);else Rb(e,f,32443,8);n=(h|0)==2;f=a[q>>0]|0;if(n)Rb(e,f,30190,8);else{Rb(e,f>>3,30166+(a[r>>0]<<3)|0,8);Rb(e,a[q>>0]&7,32468,8)}p=d+4576|0;f=1;while(1){if((f|0)>=(c[p>>2]|0))break;Rb(e,a[q+f>>0]|0,30190,8);f=f+1|0}f=q+8|0;m=d+4688|0;k=c[m>>2]|0;Rb(e,a[f>>0]|0,(c[k+16>>2]|0)+(R(a[r>>0]>>1,b[k>>1]|0)|0)|0,8);Ud(o,i,c[m>>2]|0,a[f>>0]|0);f=0;while(1){g=c[m>>2]|0;if((f|0)>=(b[g+2>>1]|0))break;i=f+1|0;j=q+8+i|0;k=a[j>>0]|0;if(k<<24>>24>3){Rb(e,8,(c[g+28>>2]|0)+(b[o+(f<<1)>>1]|0)|0,8);Rb(e,(a[j>>0]|0)+-4|0,32476,8);f=i;continue}if(k<<24>>24<-3){Rb(e,0,(c[g+28>>2]|0)+(b[o+(f<<1)>>1]|0)|0,8);Rb(e,-4-(a[j>>0]|0)|0,32476,8);f=i;continue}else{Rb(e,(k<<24>>24)+4|0,(c[g+28>>2]|0)+(b[o+(f<<1)>>1]|0)|0,8);f=i;continue}}if((c[p>>2]|0)==4)Rb(e,a[q+31>>0]|0,32445,8);if((a[r>>0]|0)!=2){s=a[r>>0]|0;s=s<<24>>24;h=d+5764|0;c[h>>2]=s;h=q+34|0;h=a[h>>0]|0;h=h<<24>>24;Rb(e,h,32453,8);l=t;return}do if(n?(c[d+5764>>2]|0)==2:0){f=q+26|0;g=d+5768|0;i=(b[f>>1]|0)-(b[g>>1]|0)|0;if((i+8|0)>>>0>19){Rb(e,0,32515,8);s=25;break}else{Rb(e,i+9|0,32515,8);break}}else s=25;while(0);if((s|0)==25){f=q+26|0;o=b[f>>1]|0;g=c[d+4572>>2]|0;s=(o|0)/(g>>1|0)|0;g=o-(R(s<<16>>16,g<<15>>16)|0)|0;Rb(e,s,32483,8);Rb(e,g,c[d+4680>>2]|0,8);g=d+5768|0}b[g>>1]=b[f>>1]|0;Rb(e,a[q+28>>0]|0,c[d+4684>>2]|0,8);g=q+32|0;Rb(e,a[g>>0]|0,30231,8);f=0;while(1){if((f|0)>=(c[p>>2]|0))break;Rb(e,a[q+4+f>>0]|0,c[18980+(a[g>>0]<<2)>>2]|0,8);f=f+1|0}if(h|0){s=a[r>>0]|0;s=s<<24>>24;h=d+5764|0;c[h>>2]=s;h=q+34|0;h=a[h>>0]|0;h=h<<24>>24;Rb(e,h,32453,8);l=t;return}Rb(e,a[q+33>>0]|0,32436,8);s=a[r>>0]|0;s=s<<24>>24;h=d+5764|0;c[h>>2]=s;h=q+34|0;h=a[h>>0]|0;h=h<<24>>24;Rb(e,h,32453,8);l=t;return}function Yc(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+32|0;p=v;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[p+24>>2]=0;c[p+28>>2]=0;i=h>>4;if((i<<4|0)<(h|0)){i=i+1|0;j=g+h|0;k=j+16|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0))}k=i<<4;s=l;l=l+((1*(k<<2)|0)+15&-16)|0;j=0;while(1){if((j|0)>=(k|0))break;r=a[g+j>>0]|0;u=r<<24>>24;c[s+(j<<2)>>2]=r<<24>>24>0?u:0-u|0;u=j|1;r=a[g+u>>0]|0;t=r<<24>>24;c[s+(u<<2)>>2]=r<<24>>24>0?t:0-t|0;u=j|2;t=a[g+u>>0]|0;r=t<<24>>24;c[s+(u<<2)>>2]=t<<24>>24>0?r:0-r|0;u=j|3;r=a[g+u>>0]|0;t=r<<24>>24;c[s+(u<<2)>>2]=r<<24>>24>0?t:0-t|0;j=j+4|0}t=l;l=l+((1*(i<<2)|0)+15&-16)|0;u=l;l=l+((1*(i<<2)|0)+15&-16)|0;j=s;m=0;while(1){if((m|0)>=(i|0))break;n=u+(m<<2)|0;c[n>>2]=0;o=t+(m<<2)|0;a:while(1){r=Zc(p,j,8,8)|0;r=r+(Zc(p,p,10,4)|0)|0;r=r+(Zc(p,p,12,2)|0)|0;if((r|0)==(0-(Zc(o,p,16,1)|0)|0))break;c[n>>2]=(c[n>>2]|0)+1;k=0;while(1){if((k|0)==16)continue a;r=j+(k<<2)|0;c[r>>2]=c[r>>2]>>1;k=k+1|0}}j=j+64|0;m=m+1|0}q=e>>1;k=2147483647;m=0;n=0;while(1){if((n|0)==9)break;r=32776+(n*18|0)+17|0;j=d[32956+(q*9|0)+n>>0]|0;o=0;while(1){if((o|0)>=(i|0))break;if((c[u+(o<<2)>>2]|0)>0)p=r;else p=(c[t+(o<<2)>>2]|0)+(32776+(n*18|0))|0;j=j+(d[p>>0]|0)|0;o=o+1|0}r=(j|0)<(k|0);k=r?j:k;m=r?n:m;n=n+1|0}Rb(b,m,32938+(q*9|0)|0,8);n=32596+(m*18|0)|0;m=0;while(1){if((m|0)>=(i|0)){j=0;break}j=c[u+(m<<2)>>2]|0;if(!j)Rb(b,c[t+(m<<2)>>2]|0,n,8);else{Rb(b,17,n,8);k=j+-1|0;j=0;while(1){if((j|0)>=(k|0))break;Rb(b,17,32758,8);j=j+1|0}Rb(b,c[t+(m<<2)>>2]|0,32758,8)}m=m+1|0}while(1){if((j|0)>=(i|0)){n=0;break}if((c[t+(j<<2)>>2]|0)>0)zd(b,s+(j<<4<<2)|0);j=j+1|0}while(1){if((n|0)>=(i|0))break;o=c[u+(n<<2)>>2]|0;b:do if((o|0)>0){p=g+(n<<4)|0;m=0;while(1){if((m|0)==16)break b;k=a[p+m>>0]|0;q=k<<24>>24;q=(k<<24>>24>0?q:0-q|0)<<24>>24;k=o;while(1){j=k+-1|0;if((k|0)<=1)break;Rb(b,q>>>j&1,32434,8);k=j}Rb(b,q&1,32434,8);m=m+1|0}}while(0);n=n+1|0}Rc(b,g,h,e,f,t);l=v;return}function Zc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=0;while(1){if((f|0)>=(e|0)){f=0;a=5;break}g=f<<1;g=(c[b+(g<<2)>>2]|0)+(c[b+((g|1)<<2)>>2]|0)|0;if((g|0)>(d|0)){f=1;a=5;break}c[a+(f<<2)>>2]=g;f=f+1|0}if((a|0)==5)return f|0;return 0}function _c(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;m=0;while(1){if((m|0)>=(h|0))break;n=e+(m<<2)|0;ue(c[n>>2]|0)|0;k=((((ue(c[n>>2]|0)|0)<<16)+-136970240>>16)*2251|0)>>>16;i=k&255;l=b+m|0;a[l>>0]=i;if((k<<24>>24|0)<(a[f>>0]|0)){i=i+1<<24>>24;a[l>>0]=i}if(i<<24>>24>63)i=63;else i=(i<<24>>24>0?i:0)&255;a[l>>0]=i;j=a[f>>0]|0;if(!(m|g)){i=(j<<24>>24)+-4|0;j=a[b>>0]|0;if((i|0)>63){if((j<<24>>24|0)<=(i|0))i=(j<<24>>24>63?j:63)&255}else if(j<<24>>24>63)i=63;else{l=j<<24>>24;i=(l|0)<(i|0)?i:l}i=i&255;a[b>>0]=i;a[f>>0]=i}else{j=i-(j&255)|0;i=j&255;a[l>>0]=i;k=(a[f>>0]|0)+8|0;j=j<<24>>24;if((j|0)>(k|0)){i=k+((j-k+1|0)>>>1)&255;a[l>>0]=i}if(i<<24>>24>36)i=36;else i=(i<<24>>24>-4?i:-4)<<24>>24;a[l>>0]=i;if((i|0)>(k|0)){i=(d[f>>0]|0)+((i<<1)-k)|0;a[f>>0]=i;i=$c(i<<24>>24)|0}else i=(d[f>>0]|0)+(i&255)|0;a[f>>0]=i;a[l>>0]=(d[l>>0]|0)+4;i=a[f>>0]|0}l=i<<24>>24;c[n>>2]=ye(ad((l*29|0)+(l*7281>>16)+2090|0)|0)|0;m=m+1|0}return}function $c(a){a=a|0;return ((a|0)<63?a:63)|0}function ad(a){a=a|0;return ((a|0)<3967?a:3967)|0}function bd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=0;while(1){if((l|0)>=(g|0))break;do if(l|f){h=(a[d+l>>0]|0)+-4|0;i=a[e>>0]|0;j=i<<24>>24;k=j+8|0;if((h|0)>(k|0)){i=j+((h<<1)-k)|0;break}else{i=(i&255)+h|0;break}}else i=cd(a[d>>0]|0,(a[e>>0]|0)+-16|0)|0;while(0);h=i&255;a[e>>0]=h;if((i<<24|0)<=1056964608)if(h<<24>>24<0)h=0;else h=i<<24>>24;else h=63;a[e>>0]=h;c[b+(l<<2)>>2]=ye(ad((h*29|0)+(h*7281>>16)+2090|0)|0)|0;l=l+1|0}return}function cd(a,b){a=a|0;b=b|0;return ((a|0)>(b|0)?a:b)|0}function dd(b,c){b=b|0;c=c|0;var d=0,e=0;d=0;e=0;while(1){if((e|0)>=(c|0))break;d=(a[b+e>>0]|0)+(d<<8)|0;e=e+1|0}return d|0}function ed(a,c,d,f,g){a=a|0;c=c|0;d=d|0;f=f|0;g=g|0;var h=0,i=0;h=f<<16>>16;f=0;while(1){if((f|0)>=(g|0))break;i=e[c+(f<<1)>>1]|0;b[a+(f<<1)>>1]=i+((R((e[d+(f<<1)>>1]|0)-i<<16>>16,h)|0)>>>2);f=f+1|0}return}function fd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;h=l;l=l+32|0;e=h+8|0;f=h;g=a+12|0;if(!(c[g>>2]|0)){l=h;return}i=a+8|0;k=256-(c[i>>2]|0)<<10;j=k>>16;gd(e,f,j,k-(j<<16)|0);g=(c[i>>2]|0)+(c[g>>2]|0)|0;c[i>>2]=(g|0)>256?256:(g|0)>0?g:0;re(b,e,c[f>>2]|0,c[f+4>>2]|0,a,b,d);l=h;return}function gd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((d|0)>=4){c[a>>2]=c[4815];c[a+4>>2]=c[4816];c[a+8>>2]=c[4817];g=b;c[g>>2]=35497197;c[g+4>>2]=57401098;return}if((e|0)<=0){f=19212+(d*12|0)|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];d=19272+(d<<3)|0;f=c[d+4>>2]|0;g=b;c[g>>2]=c[d>>2];c[g+4>>2]=f;return}f=d+1|0;g=e<<16>>16;if((e|0)<32768){e=0;while(1){if((e|0)==3){e=0;break}i=c[19212+(d*12|0)+(e<<2)>>2]|0;h=(c[19212+(f*12|0)+(e<<2)>>2]|0)-i|0;c[a+(e<<2)>>2]=i+((R(h>>16,g)|0)+((R(h&65535,g)|0)>>16));e=e+1|0}while(1){if((e|0)==2)break;h=c[19272+(d<<3)+(e<<2)>>2]|0;i=(c[19272+(f<<3)+(e<<2)>>2]|0)-h|0;c[b+(e<<2)>>2]=h+((R(i>>16,g)|0)+((R(i&65535,g)|0)>>16));e=e+1|0}return}else{e=0;while(1){if((e|0)==3){e=0;break}h=c[19212+(f*12|0)+(e<<2)>>2]|0;i=h-(c[19212+(d*12|0)+(e<<2)>>2]|0)|0;c[a+(e<<2)>>2]=h+((R(i>>16,g)|0)+((R(i&65535,g)|0)>>16));e=e+1|0}while(1){if((e|0)==2)break;h=c[19272+(f<<3)+(e<<2)>>2]|0;i=h-(c[19272+(d<<3)+(e<<2)>>2]|0)|0;c[b+(e<<2)>>2]=h+((R(i>>16,g)|0)+((R(i&65535,g)|0)>>16));e=e+1|0}return}}function hd(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;l=l+80|0;o=n+64|0;m=n;Ud(n+32|0,o,g,a[f>>0]|0);k=g+2|0;id(m,f+1|0,o,b[g+4>>1]|0,b[k>>1]|0);o=b[k>>1]|0;j=R(a[f>>0]|0,o<<16>>16)|0;i=(c[g+8>>2]|0)+j|0;j=(c[g+12>>2]|0)+(j<<1)|0;h=0;f=o;while(1){f=f<<16>>16;if((h|0)>=(f|0))break;f=((b[m+(h<<1)>>1]<<14|0)/(b[j+(h<<1)>>1]|0)|0)+(d[i+h>>0]<<7)|0;b[e+(h<<1)>>1]=(f|0)>32767?32767:((f|0)>0?f:0)&65535;h=h+1|0;f=b[k>>1]|0}Ge(e,c[g+36>>2]|0,f);l=n;return}function id(c,e,f,g,h){c=c|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;k=g<<16>>16;i=0;g=h<<16>>16;while(1){j=g+-1|0;if((g|0)<=0)break;i=(R(i<<16>>16,d[f+j>>0]|0)|0)>>8;g=a[e+j>>0]|0;h=g<<24>>24<<10;if(g<<24>>24>0)g=h+-102|0;else g=g<<24>>24?h|102:h;i=i+((R(g>>16,k)|0)+((R(g&65535,k)|0)>>16))|0;b[c+(j<<1)>>1]=i;g=j}return}function jd(d,e,f,g,h,i,j,k,m,n,o,p,q,r,s){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;var t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0;S=l;c[e+4340>>2]=a[f+34>>0];O=e+4328|0;u=c[O>>2]|0;P=f+29|0;Q=b[28176+(a[P>>0]>>1<<2)+(a[f+30>>0]<<1)>>1]|0;L=(a[f+31>>0]|0)!=4&1;B=d+4588|0;H=c[B>>2]|0;C=d+4580|0;F=H+(c[C>>2]|0)|0;D=l;l=l+((1*(F<<2)|0)+15&-16)|0;E=l;l=l+((1*(F<<1)|0)+15&-16)|0;F=d+4584|0;G=l;l=l+((1*(c[F>>2]<<2)|0)+15&-16)|0;c[e+4336>>2]=H;H=e+4332|0;c[H>>2]=c[B>>2];I=d+4576|0;J=L^1;K=e+4348|0;L=L<<1^3;M=d+4636|0;N=d+4632|0;A=e+(c[B>>2]<<1)|0;z=0;while(1){f=c[I>>2]|0;if((z|0)>=(f|0))break;v=i+((z>>1|J)<<4<<1)|0;w=j+(z*5<<1)|0;x=k+(z*24<<1)|0;y=c[m+(z<<2)>>2]|0;y=y>>2|y>>>1<<16;c[K>>2]=0;t=a[P>>0]|0;if(t<<24>>24==2){f=c[q+(z<<2)>>2]|0;if(!(z&L)){T=c[B>>2]|0;t=c[M>>2]|0;u=T-f-t+-2|0;ze(E+(u<<1)|0,e+(u+(R(z,c[F>>2]|0)|0)<<1)|0,v,T-u|0,t);c[K>>2]=1;c[H>>2]=c[B>>2];t=a[P>>0]|0}else t=2}else f=u;kd(d,e,g,G,E,D,z,s,p,q,t<<24>>24);ld(e,a[P>>0]|0,G,h,A,D,v,w,x,f,y,c[n+(z<<2)>>2]|0,c[o+(z<<2)>>2]|0,c[p+(z<<2)>>2]|0,r,Q,c[F>>2]|0,c[N>>2]|0,c[M>>2]|0);u=c[F>>2]|0;A=A+(u<<1)|0;g=g+(u<<1)|0;h=h+u|0;u=f;z=z+1|0}c[O>>2]=c[q+(f+-1<<2)>>2];Wh(e|0,e+(c[C>>2]<<1)|0,c[B>>2]<<1|0)|0;Wh(e+1280|0,e+1280+(c[C>>2]<<2)|0,c[B>>2]<<2|0)|0;l=S;return}function kd(a,d,e,f,g,h,i,j,k,l,m){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0;r=c[l+(i<<2)>>2]|0;s=k+(i<<2)|0;l=c[s>>2]|0;l=od((l|0)>1?l:1)|0;p=(l>>4)+1|0;n=a+4584|0;o=p>>>1<<16>>16;p=(p>>16)+1>>1;k=0;while(1){if((k|0)>=(c[n>>2]|0))break;t=b[e+(k<<1)>>1]|0;q=t<<16>>16;c[f+(k<<2)>>2]=(R(q>>16,o)|0)+((R(t&65535,o)|0)>>16)+(R(q,p)|0);k=k+1|0}q=d+4348|0;a:do if(c[q>>2]|0){if(!i){t=j<<16>>16;l=(R(l>>16,t)|0)+((R(l&65535,t)|0)>>16)<<2}o=d+4332|0;n=c[o>>2]|0;p=l>>16;k=l&65535;l=n-r+-2|0;while(1){if((l|0)>=(n|0))break a;n=b[g+(l<<1)>>1]|0;c[h+(l<<2)>>2]=(R(p,n)|0)+((R(k,n)|0)>>16);l=l+1|0;n=c[o>>2]|0}}while(0);l=c[s>>2]|0;f=d+4344|0;k=c[f>>2]|0;if((l|0)==(k|0))return;o=pd(k,l)|0;n=d+4336|0;k=c[n>>2]|0;p=o>>16;e=o&65535;l=k-(c[a+4588>>2]|0)|0;while(1){if((l|0)>=(k|0))break;k=d+1280+(l<<2)|0;t=c[k>>2]|0;a=t<<16>>16;c[k>>2]=(R(p,a)|0)+((R(e,a)|0)>>16)+(R(o,(t>>15)+1>>1)|0);l=l+1|0;k=c[n>>2]|0}b:do if((m|0)==2?(c[q>>2]|0)==0:0){n=d+4332|0;k=c[n>>2]|0;l=k-r+-2|0;while(1){if((l|0)>=(k|0))break b;k=h+(l<<2)|0;t=c[k>>2]|0;r=t<<16>>16;c[k>>2]=(R(p,r)|0)+((R(e,r)|0)>>16)+(R(o,(t>>15)+1>>1)|0);l=l+1|0;k=c[n>>2]|0}}while(0);l=d+4320|0;t=c[l>>2]|0;h=t<<16>>16;c[l>>2]=(R(p,h)|0)+((R(e,h)|0)>>16)+(R(o,(t>>15)+1>>1)|0);l=d+4324|0;t=c[l>>2]|0;h=t<<16>>16;c[l>>2]=(R(p,h)|0)+((R(e,h)|0)>>16)+(R(o,(t>>15)+1>>1)|0);l=0;while(1){if((l|0)==16){l=0;break}t=d+3840+(l<<2)|0;h=c[t>>2]|0;r=h<<16>>16;c[t>>2]=(R(p,r)|0)+((R(e,r)|0)>>16)+(R(o,(h>>15)+1>>1)|0);l=l+1|0}while(1){if((l|0)==24)break;t=d+4224+(l<<2)|0;h=c[t>>2]|0;r=h<<16>>16;c[t>>2]=(R(p,r)|0)+((R(e,r)|0)>>16)+(R(o,(h>>15)+1>>1)|0);l=l+1|0}c[f>>2]=c[s>>2];return}function ld(d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;var w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;ba=d+4336|0;ca=d+4332|0;da=d+4340|0;V=(e|0)==2;W=k+2|0;X=k+4|0;Y=k+6|0;Z=k+8|0;_=d+4324|0;$=d+4224|0;aa=d+4320|0;T=o<<16>>16;U=p<<16>>16;P=p>>16;Q=(m|0)>0;S=n<<16>>16;L=n>>16;M=(r|0)>2048;O=(r|0)/2|0;N=O+-512|0;O=512-O|0;J=r<<16>>16;K=q>>>6<<16>>16;D=(q>>21)+1>>1;E=s+944|0;F=R(s<<16>>16,J)|0;G=R(E<<16>>16,J)|0;H=s+-944|0;I=R(944-s<<16>>16,J)|0;e=i+((c[ca>>2]|0)-m+2<<2)|0;p=d+1280+((c[ba>>2]|0)-m+1<<2)|0;A=0;B=d+3900|0;while(1){if((A|0)>=(t|0))break;c[da>>2]=(R(c[da>>2]|0,196314165)|0)+907633515;C=md(B,j,v)|0;if(V){y=c[e>>2]|0;z=b[k>>1]|0;z=(R(y>>16,z)|0)+((R(y&65535,z)|0)>>16)+2|0;y=c[e+-4>>2]|0;x=b[W>>1]|0;x=z+((R(y>>16,x)|0)+((R(y&65535,x)|0)>>16))|0;y=c[e+-8>>2]|0;z=b[X>>1]|0;z=x+((R(y>>16,z)|0)+((R(y&65535,z)|0)>>16))|0;y=c[e+-12>>2]|0;x=b[Y>>1]|0;x=z+((R(y>>16,x)|0)+((R(y&65535,x)|0)>>16))|0;y=c[e+-16>>2]|0;z=b[Z>>1]|0;z=x+((R(y>>16,z)|0)+((R(y&65535,z)|0)>>16))|0;e=e+4|0}else z=0;x=nd(c[_>>2]|0,$,l,u)|0;y=c[aa>>2]|0;o=y>>16;y=y&65535;x=x+((R(o,T)|0)+((R(y,T)|0)>>16))|0;w=c[d+1280+((c[ba>>2]|0)+-1<<2)>>2]|0;y=(R(w>>16,U)|0)+((R(w&65535,U)|0)>>16)+(R(o,P)|0)+((R(y,P)|0)>>16)|0;o=(C<<2)-x-y|0;if(Q){m=(c[p>>2]|0)+(c[p+-8>>2]|0)|0;m=(R(m>>16,S)|0)+((R(m&65535,S)|0)>>16)|0;w=c[p+-4>>2]|0;o=z-(m+(R(w>>16,L)|0)+((R(w&65535,L)|0)>>16)<<1)+(o<<1)>>2;p=p+4|0}else o=o>>1;w=f+(A<<2)|0;m=(c[w>>2]|0)-(o+1>>1)|0;m=(c[da>>2]|0)<0?0-m|0:m;m=(m|0)>30720?30720:(m|0)>-31744?m:-31744;o=m-s|0;do if(M){if((o|0)>(N|0)){o=o-N|0;ea=14;break}if((o|0)>=(O|0))if((o|0)<0){ea=17;break}else{o=G;n=F;r=E;q=s;break}else{o=o+N|0;ea=14;break}}else ea=14;while(0);a:do if((ea|0)==14){ea=0;o=o>>10;if((o|0)>0){q=(o<<10)+-80+s|0;r=q+1024|0;o=R(r<<16>>16,J)|0;n=R(q<<16>>16,J)|0;break}switch(o|0){case 0:{o=G;n=F;r=E;q=s;break a}case -1:{ea=17;break a}default:{}}q=(o<<10|80)+s|0;o=R(-1024-q<<16>>16,J)|0;n=R(0-q<<16>>16,J)|0;r=q+1024|0}while(0);if((ea|0)==17){ea=0;o=F;n=I;r=s;q=H}fa=m-q<<16>>16;m=m-r<<16>>16;m=(o+(R(m,m)|0)|0)<(n+(R(fa,fa)|0)|0);q=m?r:q;m=g+A|0;a[m>>0]=((q>>>9)+1|0)>>>1;q=q<<4;z=((c[da>>2]|0)<0?0-q|0:q)+(z<<1)|0;q=z+(C<<4)|0;C=((R(q>>16,K)|0)+((R(q&65534,K)|0)>>16)+(R(q,D)|0)>>7)+1>>1;b[h+(A<<1)>>1]=(C|0)>32767?32767:((C|0)>-32768?C:-32768)&65535;C=B+4|0;c[C>>2]=q;w=q-(c[w>>2]<<4)|0;c[_>>2]=w;x=w-(x<<2)|0;c[aa>>2]=x;c[d+1280+(c[ba>>2]<<2)>>2]=x-(y<<2);c[i+(c[ca>>2]<<2)>>2]=z<<1;c[ba>>2]=(c[ba>>2]|0)+1;c[ca>>2]=(c[ca>>2]|0)+1;c[da>>2]=(c[da>>2]|0)+(a[m>>0]|0);A=A+1|0;B=C}p=d+3840|0;e=d+3840+(t<<2)|0;o=p+64|0;do{c[p>>2]=c[e>>2];p=p+4|0;e=e+4|0}while((p|0)<(o|0));return}function md(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=c[a>>2]|0;h=b[d>>1]|0;h=(e>>1)+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-4>>2]|0;f=b[d+2>>1]|0;f=h+((R(g>>16,f)|0)+((R(g&65535,f)|0)>>16))|0;g=c[a+-8>>2]|0;h=b[d+4>>1]|0;h=f+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-12>>2]|0;f=b[d+6>>1]|0;f=h+((R(g>>16,f)|0)+((R(g&65535,f)|0)>>16))|0;g=c[a+-16>>2]|0;h=b[d+8>>1]|0;h=f+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-20>>2]|0;f=b[d+10>>1]|0;f=h+((R(g>>16,f)|0)+((R(g&65535,f)|0)>>16))|0;g=c[a+-24>>2]|0;h=b[d+12>>1]|0;h=f+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-28>>2]|0;f=b[d+14>>1]|0;f=h+((R(g>>16,f)|0)+((R(g&65535,f)|0)>>16))|0;g=c[a+-32>>2]|0;h=b[d+16>>1]|0;h=f+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-36>>2]|0;f=b[d+18>>1]|0;f=h+((R(g>>16,f)|0)+((R(g&65535,f)|0)>>16))|0;if((e|0)!=16){h=f;return h|0}g=c[a+-40>>2]|0;e=b[d+20>>1]|0;e=f+((R(g>>16,e)|0)+((R(g&65535,e)|0)>>16))|0;g=c[a+-44>>2]|0;h=b[d+22>>1]|0;h=e+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-48>>2]|0;e=b[d+24>>1]|0;e=h+((R(g>>16,e)|0)+((R(g&65535,e)|0)>>16))|0;g=c[a+-52>>2]|0;h=b[d+26>>1]|0;h=e+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-56>>2]|0;e=b[d+28>>1]|0;e=h+((R(g>>16,e)|0)+((R(g&65535,e)|0)>>16))|0;g=c[a+-60>>2]|0;h=b[d+30>>1]|0;h=e+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;return h|0}function nd(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;h=c[d>>2]|0;c[d>>2]=a;i=b[e>>1]|0;g=2;a=(f>>1)+((R(a>>16,i)|0)+((R(a&65535,i)|0)>>16))|0;while(1){if((g|0)>=(f|0))break;l=g+-1|0;i=d+(l<<2)|0;k=c[i>>2]|0;c[i>>2]=h;l=b[e+(l<<1)>>1]|0;i=d+(g<<2)|0;j=c[i>>2]|0;c[i>>2]=k;l=l<<16>>16;i=b[e+(g<<1)>>1]|0;i=a+((R(h>>16,l)|0)+((R(h&65535,l)|0)>>16))+((R(k>>16,i)|0)+((R(k&65535,i)|0)>>16))|0;g=g+2|0;h=j;a=i}l=f+-1|0;c[d+(l<<2)>>2]=h;l=b[e+(l<<1)>>1]|0;return a+((R(h>>16,l)|0)+((R(h&65535,l)|0)>>16))<<1|0}function od(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=qd((a|0)>0?a:0-a|0)|0;a=a<>16;d=536870911/(f|0)|0;e=d<<16;c=e>>16;a=536870912-((R(f,c)|0)+((R(a&65535,c)|0)>>16))<<3;d=e+((R(a>>16,c)|0)+((R(a&65528,c)|0)>>16))+(R(a,(d>>15)+1>>1)|0)|0;a=62-b|0;b=a+-47|0;if((b|0)>=1)return ((b|0)<32?d>>b:0)|0;a=47-a|0;b=-2147483648>>a;c=2147483647>>>a;if((b|0)>(c|0)){if((d|0)>(b|0)){f=b;f=f<(c|0)){f=c;f=f<0?a:0-a|0)|0;f=a<0?b:0-b|0)|0)+-1|0;b=b<>16|0)|0)<<16>>16;e=(R(f>>16,d)|0)+((R(f&65535,d)|0)>>16)|0;b=Uh(b|0,((b|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0;b=Rh(b|0,C|0,29)|0;b=f-(b&-8)|0;d=e+((R(b>>16,d)|0)+((R(b&65535,d)|0)>>16))|0;a=c+28-a|0;b=a+-16|0;if((a|0)>=16)return ((b|0)<32?d>>b:0)|0;a=16-a|0;b=-2147483648>>a;c=2147483647>>>a;if((b|0)>(c|0)){if((d|0)>(b|0)){f=b;f=f<(c|0)){f=c;f=f<>2]|0;W=e+4624|0;v=c[W>>2]|0;ba=l;l=l+((1*(v*1300|0)|0)+15&-16)|0;Qh(ba|0,0,v*1300|0)|0;Z=g+34|0;ca=f+4320|0;da=f+4324|0;ea=e+4588|0;fa=f+3840|0;ga=f+4224|0;u=0;while(1){if((u|0)>=(v|0))break;y=u+(d[Z>>0]|0)&3;c[ba+(u*1300|0)+1288>>2]=y;c[ba+(u*1300|0)+1292>>2]=y;c[ba+(u*1300|0)+1296>>2]=0;c[ba+(u*1300|0)+1280>>2]=c[ca>>2];c[ba+(u*1300|0)+1284>>2]=c[da>>2];c[ba+(u*1300|0)+1024>>2]=c[f+1280+((c[ea>>2]|0)+-1<<2)>>2];y=ba+(u*1300|0)|0;w=fa;x=y+64|0;do{c[y>>2]=c[w>>2];y=y+4|0;w=w+4|0}while((y|0)<(x|0));y=ba+(u*1300|0)+1184|0;w=ga;x=y+96|0;do{c[y>>2]=c[w>>2];y=y+4|0;w=w+4|0}while((y|0)<(x|0));u=u+1|0}Q=g+29|0;Y=a[Q>>0]|0;S=b[28176+(Y<<24>>24>>1<<2)+(a[g+30>>0]<<1)>>1]|0;c[$>>2]=0;_=e+4584|0;x=c[_>>2]|0;u=sd(40,x)|0;a:do if(Y<<24>>24!=2)if((z|0)>0)U=sd(u,z+-3|0)|0;else U=u;else{w=c[e+4576>>2]|0;v=0;while(1){if((v|0)>=(w|0)){U=u;break a}u=sd(u,(c[r+(v<<2)>>2]|0)+-3|0)|0;v=v+1|0}}while(0);G=(a[g+31>>0]|0)!=4&1;P=c[ea>>2]|0;Y=e+4580|0;N=P+(c[Y>>2]|0)|0;L=l;l=l+((1*(N<<2)|0)+15&-16)|0;M=l;l=l+((1*(N<<1)|0)+15&-16)|0;N=l;l=l+((1*(x<<2)|0)+15&-16)|0;T=f+4336|0;c[T>>2]=P;D=f+4332|0;c[D>>2]=c[ea>>2];X=e+4576|0;E=G^1;F=f+4348|0;G=G<<1^3;O=ba+1296|0;H=q+4|0;I=e+4636|0;J=e+4632|0;K=e+4668|0;v=0;u=z;P=f+(P<<1)|0;y=0;while(1){if((y|0)>=(c[X>>2]|0))break;z=j+((y>>1|E)<<4<<1)|0;A=k+(y*5<<1)|0;B=m+(y*24<<1)|0;C=c[n+(y<<2)>>2]|0;C=C>>2|C>>>1<<16;c[F>>2]=0;w=a[Q>>0]|0;if(w<<24>>24==2){u=c[r+(y<<2)>>2]|0;if(!(y&G)){b:do if((y|0)==2){x=c[W>>2]|0;v=c[O>>2]|0;g=0;w=1;while(1){if((w|0)>=(x|0)){v=0;break}ja=c[ba+(w*1300|0)+1296>>2]|0;ia=(ja|0)<(v|0);v=ia?ja:v;g=ia?w:g;w=w+1|0}while(1){if((v|0)>=(x|0))break;if((v|0)!=(g|0)){ja=ba+(v*1300|0)+1296|0;c[ja>>2]=(c[ja>>2]|0)+134217727}v=v+1|0}v=(c[$>>2]|0)+U|0;w=0;while(1){if((w|0)>=(U|0)){v=0;break b}ja=(v+-1|0)%40|0;ja=(ja|0)<0?ja+40|0:ja;ia=w-U|0;a[i+ia>>0]=(((c[ba+(g*1300|0)+544+(ja<<2)>>2]|0)>>>9)+1|0)>>>1;ka=c[ba+(g*1300|0)+704+(ja<<2)>>2]|0;x=c[H>>2]|0;la=x<<16>>16;x=((R(ka>>16,la)|0)+((R(ka&65535,la)|0)>>16)+(R(ka,(x>>15)+1>>1)|0)>>13)+1>>1;b[P+(ia<<1)>>1]=(x|0)>32767?32767:((x|0)>-32768?x:-32768)&65535;c[f+1280+((c[T>>2]|0)-U+w<<2)>>2]=c[ba+(g*1300|0)+1024+(ja<<2)>>2];v=ja;w=w+1|0}}while(0);ka=c[ea>>2]|0;w=c[I>>2]|0;la=ka-u-w+-2|0;ze(M+(la<<1)|0,f+(la+(R(y,c[_>>2]|0)|0)<<1)|0,z,ka-la|0,w);c[D>>2]=c[ea>>2];c[F>>2]=1;w=a[Q>>0]|0}else w=2}td(e,f,ba,h,N,M,L,y,c[W>>2]|0,t,q,r,w<<24>>24,U);ud(f,ba,a[Q>>0]|0,N,i,P,L,V,z,A,B,u,C,c[o+(y<<2)>>2]|0,c[p+(y<<2)>>2]|0,c[q+(y<<2)>>2]|0,s,S,c[_>>2]|0,v,c[J>>2]|0,c[I>>2]|0,c[K>>2]|0,c[W>>2]|0,$,U);la=c[_>>2]|0;h=h+(la<<1)|0;v=v+1|0;i=i+la|0;P=P+(la<<1)|0;y=y+1|0}w=c[W>>2]|0;u=c[O>>2]|0;g=0;v=1;while(1){if((v|0)>=(w|0))break;ka=c[ba+(v*1300|0)+1296>>2]|0;la=(ka|0)<(u|0);u=la?ka:u;g=la?v:g;v=v+1|0}a[Z>>0]=c[ba+(g*1300|0)+1292>>2];x=c[q+((c[X>>2]|0)+-1<<2)>>2]|0;w=x>>>6<<16>>16;x=(x>>21)+1>>1;u=(c[$>>2]|0)+U|0;v=0;while(1){if((v|0)>=(U|0))break;la=(u+-1|0)%40|0;la=(la|0)<0?la+40|0:la;ka=v-U|0;a[i+ka>>0]=(((c[ba+(g*1300|0)+544+(la<<2)>>2]|0)>>>9)+1|0)>>>1;ja=c[ba+(g*1300|0)+704+(la<<2)>>2]|0;ja=((R(ja>>16,w)|0)+((R(ja&65535,w)|0)>>16)+(R(ja,x)|0)>>7)+1>>1;b[P+(ka<<1)>>1]=(ja|0)>32767?32767:((ja|0)>-32768?ja:-32768)&65535;c[f+1280+((c[T>>2]|0)-U+v<<2)>>2]=c[ba+(g*1300|0)+1024+(la<<2)>>2];u=la;v=v+1|0}y=fa;w=ba+(g*1300|0)+(c[_>>2]<<2)|0;x=y+64|0;do{c[y>>2]=c[w>>2];y=y+4|0;w=w+4|0}while((y|0)<(x|0));y=ga;w=ba+(g*1300|0)+1184|0;x=y+96|0;do{c[y>>2]=c[w>>2];y=y+4|0;w=w+4|0}while((y|0)<(x|0));c[ca>>2]=c[ba+(g*1300|0)+1280>>2];c[da>>2]=c[ba+(g*1300|0)+1284>>2];c[aa>>2]=c[r+((c[X>>2]|0)+-1<<2)>>2];Wh(f|0,f+(c[Y>>2]<<1)|0,c[ea>>2]<<1|0)|0;Wh(f+1280|0,f+1280+(c[Y>>2]<<2)|0,c[ea>>2]<<2|0)|0;l=ha;return}function sd(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function td(a,d,e,f,g,h,i,j,k,l,m,n,o,p){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=c[n+(j<<2)>>2]|0;v=m+(j<<2)|0;n=c[v>>2]|0;n=wd((n|0)>1?n:1)|0;s=(n>>4)+1|0;q=a+4584|0;r=s>>>1<<16>>16;s=(s>>16)+1>>1;m=0;while(1){if((m|0)>=(c[q>>2]|0))break;w=b[f+(m<<1)>>1]|0;t=w<<16>>16;c[g+(m<<2)>>2]=(R(t>>16,r)|0)+((R(w&65535,r)|0)>>16)+(R(t,s)|0);m=m+1|0}t=d+4348|0;a:do if(c[t>>2]|0){if(!j){w=l<<16>>16;n=(R(n>>16,w)|0)+((R(n&65535,w)|0)>>16)<<2}r=d+4332|0;q=c[r>>2]|0;s=n>>16;m=n&65535;n=q-u+-2|0;while(1){if((n|0)>=(q|0))break a;q=b[h+(n<<1)>>1]|0;c[i+(n<<2)>>2]=(R(s,q)|0)+((R(m,q)|0)>>16);n=n+1|0;q=c[r>>2]|0}}while(0);n=c[v>>2]|0;g=d+4344|0;m=c[g>>2]|0;if((n|0)==(m|0))return;r=xd(m,n)|0;q=d+4336|0;m=c[q>>2]|0;s=r>>16;f=r&65535;n=m-(c[a+4588>>2]|0)|0;while(1){if((n|0)>=(m|0))break;m=d+1280+(n<<2)|0;w=c[m>>2]|0;a=w<<16>>16;c[m>>2]=(R(s,a)|0)+((R(f,a)|0)>>16)+(R(r,(w>>15)+1>>1)|0);n=n+1|0;m=c[q>>2]|0}b:do if((o|0)==2?(c[t>>2]|0)==0:0){q=d+4332|0;m=c[q>>2]|0;n=m-u+-2|0;while(1){if((n|0)>=(m-p|0)){m=0;break b}m=i+(n<<2)|0;w=c[m>>2]|0;u=w<<16>>16;c[m>>2]=(R(s,u)|0)+((R(f,u)|0)>>16)+(R(r,(w>>15)+1>>1)|0);n=n+1|0;m=c[q>>2]|0}}else m=0;while(0);while(1){if((m|0)>=(k|0))break;n=e+(m*1300|0)+1280|0;w=c[n>>2]|0;i=w<<16>>16;c[n>>2]=(R(s,i)|0)+((R(f,i)|0)>>16)+(R(r,(w>>15)+1>>1)|0);n=e+(m*1300|0)+1284|0;w=c[n>>2]|0;i=w<<16>>16;c[n>>2]=(R(s,i)|0)+((R(f,i)|0)>>16)+(R(r,(w>>15)+1>>1)|0);n=0;while(1){if((n|0)==16){n=0;break}w=e+(m*1300|0)+(n<<2)|0;i=c[w>>2]|0;p=i<<16>>16;c[w>>2]=(R(s,p)|0)+((R(f,p)|0)>>16)+(R(r,(i>>15)+1>>1)|0);n=n+1|0}while(1){if((n|0)==24){n=0;break}w=e+(m*1300|0)+1184+(n<<2)|0;i=c[w>>2]|0;p=i<<16>>16;c[w>>2]=(R(s,p)|0)+((R(f,p)|0)>>16)+(R(r,(i>>15)+1>>1)|0);n=n+1|0}while(1){if((n|0)==40)break;w=e+(m*1300|0)+864+(n<<2)|0;i=c[w>>2]|0;p=i<<16>>16;c[w>>2]=(R(s,p)|0)+((R(f,p)|0)>>16)+(R(r,(i>>15)+1>>1)|0);w=e+(m*1300|0)+1024+(n<<2)|0;i=c[w>>2]|0;p=i<<16>>16;c[w>>2]=(R(s,p)|0)+((R(f,p)|0)>>16)+(R(r,(i>>15)+1>>1)|0);n=n+1|0}m=m+1|0}c[g>>2]=c[v>>2];return} +function ud(d,e,f,g,h,i,j,k,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;s=s|0;t=t|0;u=u|0;v=v|0;w=w|0;x=x|0;y=y|0;z=z|0;A=A|0;B=B|0;C=C|0;D=D|0;var E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0;sa=l;oa=l;l=l+((1*(B*56|0)|0)+15&-16)|0;pa=d+4336|0;qa=d+4332|0;na=t>>6;ga=(f|0)==2;ha=n+2|0;ia=n+4|0;ja=n+6|0;ka=n+8|0;la=(p|0)>0;ma=q<<16>>16;fa=q>>16;ba=A<<16>>16;ca=y>>1;da=y+-1|0;ea=o+(da<<1)|0;$=r<<16>>16;aa=s<<16>>16;X=s>>16;Y=(u|0)>2048;_=(u|0)/2|0;Z=_+-512|0;_=512-_|0;O=u<<16>>16;P=v+944|0;Q=R(v<<16>>16,O)|0;S=R(P<<16>>16,O)|0;T=v+-944|0;U=R(944-v<<16>>16,O)|0;V=oa+4|0;W=oa+32|0;N=(x|0)<1;f=d+1280+((c[pa>>2]|0)-p+1<<2)|0;t=j+((c[qa>>2]|0)-p+2<<2)|0;M=0;while(1){if((M|0)>=(w|0)){t=0;break}if(ga){L=c[t>>2]|0;K=b[n>>1]|0;K=(R(L>>16,K)|0)+((R(L&65535,K)|0)>>16)+2|0;L=c[t+-4>>2]|0;J=b[ha>>1]|0;J=K+((R(L>>16,J)|0)+((R(L&65535,J)|0)>>16))|0;L=c[t+-8>>2]|0;K=b[ia>>1]|0;K=J+((R(L>>16,K)|0)+((R(L&65535,K)|0)>>16))|0;L=c[t+-12>>2]|0;J=b[ja>>1]|0;J=K+((R(L>>16,J)|0)+((R(L&65535,J)|0)>>16))|0;L=c[t+-16>>2]|0;K=b[ka>>1]|0;K=J+((R(L>>16,K)|0)+((R(L&65535,K)|0)>>16))<<1;t=t+4|0}else K=0;if(la){L=(c[f>>2]|0)+(c[f+-8>>2]|0)|0;L=(R(L>>16,ma)|0)+((R(L&65535,ma)|0)>>16)|0;J=c[f+-4>>2]|0;J=K-(L+(R(J>>16,fa)|0)+((R(J&65535,fa)|0)>>16)<<2)|0;L=f+4|0}else{J=0;L=f}H=M+15|0;I=g+(M<<2)|0;G=0;while(1){if((G|0)>=(B|0))break;s=e+(G*1300|0)+1288|0;c[s>>2]=(R(c[s>>2]|0,196314165)|0)+907633515;q=vd(e+(G*1300|0)+(H<<2)|0,m,z)|0;A=e+(G*1300|0)+1184|0;F=c[A>>2]|0;f=(c[e+(G*1300|0)+1284>>2]|0)+((R(F>>16,ba)|0)+((R(F&65535,ba)|0)>>16))|0;r=(c[e+(G*1300|0)+1188>>2]|0)-f|0;r=F+((R(r>>16,ba)|0)+((R(r&65535,ba)|0)>>16))|0;c[A>>2]=f;A=b[o>>1]|0;A=ca+((R(f>>16,A)|0)+((R(f&65535,A)|0)>>16))|0;f=2;while(1){if((f|0)>=(y|0))break;u=f+-1|0;F=e+(G*1300|0)+1184+(u<<2)|0;p=e+(G*1300|0)+1184+(f<<2)|0;E=c[p>>2]|0;x=E-r|0;x=(c[F>>2]|0)+((R(x>>16,ba)|0)+((R(x&65535,ba)|0)>>16))|0;c[F>>2]=r;u=b[o+(u<<1)>>1]|0;F=c[e+(G*1300|0)+1184+((f|1)<<2)>>2]|0;c[p>>2]=x;u=u<<16>>16;p=b[o+(f<<1)>>1]|0;F=F-x|0;A=A+((R(r>>16,u)|0)+((R(r&65535,u)|0)>>16))+((R(x>>16,p)|0)+((R(x&65535,p)|0)>>16))|0;r=E+((R(F>>16,ba)|0)+((R(F&65535,ba)|0)>>16))|0;f=f+2|0}F=q<<4;c[e+(G*1300|0)+1184+(da<<2)>>2]=r;x=b[ea>>1]|0;x=A+((R(r>>16,x)|0)+((R(r&65535,x)|0)>>16))<<1;p=c[e+(G*1300|0)+1280>>2]|0;E=p>>16;p=p&65535;x=x+((R(E,$)|0)+((R(p,$)|0)>>16))<<2;u=c[e+(G*1300|0)+1024+(c[C>>2]<<2)>>2]|0;p=(R(u>>16,aa)|0)+((R(u&65535,aa)|0)>>16)+(R(E,X)|0)+((R(p,X)|0)>>16)<<2;E=c[I>>2]|0;u=E-((J+F-(x+p)>>3)+1>>1)|0;s=(c[s>>2]|0)<0;u=s?0-u|0:u;u=(u|0)>30720?30720:(u|0)>-31744?u:-31744;f=u-v|0;do if(Y){if((f|0)>(Z|0)){f=f-Z|0;ra=18;break}if((f|0)>=(_|0))if((f|0)<0){ra=21;break}else{f=P;q=v;A=S;r=Q;break}else{f=f+Z|0;ra=18;break}}else ra=18;while(0);a:do if((ra|0)==18){ra=0;f=f>>10;if((f|0)>0){r=(f<<10)+-80+v|0;A=r+1024|0;f=A;q=r;A=R(A<<16>>16,O)|0;r=R(r<<16>>16,O)|0;break}switch(f|0){case 0:{f=P;q=v;A=S;r=Q;break a}case -1:{ra=21;break a}default:{}}r=(f<<10|80)+v|0;f=r+1024|0;q=r;A=R(-1024-r<<16>>16,O)|0;r=R(0-r<<16>>16,O)|0}while(0);if((ra|0)==21){ra=0;f=v;q=T;A=Q;r=U}ta=u-q<<16>>16;ta=r+(R(ta,ta)|0)>>10;u=u-f<<16>>16;u=A+(R(u,u)|0)>>10;ua=(ta|0)<(u|0);va=c[e+(G*1300|0)+1296>>2]|0;A=ua?q:f;r=ua?f:q;c[oa+(G*56|0)+4>>2]=va+(ua?ta:u);c[oa+(G*56|0)+32>>2]=va+(ua?u:ta);c[oa+(G*56|0)>>2]=A;c[oa+(G*56|0)+28>>2]=r;q=A<<4;q=(s?0-q|0:q)+K|0;A=q+F|0;u=E<<4;E=A-u|0;c[oa+(G*56|0)+16>>2]=E;E=E-x|0;c[oa+(G*56|0)+20>>2]=E-p;c[oa+(G*56|0)+12>>2]=E;c[oa+(G*56|0)+24>>2]=q;c[oa+(G*56|0)+8>>2]=A;E=r<<4;E=(s?0-E|0:E)+K|0;F=E+F|0;u=F-u|0;c[oa+(G*56|0)+44>>2]=u;x=u-x|0;c[oa+(G*56|0)+48>>2]=x-p;c[oa+(G*56|0)+40>>2]=x;c[oa+(G*56|0)+52>>2]=E;c[oa+(G*56|0)+36>>2]=F;G=G+1|0}A=((c[C>>2]|0)+-1|0)%40|0;x=(A|0)<0;f=A+40|0;c[C>>2]=x?f:A;A=(x?f:A)+D|0;f=c[V>>2]|0;x=0;q=1;while(1){if((q|0)>=(B|0))break;ua=c[oa+(q*56|0)+4>>2]|0;va=(ua|0)<(f|0);f=va?ua:f;x=va?q:x;q=q+1|0}u=(A|0)%40|0;q=c[e+(x*1300|0)+384+(u<<2)>>2]|0;f=0;while(1){if((f|0)>=(B|0))break;if((c[e+(f*1300|0)+384+(u<<2)>>2]|0)!=(q|0)){va=oa+(f*56|0)+4|0;c[va>>2]=(c[va>>2]|0)+134217727;va=oa+(f*56|0)+32|0;c[va>>2]=(c[va>>2]|0)+134217727}f=f+1|0}f=c[V>>2]|0;q=0;A=0;r=c[W>>2]|0;s=1;while(1){if((s|0)>=(B|0))break;K=c[oa+(s*56|0)+4>>2]|0;ta=(K|0)>(f|0);va=c[oa+(s*56|0)+32>>2]|0;ua=(va|0)<(r|0);f=ta?K:f;q=ta?s:q;A=ua?s:A;r=ua?va:r;s=s+1|0}if((r|0)<(f|0)){Sh(e+(q*1300|0)+(M<<2)|0,e+(A*1300|0)+(M<<2)|0,1300-(M<<2)|0)|0;va=oa+(q*56|0)|0;ua=oa+(A*56|0)+28|0;c[va>>2]=c[ua>>2];c[va+4>>2]=c[ua+4>>2];c[va+8>>2]=c[ua+8>>2];c[va+12>>2]=c[ua+12>>2];c[va+16>>2]=c[ua+16>>2];c[va+20>>2]=c[ua+20>>2];c[va+24>>2]=c[ua+24>>2]}if(!(N&(M|0)<(D|0))){va=M-D|0;a[h+va>>0]=(((c[e+(x*1300|0)+544+(u<<2)>>2]|0)>>>9)+1|0)>>>1;ta=c[e+(x*1300|0)+704+(u<<2)>>2]|0;ua=c[k+(u<<2)>>2]|0;K=ua<<16>>16;ua=((R(ta>>16,K)|0)+((R(ta&65535,K)|0)>>16)+(R(ta,(ua>>15)+1>>1)|0)>>7)+1>>1;b[i+(va<<1)>>1]=(ua|0)>32767?32767:((ua|0)>-32768?ua:-32768)&65535;c[d+1280+((c[pa>>2]|0)-D<<2)>>2]=c[e+(x*1300|0)+1024+(u<<2)>>2];c[j+((c[qa>>2]|0)-D<<2)>>2]=c[e+(x*1300|0)+864+(u<<2)>>2]}c[pa>>2]=(c[pa>>2]|0)+1;c[qa>>2]=(c[qa>>2]|0)+1;q=M+16|0;f=0;while(1){if((f|0)>=(B|0))break;c[e+(f*1300|0)+1280>>2]=c[oa+(f*56|0)+12>>2];c[e+(f*1300|0)+1284>>2]=c[oa+(f*56|0)+16>>2];va=c[oa+(f*56|0)+8>>2]|0;c[e+(f*1300|0)+(q<<2)>>2]=va;c[e+(f*1300|0)+704+(c[C>>2]<<2)>>2]=va;va=c[oa+(f*56|0)>>2]|0;c[e+(f*1300|0)+544+(c[C>>2]<<2)>>2]=va;c[e+(f*1300|0)+864+(c[C>>2]<<2)>>2]=c[oa+(f*56|0)+24>>2]<<1;c[e+(f*1300|0)+1024+(c[C>>2]<<2)>>2]=c[oa+(f*56|0)+20>>2];ua=e+(f*1300|0)+1288|0;va=(c[ua>>2]|0)+((va>>9)+1>>1)|0;c[ua>>2]=va;c[e+(f*1300|0)+384+(c[C>>2]<<2)>>2]=va;c[e+(f*1300|0)+1296>>2]=c[oa+(f*56|0)+4>>2];f=f+1|0}c[k+(c[C>>2]<<2)>>2]=na;f=L;M=M+1|0}while(1){if((t|0)>=(B|0))break;f=e+(t*1300|0)|0;q=e+(t*1300|0)+(w<<2)|0;A=f+64|0;do{c[f>>2]=c[q>>2];f=f+4|0;q=q+4|0}while((f|0)<(A|0));t=t+1|0}l=sa;return}function vd(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=c[a>>2]|0;h=b[d>>1]|0;h=(e>>1)+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-4>>2]|0;f=b[d+2>>1]|0;f=h+((R(g>>16,f)|0)+((R(g&65535,f)|0)>>16))|0;g=c[a+-8>>2]|0;h=b[d+4>>1]|0;h=f+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-12>>2]|0;f=b[d+6>>1]|0;f=h+((R(g>>16,f)|0)+((R(g&65535,f)|0)>>16))|0;g=c[a+-16>>2]|0;h=b[d+8>>1]|0;h=f+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-20>>2]|0;f=b[d+10>>1]|0;f=h+((R(g>>16,f)|0)+((R(g&65535,f)|0)>>16))|0;g=c[a+-24>>2]|0;h=b[d+12>>1]|0;h=f+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-28>>2]|0;f=b[d+14>>1]|0;f=h+((R(g>>16,f)|0)+((R(g&65535,f)|0)>>16))|0;g=c[a+-32>>2]|0;h=b[d+16>>1]|0;h=f+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-36>>2]|0;f=b[d+18>>1]|0;f=h+((R(g>>16,f)|0)+((R(g&65535,f)|0)>>16))|0;if((e|0)!=16){h=f;return h|0}g=c[a+-40>>2]|0;e=b[d+20>>1]|0;e=f+((R(g>>16,e)|0)+((R(g&65535,e)|0)>>16))|0;g=c[a+-44>>2]|0;h=b[d+22>>1]|0;h=e+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-48>>2]|0;e=b[d+24>>1]|0;e=h+((R(g>>16,e)|0)+((R(g&65535,e)|0)>>16))|0;g=c[a+-52>>2]|0;h=b[d+26>>1]|0;h=e+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;g=c[a+-56>>2]|0;e=b[d+28>>1]|0;e=h+((R(g>>16,e)|0)+((R(g&65535,e)|0)>>16))|0;g=c[a+-60>>2]|0;h=b[d+30>>1]|0;h=e+((R(g>>16,h)|0)+((R(g&65535,h)|0)>>16))|0;return h|0}function wd(a){a=a|0;var b=0,c=0,d=0,e=0,f=0;b=yd((a|0)>0?a:0-a|0)|0;a=a<>16;d=536870911/(f|0)|0;e=d<<16;c=e>>16;a=536870912-((R(f,c)|0)+((R(a&65535,c)|0)>>16))<<3;d=e+((R(a>>16,c)|0)+((R(a&65528,c)|0)>>16))+(R(a,(d>>15)+1>>1)|0)|0;a=62-b|0;b=a+-47|0;if((b|0)>=1)return ((b|0)<32?d>>b:0)|0;a=47-a|0;b=-2147483648>>a;c=2147483647>>>a;if((b|0)>(c|0)){if((d|0)>(b|0)){f=b;f=f<(c|0)){f=c;f=f<0?a:0-a|0)|0;f=a<0?b:0-b|0)|0)+-1|0;b=b<>16|0)|0)<<16>>16;e=(R(f>>16,d)|0)+((R(f&65535,d)|0)>>16)|0;b=Uh(b|0,((b|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0;b=Rh(b|0,C|0,29)|0;b=f-(b&-8)|0;d=e+((R(b>>16,d)|0)+((R(b&65535,d)|0)>>16))|0;a=c+28-a|0;b=a+-16|0;if((a|0)>=16)return ((b|0)<32?d>>b:0)|0;a=16-a|0;b=-2147483648>>a;c=2147483647>>>a;if((b|0)>(c|0)){if((d|0)>(b|0)){f=b;f=f<(c|0)){f=c;f=f<>2]|0;Bd(a,h,c[i>>2]|0,33430);i=c[g>>2]|0;Bd(a,i,h,33278);h=c[e>>2]|0;Bd(a,h,i,33126);Bd(a,c[b>>2]|0,h,32974);Bd(a,c[b+8>>2]|0,c[e+4>>2]|0,32974);h=c[e+8>>2]|0;Bd(a,h,c[g+4>>2]|0,33126);Bd(a,c[b+16>>2]|0,h,32974);Bd(a,c[b+24>>2]|0,c[e+12>>2]|0,32974);h=c[g+8>>2]|0;Bd(a,h,c[f+4>>2]|0,33278);f=c[e+16>>2]|0;Bd(a,f,h,33126);Bd(a,c[b+32>>2]|0,f,32974);Bd(a,c[b+40>>2]|0,c[e+20>>2]|0,32974);f=c[e+24>>2]|0;Bd(a,f,c[g+12>>2]|0,33126);Bd(a,c[b+48>>2]|0,f,32974);Bd(a,c[b+56>>2]|0,c[e+28>>2]|0,32974);l=d;return}function Ad(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=0;while(1){if((e|0)>=(d|0))break;f=e<<1;c[a+(e<<2)>>2]=(c[b+(f<<2)>>2]|0)+(c[b+((f|1)<<2)>>2]|0);e=e+1|0}return}function Bd(a,b,c,e){a=a|0;b=b|0;c=c|0;e=e|0;if((c|0)<=0)return;Rb(a,b,e+(d[33582+c>>0]|0)|0,8);return}function Cd(a){a=a|0;var b=0,d=0;b=a;d=b+112|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));b=0;while(1){if((b|0)==4){b=0;break}d=b+1|0;c[a+92+(b<<2)>>2]=Dd(50/(d|0)|0)|0;b=d}while(1){if((b|0)==4)break;d=(c[a+92+(b<<2)>>2]|0)*100|0;c[a+60+(b<<2)>>2]=d;c[a+76+(b<<2)>>2]=2147483647/(d|0)|0;b=b+1|0}c[a+108>>2]=15;b=0;while(1){if((b|0)==4)break;c[a+40+(b<<2)>>2]=25600;b=b+1|0}return 0}function Dd(a){a=a|0;return ((a|0)>1?a:1)|0}function Ed(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=l;l=l+48|0;s=v+32|0;u=v+16|0;q=v;r=a+32|0;t=a+4580|0;m=c[t>>2]|0;o=m>>1;h=m>>2;f=m>>3;c[q>>2]=0;g=f+h|0;c[q+4>>2]=g;n=g+f|0;c[q+8>>2]=n;k=n+h|0;c[q+12>>2]=k;p=l;l=l+((1*(k+o<<1)|0)+15&-16)|0;qe(d,r,p,p+(k<<1)|0,m);qe(p,a+40|0,p,p+(n<<1)|0,o);qe(p,a+48|0,p,p+(g<<1)|0,h);h=p+(f+-1<<1)|0;g=b[h>>1]>>1;b[h>>1]=g;h=g;while(1){d=f+-1|0;if((f|0)<=1)break;n=p+(f+-2<<1)|0;o=b[n>>1]>>1;b[n>>1]=o;b[p+(d<<1)>>1]=(h&65535)-(o&65535);f=d;h=o}d=a+88|0;b[p>>1]=(e[p>>1]|0)-(e[d>>1]|0);b[d>>1]=g;d=0;j=0;while(1){if((j|0)==4)break;k=c[t>>2]|0;k=k>>(Fd(4-j|0,3)|0)>>2;m=a+56+(j<<2)|0;g=c[m>>2]|0;n=s+(j<<2)|0;c[n>>2]=g;o=q+(j<<2)|0;h=0;i=0;while(1){if((i|0)==4)break;else{f=0;d=0}while(1){if((f|0)>=(k|0))break;w=b[p+((c[o>>2]|0)+f+h<<1)>>1]>>3;f=f+1|0;d=d+(R(w,w)|0)|0}w=g+(d>>((i|0)>2&1))|0;w=(w|0)<0?2147483647:w;c[n>>2]=w;h=h+k|0;i=i+1|0;g=w}c[m>>2]=d;j=j+1|0}Gd(s,r);f=0;j=0;h=0;while(1){if((j|0)==4)break;d=c[s+(j<<2)>>2]|0;g=c[a+92+(j<<2)>>2]|0;i=d-g|0;if((i|0)>0){w=d>>>0<8388608;d=((w?d<<8:d)|0)/((w?g:g>>8)+1|0)|0;c[u+(j<<2)>>2]=d;d=(ue(d)|0)+-1024|0;g=d<<16>>16;h=h+(R(g,g)|0)|0;if((i|0)<1048576){d=R((Hd(i)|0)<<6>>16,g)|0;d=d+((R((Hd(i)|0)<<6&65472,g)|0)>>16)|0}w=c[19312+(j<<2)>>2]|0;d=d<<16>>16;f=f+((R(w>>16,d)|0)+((R(w&65535,d)|0)>>16))|0;d=h}else{c[u+(j<<2)>>2]=256;d=h}j=j+1|0;h=d}g=(((Hd((h|0)/4|0)|0)*196608>>16)*45e3>>16)+-128|0;c[a+4708>>2]=((Xe(f)|0)<<1)+-32768;f=0;d=0;while(1){if((d|0)==4)break;w=d+1|0;f=f+(R(w,(c[s+(d<<2)>>2]|0)-(c[a+92+(d<<2)>>2]|0)>>4)|0)|0;d=w}d=Xe(g)|0;if((f|0)>=1){if((f|0)<32768){w=(Hd(f<<((c[t>>2]|0)==((c[a+4572>>2]|0)*10|0)?16:15))|0)+32768|0;d=d<<16>>16;d=(R(w>>16,d)|0)+((R(w&65535,d)|0)>>16)|0}}else d=d>>1;c[a+4528>>2]=Fd(d>>7,255)|0;f=d<<16>>16;d=((R(d>>16,f)|0)<<16)+(R(d&65535,f)|0)|0;d=d>>((c[t>>2]|0)==((c[a+4572>>2]|0)*10|0)?21:20);f=0;while(1){if((f|0)==4)break;t=a+72+(f<<2)|0;s=c[t>>2]|0;w=(c[u+(f<<2)>>2]|0)-s|0;w=s+((R(w>>16,d)|0)+((R(w&65535,d)|0)>>16))|0;c[t>>2]=w;c[a+4692+(f<<2)>>2]=Xe(((ue(w)|0)*3|0)+-5120>>4)|0;f=f+1|0}l=v;return}function Fd(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Gd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=b+108|0;d=c[j>>2]|0;if((d|0)<1e3)f=32767/((d>>4)+1|0)|0;else f=0;g=0;while(1){if((g|0)==4)break;i=b+60+(g<<2)|0;e=c[i>>2]|0;d=(c[a+(g<<2)>>2]|0)+(c[b+92+(g<<2)>>2]|0)|0;d=(d|0)<0?2147483647:d;h=2147483647/(d>>>0)|0;if((d|0)<=(e<<3|0))if((d|0)<(e|0))d=1024;else{k=e<<16>>16;l=R(h>>>16,k)|0;k=R(h&65535,k)|0;d=R(h,(e>>15)+1>>1)|0;d=l+(k>>16)+d>>16<<11|(l+(k>>>16)+d|0)>>>5&2047}else d=128;l=Ld(d,f)|0;k=b+76+(g<<2)|0;e=c[k>>2]|0;h=h-e|0;l=l<<16>>16;l=e+((R(h>>16,l)|0)+((R(h&65535,l)|0)>>16))|0;c[k>>2]=l;l=2147483647/(l|0)|0;c[i>>2]=(l|0)<16777215?l:16777215;g=g+1|0}c[j>>2]=(c[j>>2]|0)+1;return}function Hd(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e+4|0;d=e;if((a|0)<1){d=0;l=e;return d|0}Id(a,b,d);b=c[b>>2]|0;b=((b&1|0)==0?46214:32768)>>>(b>>1);d=(R(c[d>>2]<<16>>16,13959168)|0)>>16;d=b+((R(b>>16,d)|0)+((R(b&65535,d)|0)>>16))|0;l=e;return d|0}function Id(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=Jd(a)|0;c[b>>2]=e;c[d>>2]=(Kd(a,24-e|0)|0)&127;return}function Jd(a){a=a|0;return U(a|0)|0}function Kd(a,b){a=a|0;b=b|0;if(!b){b=a;return b|0}if((b|0)<0){b=a<<0-b|a>>>(b+32|0);return b|0}else{b=a<<32-b|a>>>b;return b|0}return 0}function Ld(a,b){a=a|0;b=b|0;return ((a|0)>(b|0)?a:b)|0}function Md(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=c[a+4572>>2]|0;f=h<<16>>16;g=f*1e3|0;if(!f){b=c[a+4568>>2]|0;h=c[a+4552>>2]|0;h=(((b|0)<(h|0)?b:h)|0)/1e3|0;return h|0}e=c[a+4552>>2]|0;d=c[a+4560>>2]|0;if(!((g|0)>(e|0)|(g|0)>(d|0))?(g|0)>=(c[a+4564>>2]|0):0){f=a+24|0;d=c[f>>2]|0;if((d|0)>255)c[a+28>>2]=0;if((c[a+4532>>2]|0)==0?(c[b+64>>2]|0)==0:0)return h|0;e=c[a+4568>>2]|0;if((g|0)>(e|0)){e=a+28|0;if(!(c[e>>2]|0)){c[f>>2]=256;d=a+16|0;c[d>>2]=0;c[d+4>>2]=0;d=256}if(c[b+64>>2]|0){c[e>>2]=0;h=(h|0)==16?12:8;return h|0}if((d|0)<1){c[b+88>>2]=1;a=b+56|0;g=c[a>>2]|0;c[a>>2]=g-((g*5|0)/((c[b+24>>2]|0)+5|0)|0);return h|0}else{c[e>>2]=-2;return h|0}}if((g|0)>=(e|0)){d=a+28|0;if((c[d>>2]|0)>=0)return h|0;c[d>>2]=1;return h|0}if(c[b+64>>2]|0){c[f>>2]=0;b=a+16|0;c[b>>2]=0;c[b+4>>2]=0;c[a+28>>2]=1;h=(h|0)==8?12:16;return h|0}d=a+28|0;if(!(c[d>>2]|0)){c[b+88>>2]=1;a=b+56|0;g=c[a>>2]|0;c[a>>2]=g-((g*5|0)/((c[b+24>>2]|0)+5|0)|0);return h|0}else{c[d>>2]=1;return h|0}}b=(e|0)<(d|0)?e:d;h=c[a+4564>>2]|0;h=(((b|0)>(h|0)?b:h)|0)/1e3|0;return h|0}function Nd(d,e,f,g,h,i,j,k,m){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=l;l=l+16|0;E=G+12|0;B=G+8|0;C=G+4|0;D=G;F=0;n=2147483647;s=0;A=0;while(1){if((A|0)==3)break;w=c[18992+(A<<2)>>2]|0;x=c[19004+(A<<2)>>2]|0;y=c[19016+(A<<2)>>2]|0;z=a[30682+A>>0]|0;o=c[g>>2]|0;t=0;p=0;u=j;v=i;s=0;while(1){if((t|0)>=(m|0))break;Od(E+t|0,B,C,D,v,u,x,y,w,k,(ye(5333-o+896|0)|0)+-51|0,z);r=s+(c[B>>2]|0)|0;q=p+(c[C>>2]|0)|0;p=(c[D>>2]|0)+51|0;if((o+(ue(p)|0)|0)<896)o=0;else o=o+(ue(p)|0)+-896|0;t=t+1|0;p=(q|0)<0?2147483647:q;u=u+20|0;v=v+100|0;s=(r|0)<0?2147483647:r}if((p|0)>(n|0))o=F;else{a[f>>0]=A;Sh(e|0,E|0,m|0)|0;n=p}F=o;A=A+1|0}p=c[19004+(a[f>>0]<<2)>>2]|0;o=0;while(1){if((o|0)>=(m|0))break;q=e+o|0;r=o*5|0;n=0;while(1){if((n|0)==5)break;b[d+(r+n<<1)>>1]=a[p+(((a[q>>0]|0)*5|0)+n)>>0]<<7;n=n+1|0}o=o+1|0}c[g>>2]=F;c[h>>2]=R(((ue(s>>((m|0)==2?1:2))|0)<<16)+-125829120>>16,-3)|0;l=G;return}function Od(b,e,f,g,h,i,j,k,l,m,n,o){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;G=c[i>>2]<<7;J=c[i+4>>2]<<7;K=c[i+8>>2]<<7;L=c[i+12>>2]<<7;E=0-(c[i+16>>2]<<7)|0;c[f>>2]=2147483647;c[e>>2]=2147483647;a[b>>0]=0;r=h+4|0;s=h+8|0;t=h+12|0;u=h+16|0;v=h+28|0;w=h+32|0;x=h+36|0;y=h+24|0;z=h+52|0;A=h+56|0;B=h+48|0;C=h+76|0;D=h+72|0;E=E<<1;F=h+96|0;q=m<<16>>16;i=0;while(1){if((i|0)>=(o|0))break;p=d[k+i>>0]|0;P=a[j+1>>0]|0;M=(R(c[r>>2]|0,P)|0)-G|0;O=a[j+2>>0]|0;M=M+(R(c[s>>2]|0,O)|0)|0;N=a[j+3>>0]|0;M=M+(R(c[t>>2]|0,N)|0)|0;m=a[j+4>>0]|0;M=M+(R(c[u>>2]|0,m)|0)<<1;Q=a[j>>0]|0;M=M+(R(c[h>>2]|0,Q)|0)|0;Q=(R(M>>16,Q)|0)+((R(M&65535,Q)|0)>>16)+32801|0;M=(R(c[v>>2]|0,O)|0)-J|0;M=M+(R(c[w>>2]|0,N)|0)|0;M=M+(R(c[x>>2]|0,m)|0)<<1;M=M+(R(c[y>>2]|0,P)|0)|0;P=Q+((R(M>>16,P)|0)+((R(M&65535,P)|0)>>16))|0;M=(R(c[z>>2]|0,N)|0)-K|0;M=M+(R(c[A>>2]|0,m)|0)<<1;M=M+(R(c[B>>2]|0,O)|0)|0;O=P+((R(M>>16,O)|0)+((R(M&65535,O)|0)>>16))|0;M=(R(c[C>>2]|0,m)|0)-L<<1;M=M+(R(c[D>>2]|0,N)|0)|0;N=O+((R(M>>16,N)|0)+((R(M&65535,N)|0)>>16))|0;M=E+(R(c[F>>2]|0,m)|0)|0;m=N+((R(M>>16,m)|0)+((R(M&65535,m)|0)>>16))|0;if((m|0)>-1?(H=m+((p|0)>(n|0)?p-n<<11:0)|0,I=R(q,((ue(H)|0)<<16)+-125829120>>16)|0,I=I+(d[l+i>>0]<<2)|0,(I|0)<=(c[f>>2]|0)):0){c[f>>2]=I;c[e>>2]=H;a[b>>0]=i;c[g>>2]=p}j=j+5|0;i=i+1|0}return}function Pd(b){b=b|0;var d=0,e=0,f=0,g=0;if((a[b+4537>>0]|0)!=2)return;e=R(c[b+4572>>2]|0,65536e3)|0;e=(ue((e|0)/(c[b+4540>>2]|0)|0)|0)+-2048|0;d=c[b+4692>>2]|0;g=0-d<<2;d=d<<16>>16;f=R(g>>16,d)|0;d=R(g&65532,d)|0;g=R(f+(d>>16)>>16,e-((ue(3932160)|0)+63488)<<16>>16)|0;e=e+(g+((R(f+(d>>>16)&65535,e-((ue(3932160)|0)+63488)<<16>>16)|0)>>16))|0;d=b+8|0;f=c[d>>2]|0;e=e-(f>>8)|0;e=(e|0)<0?e*3|0:e;e=R(c[b+4528>>2]<<16>>16,(e|0)>51?51:((e|0)>-51?e:-51)<<16>>16)|0;c[d>>2]=f+(((e>>16)*6554|0)+(((e&65535)*6554|0)>>>16));e=(ue(60)|0)<<8;e=(e|0)>((ue(100)|0)<<8|0);b=c[d>>2]|0;do if(e){if((b|0)>((ue(60)|0)<<8|0)){b=(ue(60)|0)<<8;break}g=c[d>>2]|0;if((g|0)<((ue(100)|0)<<8|0)){b=(ue(100)|0)<<8;break}else{b=c[d>>2]|0;break}}else{if((b|0)>((ue(100)|0)<<8|0)){b=(ue(100)|0)<<8;break}g=c[d>>2]|0;if((g|0)<((ue(60)|0)<<8|0)){b=(ue(60)|0)<<8;break}else{b=c[d>>2]|0;break}}while(0);c[d>>2]=b;return}function Qd(f,g,h,i,j,k,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=l;l=l+128|0;G=J;H=J+72|0;I=J+40|0;u=J+104|0;v=J+8|0;w=h+2|0;Ge(g,c[h+36>>2]|0,b[w>>1]|0);z=b[h>>1]|0;A=l;l=l+((1*((z&65535)<<2)|0)+15&-16)|0;x=h+8|0;y=h+12|0;Td(A,g,c[x>>2]|0,c[y>>2]|0,z<<16>>16,b[w>>1]|0);z=l;l=l+((1*(k<<2)|0)+15&-16)|0;Ye(A,z,b[h>>1]|0,k);A=l;l=l+((1*(k<<2)|0)+15&-16)|0;B=l;l=l+((1*(k<<4)|0)+15&-16)|0;C=h+32|0;D=h+4|0;E=h+6|0;F=h+16|0;r=m>>1;s=j<<14>>16;q=0;while(1){if((q|0)>=(k|0))break;t=c[z+(q<<2)>>2]|0;n=b[w>>1]|0;p=R(t,n)|0;o=(c[x>>2]|0)+p|0;p=(c[y>>2]|0)+(p<<1)|0;m=0;while(1){if((m|0)>=(n|0))break;K=b[p+(m<<1)>>1]|0;b[H+(m<<1)>>1]=(R((e[g+(m<<1)>>1]|0)-(d[o+m>>0]<<7)<<16>>16,K)|0)>>>14;b[I+(m<<1)>>1]=Rd(b[i+(m<<1)>>1]|0,R(K,K)|0)|0;m=m+1|0}Ud(v,u,h,t);n=Vd(B+(q<<4)|0,H,I,u,v,c[C>>2]|0,b[D>>1]|0,b[E>>1]|0,j,b[w>>1]|0)|0;o=A+(q<<2)|0;c[o>>2]=n;p=(c[F>>2]|0)+(R(r,b[h>>1]|0)|0)|0;if(!t)m=256;else m=d[p+(t+-1)>>0]|0;c[o>>2]=n+(R(1024-(ue(m-(d[p+t>>0]|0)|0)|0)<<16>>16,s)|0);q=q+1|0}Ye(A,G,k,1);K=c[G>>2]|0;a[f>>0]=c[z+(K<<2)>>2];Sh(f+1|0,B+(K<<4)|0,b[w>>1]|0)|0;hd(g,f,h);l=J;return}function Rd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=Sd((a|0)>0?a:0-a|0)|0;f=a<0?b:0-b|0)|0)+-1|0;b=b<>16|0)|0)<<16>>16;e=(R(f>>16,d)|0)+((R(f&65535,d)|0)>>16)|0;b=Uh(b|0,((b|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0;b=Rh(b|0,C|0,29)|0;b=f-(b&-8)|0;d=e+((R(b>>16,d)|0)+((R(b&65535,d)|0)>>16))|0;a=c+28-a|0;b=a+-21|0;if((a|0)>=21)return ((b|0)<32?d>>b:0)|0;a=21-a|0;b=-2147483648>>a;c=2147483647>>>a;if((b|0)>(c|0)){if((d|0)>(b|0)){f=b;f=f<(c|0)){f=c;f=f<>1]|0)-(d[g+r>>0]<<7)<<16>>16,b[h+(r<<1)>>1]|0)|0;s=k>>1;p=R((e[f+(n<<1)>>1]|0)-(d[g+n>>0]<<7)<<16>>16,b[h+(n<<1)>>1]|0)|0;q=r>>1;k=p;l=l+((r|0)>(s|0)?r-s|0:s-r|0)+((p|0)>(q|0)?p-q|0:q-p|0)|0;o=n}c[a+(m<<2)>>2]=l;g=g+j|0;h=h+(j<<1)|0;m=m+1|0}return}function Ud(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;j=f+2|0;h=b[j>>1]|0;i=f+20|0;f=(c[f+24>>2]|0)+((R(h<<16>>16,g)|0)/2|0)|0;g=0;while(1){if((g|0)>=(h<<16>>16|0))break;l=a[f>>0]|0;k=l&255;b[d+(g<<1)>>1]=(k>>>1&7)*9;a[e+g>>0]=a[(c[i>>2]|0)+(g+((b[j>>1]|0)+-1&0-(l&1)))>>0]|0;h=g|1;b[d+(h<<1)>>1]=((l&255)>>>5)*9&255;a[e+h>>0]=a[(c[i>>2]|0)+(g+((b[j>>1]|0)+-1&0-(k>>>4&1))+1)>>0]|0;f=f+1|0;g=g+2|0;h=b[j>>1]|0}return}function Vd(e,f,g,h,i,j,k,m,n,o){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;J=l;l=l+320|0;B=J+224|0;I=J+256|0;C=J+240|0;H=J+192|0;D=J+176|0;E=J+160|0;F=J+80|0;G=J;r=k<<16>>16;q=-10;while(1){if((q|0)==10)break;k=q<<10;p=k+1024|0;a:do if((q|0)>0){p=(p<<16>>16)+-102|0;k=(q<<26>>16)+-102|0}else{switch(q|0){case 0:{p=(p<<16>>16)+-102|0;break a}case -1:{k=-1024;break}default:p=p|102}k=k|102}while(0);A=q+10|0;c[F+(A<<2)>>2]=(R(k<<16>>16,r)|0)>>16;c[G+(A<<2)>>2]=(R(p<<16>>16,r)|0)>>16;q=q+1|0}c[H>>2]=0;b[C>>1]=0;A=o<<16>>16;z=m<<16>>16;y=n<<16>>16;q=1;k=A;b:while(1){x=(q|0)<3;p=k;c:while(1){k=p+-1|0;if((p|0)<=0){q=0;r=2147483647;k=0;break b}m=j+(b[i+(k<<1)>>1]|0)|0;n=b[f+(k<<1)>>1]|0;s=h+k|0;t=g+(k<<1)|0;r=0;while(1){if((r|0)>=(q|0))break;w=C+(r<<1)|0;v=(R(d[s>>0]|0,b[w>>1]|0)|0)>>8;p=(R(z,n-v<<16>>16)|0)>>16;p=(p|0)>9?9:(p|0)>-10?p:-10;a[I+(r<<4)+k>>0]=p;o=p+10|0;u=(c[F+(o<<2)>>2]|0)+v|0;v=(c[G+(o<<2)>>2]|0)+v|0;b[w>>1]=u;w=r+q|0;b[C+(w<<1)>>1]=v;do if((p|0)>2)if((p|0)==3){o=280;p=d[m+7>>0]|0;break}else{p=p*43|0;o=p+151|0;p=p+108|0;break}else{if((p|0)>=-3){o=d[m+(p+5)>>0]|0;p=d[m+(p+4)>>0]|0;break}if((p|0)==-4){o=d[m+1>>0]|0;p=280;break}else{p=R(p,-43)|0;o=p+65|0;p=p+108|0;break}}while(0);L=H+(r<<2)|0;K=c[L>>2]|0;M=n-u<<16>>16;M=R(M,M)|0;u=b[t>>1]|0;c[L>>2]=K+(R(M,u)|0)+(R(y,p<<16>>16)|0);v=n-v<<16>>16;c[H+(w<<2)>>2]=K+(R(R(v,v)|0,u)|0)+(R(y,o<<16>>16)|0);r=r+1|0}if(x){p=0;break}else t=0;while(1){if((t|0)==4)break;o=H+(t<<2)|0;p=c[o>>2]|0;r=t+4|0;m=H+(r<<2)|0;s=c[m>>2]|0;n=E+(t<<2)|0;if((p|0)>(s|0)){c[n>>2]=p;c[o>>2]=s;c[m>>2]=p;L=C+(t<<1)|0;M=b[L>>1]|0;p=C+(r<<1)|0;b[L>>1]=b[p>>1]|0;b[p>>1]=M;p=s}else{c[n>>2]=s;r=t}c[D+(t<<2)>>2]=p;c[B+(t<<2)>>2]=r;t=t+1|0}while(1){p=0;r=2147483647;o=0;n=0;m=0;while(1){if((m|0)==4)break;K=c[E+(m<<2)>>2]|0;M=(r|0)>(K|0);w=c[D+(m<<2)>>2]|0;L=(p|0)<(w|0);p=L?w:p;r=M?K:r;o=L?m:o;n=M?m:n;m=m+1|0}if((r|0)>=(p|0)){p=0;break}c[B+(o<<2)>>2]=c[B+(n<<2)>>2]^4;p=n+4|0;c[H+(o<<2)>>2]=c[H+(p<<2)>>2];b[C+(o<<1)>>1]=b[C+(p<<1)>>1]|0;c[D+(o<<2)>>2]=0;c[E+(n<<2)>>2]=2147483647;o=I+(o<<4)|0;p=I+(n<<4)|0;r=o+16|0;do{a[o>>0]=a[p>>0]|0;o=o+1|0;p=p+1|0}while((o|0)<(r|0))}while(1){if((p|0)==4){p=k;continue c}M=I+(p<<4)+k|0;a[M>>0]=(d[M>>0]|0)+((c[B+(p<<2)>>2]|0)>>>2);p=p+1|0}}while(1){if((p|0)>=(q|0))break;a[I+(p+q<<4)+k>>0]=(d[I+(p<<4)+k>>0]|0)+1;p=p+1|0}q=q<<1;p=q;while(1){if((p|0)>=4)continue b;a[I+(p<<4)+k>>0]=a[I+(p-q<<4)+k>>0]|0;p=p+1|0}}while(1){if((k|0)==8)break;M=c[H+(k<<2)>>2]|0;L=(r|0)>(M|0);q=L?k:q;r=L?M:r;k=k+1|0}p=q&3;k=0;while(1){if((k|0)>=(A|0))break;a[e+k>>0]=a[I+(p<<4)+k>>0]|0;k=k+1|0}a[e>>0]=(d[e>>0]|0)+(q>>>2);l=J;return r|0}function Wd(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+96|0;p=q+64|0;n=q+32|0;k=q;m=c[d+4528>>2]<<16>>16;m=(R(m,-5)|0)+(m*59246>>16)+3146|0;m=m+((c[d+4576>>2]|0)==2?m>>1:0)|0;o=d+4636|0;Je(n,f,c[o>>2]|0);a:do if((c[d+4628>>2]|0)==1?(h=d+4763|0,i=a[h>>0]|0,i<<24>>24<4):0){ed(p,g,f,i<<24>>24,c[o>>2]|0);Je(k,p,c[o>>2]|0);j=a[h>>0]|0;j=(R(j,j)|0)<<27;i=c[o>>2]|0;j=j>>16;h=0;while(1){if((h|0)>=(i|0)){j=1;break a}r=n+(h<<1)|0;b[r>>1]=((b[r>>1]|0)>>>1)+((R(b[k+(h<<1)>>1]|0,j)|0)>>>16);h=h+1|0}}else j=0;while(0);Qd(d+4740|0,f,c[d+4688>>2]|0,n,m,c[d+4656>>2]|0,a[d+4761>>0]|0);h=e+32|0;Ee(h,f,c[o>>2]|0);i=c[o>>2]|0;if(j){ed(p,g,f,a[d+4763>>0]|0,i);Ee(e,p,c[o>>2]|0);l=q;return}else{Sh(e|0,h|0,i<<1|0)|0;l=q;return}}function Xd(d,f,g,h,i,j,k,m,n,o,p){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;C=l;l=l+16|0;z=C+8|0;w=C+4|0;x=C;A=f+-4|0;r=p+2|0;B=l;l=l+((1*(r<<1)|0)+15&-16)|0;q=0;while(1){if((q|0)>=(r|0))break;y=q+-2|0;u=b[f+(y<<1)>>1]|0;y=b[g+(y<<1)>>1]|0;v=u+y|0;y=u-y|0;b[A+(q<<1)>>1]=(v>>>1)+(v&1);y=(y>>1)+(y&1)|0;b[B+(q<<1)>>1]=(y|0)>32767?32767:((y|0)>-32768?y:-32768)&65535;q=q+1|0}v=d+4|0;t=e[v>>1]|e[v+2>>1]<<16;b[A>>1]=t;b[A+2>>1]=t>>>16;t=d+8|0;r=e[t>>1]|e[t+2>>1]<<16;c[B>>2]=r;q=A+(p<<1)|0;q=e[q>>1]|e[q+2>>1]<<16;b[v>>1]=q;b[v+2>>1]=q>>>16;v=B+(p<<1)|0;v=e[v>>1]|e[v+2>>1]<<16;b[t>>1]=v;b[t+2>>1]=v>>>16;t=l;l=l+((1*(p<<1)|0)+15&-16)|0;v=l;l=l+((1*(p<<1)|0)+15&-16)|0;q=0;while(1){if((q|0)>=(p|0))break;y=q+1|0;s=b[A+(y<<1)>>1]|0;u=((b[A+(q<<1)>>1]|0)+(b[A+(q+2<<1)>>1]|0)+(s<<16>>16<<1)>>1)+1>>1;b[t+(q<<1)>>1]=u;b[v+(q<<1)>>1]=(s&65535)-u;q=y}s=l;l=l+((1*(p<<1)|0)+15&-16)|0;u=l;l=l+((1*(p<<1)|0)+15&-16)|0;f=0;q=r&65535;while(1){if((f|0)>=(p|0))break;r=f+1|0;y=b[B+(r<<1)>>1]|0;D=((q<<16>>16)+(b[B+(f+2<<1)>>1]|0)+(y<<16>>16<<1)>>1)+1>>1;b[s+(f<<1)>>1]=D;b[u+(f<<1)>>1]=(y&65535)-D;f=r;q=y}r=(o*10|0)==(p|0);y=r?328:655;m=m<<16>>16;m=R(m,m)|0;m=(R(m>>>16,y)|0)+((R(m&65535,y)|0)>>>16)|0;y=df(w,t,s,d+12|0,p,m)|0;c[z>>2]=y;t=df(x,v,u,d+20|0,p,m)|0;v=z+4|0;c[v>>2]=t;s=(c[x>>2]|0)+((c[w>>2]<<16>>16)*3|0)|0;s=(s|0)<65536?s:65536;u=k-(r?1200:600)|0;u=(u|0)>1?u:1;r=((o<<16>>16)*900|0)+2e3|0;q=s*3|0;f=Yd(u,q+851968|0,19)|0;c[j>>2]=f;if((f|0)<(r|0)){c[j>>2]=r;k=u-r|0;c[j+4>>2]=k;D=r<<16>>16;q=Yd((k<<1)-r|0,(R(q+65536>>16,D)|0)+((R(q&65535,D)|0)>>16)|0,16)|0;if((q|0)>16384)q=16384;else q=(q|0)>0?q:0}else{c[j+4>>2]=u-f;q=16384}f=d+28|0;x=b[f>>1]|0;k=x&65535;D=m<<16>>16;b[f>>1]=k+((R(q-(x<<16>>16)>>16,D)|0)+((R(q-k&65535,D)|0)>>>16));a[i>>0]=0;a:do if(!n){q=u<<3;do if(!(b[d+30>>1]|0)){if((q|0)>=(r*13|0)){q=b[f>>1]|0;D=q<<16>>16;if(((R(s>>16,D)|0)+((R(s&65535,D)|0)>>16)|0)>=819){q=b[f>>1]|0;break}}else q=b[f>>1]|0;q=q<<16>>16;c[z>>2]=(R(q,y<<16>>16)|0)>>14;c[v>>2]=(R(q,t<<16>>16)|0)>>14;lf(z,h);c[z>>2]=0;c[v>>2]=0;c[j>>2]=u;c[j+4>>2]=0;a[i>>0]=1;q=0;r=30;break a}else{if((q|0)>=(r*11|0)){q=b[f>>1]|0;D=q<<16>>16;if(((R(s>>16,D)|0)+((R(s&65535,D)|0)>>16)|0)>=328)break}else q=b[f>>1]|0;q=q<<16>>16;c[z>>2]=(R(q,y<<16>>16)|0)>>14;c[v>>2]=(R(q,t<<16>>16)|0)>>14;lf(z,h);c[z>>2]=0;c[v>>2]=0;q=0;r=29;break a}while(0);if(q<<16>>16>15565){lf(z,h);q=16384;r=29;break}else{q=q<<16>>16;c[z>>2]=(R(q,y<<16>>16)|0)>>14;c[v>>2]=(R(q,t<<16>>16)|0)>>14;lf(z,h);q=b[f>>1]|0;r=29;break}}else{c[z>>2]=0;c[v>>2]=0;lf(z,h);q=0;r=29}while(0);if((r|0)==29)if((a[i>>0]|0)==1)r=30;else{b[d+32>>1]=0;r=34}do if((r|0)==30){f=d+32|0;D=(e[f>>1]|0)+(p-(o<<3))|0;b[f>>1]=D;if((D<<16>>16|0)<(o*5|0)){a[i>>0]=0;f=q;r=35;break}else{b[f>>1]=1e4;r=34;break}}while(0);if((r|0)==34)if(!(a[i>>0]|0)){f=q;r=35}if((r|0)==35){q=j+4|0;if((c[q>>2]|0)<1){c[q>>2]=1;c[j>>2]=Zd(u+-1|0)|0;q=f}else q=f}t=b[d>>1]|0;y=d+2|0;s=b[y>>1]|0;n=d+30|0;u=b[n>>1]|0;r=u<<16>>16;f=o<<3;k=c[z>>2]|0;m=(65536/(f|0)|0)<<16>>16;w=((R(k-(t&65535)<<16>>16,m)|0)>>15)+1>>1;x=c[v>>2]|0;v=((R(x-(s&65535)<<16>>16,m)|0)>>15)+1>>1;m=(R(q-r>>16,m)|0)+((R(q-(u&65535)&65535,m)|0)>>16)<<10;r=r<<10;s=0-(s<<16>>16)|0;t=0-(t<<16>>16)|0;u=0;while(1){if((u|0)>=(f|0))break;z=t-w|0;o=s-v|0;j=r+m|0;D=u+1|0;h=b[A+(D<<1)>>1]|0;F=(b[A+(u<<1)>>1]|0)+(b[A+(u+2<<1)>>1]|0)+(h<<1)|0;G=b[B+(D<<1)>>1]|0;E=z<<16>>16;i=o<<16>>16;i=((R(j>>16,G)|0)+((R(j&64512,G)|0)>>16)+((R(F>>7,E)|0)+((R(F<<9&65024,E)|0)>>16))+((R(h>>5,i)|0)+((R(h<<11&63488,i)|0)>>16))>>7)+1>>1;b[g+(u+-1<<1)>>1]=(i|0)>32767?32767:((i|0)>-32768?i:-32768)&65535;r=j;s=o;t=z;u=D}r=q>>6;s=q<<10&64512;t=0-k<<16>>16;u=0-x<<16>>16;while(1){if((f|0)>=(p|0))break;G=f+1|0;F=b[A+(G<<1)>>1]|0;E=(b[A+(f<<1)>>1]|0)+(b[A+(f+2<<1)>>1]|0)+(F<<1)|0;D=b[B+(G<<1)>>1]|0;F=((R(r,D)|0)+((R(s,D)|0)>>16)+((R(E>>7,t)|0)+((R(E<<9&65024,t)|0)>>16))+((R(F>>5,u)|0)+((R(F<<11&63488,u)|0)>>16))>>7)+1>>1;b[g+(f+-1<<1)>>1]=(F|0)>32767?32767:((F|0)>-32768?F:-32768)&65535;f=G}b[d>>1]=k;b[y>>1]=x;b[n>>1]=q;l=C;return}function Yd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=_d((a|0)>0?a:0-a|0)|0;g=a<0?b:0-b|0)|0)+-1|0;b=b<>16|0)|0)<<16>>16;f=(R(g>>16,d)|0)+((R(g&65535,d)|0)>>16)|0;b=Uh(b|0,((b|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;b=Rh(b|0,C|0,29)|0;b=g-(b&-8)|0;d=f+((R(b>>16,d)|0)+((R(b&65535,d)|0)>>16))|0;a=e+28-a-c|0;if((a|0)>=0)return ((a|0)<32?d>>a:0)|0;a=0-a|0;b=-2147483648>>a;c=2147483647>>>a;if((b|0)>(c|0)){if((d|0)>(b|0)){g=b;g=g<(c|0)){g=c;g=g<1?a:1)|0}function _d(a){a=a|0;return U(a|0)|0}function $d(a){a=a|0;var b=0,d=0,e=0;b=c[a+8>>2]|0;a:do if((b|0)<24e3){if((b|0)<12e3)switch(b|0){case 8e3:{d=2;break a}default:{b=-102;break a}}if((b|0)<16e3)switch(b|0){case 12e3:{d=2;break a}default:{b=-102;break a}}else switch(b|0){case 16e3:{d=2;break a}default:{b=-102;break a}}}else if((b|0)<44100)if((b|0)<32e3)switch(b|0){case 24e3:{d=2;break a}default:{b=-102;break a}}else switch(b|0){case 32e3:{d=2;break a}default:{b=-102;break a}}else if((b|0)<48e3)switch(b|0){case 44100:{d=2;break a}default:{b=-102;break a}}else switch(b|0){case 48e3:{d=2;break a}default:{b=-102;break a}}while(0);b:do if((d|0)==2){b=c[a+20>>2]|0;c:do if((b|0)>=12e3)if((b|0)<16e3)switch(b|0){case 12e3:break c;default:{b=-102;break b}}else switch(b|0){case 16e3:break c;default:{b=-102;break b}}else switch(b|0){case 8e3:break;default:{b=-102;break b}}while(0);d=c[a+12>>2]|0;d:do if((d|0)>=12e3)if((d|0)<16e3)switch(d|0){case 12e3:break d;default:{b=-102;break b}}else switch(d|0){case 16e3:break d;default:{b=-102;break b}}else switch(d|0){case 8e3:break;default:{b=-102;break b}}while(0);e=c[a+16>>2]|0;e:do if((e|0)>=12e3)if((e|0)<16e3)switch(e|0){case 12e3:break e;default:{b=-102;break b}}else switch(e|0){case 16e3:break e;default:{b=-102;break b}}else switch(e|0){case 8e3:break;default:{b=-102;break b}}while(0);if(!((e|0)>(b|0)|(d|0)<(b|0)|(e|0)>(d|0))){switch(c[a+24>>2]|0){case 60:case 40:case 20:case 10:break;default:{b=-103;break b}}if((c[a+32>>2]|0)>>>0<=100)if((c[a+48>>2]|0)>>>0<=1)if((c[a+52>>2]|0)>>>0<=1)if((c[a+40>>2]|0)>>>0<=1){b=c[a>>2]|0;if((b+-1|0)>>>0<=1?(e=c[a+4>>2]|0,!((e+-1|0)>>>0>1|(e|0)>(b|0))):0)return ((c[a+36>>2]|0)>>>0>10?-106:0)|0;else b=-111}else b=-107;else b=-109;else b=-108;else b=-105}else b=-102}while(0);return b|0}function ae(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;e=(d|0)>8e4?8e4:(d|0)>5e3?d:5e3;d=a+4604|0;if((e|0)==(c[d>>2]|0))return;c[d>>2]=e;g=c[a+4572>>2]|0;g=(g|0)==8?19108:(g|0)==12?19140:19172;e=(c[a+4576>>2]|0)==2?e+-2200|0:e;d=1;while(1){if((d|0)>=8){h=7;break}f=c[g+(d<<2)>>2]|0;if((e|0)<=(f|0))break;d=d+1|0}if((h|0)==7)return;h=d+-1|0;g=c[g+(h<<2)>>2]|0;h=b[28128+(h<<1)>>1]|0;c[a+4712>>2]=(h<<6)+(R((e-g<<6|0)/(f-g|0)|0,(b[28128+(d<<1)>>1]|0)-h|0)|0);return}function be(a,b){a=a|0;b=b|0;Qh(a|0,0,10060)|0;c[a+5088>>2]=b;b=((ue(3932160)|0)<<8)+-524288|0;c[a+8>>2]=b;c[a+12>>2]=b;c[a+4660>>2]=1;return Cd(a+32|0)|0}function ce(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;c[a+6072>>2]=c[b+48>>2];c[a+4672>>2]=c[b+52>>2];g=c[b+8>>2]|0;c[a+4552>>2]=g;c[a+4560>>2]=c[b+12>>2];c[a+4564>>2]=c[b+16>>2];c[a+4568>>2]=c[b+20>>2];c[a+6084>>2]=c[b+40>>2];c[a+5748>>2]=c[b>>2];c[a+5752>>2]=c[b+4>>2];c[a+4532>>2]=d;c[a+5756>>2]=e;d=a+4664|0;if(c[d>>2]|0?(c[a+4676>>2]|0)==0:0){if((g|0)==(c[a+4556>>2]|0)){a=0;return a|0}d=c[a+4572>>2]|0;if((d|0)<=0){a=0;return a|0}a=de(a,d)|0;return a|0}g=Md(a,b)|0;f=(f|0)==0?g:f;g=de(a,f)|0;f=g+(ee(a,f,c[b+24>>2]|0)|0)|0;f=f+(fe(a,c[b+36>>2]|0)|0)|0;c[a+4612>>2]=c[b+32>>2];a=f+(ge(a,c[b+44>>2]|0)|0)|0;c[d>>2]=1;return a|0}function de(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;h=l;l=l+304|0;d=h;e=a+4572|0;f=c[e>>2]|0;if((f|0)==(b|0)?(g=a+4552|0,(c[a+4556>>2]|0)==(c[g>>2]|0)):0){f=0;e=g;e=c[e>>2]|0;g=a+4556|0;c[g>>2]=e;l=h;return f|0}if(!f){e=a+4552|0;g=Me(a+5772|0,c[e>>2]|0,b*1e3|0,1)|0;e=c[e>>2]|0;f=a+4556|0;c[f>>2]=e;l=h;return g|0}else{n=((c[a+4576>>2]|0)*10|0)+5|0;g=R(n,f)|0;j=R(n,b)|0;i=fa()|0;k=l;l=l+((1*(((g|0)>(j|0)?g:j)<<1)|0)+15&-16)|0;m=a+7176|0;je(k,m,g);f=a+4552|0;e=Me(d,(c[e>>2]<<16>>16)*1e3|0,c[f>>2]|0,0)|0;n=R(n,(c[f>>2]|0)/1e3|0)|0;o=l;l=l+((1*(n<<1)|0)+15&-16)|0;Ne(d,o,k,g);d=a+5772|0;g=Me(d,c[f>>2]|0,(b<<16>>16)*1e3|0,1)|0;Ne(d,k,o,n);ke(m,k,j);ha(i|0);g=e+g|0;e=f;e=c[e>>2]|0;f=a+4556|0;c[f>>2]=e;l=h;return g|0}return 0}function ee(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=b+4608|0;if((c[k>>2]|0)==(e|0)){f=b+4572|0;h=0;g=f;f=c[f>>2]|0}else{f=(e|0)==10;a:do if(!f){switch(e|0){case 60:case 40:case 20:{h=0;break}default:if((e|0)<11){h=-103;j=6;break a}else h=-103}c[b+5740>>2]=(e|0)/20|0;c[b+4576>>2]=4;g=d<<16>>16;c[b+4580>>2]=g*20;c[b+4544>>2]=g*24;g=b+4572|0;f=c[g>>2]|0;i=b+4684|0;if((f|0)==8){c[i>>2]=32570;f=8;break}else{c[i>>2]=32536;break}}else{h=0;j=6}while(0);do if((j|0)==6){c[b+5740>>2]=1;c[b+4576>>2]=f?2:1;g=d<<16>>16;c[b+4580>>2]=R(e<<16>>16,g)|0;c[b+4544>>2]=g*14;g=b+4572|0;f=c[g>>2]|0;i=b+4684|0;if((f|0)==8){c[i>>2]=32593;f=8;break}else{c[i>>2]=32581;break}}while(0);c[k>>2]=e;c[b+4604>>2]=0}if((f|0)==(d|0))return h|0;k=b+7164|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;j=b+16|0;c[j>>2]=0;c[j+4>>2]=0;c[b+5736>>2]=0;c[b+5744>>2]=0;c[b+4604>>2]=0;Qh(b+144|0,0,4384)|0;c[b+4540>>2]=100;c[b+4660>>2]=1;a[k>>0]=10;c[b+4472>>2]=100;c[b+4488>>2]=65536;a[b+4537>>0]=0;c[g>>2]=d;k=c[b+4576>>2]|0;j=(k|0)==4;c[b+4684>>2]=(d|0)==8?(j?32570:32593):j?32536:32581;j=(d|4|0)==12;c[b+4636>>2]=j?10:16;c[b+4688>>2]=j?19028:19068;c[b+4584>>2]=d*5;c[b+4580>>2]=R(d*327680>>16,k<<16>>16)|0;j=d<<16;e=j>>16;c[b+4588>>2]=e*20;c[b+4592>>2]=j>>15;c[b+4548>>2]=e*18;c[b+4544>>2]=R(e,(k|0)==4?24:14)|0;c[b+4680>>2]=(d|0)==16?32468:(d|0)==12?32462:32453;return h|0}function fe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;do if((b|0)>=1){if((b|0)==1){c[a+4640>>2]=1;c[a+4648>>2]=49807;f=a+4644|0;c[f>>2]=8;c[a+4632>>2]=14;e=c[a+4572>>2]|0;d=e*5|0;c[a+4596>>2]=d;c[a+4624>>2]=1;c[a+4628>>2]=0;c[a+4656>>2]=3;g=0;h=8;break}if((b|0)<3){c[a+4640>>2]=0;c[a+4648>>2]=52429;f=a+4644|0;c[f>>2]=6;c[a+4632>>2]=12;e=c[a+4572>>2]|0;d=e*3|0;c[a+4596>>2]=d;c[a+4624>>2]=2;c[a+4628>>2]=0;c[a+4656>>2]=2;g=0;h=6;break}if((b|0)==3){c[a+4640>>2]=1;c[a+4648>>2]=49807;f=a+4644|0;c[f>>2]=8;c[a+4632>>2]=14;e=c[a+4572>>2]|0;d=e*5|0;c[a+4596>>2]=d;c[a+4624>>2]=2;c[a+4628>>2]=0;c[a+4656>>2]=4;g=0;h=8;break}if((b|0)<6){c[a+4640>>2]=1;c[a+4648>>2]=48497;f=a+4644|0;c[f>>2]=10;c[a+4632>>2]=16;e=c[a+4572>>2]|0;d=e*5|0;c[a+4596>>2]=d;c[a+4624>>2]=2;c[a+4628>>2]=1;c[a+4656>>2]=6;g=e*983|0;h=10;break}e=c[a+4572>>2]|0;d=a+4640|0;if((b|0)<8){c[d>>2]=1;c[a+4648>>2]=47186;f=a+4644|0;c[f>>2]=12;c[a+4632>>2]=20;d=e*5|0;c[a+4596>>2]=d;c[a+4624>>2]=3;c[a+4628>>2]=1;c[a+4656>>2]=8;g=e*983|0;h=12;break}else{c[d>>2]=2;c[a+4648>>2]=45875;f=a+4644|0;c[f>>2]=16;c[a+4632>>2]=24;d=e*5|0;c[a+4596>>2]=d;c[a+4624>>2]=4;c[a+4628>>2]=1;c[a+4656>>2]=16;g=e*983|0;h=16;break}}else{c[a+4640>>2]=0;c[a+4648>>2]=52429;f=a+4644|0;c[f>>2]=6;c[a+4632>>2]=12;e=c[a+4572>>2]|0;d=e*3|0;c[a+4596>>2]=d;c[a+4624>>2]=1;c[a+4628>>2]=0;c[a+4656>>2]=2;g=0;h=6}while(0);c[a+4668>>2]=g;c[f>>2]=ie(h,c[a+4636>>2]|0)|0;c[a+4600>>2]=(e*5|0)+(d<<1);c[a+4620>>2]=b;return 0}function ge(a,b){a=a|0;b=b|0;var d=0,e=0;e=a+6088|0;d=c[e>>2]|0;c[e>>2]=b;if(!b)return 0;if(!d)b=7;else{b=c[a+4612>>2]|0;b=he(7-(((b>>16)*26214|0)+(((b&65535)*26214|0)>>>16))|0)|0}c[a+6092>>2]=b;return 0}function he(a){a=a|0;return ((a|0)>2?a:2)|0}function ie(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function je(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;while(1){e=d+-1|0;if((d|0)<=0)break;d=Jh(+g[c+(e<<2)>>2])|0;b[a+(e<<1)>>1]=(d|0)>32767?32767:((d|0)>-32768?d:-32768)&65535;d=e}return}function ke(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;while(1){e=d+-1|0;if((d|0)<=0)break;g[a+(e<<2)>>2]=+(b[c+(e<<1)>>1]|0);d=e}return}function le(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=l;l=l+112|0;u=z+60|0;v=z+8|0;w=z;c[w>>2]=u;c[w+4>>2]=v;x=f>>1;me(d,u,v,x);g=ne(u,8192,x)|0;if((g|0)<0){b[a>>1]=0;t=0;i=v;g=ne(v,8192,x)|0;h=1}else{t=0;i=u;h=0}a:while(1){j=0;k=8192;m=1;s=h;b:while(1){h=j;o=k;while(1){k=b[28190+(m<<1)>>1]|0;n=ne(i,k,x)|0;if((g|0)<1){if((n|0)>=(h|0))break;if(!((g|0)<0|(n|0)>(0-h|0)))break}else if((n|0)<=(0-h|0))break;if((m|0)>127)break b;else{h=0;o=k;m=m+1|0;g=n}}j=(n|0)==0&1;r=0;p=-256;while(1){if((r|0)==3)break;h=o+k|0;h=(h>>1)+(h&1)|0;q=ne(i,h,x)|0;if((g|0)<1)if((q|0)>-1|(g|0)==0){k=h;n=q}else y=14;else if((q|0)<1){k=h;n=q}else y=14;if((y|0)==14){y=0;p=p+(128>>>r)|0;o=h;g=q}r=r+1|0}h=g-n|0;if((((g|0)>0?g:0-g|0)|0)<65536)if(!h)g=p;else g=p+(((g<<5)+(h>>1)|0)/(h|0)|0)|0;else g=p+((g|0)/(h>>5|0)|0)|0;b[a+(s<<1)>>1]=oe((m<<8)+g|0)|0;h=s+1|0;if((h|0)>=(f|0)){y=29;break a}k=b[28190+(m+-1<<1)>>1]|0;i=c[w+((h&1)<<2)>>2]|0;g=1-(h&2)<<12;s=h}g=t+1|0;if((t|0)>15)break;se(d,f,65536-(1<=0){t=g;i=u;g=h;h=0;continue}b[a>>1]=0;t=g;i=v;g=ne(v,8192,x)|0;h=1}if((y|0)==29){l=z;return}h=32768/(f+1|0)|0;b[a>>1]=h;g=1;while(1){if((g|0)>=(f|0))break;y=(h&65535)+(e[a>>1]|0)|0;b[a+(g<<1)>>1]=y;g=g+1|0;h=y}l=z;return}function me(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;c[b+(e<<2)>>2]=65536;c[d+(e<<2)>>2]=65536;f=0;while(1){if((f|0)>=(e|0)){f=e;break}g=a+(e-f+-1<<2)|0;h=a+(f+e<<2)|0;c[b+(f<<2)>>2]=0-(c[g>>2]|0)-(c[h>>2]|0);c[d+(f<<2)>>2]=(c[h>>2]|0)-(c[g>>2]|0);f=f+1|0}while(1){if((f|0)<=0)break;h=f+-1|0;g=b+(h<<2)|0;c[g>>2]=(c[g>>2]|0)-(c[b+(f<<2)>>2]|0);g=d+(h<<2)|0;c[g>>2]=(c[g>>2]|0)+(c[d+(f<<2)>>2]|0);f=h}pe(b,e);pe(d,e);return}function ne(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a+(d<<2)>>2]|0;f=b<<4;if((d|0)==8){d=b<<20>>16;g=(f>>15)+1>>1;f=(c[a+28>>2]|0)+((R(e>>16,d)|0)+((R(e&65535,d)|0)>>16))+(R(e,g)|0)|0;f=(c[a+24>>2]|0)+((R(f>>16,d)|0)+((R(f&65535,d)|0)>>16))+(R(f,g)|0)|0;f=(c[a+20>>2]|0)+((R(f>>16,d)|0)+((R(f&65535,d)|0)>>16))+(R(f,g)|0)|0;f=(c[a+16>>2]|0)+((R(f>>16,d)|0)+((R(f&65535,d)|0)>>16))+(R(f,g)|0)|0;f=(c[a+12>>2]|0)+((R(f>>16,d)|0)+((R(f&65535,d)|0)>>16))+(R(f,g)|0)|0;f=(c[a+8>>2]|0)+((R(f>>16,d)|0)+((R(f&65535,d)|0)>>16))+(R(f,g)|0)|0;f=(c[a+4>>2]|0)+((R(f>>16,d)|0)+((R(f&65535,d)|0)>>16))+(R(f,g)|0)|0;a=(c[a>>2]|0)+((R(f>>16,d)|0)+((R(f&65535,d)|0)>>16))+(R(f,g)|0)|0;return a|0}g=b<<20>>16;f=(f>>15)+1>>1;while(1){b=d+-1|0;if((d|0)<=0)break;e=(c[a+(b<<2)>>2]|0)+((R(e>>16,g)|0)+((R(e&65535,g)|0)>>16))+(R(e,f)|0)|0;d=b}return e|0}function oe(a){a=a|0;return ((a|0)<32767?a:32767)|0}function pe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=2;while(1){if((e|0)>(b|0))break;else d=b;while(1){if((d|0)<=(e|0))break;f=a+(d+-2<<2)|0;c[f>>2]=(c[f>>2]|0)-(c[a+(d<<2)>>2]|0);d=d+-1|0}f=a+(e+-2<<2)|0;c[f>>2]=(c[f>>2]|0)-(c[a+(e<<2)>>2]<<1);e=e+1|0}return}function qe(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=g>>1;i=d+4|0;g=0;while(1){if((g|0)>=(h|0))break;m=g<<1;n=b[a+(m<<1)>>1]<<10;l=n-(c[d>>2]|0)|0;k=(R(l>>16,-24290)|0)+((R(l&65535,-24290)|0)>>16)|0;j=n+k|0;c[d>>2]=n+(l+k);m=b[a+((m|1)<<1)>>1]<<10;k=c[i>>2]|0;l=m-k|0;l=((l>>16)*10788|0)+(((l&65535)*10788|0)>>>16)|0;k=k+l|0;c[i>>2]=m+l;l=(k+j>>10)+1>>1;b[e+(g<<1)>>1]=(l|0)>32767?32767:((l|0)>-32768?l:-32768)&65535;j=(k-j>>10)+1>>1;b[f+(g<<1)>>1]=(j|0)>32767?32767:((j|0)>-32768?j:-32768)&65535;g=g+1|0}return}function re(a,d,e,f,g,h,i){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=0-e|0;o=j&16383;l=0-f|0;n=l&16383;f=g+4|0;j=j>>>14<<16>>16;k=d+4|0;l=l>>>14<<16>>16;m=d+8|0;e=0;while(1){if((e|0)>=(i|0))break;p=c[d>>2]|0;q=b[a+(e<<1)>>1]|0;p=(c[g>>2]|0)+((R(p>>16,q)|0)+((R(p&65535,q)|0)>>16))<<2;r=p>>16;s=p&65532;u=(c[f>>2]|0)+(((R(r,o)|0)+((R(s,o)|0)>>>16)>>13)+1>>1)+((R(r,j)|0)+((R(s,j)|0)>>16))|0;c[g>>2]=u;t=c[k>>2]|0;c[g>>2]=u+((R(t>>16,q)|0)+((R(t&65535,q)|0)>>16));s=(((R(r,n)|0)+((R(s,n)|0)>>>16)>>13)+1>>1)+((R(r,l)|0)+((R(s,l)|0)>>16))|0;c[f>>2]=s;r=c[m>>2]|0;c[f>>2]=s+((R(r>>16,q)|0)+((R(r&65535,q)|0)>>16));p=p+16383>>14;b[h+(e<<1)>>1]=(p|0)>32767?32767:((p|0)>-32768?p:-32768)&65535;e=e+1|0}return}function se(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;g=d+-65536|0;f=b+-1|0;e=0;b=d;while(1){d=b>>16;if((e|0)>=(f|0))break;h=a+(e<<2)|0;i=c[h>>2]|0;j=i<<16>>16;c[h>>2]=(R(d,j)|0)+((R(b&65535,j)|0)>>16)+(R(b,(i>>15)+1>>1)|0);e=e+1|0;b=b+(((R(b,g)|0)>>15)+1>>1)|0}j=a+(f<<2)|0;i=c[j>>2]|0;h=i<<16>>16;c[j>>2]=(R(d,h)|0)+((R(b&65535,h)|0)>>16)+(R(b,(i>>15)+1>>1)|0);return}function te(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=0;g=0;while(1){if((g|0)>=(e|0))break;f=f+((R(b[a+(g<<1)>>1]|0,b[c+(g<<1)>>1]|0)|0)>>d)|0;g=g+1|0}return f|0}function ue(a){a=a|0;var b=0,d=0,e=0;e=l;l=l+16|0;b=e+4|0;d=e;ve(a,b,d);d=c[d>>2]|0;a=R(d,128-d|0)|0;l=e;return d+(((a>>16)*179|0)+(((a&65535)*179|0)>>>16))+(31-(c[b>>2]|0)<<7)|0}function ve(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=we(a)|0;c[b>>2]=e;c[d>>2]=(xe(a,24-e|0)|0)&127;return}function we(a){a=a|0;return U(a|0)|0}function xe(a,b){a=a|0;b=b|0;if(!b){b=a;return b|0}if((b|0)<0){b=a<<0-b|a>>>(b+32|0);return b|0}else{b=a<<32-b|a>>>b;return b|0}return 0}function ye(a){a=a|0;var b=0,c=0,d=0;if((a|0)<0){d=0;return d|0}if((a|0)>3966){d=2147483647;return d|0}b=a>>7;d=1<>16)<>7;else a=R(d>>7,c+((R(R(c,128-c|0)|0,-174)|0)>>16)|0)|0;d=d+a|0;return d|0}function ze(a,c,d,e,f){a=a|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;k=d+2|0;l=d+4|0;m=d+6|0;n=d+8|0;o=d+10|0;h=f;while(1){if((h|0)>=(e|0))break;j=c+(h+-1<<1)|0;g=R(b[j>>1]|0,b[d>>1]|0)|0;g=g+(R(b[j+-2>>1]|0,b[k>>1]|0)|0)|0;g=g+(R(b[j+-4>>1]|0,b[l>>1]|0)|0)|0;g=g+(R(b[j+-6>>1]|0,b[m>>1]|0)|0)|0;g=g+(R(b[j+-8>>1]|0,b[n>>1]|0)|0)|0;g=g+(R(b[j+-10>>1]|0,b[o>>1]|0)|0)|0;i=6;while(1){if((i|0)>=(f|0))break;p=g+(R(b[j+(0-i<<1)>>1]|0,b[d+(i<<1)>>1]|0)|0)|0;g=p+(R(b[j+(~i<<1)>>1]|0,b[d+((i|1)<<1)>>1]|0)|0)|0;i=i+2|0}p=((b[j+2>>1]<<12)-g>>11)+1>>1;b[a+(h<<1)>>1]=(p|0)>32767?32767:((p|0)>-32768?p:-32768)&65535;h=h+1|0}Qh(a|0,0,f<<1|0)|0;return}function Ae(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=l;l=l+96|0;g=h;e=0;f=0;while(1){if((f|0)>=(d|0))break;i=b[a+(f<<1)>>1]|0;c[g+(f<<2)>>2]=i<<12;e=e+i|0;f=f+1|0}if((e|0)>4095){i=0;l=h;return i|0}i=Be(g,d)|0;l=h;return i|0}function Be(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;g=1073741824;f=0;a:while(1){u=b+-1|0;d=c[a+(u<<2)>>2]|0;e=(d+16773022|0)>>>0>33546044;if((b|0)<=1){b=17;break}if(e){b=19;break}s=0-(d<<7)|0;t=((s|0)<0)<<31>>31;Uh(s|0,t|0,s|0,t|0)|0;d=1073741824-C|0;r=Uh(g|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;r=Rh(r|0,C|0,30)|0;r=r&-4;if((r|0)<107374){b=19;break}o=32-(Ce((d|0)>0?d:0-d|0)|0)|0;q=De(d,o+30|0)|0;l=b>>1;m=(o|0)==1;n=((q|0)<0)<<31>>31;o=o+-1|0;k=0;while(1){if((k|0)>=(l|0))break;h=a+(k<<2)|0;i=c[h>>2]|0;p=a+(u-k+-1<<2)|0;j=c[p>>2]|0;b=Uh(j|0,((j|0)<0)<<31>>31|0,s|0,t|0)|0;b=Rh(b|0,C|0,30)|0;b=Ph(b|0,C|0,1,0)|0;b=Rh(b|0,C|0,1)|0;d=i-b|0;e=(d|0)>-1;f=((e?i:i^-2147483648)&(e?b^-2147483648:b)|0)<0?d>>31^-2147483648:d;f=Uh(f|0,((f|0)<0)<<31>>31|0,q|0,n|0)|0;g=C;if(m){f=Oh(f|0,g|0,1)|0;g=C;b=((e?i:i^-2147483648)&(e?b^-2147483648:b)|0)<0?d>>31^-2147483648:d;b=Uh(b|0,((b|0)<0)<<31>>31|0,q|0,n|0)|0;b=Ph(f|0,g|0,b&1|0,0)|0;d=C}else{b=Oh(f|0,g|0,o|0)|0;b=Ph(b|0,C|0,1,0)|0;b=Oh(b|0,C|0,1)|0;d=C}g=Ph(b|0,d|0,-2147483648,0)|0;f=C;if(f>>>0>0|(f|0)==0&g>>>0>4294967295){b=19;break a}c[h>>2]=b;b=Uh(i|0,((i|0)<0)<<31>>31|0,s|0,t|0)|0;b=Rh(b|0,C|0,30)|0;b=Ph(b|0,C|0,1,0)|0;b=Rh(b|0,C|0,1)|0;d=j-b|0;e=(d|0)>-1;f=((e?j:j^-2147483648)&(e?b^-2147483648:b)|0)<0?d>>31^-2147483648:d;f=Uh(f|0,((f|0)<0)<<31>>31|0,q|0,n|0)|0;g=C;if(m){h=Oh(f|0,g|0,1)|0;i=C;b=((e?j:j^-2147483648)&(e?b^-2147483648:b)|0)<0?d>>31^-2147483648:d;b=Uh(b|0,((b|0)<0)<<31>>31|0,q|0,n|0)|0;b=Ph(h|0,i|0,b&1|0,0)|0;d=C}else{b=Oh(f|0,g|0,o|0)|0;b=Ph(b|0,C|0,1,0)|0;b=Oh(b|0,C|0,1)|0;d=C}j=Ph(b|0,d|0,-2147483648,0)|0;i=C;if(i>>>0>0|(i|0)==0&j>>>0>4294967295){b=19;break a}c[p>>2]=b;k=k+1|0}b=u;g=r;f=((r|0)<0)<<31>>31}if((b|0)==17)if(e)return 0;else{u=0-(c[a>>2]<<7)|0;a=((u|0)<0)<<31>>31;Uh(u|0,a|0,u|0,a|0)|0;a=1073741824-C|0;a=Uh(g|0,f|0,a|0,((a|0)<0)<<31>>31|0)|0;a=Rh(a|0,C|0,30)|0;a=a&-4;return ((a|0)<107374?0:a)|0}else if((b|0)==19)return 0;return 0}function Ce(a){a=a|0;return U(a|0)|0}function De(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0;c=Ce((a|0)>0?a:0-a|0)|0;a=a<>16;d=536870911/(g|0)|0;f=d<<16;e=f>>16;a=536870912-((R(g,e)|0)+((R(a&65535,e)|0)>>16))<<3;d=f+((R(a>>16,e)|0)+((R(a&65528,e)|0)>>16))+(R(a,(d>>15)+1>>1)|0)|0;a=62-c-b|0;if((a|0)>=1)return ((a|0)<32?d>>a:0)|0;a=0-a|0;b=-2147483648>>a;c=2147483647>>>a;if((b|0)>(c|0)){if((d|0)>(b|0)){g=b;g=g<(c|0)){g=c;g=g<=(f|0))break;p=b[e+(g<<1)>>1]|0;o=p>>8;q=b[28190+(o<<1)>>1]|0;o=((q<<8)+(R((b[28190+(o+1<<1)>>1]|0)-q|0,p-(o<<8)|0)|0)>>3)+1>>1;c[i+(d[h+g>>0]<<2)>>2]=o;g=g+1|0}e=f>>1;Fe(j,i,e);Fe(k,i+4|0,e);g=0;while(1){if((g|0)>=(e|0))break;q=g+1|0;p=(c[j+(q<<2)>>2]|0)+(c[j+(g<<2)>>2]|0)|0;o=(c[k+(q<<2)>>2]|0)-(c[k+(g<<2)>>2]|0)|0;c[m+(g<<2)>>2]=0-o-p;c[m+(f-g+-1<<2)>>2]=o-p;g=q}mf(a,m,f);g=0;while(1){if(!((Ae(a,f)|0)==0&(g|0)<16))break;se(m,f,65536-(2<=(f|0))break;b[a+(e<<1)>>1]=(((c[m+(e<<2)>>2]|0)>>>4)+1|0)>>>1;e=e+1|0}g=g+1|0}l=n;return}function Fe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;c[a>>2]=65536;j=a+4|0;f=1;e=0-(c[b>>2]|0)|0;while(1){c[j>>2]=e;if((f|0)>=(d|0))break;i=c[b+(f<<1<<2)>>2]|0;k=c[a+(f+-1<<2)>>2]|0;g=((i|0)<0)<<31>>31;e=c[a+(f<<2)>>2]|0;e=Uh(i|0,g|0,e|0,((e|0)<0)<<31>>31|0)|0;e=Rh(e|0,C|0,15)|0;e=Ph(e|0,C|0,1,0)|0;e=Rh(e|0,C|0,1)|0;h=f+1|0;c[a+(h<<2)>>2]=(k<<1)-e;e=f;f=k;while(1){if((e|0)<=1)break;k=c[a+(e+-2<<2)>>2]|0;m=Uh(i|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;m=Rh(m|0,C|0,15)|0;m=Ph(m|0,C|0,1,0)|0;m=Rh(m|0,C|0,1)|0;l=a+(e<<2)|0;c[l>>2]=(c[l>>2]|0)+(k-m);e=e+-1|0;f=k}f=h;e=(c[j>>2]|0)-i|0}return}function Ge(a,c,d){a=a|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=a+(d+-1<<1)|0;q=c+(d<<1)|0;n=0;while(1){if((n|0)>=20)break;h=b[a>>1]|0;j=b[c>>1]|0;i=(h<<16>>16)-(j<<16>>16)|0;f=1;g=0;while(1){if((f|0)>=(d|0))break;m=b[a+(f<<1)>>1]|0;k=(m<<16>>16)-((h<<16>>16)+(b[c+(f<<1)>>1]|0))|0;r=(k|0)<(i|0);l=r?f:g;i=r?k:i;f=f+1|0;g=l;h=m}r=32768-((b[p>>1]|0)+(b[q>>1]|0))|0;m=(r|0)<(i|0);k=m?d:g;if(((m?r:i)|0)>-1){o=30;break}do if(!k)b[a>>1]=j;else{if((k|0)==(d|0)){b[p>>1]=32768-(e[q>>1]|0);break}else{h=0;f=0}while(1){if((f|0)>=(k|0))break;h=h+(b[c+(f<<1)>>1]|0)|0;f=f+1|0}l=c+(k<<1)|0;m=b[l>>1]|0;i=m>>1;g=32768;f=d;while(1){if((f|0)<=(k|0))break;g=g-(b[c+(f<<1)>>1]|0)|0;f=f+-1|0}f=h+i|0;h=g-i|0;j=a+(k+-1<<1)|0;r=b[j>>1]|0;i=a+(k<<1)|0;g=b[i>>1]|0;g=((r<<16>>16)+(g<<16>>16)>>1)+((r&65535)+(g&65535)&1)|0;if((f|0)>(h|0)){if((g|0)<=(f|0))f=(g|0)<(h|0)?h:g}else if((g|0)>(h|0))f=h;else f=(g|0)<(f|0)?f:g;r=f-(m>>>1)|0;b[j>>1]=r;b[i>>1]=r+(e[l>>1]|0)}while(0);n=n+1|0}if((o|0)==30)return;if((n|0)!=20)return;Ze(a,d);g=He(b[a>>1]|0,b[c>>1]|0)|0;b[a>>1]=g;f=1;while(1){if((f|0)>=(d|0))break;o=a+(f<<1)|0;r=(g<<16>>16)+(b[c+(f<<1)>>1]|0)|0;r=He(b[o>>1]|0,(r|0)>32767?32767:((r|0)>-32768?r:-32768)<<16>>16)|0;b[o>>1]=r;f=f+1|0;g=r}g=Ie(b[p>>1]|0,32768-(b[q>>1]|0)|0)|0;b[p>>1]=g;f=d+-2|0;while(1){if((f|0)<=-1)break;q=a+(f<<1)|0;r=Ie(b[q>>1]|0,(g<<16>>16)-(b[c+(f+1<<1)>>1]|0)|0)|0;b[q>>1]=r;f=f+-1|0;g=r}return}function He(a,b){a=a|0;b=b|0;return ((a|0)>(b|0)?a:b)|0}function Ie(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function Je(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=b[c>>1]|0;f=131072/(Ke(e)|0)|0;e=131072/(Ke((b[c+2>>1]|0)-e|0)|0)|0;b[a>>1]=Le(f+e|0)|0;f=d+-1|0;d=e;e=1;while(1){if((e|0)>=(f|0))break;i=e+1|0;h=c+(i<<1)|0;j=131072/(Ke((b[h>>1]|0)-(b[c+(e<<1)>>1]|0)|0)|0)|0;b[a+(e<<1)>>1]=Le(j+d|0)|0;g=e+2|0;h=131072/(Ke((b[c+(g<<1)>>1]|0)-(b[h>>1]|0)|0)|0)|0;b[a+(i<<1)>>1]=Le(j+h|0)|0;d=h;e=g}b[a+(f<<1)>>1]=Le((131072/(Ke(32768-(b[c+(f<<1)>>1]|0)|0)|0)|0)+d|0)|0;return}function Ke(a){a=a|0;return ((a|0)>1?a:1)|0}function Le(a){a=a|0;return ((a|0)<32767?a:32767)|0}function Me(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;Qh(b|0,0,300)|0;if(!f){a:do if((d|0)>=12e3)if((d|0)<16e3){switch(d|0){case 12e3:break a;default:f=-1}return f|0}else{switch(d|0){case 16e3:break a;default:f=-1}return f|0}else{switch(d|0){case 8e3:break a;default:f=-1}return f|0}while(0);b:do if((e|0)<16e3)if((e|0)<12e3){switch(e|0){case 8e3:break b;default:f=-1}return f|0}else{switch(e|0){case 12e3:break b;default:f=-1}return f|0}else{if((e|0)<24e3){switch(e|0){case 16e3:break b;default:f=-1}return f|0}if((e|0)<48e3){switch(e|0){case 24e3:break b;default:f=-1}return f|0}else{switch(e|0){case 48e3:break b;default:f=-1}return f|0}}while(0);f=((e>>12)-((e|0)>16e3&1)>>((e|0)>24e3&1))+-1+(33923+((((d>>12)-((d|0)>16e3&1)>>((d|0)>24e3&1))+-1|0)*5|0))|0}else{c:do if((d|0)<16e3)if((d|0)<12e3){switch(d|0){case 8e3:break c;default:f=-1}return f|0}else{switch(d|0){case 12e3:break c;default:f=-1}return f|0}else{if((d|0)<24e3){switch(d|0){case 16e3:break c;default:f=-1}return f|0}if((d|0)<48e3){switch(d|0){case 24e3:break c;default:f=-1}return f|0}else{switch(d|0){case 48e3:break c;default:f=-1}return f|0}}while(0);d:do if((e|0)>=12e3)if((e|0)<16e3){switch(e|0){case 12e3:break d;default:f=-1}return f|0}else{switch(e|0){case 16e3:break d;default:f=-1}return f|0}else{switch(e|0){case 8e3:break d;default:f=-1}return f|0}while(0);f=((e>>12)-((e|0)>16e3&1)>>((e|0)>24e3&1))+-1+(33908+((((d>>12)-((d|0)>16e3&1)>>((d|0)>24e3&1))+-1|0)*3|0))|0}c[b+292>>2]=a[f>>0];i=(d|0)/1e3|0;c[b+284>>2]=i;c[b+288>>2]=(e|0)/1e3|0;c[b+268>>2]=i*10;do if((e|0)>(d|0)){f=b+264|0;if((d<<1|0)==(e|0)){c[f>>2]=1;f=0;break}else{c[f>>2]=2;f=1;break}}else{f=b+264|0;if((e|0)>=(d|0)){c[f>>2]=0;f=0;break}c[f>>2]=3;f=e<<2;if((f|0)==(d*3|0)){c[b+280>>2]=3;c[b+276>>2]=18;c[b+296>>2]=28448;f=0;break}g=e*3|0;if((g|0)==(d<<1|0)){c[b+280>>2]=2;c[b+276>>2]=18;c[b+296>>2]=28506;f=0;break}if((e<<1|0)==(d|0)){c[b+280>>2]=1;c[b+276>>2]=24;c[b+296>>2]=28546;f=0;break}if((g|0)==(d|0)){c[b+280>>2]=1;c[b+276>>2]=36;c[b+296>>2]=28574;f=0;break}if((f|0)==(d|0)){c[b+280>>2]=1;c[b+276>>2]=36;c[b+296>>2]=28614;f=0;break}if((e*6|0)==(d|0)){c[b+280>>2]=1;c[b+276>>2]=36;c[b+296>>2]=28654;f=0;break}else{d=-1;return d|0}}while(0);g=((d<<(f|14)|0)/(e|0)|0)<<2;h=b+272|0;c[h>>2]=g;i=e<<16>>16;b=(e>>15)+1>>1;f=d<>16,i)|0)+((R(g&65535,i)|0)>>16)+(R(g,b)|0)|0)>=(f|0)){f=0;break}d=g+1|0;c[h>>2]=d;g=d}return f|0}function Ne(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=a+284|0;h=a+292|0;i=c[h>>2]|0;g=(c[f>>2]|0)-i|0;Sh(a+168+(i<<1)|0,d|0,g<<1|0)|0;switch(c[a+264>>2]|0){case 1:{i=a+168|0;We(a,b,i,c[f>>2]|0);We(a,b+(c[a+288>>2]<<1)|0,d+(g<<1)|0,e-(c[f>>2]|0)|0);a=i;break}case 2:{i=a+168|0;Te(a,b,i,c[f>>2]|0);Te(a,b+(c[a+288>>2]<<1)|0,d+(g<<1)|0,e-(c[f>>2]|0)|0);a=i;break}case 3:{i=a+168|0;Re(a,b,i,c[f>>2]|0);Re(a,b+(c[a+288>>2]<<1)|0,d+(g<<1)|0,e-(c[f>>2]|0)|0);a=i;break}default:{i=a+168|0;Sh(b|0,i|0,c[f>>2]<<1|0)|0;Sh(b+(c[a+288>>2]<<1)|0,d+(g<<1)|0,e-(c[f>>2]|0)<<1|0)|0;a=i}}i=c[h>>2]|0;Sh(a|0,d+(e-i<<1)|0,i<<1|0)|0;return}function Oe(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;n=l;l=l+1936|0;j=n;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];k=a+16|0;m=j+16|0;while(1){i=(f|0)<480?f:480;Qe(k,m,e,28694,i);g=j;h=i;while(1){if((h|0)<=2)break;u=c[g>>2]|0;s=g+4|0;t=c[s>>2]|0;r=g+8|0;p=c[r>>2]|0;o=g+12|0;q=c[o>>2]|0;q=(((u>>16)*4697|0)+(((u&65535)*4697|0)>>>16)+(((t>>16)*10739|0)+(((t&65535)*10739|0)>>>16))+(((p>>16)*8276|0)+(((p&65535)*8276|0)>>>16))+(((q>>16)*1567|0)+(((q&65535)*1567|0)>>>16))>>5)+1>>1;b[d>>1]=(q|0)>32767?32767:((q|0)>-32768?q:-32768)&65535;s=c[s>>2]|0;r=c[r>>2]|0;q=c[o>>2]|0;p=c[g+16>>2]|0;p=(((s>>16)*1567|0)+(((s&65535)*1567|0)>>>16)+(((r>>16)*8276|0)+(((r&65535)*8276|0)>>>16))+(((q>>16)*10739|0)+(((q&65535)*10739|0)>>>16))+(((p>>16)*4697|0)+(((p&65535)*4697|0)>>>16))>>5)+1>>1;b[d+2>>1]=(p|0)>32767?32767:((p|0)>-32768?p:-32768)&65535;g=o;h=h+-3|0;d=d+4|0}f=f-i|0;if((f|0)<=0)break;u=j+(i<<2)|0;c[j>>2]=c[u>>2];c[j+4>>2]=c[u+4>>2];c[j+8>>2]=c[u+8>>2];c[j+12>>2]=c[u+12>>2];e=e+(i<<1)|0}u=j+(i<<2)|0;c[a>>2]=c[u>>2];c[a+4>>2]=c[u+4>>2];c[a+8>>2]=c[u+8>>2];c[a+12>>2]=c[u+12>>2];l=n;return}function Pe(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;g=f>>1;h=a+4|0;f=0;while(1){if((f|0)>=(g|0))break;m=f<<1;l=b[e+(m<<1)>>1]<<10;j=l-(c[a>>2]|0)|0;k=(R(j>>16,-25727)|0)+((R(j&65535,-25727)|0)>>16)|0;c[a>>2]=l+(j+k);m=b[e+((m|1)<<1)>>1]<<10;j=c[h>>2]|0;i=m-j|0;i=((i>>16)*9872|0)+(((i&65535)*9872|0)>>>16)|0;c[h>>2]=m+i;i=(l+k+j+i>>10)+1>>1;b[d+(f<<1)>>1]=(i|0)>32767?32767:((i|0)>-32768?i:-32768)&65535;f=f+1|0}return}function Qe(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;j=f+2|0;h=0;while(1){if((h|0)>=(g|0))break;l=(c[a>>2]|0)+(b[e+(h<<1)>>1]<<8)|0;c[d+(h<<2)>>2]=l;l=l<<2;m=l>>16;k=b[f>>1]|0;l=l&65532;c[a>>2]=(c[i>>2]|0)+((R(m,k)|0)+((R(l,k)|0)>>16));k=b[j>>1]|0;c[i>>2]=(R(m,k)|0)+((R(l,k)|0)>>16);h=h+1|0}return}function Re(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;n=a+268|0;r=c[n>>2]|0;o=a+276|0;f=c[o>>2]|0;p=l;l=l+((1*(r+f<<2)|0)+15&-16)|0;h=a+24|0;Sh(p|0,h|0,f<<2|0)|0;i=a+296|0;j=(c[i>>2]|0)+4|0;k=c[a+272>>2]|0;m=a+280|0;g=d;d=r;while(1){d=(e|0)<(d|0)?e:d;Qe(a,p+(f<<2)|0,g,c[i>>2]|0,d);b=Se(b,p,j,c[o>>2]|0,c[m>>2]|0,d<<16,k)|0;e=e-d|0;if((e|0)<=1)break;f=c[o>>2]|0;Sh(p|0,p+(d<<2)|0,f<<2|0)|0;g=g+(d<<1)|0;d=c[n>>2]|0}Sh(h|0,p+(d<<2)|0,c[o>>2]<<2|0)|0;l=q;return}function Se(a,d,e,f,g,h,i){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;switch(f|0){case 18:{j=g<<16>>16;g=g+-1|0;f=0;while(1){if((f|0)>=(h|0))break;x=d+(f>>16<<2)|0;y=(R(f&65535,j)|0)>>16;w=e+(y*9<<1)|0;v=c[x>>2]|0;t=b[w>>1]|0;t=(R(v>>16,t)|0)+((R(v&65535,t)|0)>>16)|0;v=c[x+4>>2]|0;u=b[w+2>>1]|0;u=t+((R(v>>16,u)|0)+((R(v&65535,u)|0)>>16))|0;v=c[x+8>>2]|0;t=b[w+4>>1]|0;t=u+((R(v>>16,t)|0)+((R(v&65535,t)|0)>>16))|0;v=c[x+12>>2]|0;u=b[w+6>>1]|0;u=t+((R(v>>16,u)|0)+((R(v&65535,u)|0)>>16))|0;v=c[x+16>>2]|0;t=b[w+8>>1]|0;t=u+((R(v>>16,t)|0)+((R(v&65535,t)|0)>>16))|0;v=c[x+20>>2]|0;u=b[w+10>>1]|0;u=t+((R(v>>16,u)|0)+((R(v&65535,u)|0)>>16))|0;v=c[x+24>>2]|0;t=b[w+12>>1]|0;t=u+((R(v>>16,t)|0)+((R(v&65535,t)|0)>>16))|0;v=c[x+28>>2]|0;u=b[w+14>>1]|0;u=t+((R(v>>16,u)|0)+((R(v&65535,u)|0)>>16))|0;v=c[x+32>>2]|0;w=b[w+16>>1]|0;w=u+((R(v>>16,w)|0)+((R(v&65535,w)|0)>>16))|0;y=e+((g-y|0)*9<<1)|0;v=c[x+68>>2]|0;u=b[y>>1]|0;u=w+((R(v>>16,u)|0)+((R(v&65535,u)|0)>>16))|0;v=c[x+64>>2]|0;w=b[y+2>>1]|0;w=u+((R(v>>16,w)|0)+((R(v&65535,w)|0)>>16))|0;v=c[x+60>>2]|0;u=b[y+4>>1]|0;u=w+((R(v>>16,u)|0)+((R(v&65535,u)|0)>>16))|0;v=c[x+56>>2]|0;w=b[y+6>>1]|0;w=u+((R(v>>16,w)|0)+((R(v&65535,w)|0)>>16))|0;v=c[x+52>>2]|0;u=b[y+8>>1]|0;u=w+((R(v>>16,u)|0)+((R(v&65535,u)|0)>>16))|0;v=c[x+48>>2]|0;w=b[y+10>>1]|0;w=u+((R(v>>16,w)|0)+((R(v&65535,w)|0)>>16))|0;v=c[x+44>>2]|0;u=b[y+12>>1]|0;u=w+((R(v>>16,u)|0)+((R(v&65535,u)|0)>>16))|0;v=c[x+40>>2]|0;w=b[y+14>>1]|0;w=u+((R(v>>16,w)|0)+((R(v&65535,w)|0)>>16))|0;x=c[x+36>>2]|0;y=b[y+16>>1]|0;y=(w+((R(x>>16,y)|0)+((R(x&65535,y)|0)>>16))>>5)+1>>1;b[a>>1]=(y|0)>32767?32767:((y|0)>-32768?y:-32768)&65535;a=a+2|0;f=f+i|0}return a|0}case 24:{g=e+2|0;j=e+4|0;k=e+6|0;l=e+8|0;m=e+10|0;n=e+12|0;o=e+14|0;p=e+16|0;q=e+18|0;r=e+20|0;s=e+22|0;f=0;while(1){if((f|0)>=(h|0))break;x=d+(f>>16<<2)|0;y=(c[x>>2]|0)+(c[x+92>>2]|0)|0;w=b[e>>1]|0;w=(R(y>>16,w)|0)+((R(y&65535,w)|0)>>16)|0;y=(c[x+4>>2]|0)+(c[x+88>>2]|0)|0;v=b[g>>1]|0;v=w+((R(y>>16,v)|0)+((R(y&65535,v)|0)>>16))|0;y=(c[x+8>>2]|0)+(c[x+84>>2]|0)|0;w=b[j>>1]|0;w=v+((R(y>>16,w)|0)+((R(y&65535,w)|0)>>16))|0;y=(c[x+12>>2]|0)+(c[x+80>>2]|0)|0;v=b[k>>1]|0;v=w+((R(y>>16,v)|0)+((R(y&65535,v)|0)>>16))|0;y=(c[x+16>>2]|0)+(c[x+76>>2]|0)|0;w=b[l>>1]|0;w=v+((R(y>>16,w)|0)+((R(y&65535,w)|0)>>16))|0;y=(c[x+20>>2]|0)+(c[x+72>>2]|0)|0;v=b[m>>1]|0;v=w+((R(y>>16,v)|0)+((R(y&65535,v)|0)>>16))|0;y=(c[x+24>>2]|0)+(c[x+68>>2]|0)|0;w=b[n>>1]|0;w=v+((R(y>>16,w)|0)+((R(y&65535,w)|0)>>16))|0;y=(c[x+28>>2]|0)+(c[x+64>>2]|0)|0;v=b[o>>1]|0;v=w+((R(y>>16,v)|0)+((R(y&65535,v)|0)>>16))|0;y=(c[x+32>>2]|0)+(c[x+60>>2]|0)|0;w=b[p>>1]|0;w=v+((R(y>>16,w)|0)+((R(y&65535,w)|0)>>16))|0;y=(c[x+36>>2]|0)+(c[x+56>>2]|0)|0;v=b[q>>1]|0;v=w+((R(y>>16,v)|0)+((R(y&65535,v)|0)>>16))|0;y=(c[x+40>>2]|0)+(c[x+52>>2]|0)|0;w=b[r>>1]|0;w=v+((R(y>>16,w)|0)+((R(y&65535,w)|0)>>16))|0;x=(c[x+44>>2]|0)+(c[x+48>>2]|0)|0;y=b[s>>1]|0;y=(w+((R(x>>16,y)|0)+((R(x&65535,y)|0)>>16))>>5)+1>>1;b[a>>1]=(y|0)>32767?32767:((y|0)>-32768?y:-32768)&65535;a=a+2|0;f=f+i|0}return a|0}case 36:{w=e+2|0;x=e+4|0;y=e+6|0;g=e+8|0;j=e+10|0;k=e+12|0;l=e+14|0;m=e+16|0;n=e+18|0;o=e+20|0;p=e+22|0;q=e+24|0;r=e+26|0;s=e+28|0;t=e+30|0;u=e+32|0;v=e+34|0;f=0;while(1){if((f|0)>=(h|0))break;A=d+(f>>16<<2)|0;z=(c[A>>2]|0)+(c[A+140>>2]|0)|0;B=b[e>>1]|0;B=(R(z>>16,B)|0)+((R(z&65535,B)|0)>>16)|0;z=(c[A+4>>2]|0)+(c[A+136>>2]|0)|0;C=b[w>>1]|0;C=B+((R(z>>16,C)|0)+((R(z&65535,C)|0)>>16))|0;z=(c[A+8>>2]|0)+(c[A+132>>2]|0)|0;B=b[x>>1]|0;B=C+((R(z>>16,B)|0)+((R(z&65535,B)|0)>>16))|0;z=(c[A+12>>2]|0)+(c[A+128>>2]|0)|0;C=b[y>>1]|0;C=B+((R(z>>16,C)|0)+((R(z&65535,C)|0)>>16))|0;z=(c[A+16>>2]|0)+(c[A+124>>2]|0)|0;B=b[g>>1]|0;B=C+((R(z>>16,B)|0)+((R(z&65535,B)|0)>>16))|0;z=(c[A+20>>2]|0)+(c[A+120>>2]|0)|0;C=b[j>>1]|0;C=B+((R(z>>16,C)|0)+((R(z&65535,C)|0)>>16))|0;z=(c[A+24>>2]|0)+(c[A+116>>2]|0)|0;B=b[k>>1]|0;B=C+((R(z>>16,B)|0)+((R(z&65535,B)|0)>>16))|0;z=(c[A+28>>2]|0)+(c[A+112>>2]|0)|0;C=b[l>>1]|0;C=B+((R(z>>16,C)|0)+((R(z&65535,C)|0)>>16))|0;z=(c[A+32>>2]|0)+(c[A+108>>2]|0)|0;B=b[m>>1]|0;B=C+((R(z>>16,B)|0)+((R(z&65535,B)|0)>>16))|0;z=(c[A+36>>2]|0)+(c[A+104>>2]|0)|0;C=b[n>>1]|0;C=B+((R(z>>16,C)|0)+((R(z&65535,C)|0)>>16))|0;z=(c[A+40>>2]|0)+(c[A+100>>2]|0)|0;B=b[o>>1]|0;B=C+((R(z>>16,B)|0)+((R(z&65535,B)|0)>>16))|0;z=(c[A+44>>2]|0)+(c[A+96>>2]|0)|0;C=b[p>>1]|0;C=B+((R(z>>16,C)|0)+((R(z&65535,C)|0)>>16))|0;z=(c[A+48>>2]|0)+(c[A+92>>2]|0)|0;B=b[q>>1]|0;B=C+((R(z>>16,B)|0)+((R(z&65535,B)|0)>>16))|0;z=(c[A+52>>2]|0)+(c[A+88>>2]|0)|0;C=b[r>>1]|0;C=B+((R(z>>16,C)|0)+((R(z&65535,C)|0)>>16))|0;z=(c[A+56>>2]|0)+(c[A+84>>2]|0)|0;B=b[s>>1]|0;B=C+((R(z>>16,B)|0)+((R(z&65535,B)|0)>>16))|0;z=(c[A+60>>2]|0)+(c[A+80>>2]|0)|0;C=b[t>>1]|0;C=B+((R(z>>16,C)|0)+((R(z&65535,C)|0)>>16))|0;z=(c[A+64>>2]|0)+(c[A+76>>2]|0)|0;B=b[u>>1]|0;B=C+((R(z>>16,B)|0)+((R(z&65535,B)|0)>>16))|0;A=(c[A+68>>2]|0)+(c[A+72>>2]|0)|0;z=b[v>>1]|0;z=(B+((R(A>>16,z)|0)+((R(A&65535,z)|0)>>16))>>5)+1>>1;b[a>>1]=(z|0)>32767?32767:((z|0)>-32768?z:-32768)&65535;a=a+2|0;f=f+i|0}return a|0}default:{C=a;return C|0}}return 0}function Te(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;n=l;j=a+268|0;o=c[j>>2]|0;k=l;l=l+((1*((o<<1)+8<<1)|0)+15&-16)|0;m=a+24|0;b[k>>1]=b[m>>1]|0;b[k+2>>1]=b[m+2>>1]|0;b[k+4>>1]=b[m+4>>1]|0;b[k+6>>1]=b[m+6>>1]|0;b[k+8>>1]=b[m+8>>1]|0;b[k+10>>1]=b[m+10>>1]|0;b[k+12>>1]=b[m+12>>1]|0;b[k+14>>1]=b[m+14>>1]|0;h=c[a+272>>2]|0;i=k+16|0;g=e;e=o;while(1){e=(f|0)<(e|0)?f:e;Ve(a,i,g,e);d=Ue(d,k,e<<17,h)|0;f=f-e|0;if((f|0)<=0)break;o=k+(e<<1<<1)|0;b[k>>1]=b[o>>1]|0;b[k+2>>1]=b[o+2>>1]|0;b[k+4>>1]=b[o+4>>1]|0;b[k+6>>1]=b[o+6>>1]|0;b[k+8>>1]=b[o+8>>1]|0;b[k+10>>1]=b[o+10>>1]|0;b[k+12>>1]=b[o+12>>1]|0;b[k+14>>1]=b[o+14>>1]|0;g=g+(e<<1)|0;e=c[j>>2]|0}o=k+(e<<1<<1)|0;b[m>>1]=b[o>>1]|0;b[m+2>>1]=b[o+2>>1]|0;b[m+4>>1]=b[o+4>>1]|0;b[m+6>>1]=b[o+6>>1]|0;b[m+8>>1]=b[o+8>>1]|0;b[m+10>>1]=b[o+10>>1]|0;b[m+12>>1]=b[o+12>>1]|0;b[m+14>>1]=b[o+14>>1]|0;l=n;return}function Ue(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=0;while(1){if((f|0)>=(d|0))break;g=((f&65535)*12|0)>>>16;h=c+(f>>16<<1)|0;i=R(b[h>>1]|0,b[28706+(g<<3)>>1]|0)|0;i=i+(R(b[h+2>>1]|0,b[28706+(g<<3)+2>>1]|0)|0)|0;i=i+(R(b[h+4>>1]|0,b[28706+(g<<3)+4>>1]|0)|0)|0;i=i+(R(b[h+6>>1]|0,b[28706+(g<<3)+6>>1]|0)|0)|0;g=11-g|0;i=i+(R(b[h+8>>1]|0,b[28706+(g<<3)+6>>1]|0)|0)|0;i=i+(R(b[h+10>>1]|0,b[28706+(g<<3)+4>>1]|0)|0)|0;i=i+(R(b[h+12>>1]|0,b[28706+(g<<3)+2>>1]|0)|0)|0;g=(i+(R(b[h+14>>1]|0,b[28706+(g<<3)>>1]|0)|0)>>14)+1>>1;b[a>>1]=(g|0)>32767?32767:((g|0)>-32768?g:-32768)&65535;a=a+2|0;f=f+e|0}return a|0}function Ve(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;h=a+4|0;i=a+8|0;j=a+12|0;k=a+16|0;l=a+20|0;g=0;while(1){if((g|0)>=(f|0))break;p=b[e+(g<<1)>>1]<<10;n=c[a>>2]|0;m=p-n|0;m=((m>>16)*1746|0)+(((m&65535)*1746|0)>>>16)|0;n=n+m|0;c[a>>2]=p+m;m=c[h>>2]|0;o=n-m|0;o=((o>>16)*14986|0)+(((o&65535)*14986|0)>>>16)|0;m=m+o|0;c[h>>2]=n+o;o=m-(c[i>>2]|0)|0;n=(R(o>>16,-26453)|0)+((R(o&65535,-26453)|0)>>16)|0;c[i>>2]=m+(o+n);n=(m+n>>9)+1>>1;m=g<<1;b[d+(m<<1)>>1]=(n|0)>32767?32767:((n|0)>-32768?n:-32768)&65535;n=c[j>>2]|0;o=p-n|0;o=((o>>16)*6854|0)+(((o&65535)*6854|0)>>>16)|0;n=n+o|0;c[j>>2]=p+o;o=c[k>>2]|0;p=n-o|0;p=((p>>16)*25769|0)+(((p&65535)*25769|0)>>>16)|0;o=o+p|0;c[k>>2]=n+p;p=o-(c[l>>2]|0)|0;n=(R(p>>16,-9994)|0)+((R(p&65535,-9994)|0)>>16)|0;c[l>>2]=o+(p+n);n=(o+n>>9)+1>>1;b[d+((m|1)<<1)>>1]=(n|0)>32767?32767:((n|0)>-32768?n:-32768)&65535;g=g+1|0}return}function We(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ve(a,b,c,d);return}function Xe(a){a=a|0;var b=0;if((a|0)<0){b=0-a|0;if((a|0)<-191){b=0;return b|0}a=b>>5;b=(c[19328+(a<<2)>>2]|0)-(R(c[19352+(a<<2)>>2]<<16>>16,b&31)|0)|0;return b|0}else{if((a|0)>191){b=32767;return b|0}b=a>>5;b=(c[19376+(b<<2)>>2]|0)+(R(c[19352+(b<<2)>>2]<<16>>16,a&31)|0)|0;return b|0}return 0}function Ye(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=0;while(1){if((f|0)>=(e|0)){h=1;break}c[b+(f<<2)>>2]=f;f=f+1|0}while(1){if((h|0)>=(e|0))break;i=c[a+(h<<2)>>2]|0;g=h;while(1){f=g+-1|0;if((g|0)<=0)break;j=c[a+(f<<2)>>2]|0;if((i|0)>=(j|0))break;c[a+(g<<2)>>2]=j;c[b+(g<<2)>>2]=c[b+(f<<2)>>2];g=f}c[a+(g<<2)>>2]=i;c[b+(g<<2)>>2]=h;h=h+1|0}k=a+(e+-1<<2)|0;j=e+-2|0;g=e;while(1){if((g|0)>=(d|0))break;h=c[a+(g<<2)>>2]|0;if((h|0)<(c[k>>2]|0)){f=j;while(1){if((f|0)<=-1)break;i=c[a+(f<<2)>>2]|0;if((h|0)>=(i|0))break;e=f+1|0;c[a+(e<<2)>>2]=i;c[b+(e<<2)>>2]=c[b+(f<<2)>>2];f=f+-1|0}e=f+1|0;c[a+(e<<2)>>2]=h;c[b+(e<<2)>>2]=g}g=g+1|0}return}function Ze(a,c){a=a|0;c=c|0;var d=0,e=0,f=0,g=0,h=0;f=1;while(1){if((f|0)>=(c|0))break;g=b[a+(f<<1)>>1]|0;e=f;while(1){d=e+-1|0;if((e|0)<=0)break;h=b[a+(d<<1)>>1]|0;if(g<<16>>16>=h<<16>>16)break;b[a+(e<<1)>>1]=h;e=d}b[a+(e<<1)>>1]=g;f=f+1|0}return}function _e(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;j=31-($e(f)|0)|0;k=f+-1|0;i=((k|0)>0?k:0)+1&-2;g=f;h=0;while(1){if((h|0)>=(k|0))break;m=b[e+(h<<1)>>1]|0;m=R(m,m)|0;l=b[e+((h|1)<<1)>>1]|0;g=g+((m+(R(l,l)|0)|0)>>>j)|0;h=h+2|0}if((i|0)<(f|0)){m=b[e+(i<<1)>>1]|0;g=g+((R(m,m)|0)>>>j)|0}i=af(j+3-($e(g)|0)|0)|0;j=((k|0)>0?k:0)+1&-2;g=0;h=0;while(1){if((g|0)>=(k|0))break;l=b[e+(g<<1)>>1]|0;l=R(l,l)|0;m=b[e+((g|1)<<1)>>1]|0;g=g+2|0;h=h+((l+(R(m,m)|0)|0)>>>i)|0}if((j|0)>=(f|0)){m=h;c[d>>2]=i;c[a>>2]=m;return}m=b[e+(j<<1)>>1]|0;m=h+((R(m,m)|0)>>>i)|0;c[d>>2]=i;c[a>>2]=m;return}function $e(a){a=a|0;return U(a|0)|0}function af(a){a=a|0;return ((a|0)>0?a:0)|0}function bf(b,c){b=b|0;c=c|0;var d=0;Rb(b,((a[c+2>>0]|0)*5|0)+(a[c+5>>0]|0)|0,32397,8);d=0;while(1){if((d|0)==2)break;Rb(b,a[c+(d*3|0)>>0]|0,32450,8);Rb(b,a[c+(d*3|0)+1>>0]|0,32457,8);d=d+1|0}return}function cf(a,b){a=a|0;b=b|0;Rb(a,b<<24>>24,32422,8);return}function df(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;h=l;l=l+16|0;i=h+12|0;o=h+8|0;n=h+4|0;j=h;_e(n,i,b,f);_e(j,o,d,f);i=c[i>>2]|0;o=c[o>>2]|0;q=ef(i,o)|0;q=q+(q&1)|0;o=c[j>>2]>>q-o;c[j>>2]=o;i=ef(c[n>>2]>>q-i,1)|0;c[n>>2]=i;n=te(b,d,q,f)|0;f=ff(n,i,13)|0;f=(f|0)>16384?16384:(f|0)>-16384?f:-16384;m=f<<16>>16;k=(R(f>>16,m)|0)+((R(f&65535,m)|0)>>16)|0;d=ef(g,(k|0)>0?k:0-k|0)|0;b=q>>1;q=c[e>>2]|0;p=(gf(i)|0)<>16;p=R(p-(c[e>>2]|0)>>16,d)|0;g=(gf(i)|0)<>2]=q+(p+((R(g-(c[e>>2]|0)&65535,d)|0)>>16));k=k<<16>>16;k=o-((R(n>>16,m)|0)+((R(n&65535,m)|0)>>16)<<4)+((R(i>>16,k)|0)+((R(i&65535,k)|0)>>16)<<6)|0;c[j>>2]=k;g=e+4|0;j=c[g>>2]|0;i=(gf(k)|0)<>2]|0)>>16,d)|0;b=(gf(k)|0)<>2]|0)&65535,d)|0)>>16))|0;c[g>>2]=d;g=c[e>>2]|0;g=ff(d,(g|0)>1?g:1,14)|0;c[a>>2]=(g|0)>32767?32767:(g|0)>0?g:0;l=h;return f|0}function ef(a,b){a=a|0;b=b|0;return ((a|0)>(b|0)?a:b)|0}function ff(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0;e=jf((a|0)>0?a:0-a|0)|0;g=a<0?b:0-b|0)|0)+-1|0;b=b<>16|0)|0)<<16>>16;f=(R(g>>16,d)|0)+((R(g&65535,d)|0)>>16)|0;b=Uh(b|0,((b|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;b=Rh(b|0,C|0,29)|0;b=g-(b&-8)|0;d=f+((R(b>>16,d)|0)+((R(b&65535,d)|0)>>16))|0;a=e+28-a-c|0;if((a|0)>=0)return ((a|0)<32?d>>a:0)|0;a=0-a|0;b=-2147483648>>a;c=2147483647>>>a;if((b|0)>(c|0)){if((d|0)>(b|0)){g=b;g=g<(c|0)){g=c;g=g<>2]|0;b=((b&1|0)==0?46214:32768)>>>(b>>1);d=(R(c[d>>2]<<16>>16,13959168)|0)>>16;d=b+((R(b>>16,d)|0)+((R(b&65535,d)|0)>>16))|0;l=e;return d|0}function hf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=jf(a)|0;c[b>>2]=e;c[d>>2]=(kf(a,24-e|0)|0)&127;return}function jf(a){a=a|0;return U(a|0)|0}function kf(a,b){a=a|0;b=b|0;if(!b){b=a;return b|0}if((b|0)<0){b=a<<0-b|a>>>(b+32|0);return b|0}else{b=a<<32-b|a>>>b;return b|0}return 0}function lf(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=0;p=0;while(1){if((p|0)==2)break;q=d+(p<<2)|0;r=e+(p*3|0)|0;o=e+(p*3|0)+1|0;h=2147483647;g=0;a:while(1){if((g|0)>=15)break;l=b[28144+(g<<1)>>1]|0;m=g+1|0;n=b[28144+(m<<1)>>1]|0;n=(R((n<<16>>16)-l>>16,429522944)|0)+(((n&65535)-l&65535)*6554|0)>>16;k=g&255;j=0;i=h;while(1){if((j|0)>=5){h=i;g=m;continue a}g=l+(R(n,j<<17>>16|1)|0)|0;h=c[q>>2]|0;h=(h|0)>(g|0)?h-g|0:g-h|0;if((h|0)>=(i|0))break a;a[r>>0]=k;a[o>>0]=j;j=j+1|0;i=h;f=g}}n=a[r>>0]|0;o=(n<<24>>24)/3|0;a[e+(p*3|0)+2>>0]=o;a[r>>0]=(n&255)+(R(o<<24>>24,-3)|0);c[q>>2]=f;p=p+1|0}c[d>>2]=(c[d>>2]|0)-(c[d+4>>2]|0);return}function mf(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=0;j=0;while(1){if((j|0)<10){g=0;h=0;i=f}else break;while(1){if((h|0)>=(e|0))break;k=c[d+(h<<2)>>2]|0;k=(k|0)>0?k:0-k|0;l=(k|0)>(g|0);f=l?h:i;g=l?k:g;h=h+1|0;i=f}f=(g>>4)+1>>1;if((f|0)<=32767)break;f=(f|0)<163838?f:163838;se(d,e,65470-(((f<<14)+-536854528|0)/((R(f,i+1|0)|0)>>2|0)|0)|0);f=i;j=j+1|0}if((j|0)==10){f=0;while(1){if((f|0)>=(e|0))break;l=d+(f<<2)|0;k=(c[l>>2]>>4)+1>>1;k=(k|0)>32767?32767:(k|0)>-32768?k:-32768;b[a+(f<<1)>>1]=k;c[l>>2]=k<<16>>11;f=f+1|0}return}else{f=0;while(1){if((f|0)>=(e|0))break;b[a+(f<<1)>>1]=(((c[d+(f<<2)>>2]|0)>>>4)+1|0)>>>1;f=f+1|0}return}}function nf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0,j=0.0;e=3.1415927410125732/+(d+1|0);h=2.0-e*e;i=(c|0)<2;c=0;e=i?e:h*.5;f=i?0.0:1.0;while(1){if((c|0)>=(d|0))break;g[a+(c<<2)>>2]=+g[b+(c<<2)>>2]*.5*(f+e);i=c|1;g[a+(i<<2)>>2]=+g[b+(i<<2)>>2]*e;j=h*e-f;i=c|2;g[a+(i<<2)>>2]=+g[b+(i<<2)>>2]*.5*(e+j);i=c|3;g[a+(i<<2)>>2]=+g[b+(i<<2)>>2]*j;c=c+4|0;e=h*j-e;f=j}return}function of(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;a=a+16|0;e=0;while(1){if((e|0)==5)break;g[d+(e<<2)>>2]=+ag(a,b,c);a=a+-4|0;e=e+1|0}return}function pf(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0,f=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0;i=a+16|0;d=+$f(i,b);g[c>>2]=d;e=1;while(1){if((e|0)==5)break;k=+g[i+(0-e<<2)>>2];j=+g[i+(b-e<<2)>>2];j=d+(k*k-j*j);g[c+(e*6<<2)>>2]=j;d=j;e=e+1|0}e=a+12|0;a=1;while(1){if((a|0)==5)break;d=+ag(i,e,b);k=d;g[c+(a*5<<2)>>2]=k;g[c+(a<<2)>>2]=k;h=5-a|0;f=1;while(1){if((f|0)>=(h|0))break;m=0-f|0;l=b-f|0;k=d+(+g[i+(m<<2)>>2]*+g[e+(m<<2)>>2]-+g[i+(l<<2)>>2]*+g[e+(l<<2)>>2]);j=k;l=a+f|0;g[c+((l*5|0)+f<<2)>>2]=j;g[c+((f*5|0)+l<<2)>>2]=j;d=k;f=f+1|0}e=e+-4|0;a=a+1|0}return}function qf(b){b=b|0;var d=0,e=0,f=0;Ed(b,b+5094|0);do if((c[b+4528>>2]|0)<13){a[b+4761>>0]=0;d=b+6080|0;e=c[d>>2]|0;f=e+1|0;c[d>>2]=f;if((f|0)>=10){if((e|0)<=29){d=0;break}c[d>>2]=10}c[b+6076>>2]=0;d=0}else{c[b+6080>>2]=0;c[b+6076>>2]=0;a[b+4761>>0]=1;d=1}while(0);a[(c[b+5744>>2]|0)+(b+4716)>>0]=d;return}function rf(d,e,f,h,i,j){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0.0,va=0,wa=0;ta=l;l=l+13584|0;pa=ta+11536|0;n=ta+8848|0;qa=ta+8800|0;ca=ta+24|0;da=ta;ra=ta+4448|0;ea=ta+96|0;fa=ta+80|0;ga=ta+12296|0;ha=ta+64|0;ia=ta+12288|0;ja=ta+48|0;c[ha>>2]=0;c[ha+4>>2]=0;c[ha+8>>2]=0;c[ha+12>>2]=0;ka=d+4616|0;la=c[ka>>2]|0;c[ka>>2]=la+1;ka=d+4766|0;a[ka>>0]=la&3;la=d+4588|0;m=c[la>>2]|0;ma=d+7176+(m<<2)|0;k=d+5094|0;na=d+4580|0;fd(d+16|0,k,c[na>>2]|0);oa=d+4572|0;sf(ma+((c[oa>>2]|0)*5<<2)|0,k,c[na>>2]|0);k=0;while(1){if((k|0)==8)break;ba=ma+(((c[oa>>2]|0)*5|0)+(R(k,c[na>>2]>>3)|0)<<2)|0;g[ba>>2]=+g[ba>>2]+ +(1-(k&2)|0)*9.999999974752427e-07;k=k+1|0}k=n+(m<<2)|0;ba=d+4676|0;a:do if(!(c[ba>>2]|0)){yf(d,pa,n,ma);If(d,pa,k,ma);zf(d,pa,k,ma,h);Of(d,pa,h);tf(d,pa,ma,h);I=d+4732|0;J=d+4576|0;k=dd(I,c[J>>2]|0)|0;m=qa;o=f;p=m+48|0;do{c[m>>2]=c[o>>2];m=m+4|0;o=o+4|0}while((m|0)<(p|0));K=d+144|0;Sh(ra|0,K|0,4352)|0;L=a[ka>>0]|0;M=d+5768|0;N=b[M>>1]|0;O=d+5764|0;P=c[O>>2]|0;Q=pa+692|0;S=d+4762|0;T=d+4584|0;U=pa+744|0;V=d+7164|0;W=(h|0)==2;X=W&1;Y=i+-5|0;G=f+24|0;H=f+28|0;Z=d+4732|0;_=d+4768|0;$=d+5744|0;aa=d+4761|0;F=f+20|0;E=0;D=-1;u=0;t=0;v=0;x=0;w=0;y=0;B=0;C=256;r=-1;n=0;while(1){q=(k|0)==(D|0);if(!q)if((k|0)!=(r|0)){if((E|0)>0){m=f;o=qa;p=m+48|0;do{c[m>>2]=c[o>>2];m=m+4|0;o=o+4|0}while((m|0)<(p|0));Sh(K|0,ra|0,4352)|0;a[ka>>0]=L;b[M>>1]=N;c[O>>2]=P}Wf(d,pa,Z,K,_,ma);o=(E|0)==6;if(o&(t|0)==0){c[ca>>2]=c[f>>2];c[ca+4>>2]=c[f+4>>2];c[ca+8>>2]=c[f+8>>2];c[ca+12>>2]=c[f+12>>2];c[ca+16>>2]=c[f+16>>2];c[ca+20>>2]=c[f+20>>2];n=c[G>>2]|0;c[da>>2]=c[H>>2];c[da+4>>2]=c[H+4>>2];c[da+8>>2]=c[H+8>>2];c[da+12>>2]=c[H+12>>2];c[da+16>>2]=c[H+16>>2]}Xc(d,f,c[$>>2]|0,0,h);Yc(f,a[aa>>0]|0,a[S>>0]|0,_,c[na>>2]|0);m=uf(c[F>>2]|0,c[H>>2]|0)|0;if(o&(t|0)==0&(m|0)>(i|0)){c[f>>2]=c[ca>>2];c[f+4>>2]=c[ca+4>>2];c[f+8>>2]=c[ca+8>>2];c[f+12>>2]=c[ca+12>>2];c[f+16>>2]=c[ca+16>>2];c[f+20>>2]=c[ca+20>>2];c[G>>2]=n;c[H>>2]=c[da>>2];c[H+4>>2]=c[da+4>>2];c[H+8>>2]=c[da+8>>2];c[H+12>>2]=c[da+12>>2];c[H+16>>2]=c[da+16>>2];o=a[U>>0]|0;a[V>>0]=o;m=0;while(1){if((m|0)>=(c[J>>2]|0))break;a[d+4732+m>>0]=4;m=m+1|0}if(!W)a[I>>0]=o;b[M>>1]=N;c[O>>2]=P;m=0;while(1){if((m|0)>=(c[na>>2]|0))break;a[d+4768+m>>0]=0;m=m+1|0}Xc(d,f,c[$>>2]|0,0,h);Yc(f,a[aa>>0]|0,a[S>>0]|0,_,c[na>>2]|0);m=uf(c[F>>2]|0,c[H>>2]|0)|0}if(!(E|j))if((m|0)>(i|0))A=m;else break a;else sa=24}else{m=w;sa=24}else{m=y;sa=24}if((sa|0)==24){sa=0;if((E|0)==6)break;else A=m}z=(A|0)>(i|0);b:do if(!z){if((A|0)>=(Y|0))break a;m=C<<16>>16;if(q){t=1;x=m;y=A;q=B;s=n}else{c[ca>>2]=c[f>>2];c[ca+4>>2]=c[f+4>>2];c[ca+8>>2]=c[f+8>>2];c[ca+12>>2]=c[f+12>>2];c[ca+16>>2]=c[f+16>>2];c[ca+20>>2]=c[f+20>>2];s=c[G>>2]|0;c[da>>2]=c[H>>2];c[da+4>>2]=c[H+4>>2];c[da+8>>2]=c[H+8>>2];c[da+12>>2]=c[H+12>>2];c[da+16>>2]=c[H+16>>2];Sh(ga|0,c[f>>2]|0,s|0)|0;Sh(ea|0,K|0,4352)|0;t=1;x=m;y=A;q=a[V>>0]|0}}else{if(t|0){r=k;k=D;u=1;v=C<<16>>16;w=A;q=B;s=n;break}if((E|0)>1){ua=+g[Q>>2]*1.5;g[Q>>2]=ua>1.5?ua:1.5;a[S>>0]=0;k=-1;u=0}else{u=1;v=C<<16>>16;w=A}r=c[J>>2]|0;s=(E|0)==0;q=0;c:while(1){if((q|0)>=(r|0)){t=0;r=k;k=D;q=B;s=n;break b}m=c[T>>2]|0;t=q+1|0;o=R(t,m)|0;p=0;m=R(q,m)|0;while(1){if((m|0)>=(o|0))break;wa=a[d+4768+m>>0]|0;va=wa<<24>>24;p=p+(wa<<24>>24>-1?va:0-va|0)|0;m=m+1|0}m=ja+(q<<2)|0;do if(!s){o=ha+(q<<2)|0;if((p|0)<(c[m>>2]|0)?(c[o>>2]|0)==0:0)break;c[o>>2]=1;q=t;continue c}while(0);c[m>>2]=p;b[ia+(q<<1)>>1]=C;q=t}}while(0);do if(!(t&u)){if(!z){wa=ye(((A-i<<7|0)/(c[na>>2]|0)|0)+2048|0)|0;p=C<<16>>16;p=(R(wa>>16,p)|0)+((R(wa&65535,p)|0)>>>16)&65535;break}if(C<<16>>16<16384)p=C<<16>>16<<1&65535;else p=32767}else{p=v-x|0;n=x+((R(p,i-y|0)|0)/(w-y|0)|0)|0;o=n<<16>>16;p=p>>2;m=x+p|0;if((o|0)<=(m|0)){m=v-p|0;m=(o|0)<(m|0)?m:n}p=m&65535}while(0);o=c[J>>2]|0;n=0;while(1){if((n|0)>=(o|0))break;if(!(c[ha+(n<<2)>>2]|0))m=p;else m=b[ia+(n<<1)>>1]|0;va=c[pa+728+(n<<2)>>2]|0;wa=m<<16>>16;wa=(R(va>>16,wa)|0)+((R(va&65535,wa)|0)>>16)|0;c[fa+(n<<2)>>2]=(wa|0)>8388607?2147483392:((wa|0)>-8388608?wa:-8388608)<<8;n=n+1|0}a[V>>0]=a[U>>0]|0;_c(I,fa,V,X,o);n=c[J>>2]|0;o=dd(I,n)|0;m=0;while(1){if((m|0)>=(n|0))break;g[pa+(m<<2)>>2]=+(c[fa+(m<<2)>>2]|0)*.0000152587890625;m=m+1|0}E=E+1|0;D=k;k=o;B=q;C=p;n=s}if((t|0)!=0&(q|(m|0)>(i|0))){c[f>>2]=c[ca>>2];c[f+4>>2]=c[ca+4>>2];c[f+8>>2]=c[ca+8>>2];c[f+12>>2]=c[ca+12>>2];c[f+16>>2]=c[ca+16>>2];c[f+20>>2]=c[ca+20>>2];c[G>>2]=n;c[H>>2]=c[da>>2];c[H+4>>2]=c[da+4>>2];c[H+8>>2]=c[da+8>>2];c[H+12>>2]=c[da+12>>2];c[H+16>>2]=c[da+16>>2];Sh(c[f>>2]|0,ga|0,n|0)|0;Sh(K|0,ea|0,4352)|0;a[V>>0]=B}}while(0);Wh(d+7176|0,d+7176+(c[na>>2]<<2)|0,(c[la>>2]|0)+((c[oa>>2]|0)*5|0)<<2|0)|0;if(c[ba>>2]|0){wa=0;c[e>>2]=wa;l=ta;return 0}c[d+4540>>2]=c[pa+228+((c[d+4576>>2]|0)+-1<<2)>>2];a[d+4537>>0]=a[d+4761>>0]|0;c[d+4660>>2]=0;wa=(uf(c[f+20>>2]|0,c[f+28>>2]|0)|0)+7>>3;c[e>>2]=wa;l=ta;return 0}function sf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;while(1){e=d+-1|0;if((d|0)<=0)break;g[a+(e<<2)>>2]=+(b[c+(e<<1)>>1]|0);d=e}return}function tf(e,f,h,i){e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=l;l=l+4384|0;n=s+4368|0;o=s+4352|0;p=s;q=e+5744|0;j=c[q>>2]|0;r=e+6096+(j*36|0)|0;if(!(c[e+6088>>2]|0)){l=s;return}if((c[e+4528>>2]|0)<=77){l=s;return}c[e+4720+(j<<2)>>2]=1;Sh(p|0,e+144|0,4352)|0;j=r;k=e+4732|0;m=j+36|0;do{b[j>>1]=b[k>>1]|0;j=j+2|0;k=k+2|0}while((j|0)<(m|0));m=e+4576|0;j=c[m>>2]|0;Sh(o|0,f|0,j<<2|0)|0;k=c[q>>2]|0;if((k|0)!=0?(c[e+4720+(k+-1<<2)>>2]|0)!=0:0)k=e+4536|0;else{k=e+4536|0;a[k>>0]=a[e+7164>>0]|0;a[r>>0]=vf((d[r>>0]|0)+(c[e+6092>>2]|0)<<24>>24)|0;j=c[m>>2]|0}bd(n,r,k,(i|0)==2&1,j);j=0;while(1){if((j|0)>=(c[m>>2]|0))break;g[f+(j<<2)>>2]=+(c[n+(j<<2)>>2]|0)*.0000152587890625;j=j+1|0}Wf(e,f,r,p,e+6204+((c[q>>2]|0)*320|0)|0,h);Sh(f|0,o|0,c[m>>2]<<2|0)|0;l=s;return}function uf(a,b){a=a|0;b=b|0;return (U(b|0)|0)+-32+a|0}function vf(a){a=a|0;return ((a|0)<63?a:63)|0}function wf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var g=0.0,h=0,i=0.0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=l;l=l+1696|0;o=s+1600|0;p=s+1664|0;q=s+1536|0;r=s;j=b+4636|0;h=c[j>>2]|0;k=(c[b+4584>>2]|0)+h|0;m=b+4763|0;a[m>>0]=4;n=b+4576|0;g=+Zf(o,e,f,k,c[n>>2]|0,h);a:do if((c[b+4628>>2]|0?(c[b+4660>>2]|0)==0:0)?(c[n>>2]|0)==4:0){n=k<<1;g=g-+Zf(q,e+(n<<2)|0,f,k,2,c[j>>2]|0);Sf(d,q,c[j>>2]|0);h=b+4496|0;f=3402823466385288598117041.0e14;b=3;while(1){if((b|0)<=-1)break a;ed(p,h,d,b,c[j>>2]|0);Uf(q,p,c[j>>2]|0);Af(r,q,e,n,c[j>>2]|0);t=c[j>>2]|0;u=r+(t<<2)|0;t=k-t|0;i=+$f(u,t);i=i+ +$f(u+(k<<2)|0,t);if(!(if)break a}else{a[m>>0]=b;g=i}f=i;b=b+-1|0}}while(0);if((a[m>>0]|0)!=4){l=s;return}Sf(d,o,c[j>>2]|0);l=s;return}function xf(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,l=0.0,m=0;j=f+5|0;i=b;b=0;while(1){if((b|0)>=(h|0))break;m=d+(-2-(c[e+(b<<2)>>2]|0)<<2)|0;pf(m,f,a);of(m,d,f,i);l=+$f(d,j);k=(+g[a>>2]+ +g[a+96>>2])*.014999999664723873+1.0;k=1.0/(l>k?l:k);lg(a,k,25);lg(i,k,5);a=a+100|0;i=i+20|0;d=d+(f<<2)|0;b=b+1|0}return}function yf(d,e,f,h){d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0;j=l;l=l+1744|0;q=j+1664|0;m=j+1600|0;n=j+1536|0;s=j;v=d+4592|0;t=c[v>>2]|0;k=c[d+4588>>2]|0;i=t+(c[d+4580>>2]|0)+k|0;k=h+(0-k<<2)|0;r=d+4544|0;u=k+(i<<2)+(0-(c[r>>2]|0)<<2)|0;nf(s,u,1,t);h=c[v>>2]|0;v=s+(h<<2)|0;u=u+(h<<2)|0;t=(c[r>>2]|0)-(h<<1)|0;Sh(v|0,u|0,t<<2|0)|0;nf(v+(t<<2)|0,u+(t<<2)|0,2,h);h=d+4644|0;Yf(q,s,c[r>>2]|0,(c[h>>2]|0)+1|0);p=+g[q>>2];p=p+(p*1.0000000474974513e-03+1.0);g[q>>2]=p;o=+mg(n,q,c[h>>2]|0);g[e+704>>2]=p/(o>1.0?o:1.0);bg(m,n,c[h>>2]|0);_f(m,c[h>>2]|0,.9900000095367432);Af(f,m,k,i,c[h>>2]|0);i=d+4761|0;if(a[i>>0]|0?(c[d+4660>>2]|0)==0:0)if(!(cg(f,e+228|0,d+4758|0,d+4760|0,d+10056|0,c[d+4540>>2]|0,+(c[d+4648>>2]|0)*.0000152587890625,.6000000238418579-+(c[h>>2]|0)*.004000000189989805-+(c[d+4528>>2]|0)*.10000000149011612*.00390625-+(a[d+4537>>0]>>1|0)*.15000000596046448-+(c[d+4708>>2]|0)*.10000000149011612*.000030517578125,c[d+4572>>2]|0,c[d+4640>>2]|0,c[d+4576>>2]|0)|0)){a[i>>0]=2;l=j;return}else{a[i>>0]=1;l=j;return}v=e+228|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;b[d+4758>>1]=0;a[d+4760>>0]=0;g[d+10056>>2]=0.0;l=j;return}function zf(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0;u=l;l=l+2064|0;m=u+1632|0;n=u+1552|0;s=u+1536|0;j=u+2032|0;t=u;r=d+4576|0;q=c[r>>2]|0;k=0;while(1){if((k|0)>=(q|0))break;g[s+(k<<2)>>2]=1.0/+g[e+(k<<2)>>2];k=k+1|0}if((a[d+4761>>0]|0)==2){o=e+228|0;p=d+4584|0;xf(m,n,f,o,c[p>>2]|0,q);f=e+144|0;Xf(f,d+4736|0,d+4764|0,d+4652|0,e+708|0,m,n,c[p>>2]|0,c[r>>2]|0);Hf(d,e,i);q=c[d+4636>>2]|0;Gf(t,h+(0-q<<2)|0,f,o,s,c[p>>2]|0,c[r>>2]|0,q)}else{o=d+4636|0;f=c[o>>2]|0;p=d+4584|0;n=t;i=h+(0-f<<2)|0;m=0;k=q;while(1){if((m|0)>=(k|0))break;kg(n,i,+g[s+(m<<2)>>2],(c[p>>2]|0)+f|0);k=c[p>>2]|0;q=c[o>>2]|0;n=n+(k+q<<2)|0;i=i+(k<<2)|0;m=m+1|0;k=c[r>>2]|0;f=q}Qh(e+144|0,0,k*20|0)|0;g[e+708>>2]=0.0;c[d+4652>>2]=0}if(c[d+4660>>2]|0){v=.009999999776482582;wf(d,j,t,v);h=e+16|0;f=d+4496|0;Vf(d,h,j,f);p=e+712|0;q=d+4584|0;q=c[q>>2]|0;s=c[r>>2]|0;k=d+4636|0;k=c[k>>2]|0;Qf(p,t,h,e,q,s,k);k=f+32|0;do{b[f>>1]=b[j>>1]|0;f=f+2|0;j=j+2|0}while((f|0)<(k|0));l=u;return}v=+aa(+(+g[e+708>>2]/3.0))/1.0e4;v=v/(+g[e+700>>2]*.75+.25);wf(d,j,t,v);h=e+16|0;f=d+4496|0;Vf(d,h,j,f);p=e+712|0;q=d+4584|0;q=c[q>>2]|0;s=c[r>>2]|0;k=d+4636|0;k=c[k>>2]|0;Qf(p,t,h,e,q,s,k);k=f+32|0;do{b[f>>1]=b[j>>1]|0;f=f+2|0;j=j+2|0}while((f|0)<(k|0));l=u;return}function Af(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;switch(e|0){case 6:{Bf(a,b,c,d);break}case 8:{Cf(a,b,c,d);break}case 10:{Df(a,b,c,d);break}case 12:{Ef(a,b,c,d);break}case 16:{Ff(a,b,c,d);break}default:{}}Qh(a|0,0,e<<2|0)|0;return}function Bf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0;f=b+4|0;h=b+8|0;i=b+12|0;j=b+16|0;k=b+20|0;e=6;while(1){if((e|0)>=(d|0))break;l=c+(e+-1<<2)|0;g[a+(e<<2)>>2]=+g[l+4>>2]-(+g[l>>2]*+g[b>>2]+ +g[l+-4>>2]*+g[f>>2]+ +g[l+-8>>2]*+g[h>>2]+ +g[l+-12>>2]*+g[i>>2]+ +g[l+-16>>2]*+g[j>>2]+ +g[l+-20>>2]*+g[k>>2]);e=e+1|0}return}function Cf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=b+4|0;i=b+8|0;j=b+12|0;k=b+16|0;l=b+20|0;m=b+24|0;f=b+28|0;e=8;while(1){if((e|0)>=(d|0))break;n=c+(e+-1<<2)|0;g[a+(e<<2)>>2]=+g[n+4>>2]-(+g[n>>2]*+g[b>>2]+ +g[n+-4>>2]*+g[h>>2]+ +g[n+-8>>2]*+g[i>>2]+ +g[n+-12>>2]*+g[j>>2]+ +g[n+-16>>2]*+g[k>>2]+ +g[n+-20>>2]*+g[l>>2]+ +g[n+-24>>2]*+g[m>>2]+ +g[n+-28>>2]*+g[f>>2]);e=e+1|0}return}function Df(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;j=b+4|0;k=b+8|0;l=b+12|0;m=b+16|0;n=b+20|0;o=b+24|0;f=b+28|0;h=b+32|0;i=b+36|0;e=10;while(1){if((e|0)>=(d|0))break;p=c+(e+-1<<2)|0;g[a+(e<<2)>>2]=+g[p+4>>2]-(+g[p>>2]*+g[b>>2]+ +g[p+-4>>2]*+g[j>>2]+ +g[p+-8>>2]*+g[k>>2]+ +g[p+-12>>2]*+g[l>>2]+ +g[p+-16>>2]*+g[m>>2]+ +g[p+-20>>2]*+g[n>>2]+ +g[p+-24>>2]*+g[o>>2]+ +g[p+-28>>2]*+g[f>>2]+ +g[p+-32>>2]*+g[h>>2]+ +g[p+-36>>2]*+g[i>>2]);e=e+1|0}return}function Ef(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;l=b+4|0;m=b+8|0;n=b+12|0;o=b+16|0;p=b+20|0;q=b+24|0;f=b+28|0;h=b+32|0;i=b+36|0;j=b+40|0;k=b+44|0;e=12;while(1){if((e|0)>=(d|0))break;r=c+(e+-1<<2)|0;g[a+(e<<2)>>2]=+g[r+4>>2]-(+g[r>>2]*+g[b>>2]+ +g[r+-4>>2]*+g[l>>2]+ +g[r+-8>>2]*+g[m>>2]+ +g[r+-12>>2]*+g[n>>2]+ +g[r+-16>>2]*+g[o>>2]+ +g[r+-20>>2]*+g[p>>2]+ +g[r+-24>>2]*+g[q>>2]+ +g[r+-28>>2]*+g[f>>2]+ +g[r+-32>>2]*+g[h>>2]+ +g[r+-36>>2]*+g[i>>2]+ +g[r+-40>>2]*+g[j>>2]+ +g[r+-44>>2]*+g[k>>2]);e=e+1|0}return}function Ff(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;p=b+4|0;q=b+8|0;r=b+12|0;s=b+16|0;t=b+20|0;u=b+24|0;f=b+28|0;h=b+32|0;i=b+36|0;j=b+40|0;k=b+44|0;l=b+48|0;m=b+52|0;n=b+56|0;o=b+60|0;e=16;while(1){if((e|0)>=(d|0))break;v=c+(e+-1<<2)|0;g[a+(e<<2)>>2]=+g[v+4>>2]-(+g[v>>2]*+g[b>>2]+ +g[v+-4>>2]*+g[p>>2]+ +g[v+-8>>2]*+g[q>>2]+ +g[v+-12>>2]*+g[r>>2]+ +g[v+-16>>2]*+g[s>>2]+ +g[v+-20>>2]*+g[t>>2]+ +g[v+-24>>2]*+g[u>>2]+ +g[v+-28>>2]*+g[f>>2]+ +g[v+-32>>2]*+g[h>>2]+ +g[v+-36>>2]*+g[i>>2]+ +g[v+-40>>2]*+g[j>>2]+ +g[v+-44>>2]*+g[k>>2]+ +g[v+-48>>2]*+g[l>>2]+ +g[v+-52>>2]*+g[m>>2]+ +g[v+-56>>2]*+g[n>>2]+ +g[v+-60>>2]*+g[o>>2]);e=e+1|0}return}function Gf(a,b,d,e,f,h,i,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;var m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0.0;u=l;l=l+32|0;t=u;s=h+k|0;r=0;while(1){if((r|0)>=(i|0))break;m=0-(c[e+(r<<2)>>2]|0)|0;q=+g[f+(r<<2)>>2];n=r*5|0;k=0;while(1){if((k|0)==5)break;c[t+(k<<2)>>2]=c[d+(n+k<<2)>>2];k=k+1|0}m=b+(m<<2)|0;n=0;while(1){if((n|0)>=(s|0))break;v=c[b+(n<<2)>>2]|0;o=a+(n<<2)|0;c[o>>2]=v;k=0;p=(c[j>>2]=v,+g[j>>2]);while(1){if((k|0)==5)break;w=p-+g[t+(k<<2)>>2]*+g[m+(2-k<<2)>>2];g[o>>2]=w;k=k+1|0;p=w}g[o>>2]=p*q;m=m+4|0;n=n+1|0}r=r+1|0;a=a+(s<<2)|0;b=b+(h<<2)|0}l=u;return}function Hf(d,e,f){d=d|0;e=e|0;f=f|0;var h=0.0;if(!f){h=+((c[d+4612>>2]|0)+(c[d+5740>>2]|0)|0)*+g[e+708>>2]*.10000000149011612;if(!(h>2.0))if(h<0.0)f=0;else f=~~h;else f=2}else f=0;a[d+4765>>0]=f;g[e+224>>2]=+(b[28184+(f<<24>>24<<1)>>1]|0)*.00006103515625;return}function If(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;C=l;l=l+1168|0;v=C+200|0;w=C+100|0;x=C;h=f+(0-(c[b+4596>>2]|0)<<2)|0;f=b+4712|0;i=+(c[f>>2]|0)*.0078125;y=b+4692|0;m=+((c[y>>2]|0)+(c[b+4696>>2]|0)|0)*.5*.000030517578125;A=d+696|0;g[A>>2]=m;k=+Jf((i+-20.0)*.25);B=d+700|0;g[B>>2]=k;if(!(c[b+4672>>2]|0)){o=1.0-+(c[b+4528>>2]|0)*.00390625;i=i-k*2.0*(m*.5+.5)*o*o}z=b+4761|0;do if((a[z>>0]|0)!=2){o=i+(+(c[f>>2]|0)*-.4000000059604645*.0078125+6.0)*(1.0-m);q=b+4572|0;j=c[q>>2]<<1;r=b+4576|0;p=((c[r>>2]<<16>>16)*5|0)/2|0;n=+(j|0);f=e;i=0.0;e=0;k=0.0;while(1){if((e|0)>=(p|0))break;m=+Kf(n+ +$f(f,j));if((e|0)>0)i=i+ +E(+(m-k));f=f+(j<<2)|0;e=e+1|0;k=m}f=b+4762|0;if(i>+(p+-1|0)*.6000000238418579){a[f>>0]=0;break}else{a[f>>0]=1;break}}else{o=i+ +g[b+10056>>2]*2.0;a[b+4762>>0]=0;q=b+4572|0;r=b+4576|0}while(0);k=+g[d+704>>2]*1.0000000474974513e-03;k=.9399999976158142/(k*k+1.0);p=b+4668|0;m=+(c[p>>2]|0)*.0000152587890625+ +g[B>>2]*.009999999776482582;s=b+4600|0;t=b+4584|0;u=b+4632|0;j=0;while(1){f=c[r>>2]|0;if((j|0)>=(f|0))break;D=c[q>>2]|0;e=D*3|0;f=((c[s>>2]|0)-e|0)/2|0;nf(v,h,1,f);Sh(v+(f<<2)|0,h+(f<<2)|0,D*12|0)|0;e=f+e|0;nf(v+(e<<2)|0,h+(e<<2)|0,2,f);h=h+(c[t>>2]<<2)|0;f=c[s>>2]|0;e=c[u>>2]|0;if((c[p>>2]|0)>0)Rf(w,v,m,f,e);else Yf(w,v,f,e+1|0);i=+g[w>>2];g[w>>2]=i+(i*2.9999999242136255e-05+1.0);i=+mg(x,w,c[u>>2]|0);e=d+244+(j*24<<2)|0;bg(e,x,c[u>>2]|0);i=+F(+i);f=d+(j<<2)|0;g[f>>2]=i;if((c[p>>2]|0)>0)g[f>>2]=i*+Lf(e,m,c[u>>2]|0);_f(e,c[u>>2]|0,k);f=c[u>>2]|0;if((c[p>>2]|0)>0)Mf(e,m,f);else Nf(e,f);j=j+1|0}i=+aa(+(o*-.1599999964237213));h=0;while(1){if((h|0)>=(f|0))break;f=d+(h<<2)|0;g[f>>2]=+g[f>>2]*i+1.2483305931091309;h=h+1|0;f=c[r>>2]|0}e=b+4528|0;i=((+(c[y>>2]|0)*.000030517578125+-1.0)*.5+1.0)*4.0*(+(c[e>>2]|0)*.00390625);a:do if((a[z>>0]|0)==2){h=0;while(1){if((h|0)>=(f|0))break;o=.20000000298023224/+(c[q>>2]|0)+3.0/+(c[d+228+(h<<2)>>2]|0);g[d+628+(h<<2)>>2]=o+-1.0;g[d+644+(h<<2)>>2]=1.0-o-o*i;h=h+1|0;f=c[r>>2]|0}k=-.25-+(c[e>>2]|0)*.26249998807907104*.00390625}else{o=1.2999999523162842/+(c[q>>2]|0);e=d+628|0;g[e>>2]=o+-1.0;j=d+644|0;g[j>>2]=1.0-o-o*i*.6000000238418579;h=1;while(1){f=c[r>>2]|0;if((h|0)>=(f|0)){k=-.25;break a}c[d+628+(h<<2)>>2]=c[e>>2];c[d+644+(h<<2)>>2]=c[j>>2];h=h+1|0}}while(0);if((a[z>>0]|0)==2)i=((1.0-(1.0-+g[B>>2])*+g[A>>2])*.20000000298023224+.30000001192092896)*+F(+(+g[b+10056>>2]));else i=0.0;j=b+7168|0;e=b+7172|0;h=0;while(1){if((h|0)>=(f|0))break;o=+g[j>>2];o=o+(i-o)*.4000000059604645;g[j>>2]=o;g[d+676+(h<<2)>>2]=o;o=+g[e>>2];o=o+(k-o)*.4000000059604645;g[e>>2]=o;g[d+660+(h<<2)>>2]=o;h=h+1|0;f=c[r>>2]|0}l=C;return}function Jf(a){a=+a;return +(1.0/(+O(+-a)+1.0))}function Kf(a){a=+a;return +(+Ih(a)*3.32192809488736)}function Lf(a,b,c){a=a|0;b=+b;c=c|0;var d=0.0;d=+g[a+(c+-1<<2)>>2];c=c+-2|0;while(1){d=d*b;if((c|0)<=-1)break;d=+g[a+(c<<2)>>2]-d;c=c+-1|0}return +(1.0/(d+1.0))}function Mf(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0.0,h=0,i=0.0,j=0,k=0.0,l=0.0,m=0;e=c;while(1){d=e+-1|0;if((e|0)<=1)break;j=a+(e+-2<<2)|0;g[j>>2]=+g[j>>2]-+g[a+(d<<2)>>2]*b;e=d}k=1.0-b*b;f=k/(+g[a>>2]*b+1.0);d=0;while(1){if((d|0)>=(c|0)){d=0;j=0;break}j=a+(d<<2)|0;g[j>>2]=+g[j>>2]*f;d=d+1|0}while(1){if((j|0)<10){i=-1.0;e=0}else{d=23;break}while(1){if((e|0)>=(c|0))break;l=+E(+(+g[a+(e<<2)>>2]));h=l>i;i=h?l:i;d=h?e:d;e=e+1|0}if(!(i<=3.999000072479248))e=1;else{d=23;break}while(1){if((e|0)>=(c|0))break;h=a+(e+-1<<2)|0;g[h>>2]=+g[h>>2]+ +g[a+(e<<2)>>2]*b;e=e+1|0}f=1.0/f;e=0;while(1){if((e|0)>=(c|0))break;h=a+(e<<2)|0;g[h>>2]=+g[h>>2]*f;e=e+1|0}_f(a,c,.9900000095367432-(+(j|0)*.10000000149011612+.800000011920929)*(i+-3.999000072479248)/(i*+(d+1|0)));h=c;while(1){e=h+-1|0;if((h|0)<=1)break;m=a+(h+-2<<2)|0;g[m>>2]=+g[m>>2]-+g[a+(e<<2)>>2]*b;h=e}f=k/(+g[a>>2]*b+1.0);e=0;while(1){if((e|0)>=(c|0))break;m=a+(e<<2)|0;g[m>>2]=+g[m>>2]*f;e=e+1|0}j=j+1|0}if((d|0)==23)return}function Nf(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0,h=0,i=0.0,j=0;c=0;e=0;while(1){if((e|0)<10){d=-1.0;f=0}else{c=7;break}while(1){if((f|0)>=(b|0))break;i=+E(+(+g[a+(f<<2)>>2]));j=i>d;h=j?f:c;d=j?i:d;f=f+1|0;c=h}if(d<=3.999000072479248){c=7;break}_f(a,b,.9900000095367432-(+(e|0)*.10000000149011612+.800000011920929)*(d+-3.999000072479248)/(d*+(c+1|0)));e=e+1|0}if((c|0)==7)return}function Of(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0,m=0,n=0,o=0,p=0.0;o=l;l=l+16|0;m=o;n=d+4761|0;a:do if((a[n>>0]|0)==2){j=1.0-+Pf((+g[e+708>>2]+-12.0)*.25)*.5;i=d+4576|0;h=0;while(1){if((h|0)>=(c[i>>2]|0))break a;k=e+(h<<2)|0;g[k>>2]=+g[k>>2]*j;h=h+1|0}}else i=d+4576|0;while(0);j=+aa(+((21.0-+(c[d+4712>>2]|0)*.0078125)*.33000001311302185));j=j/+(c[d+4584>>2]|0);h=0;while(1){k=c[i>>2]|0;if((h|0)>=(k|0)){h=0;break}k=e+(h<<2)|0;p=+g[k>>2];p=+F(+(p*p+ +g[e+712+(h<<2)>>2]*j));g[k>>2]=p<32767.0?p:32767.0;h=h+1|0}while(1){if((h|0)>=(k|0))break;c[m+(h<<2)>>2]=~~(+g[e+(h<<2)>>2]*65536.0);h=h+1|0}Sh(e+728|0,m|0,k<<2|0)|0;h=d+7164|0;a[e+744>>0]=a[h>>0]|0;_c(d+4732|0,m,h,(f|0)==2&1,c[i>>2]|0);h=0;while(1){if((h|0)>=(c[i>>2]|0))break;g[e+(h<<2)>>2]=+(c[m+(h<<2)>>2]|0)*.0000152587890625;h=h+1|0}i=a[n>>0]|0;do if(i<<24>>24==2){h=d+4762|0;if(+g[e+708>>2]+ +(c[d+4708>>2]|0)*.000030517578125>1.0){a[h>>0]=0;h=0;break}else{a[h>>0]=1;h=1;break}}else h=a[d+4762>>0]|0;while(0);g[e+692>>2]=+(c[d+4624>>2]|0)*-.05000000074505806+1.2000000476837158+ +(c[d+4528>>2]|0)*-.20000000298023224*.00390625+ +g[e+696>>2]*-.10000000149011612+ +g[e+700>>2]*-.20000000298023224+ +(b[28176+(i<<24>>24>>1<<2)+(h<<24>>24<<1)>>1]|0)*.0009765625*.800000011920929;l=o;return}function Pf(a){a=+a;return +(1.0/(+O(+-a)+1.0))}function Qf(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0.0;n=l;l=l+768|0;k=n;m=k+(h<<2)|0;j=h+e|0;i=j<<1;Af(k,c,b,i,h);o=+g[d>>2];g[a>>2]=o*o*+$f(m,e);o=+g[d+4>>2];j=m+(j<<2)|0;g[a+4>>2]=o*o*+$f(j,e);if((f|0)!=4){l=n;return}Af(k,c+64|0,b+(i<<2)|0,i,h);o=+g[d+8>>2];g[a+8>>2]=o*o*+$f(m,e);o=+g[d+12>>2];g[a+12>>2]=o*o*+$f(j,e);l=n;return}function Rf(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;var f=0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0,w=0;q=l;l=l+400|0;o=q+200|0;p=q;Qh(o|0,0,200)|0;Qh(p|0,0,200)|0;m=o+(e<<3)|0;n=p+(e<<3)|0;k=0;i=0.0;while(1){if((k|0)>=(d|0)){f=0;break}j=+g[b+(k<<2)>>2];f=0;while(1){if((f|0)>=(e|0))break;v=f|1;w=o+(v<<3)|0;u=+h[w>>3];t=i+c*(u-j);h[o+(f<<3)>>3]=j;s=p+(f<<3)|0;h[s>>3]=+h[s>>3]+ +h[o>>3]*j;s=f+2|0;r=+h[o+(s<<3)>>3];h[w>>3]=t;v=p+(v<<3)|0;h[v>>3]=+h[v>>3]+ +h[o>>3]*t;j=u+c*(r-t);f=s;i=r}h[m>>3]=j;i=+h[o>>3];h[n>>3]=+h[n>>3]+i*j;k=k+1|0}while(1){if((f|0)>(e|0))break;g[a+(f<<2)>>2]=+h[p+(f<<3)>>3];f=f+1|0}l=q;return}function Sf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0;h=l;l=l+64|0;f=h;e=0;while(1){if((e|0)>=(d|0))break;c[f+(e<<2)>>2]=Tf(+g[b+(e<<2)>>2]*65536.0)|0;e=e+1|0}le(a,f,d);l=h;return}function Tf(a){a=+a;return Jh(a)|0}function Uf(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,f=0;f=l;l=l+32|0;e=f;Ee(e,c,d);c=0;while(1){if((c|0)>=(d|0))break;g[a+(c<<2)>>2]=+(b[e+(c<<1)>>1]|0)*.000244140625;c=c+1|0}l=f;return}function Vf(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0;i=l;l=l+64|0;h=i;Wd(a,h,e,f);f=a+4636|0;a=0;while(1){if((a|0)==2)break;else e=0;while(1){if((e|0)>=(c[f>>2]|0))break;g[d+(a<<6)+(e<<2)>>2]=+(b[h+(a<<5)+(e<<1)>>1]|0)*.000244140625;e=e+1|0}a=a+1|0}l=i;return}function Wf(d,e,f,h,i,j){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;A=l;l=l+1008|0;w=A+360|0;x=A+48|0;y=A+296|0;z=A+256|0;s=A+64|0;t=A+32|0;u=A+16|0;v=A;r=c[d+4576>>2]|0;o=d+4632|0;m=0;while(1){if((m|0)>=(r|0)){k=0;break}p=c[o>>2]|0;q=m*24|0;k=0;while(1){if((k|0)>=(p|0))break;B=q+k|0;b[s+(B<<1)>>1]=Tf(+g[e+244+(B<<2)>>2]*8192.0)|0;k=k+1|0}m=m+1|0}while(1){if((k|0)>=(r|0))break;B=(Tf(+g[e+644+(k<<2)>>2]*16384.0)|0)<<16;c[t+(k<<2)>>2]=B|(Tf(+g[e+628+(k<<2)>>2]*16384.0)|0)&65535;c[u+(k<<2)>>2]=Tf(+g[e+660+(k<<2)>>2]*16384.0)|0;c[v+(k<<2)>>2]=Tf(+g[e+676+(k<<2)>>2]*16384.0)|0;k=k+1|0}n=+g[e+692>>2]*1024.0;m=r*5|0;k=0;while(1){if((k|0)>=(m|0))break;b[z+(k<<1)>>1]=Tf(+g[e+144+(k<<2)>>2]*16384.0)|0;k=k+1|0}q=Tf(n)|0;o=d+4636|0;k=0;while(1){if((k|0)==2){k=0;break}p=c[o>>2]|0;m=0;while(1){if((m|0)>=(p|0))break;b[y+(k<<5)+(m<<1)>>1]=Tf(+g[e+16+(k<<6)+(m<<2)>>2]*4096.0)|0;m=m+1|0}k=k+1|0}while(1){if((k|0)>=(r|0))break;c[x+(k<<2)>>2]=Tf(+g[e+(k<<2)>>2]*65536.0)|0;k=k+1|0}if((a[f+29>>0]|0)==2)k=b[28184+(a[f+33>>0]<<1)>>1]|0;else k=0;o=c[d+4580>>2]|0;m=0;while(1){if((m|0)>=(o|0))break;b[w+(m<<1)>>1]=Tf(+g[j+(m<<2)>>2])|0;m=m+1|0}if((c[d+4624>>2]|0)<=1?(c[d+4668>>2]|0)<=0:0){jd(d,h,f,w,i,y,z,s,v,u,t,x,e+228|0,q,k);l=A;return}rd(d,h,f,w,i,y,z,s,v,u,t,x,e+228|0,q,k);l=A;return}function Xf(a,d,e,f,h,i,j,k,m){a=a|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+528|0;s=t+480|0;r=t+488|0;p=t+80|0;q=t;o=m*25|0;n=0;while(1){if((n|0)>=(o|0))break;c[p+(n<<2)>>2]=Tf(+g[i+(n<<2)>>2]*131072.0)|0;n=n+1|0}o=m*5|0;n=0;while(1){if((n|0)>=(o|0))break;c[q+(n<<2)>>2]=Tf(+g[j+(n<<2)>>2]*131072.0)|0;n=n+1|0}Nd(r,d,e,f,s,p,q,k,m);n=0;while(1){if((n|0)>=(o|0))break;g[a+(n<<2)>>2]=+(b[r+(n<<1)>>1]|0)*.00006103515625;n=n+1|0}g[h>>2]=+(c[s>>2]|0)*.0078125;l=t;return}function Yf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;d=(d|0)>(c|0)?c:d;e=0;while(1){if((e|0)>=(d|0))break;g[a+(e<<2)>>2]=+ag(b,b+(e<<2)|0,c-e|0);e=e+1|0}return}function Zf(a,b,c,d,e,f){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;f=f|0;var i=0.0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0.0,G=0.0,H=0.0,I=0;D=l;l=l+976|0;w=D+784|0;x=D+592|0;B=D+392|0;y=D+192|0;C=D;i=+$f(b,R(e,d)|0);Qh(w|0,0,192)|0;j=0;while(1){if((j|0)>=(e|0))break;m=b+((R(j,d)|0)<<2)|0;k=1;while(1){if((k|0)>(f|0))break;A=+ag(m,m+(k<<2)|0,d-k|0);v=w+(k+-1<<3)|0;h[v>>3]=+h[v>>3]+A;k=k+1|0}j=j+1|0}Sh(x|0,w|0,192)|0;A=i*9.999999747378752e-06;u=i+A+9.999999717180685e-10;h[B>>3]=u;h[y>>3]=u;u=c;c=1.0;v=1;k=0;while(1){if((k|0)>=(f|0))break;q=d-k|0;s=q+-1|0;m=0;while(1){if((m|0)>=(e|0))break;t=b+((R(m,d)|0)<<2)|0;n=+g[t+(k<<2)>>2];o=+g[t+(s<<2)>>2];p=o;r=n;j=0;while(1){if((k|0)==(j|0)){j=0;break}G=+g[t+(k-j+-1<<2)>>2];I=w+(j<<3)|0;h[I>>3]=+h[I>>3]-n*G;H=+g[t+(q+j<<2)>>2];I=x+(j<<3)|0;h[I>>3]=+h[I>>3]-o*H;E=+h[C+(j<<3)>>3];p=p+H*E;r=r+G*E;j=j+1|0}while(1){if((j|0)==(v|0))break;I=B+(j<<3)|0;h[I>>3]=+h[I>>3]-r*+g[t+(k-j<<2)>>2];I=y+(j<<3)|0;h[I>>3]=+h[I>>3]-p*+g[t+(q+j+-1<<2)>>2];j=j+1|0}m=m+1|0}n=+h[x+(k<<3)>>3];o=+h[w+(k<<3)>>3];j=0;while(1){if((k|0)==(j|0))break;H=+h[C+(j<<3)>>3];I=k-j+-1|0;n=n+ +h[w+(I<<3)>>3]*H;o=o+ +h[x+(I<<3)>>3]*H;j=j+1|0}s=k+1|0;h[B+(s<<3)>>3]=o;h[y+(s<<3)>>3]=n;o=+h[B>>3];p=+h[y>>3];j=0;while(1){if((k|0)==(j|0))break;H=+h[C+(j<<3)>>3];I=j+1|0;n=n+ +h[y+(k-j<<3)>>3]*H;o=o+ +h[B+(I<<3)>>3]*H;p=p+ +h[y+(I<<3)>>3]*H;j=I}p=n*-2.0/(o+p);o=c*(1.0-p*p);if(!(o<=u)){j=0;c=o;n=p}else{H=+F(+(1.0-u/c));j=1;c=u;n=n>0.0?-H:H}q=s>>1;m=0;while(1){if((m|0)>=(q|0))break;t=C+(m<<3)|0;H=+h[t>>3];I=C+(k-m+-1<<3)|0;G=+h[I>>3];h[t>>3]=H+n*G;h[I>>3]=G+n*H;m=m+1|0}h[C+(k<<3)>>3]=n;if(!j)j=0;else{z=29;break}while(1){if((j|0)>(s|0))break;t=B+(j<<3)|0;H=+h[t>>3];I=y+(k-j+1<<3)|0;G=+h[I>>3];h[t>>3]=H+n*G;h[I>>3]=G+n*H;j=j+1|0}v=v+1|0;k=s}if((z|0)==29){while(1){k=k+1|0;if((k|0)>=(f|0))break;h[C+(k<<3)>>3]=0.0;z=29}if(j|0){j=0;while(1){if((j|0)>=(f|0)){j=0;break}g[a+(j<<2)>>2]=-+h[C+(j<<3)>>3];j=j+1|0}while(1){if((j|0)>=(e|0))break;i=i-+$f(b+((R(j,d)|0)<<2)|0,f);j=j+1|0}H=i*c;l=D;return +H}}i=+h[B>>3];c=1.0;j=0;while(1){if((j|0)>=(f|0))break;H=+h[C+(j<<3)>>3];I=j+1|0;G=+h[B+(I<<3)>>3];g[a+(j<<2)>>2]=-H;i=i+G*H;c=c+H*H;j=I}H=i-A*c;l=D;return +H}function _f(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0,f=0;e=b+-1|0;d=c;b=0;while(1){if((b|0)>=(e|0))break;f=a+(b<<2)|0;g[f>>2]=+g[f>>2]*d;d=d*c;b=b+1|0}f=a+(e<<2)|0;g[f>>2]=+g[f>>2]*d;return}function $f(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0,h=0.0,i=0.0,j=0.0,k=0.0;f=b+-3|0;c=((f|0)>0?f:0)+3&-4;d=0.0;e=0;while(1){if((e|0)>=(f|0))break;k=+g[a+(e<<2)>>2];j=+g[a+((e|1)<<2)>>2];i=+g[a+((e|2)<<2)>>2];h=+g[a+((e|3)<<2)>>2];d=d+(k*k+j*j+i*i+h*h);e=e+4|0}while(1){if((c|0)>=(b|0))break;k=+g[a+(c<<2)>>2];d=d+k*k;c=c+1|0}return +d}function ag(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0,h=0,i=0,j=0,k=0;h=c+-3|0;d=((h|0)>0?h:0)+3&-4;e=0.0;f=0;while(1){if((f|0)>=(h|0))break;k=f|1;j=f|2;i=f|3;e=e+(+g[a+(f<<2)>>2]*+g[b+(f<<2)>>2]+ +g[a+(k<<2)>>2]*+g[b+(k<<2)>>2]+ +g[a+(j<<2)>>2]*+g[b+(j<<2)>>2]+ +g[a+(i<<2)>>2]*+g[b+(i<<2)>>2]);f=f+4|0}while(1){if((d|0)>=(c|0))break;e=e+ +g[a+(d<<2)>>2]*+g[b+(d<<2)>>2];d=d+1|0}return +e}function bg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,h=0,i=0,j=0,k=0.0,l=0.0,m=0;e=0;while(1){if((e|0)>=(c|0))break;f=+g[b+(e<<2)>>2];h=e+1|0;i=h>>1;d=0;while(1){if((d|0)>=(i|0))break;m=a+(d<<2)|0;k=+g[m>>2];j=a+(e-d+-1<<2)|0;l=+g[j>>2];g[m>>2]=k+l*f;g[j>>2]=l+k*f;d=d+1|0}g[a+(e<<2)>>2]=-f;e=h}return}function cg(d,f,h,i,j,k,m,n,o,p,q){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=+m;n=+n;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0;X=l;l=l+13680|0;K=X+8888|0;D=X+8248|0;r=X+13032|0;w=X+12712|0;x=X;N=X+5864|0;I=X+5604|0;O=X+5560|0;P=X+5464|0;L=X+12408|0;T=X+2744|0;U=X+24|0;s=X+11128|0;t=X+10168|0;u=R((q*5|0)+20|0,o)|0;z=q*20|0;A=z+80|0;B=(q*40|0)+160|0;S=o*5|0;W=o<<1;V=o*18|0;Q=V+-1|0;M=(o|0)==16;do if(!M)if((o|0)==12){dg(t,d,u);c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[x+20>>2]=0;Oe(x,r,t,u);eg(K,r,B);s=x;break}else{dg(r,d,B);s=x;break}else{dg(s,d,u);J=x;c[J>>2]=0;c[J+4>>2]=0;Pe(x,r,s,u);eg(K,r,B);s=x}while(0);J=x;c[J>>2]=0;c[J+4>>2]=0;Pe(s,w,r,B);eg(D,w,A);r=z+79|0;while(1){if((r|0)<=0)break;s=D+(r<<2)|0;r=r+-1|0;v=+(~~+g[s>>2]|0)+ +g[D+(r<<2)>>2];if(!(v>32767.0)){if(v<-32768.0)v=-32768.0}else v=32767.0;g[s>>2]=+(~~v<<16>>16)}Qh(N|0,0,q*596|0)|0;w=q>>1;x=I+256|0;z=N+32|0;u=0;s=D+320|0;while(1){if((u|0)>=(w|0)){r=72;break}t=s+-32|0;jc(s,s+-288|0,I,40,65);H=+g[x>>2];v=+$f(s,40);v=v+ +$f(t,40)+16.0e4;g[z>>2]=+g[z>>2]+H*2.0/v;r=9;while(1){if((r|0)==73)break;J=t+-4|0;G=+g[J>>2];H=+g[t+156>>2];H=v+(G*G-H*H);D=N+(r<<2)|0;g[D>>2]=+g[D>>2]+ +g[I+(72-r<<2)>>2]*2.0/H;r=r+1|0;t=J;v=H}u=u+1|0;s=s+160|0}while(1){if((r|0)<=7)break;J=N+(r<<2)|0;H=+g[J>>2];g[J>>2]=H-H*+(r|0)*.000244140625;r=r+-1|0}r=(p<<1)+4|0;ng(z,P,65,r);v=+g[z>>2];if(v<.20000000298023224){Qh(f|0,0,q<<2|0)|0;g[j>>2]=0.0;b[h>>1]=0;h=1;W=0;a[i>>0]=W;l=X;return h|0}v=v*m;s=0;while(1){if((s|0)>=(r|0)){s=r;break}if(!(+g[N+(s+8<<2)>>2]>v))break;J=P+(s<<2)|0;c[J>>2]=(c[J>>2]<<1)+16;s=s+1|0}r=11;while(1){if((r|0)==148){r=0;break}b[L+(r<<1)>>1]=0;r=r+1|0}while(1){if((r|0)>=(s|0)){r=146;break}b[L+(c[P+(r<<2)>>2]<<1)>>1]=1;r=r+1|0}while(1){if((r|0)<=15){J=0;r=16;break}J=r+-1|0;I=L+(r<<1)|0;b[I>>1]=(e[I>>1]|0)+((e[L+(J<<1)>>1]|0)+(e[L+(r+-2<<1)>>1]|0));r=J}while(1){if((r|0)==144){r=146;break}s=r+1|0;if((b[L+(s<<1)>>1]|0)<=0){r=s;continue}c[P+(J<<2)>>2]=r;J=J+1|0;r=s}while(1){if((r|0)<=15){r=0;s=16;break}I=r+-1|0;D=L+(r<<1)|0;b[D>>1]=(e[D>>1]|0)+((e[L+(I<<1)>>1]|0)+(e[L+(r+-2<<1)>>1]|0)+(e[L+(r+-3<<1)>>1]|0));r=I}while(1){if((s|0)==147)break;if((b[L+(s<<1)>>1]|0)>0){b[L+(r<<1)>>1]=s+65534;r=r+1|0}s=s+1|0}Qh(N|0,0,2384)|0;z=(o|0)==8;x=0;u=z?d+640|0:K+640|0;while(1){if((x|0)>=(q|0))break;m=+$f(u,40)+1.0;t=0;while(1){if((t|0)>=(r|0))break;w=b[L+(t<<1)>>1]|0;s=u+(0-w<<2)|0;v=+ag(s,u,40);if(v>0.0)v=v*2.0/(+$f(s,40)+m);else v=0.0;g[N+(x*596|0)+(w<<2)>>2]=v;t=t+1|0}x=x+1|0;u=u+160|0}if((k|0)>0){if((o|0)==12)k=(k<<1|0)/3|0;else k=k>>(M&1);H=+fg(+(k|0))}else H=0.0;I=(q|0)==4;if(I){B=33701;D=11;A=z&(p|0)>0?11:3}else{B=33667;D=3;A=3}F=+(q|0);G=F*.20000000298023224;x=(k|0)>0;E=F*n;z=-1;r=0;y=-1.0e3;C=0.0;u=0;while(1){if((u|0)>=(J|0))break;w=c[P+(u<<2)>>2]|0;k=0;while(1){if((k|0)>=(A|0)){s=0;n=-1.0e3;k=0;break}t=O+(k<<2)|0;g[t>>2]=0.0;s=0;v=0.0;while(1){if((s|0)>=(q|0))break;n=v+ +g[N+(s*596|0)+(w+(a[B+((R(s,D)|0)+k)>>0]|0)<<2)>>2];g[t>>2]=n;s=s+1|0;v=n}k=k+1|0}while(1){if((k|0)>=(A|0))break;m=+g[O+(k<<2)>>2];M=m>n;s=M?k:s;n=M?m:n;k=k+1|0}m=+fg(+(w|0));v=n-G*m;if(x){m=m-H;m=m*m;v=v-G*+g[j>>2]*m/(m+.5)}M=v>y&n>E;z=M?w:z;r=M?s:r;y=M?v:y;C=M?n:C;u=u+1|0}if((z|0)==-1){c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;g[j>>2]=0.0;b[h>>1]=0;h=1;W=0;a[i>>0]=W;l=X;return h|0}g[j>>2]=C/F;if((o|0)>8){if((o|0)==12){k=(z<<16>>16)*3|0;k=(k>>1)+(k&1)|0}else k=z<<1;if((W|0)<(V|0))if((k|0)<(V|0))k=(k|0)<(W|0)?W:k;else k=Q;else if((k|0)>(W|0))k=W;else k=(k|0)<(Q|0)?Q:k;r=gg(k+-2|0,W)|0;A=hg(k+2|0,Q)|0;ig(U,d,r,S,q,p);jg(T,d,r,S,q,p);C=.05000000074505806/+(k|0);if(I){B=33745;D=34;z=a[33905+p>>0]|0}else{B=33673;D=12;z=12}y=+$f(d+(o*20<<2)|0,R(S,q)|0)+1.0;w=k;x=0;u=r;r=0;v=-1.0e3;while(1){if((u|0)>(A|0))break;else{k=w;t=0}while(1){if((t|0)<(z|0)){m=0.0;n=y;s=0}else break;while(1){if((s|0)>=(q|0))break;m=m+ +g[U+(s*680|0)+(t*20|0)+(x<<2)>>2];n=n+ +g[T+(s*680|0)+(t*20|0)+(x<<2)>>2];s=s+1|0}if(m>0.0)m=m*2.0/n*(1.0-C*+(t|0));else m=0.0;if(m>v){o=(u+(a[33745+t>>0]|0)|0)<(V|0);k=o?u:k;r=o?t:r;v=o?m:v}t=t+1|0}w=k;x=x+1|0;u=u+1|0}t=(W|0)>(V|0);s=0;while(1){if((s|0)>=(q|0))break;k=w+(a[B+((R(s,D)|0)+r)>>0]|0)|0;u=f+(s<<2)|0;c[u>>2]=k;if(t)if((k|0)>(W|0))k=W;else k=(k|0)<(V|0)?V:k;else if((k|0)>(V|0))k=V;else k=(k|0)<(W|0)?W:k;c[u>>2]=k;s=s+1|0}k=w-W|0}else{k=0;while(1){if((k|0)>=(q|0))break;W=z+(a[B+((R(k,D)|0)+r)>>0]|0)|0;c[f+(k<<2)>>2]=(W|0)>144?144:(W|0)>16?W:16;k=k+1|0}k=z+65520|0}b[h>>1]=k;h=0;W=r&255;a[i>>0]=W;l=X;return h|0}function dg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;while(1){e=d+-1|0;if((d|0)<=0)break;d=Jh(+g[c+(e<<2)>>2])|0;b[a+(e<<1)>>1]=(d|0)>32767?32767:((d|0)>-32768?d:-32768)&65535;d=e}return}function eg(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;while(1){e=d+-1|0;if((d|0)<=0)break;g[a+(e<<2)>>2]=+(b[c+(e<<1)>>1]|0);d=e}return}function fg(a){a=+a;return +(+Ih(a)*3.32192809488736)}function gg(a,b){a=a|0;b=b|0;return ((a|0)>(b|0)?a:b)|0}function hg(a,b){a=a|0;b=b|0;return ((a|0)<(b|0)?a:b)|0}function ig(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=l;l=l+176|0;s=u+88|0;t=u;if((g|0)==4){p=33745;q=33881+(h<<3)|0;r=34;o=a[33905+h>>0]|0}else{p=33673;q=33697;r=12;o=12}n=0-e|0;m=0;j=d+(f<<2<<2)|0;while(1){if((m|0)>=(g|0))break;d=m<<1;k=a[q+d>>0]|0;d=a[q+(d|1)>>0]|0;jc(j,j+(n<<2)+(0-d<<2)|0,t,f,d-k+1|0);h=0;e=k;while(1){if((d|0)<(e|0))break;c[s+(h<<2)>>2]=c[t+(d-e<<2)>>2];h=h+1|0;e=e+1|0}d=R(m,r)|0;h=0;while(1){if((h|0)>=(o|0))break;i=(a[p+(d+h)>>0]|0)-k|0;e=0;while(1){if((e|0)==5)break;c[b+(m*680|0)+(h*20|0)+(e<<2)>>2]=c[s+(i+e<<2)>>2];e=e+1|0}h=h+1|0}m=m+1|0;j=j+(f<<2)|0}l=u;return}function jg(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0;v=l;l=l+96|0;u=v;if((h|0)==4){r=33745;s=33881+(i<<3)|0;t=34;q=a[33905+i>>0]|0}else{r=33673;s=33697;t=12;q=12}n=d+(f<<2<<2)|0;o=0;while(1){if((o|0)>=(h|0))break;k=o<<1;p=a[s+k>>0]|0;d=n+(0-(p+e)<<2)|0;j=+$f(d,f)+.001;g[u>>2]=j;k=(a[s+(k|1)>>0]|0)-p|0;i=1;while(1){if((i|0)>(k|0))break;x=+g[d+(f-i<<2)>>2];w=+g[d+(0-i<<2)>>2];w=j-x*x+w*w;g[u+(i<<2)>>2]=w;i=i+1|0;j=w}k=R(o,t)|0;d=0;while(1){if((d|0)>=(q|0))break;m=(a[r+(k+d)>>0]|0)-p|0;i=0;while(1){if((i|0)==5)break;c[b+(o*680|0)+(d*20|0)+(i<<2)>>2]=c[u+(m+i<<2)>>2];i=i+1|0}d=d+1|0}n=n+(f<<2)|0;o=o+1|0}l=v;return}function kg(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,h=0;e=d&65532;f=0;while(1){if((f|0)>=(e|0))break;g[a+(f<<2)>>2]=+g[b+(f<<2)>>2]*c;h=f|1;g[a+(h<<2)>>2]=+g[b+(h<<2)>>2]*c;h=f|2;g[a+(h<<2)>>2]=+g[b+(h<<2)>>2]*c;h=f|3;g[a+(h<<2)>>2]=+g[b+(h<<2)>>2]*c;f=f+4|0}while(1){if((e|0)>=(d|0))break;g[a+(e<<2)>>2]=+g[b+(e<<2)>>2]*c;e=e+1|0}return}function lg(a,b,c){a=a|0;b=+b;c=c|0;var d=0,e=0,f=0;d=c&65532;e=0;while(1){if((e|0)>=(d|0))break;f=a+(e<<2)|0;g[f>>2]=+g[f>>2]*b;f=a+((e|1)<<2)|0;g[f>>2]=+g[f>>2]*b;f=a+((e|2)<<2)|0;g[f>>2]=+g[f>>2]*b;f=a+((e|3)<<2)|0;g[f>>2]=+g[f>>2]*b;e=e+4|0}while(1){if((d|0)>=(c|0))break;f=a+(d<<2)|0;g[f>>2]=+g[f>>2]*b;d=d+1|0}return}function mg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,i=0.0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0;m=l;l=l+400|0;k=m;d=0;while(1){i=+g[b+(d<<2)>>2];h[k+(d<<4)+8>>3]=i;h[k+(d<<4)>>3]=i;if((d|0)<(c|0))d=d+1|0;else break}e=k+8|0;b=0;a:while(1){if((b|0)>=(c|0))break;f=b+1|0;i=+h[e>>3];i=-+h[k+(f<<4)>>3]/(i>9.999999717180685e-10?i:9.999999717180685e-10);g[a+(b<<2)>>2]=i;j=c-b|0;d=0;while(1){if((d|0)>=(j|0)){b=f;continue a}q=k+(d+b+1<<4)|0;o=+h[q>>3];n=k+(d<<4)+8|0;p=+h[n>>3];h[q>>3]=o+p*i;h[n>>3]=p+o*i;d=d+1|0}}l=m;return +(+h[e>>3])}function ng(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,l=0;f=0;while(1){if((f|0)>=(e|0)){i=1;break}c[b+(f<<2)>>2]=f;f=f+1|0}while(1){if((i|0)>=(e|0))break;j=+g[a+(i<<2)>>2];h=i;while(1){f=h+-1|0;if((h|0)<=0)break;k=+g[a+(f<<2)>>2];if(!(j>k))break;g[a+(h<<2)>>2]=k;c[b+(h<<2)>>2]=c[b+(f<<2)>>2];h=f}g[a+(h<<2)>>2]=j;c[b+(h<<2)>>2]=i;i=i+1|0}l=a+(e+-1<<2)|0;i=e+-2|0;h=e;while(1){if((h|0)>=(d|0))break;j=+g[a+(h<<2)>>2];if(j>+g[l>>2]){f=i;while(1){if((f|0)<=-1)break;k=+g[a+(f<<2)>>2];if(!(j>k))break;e=f+1|0;g[a+(e<<2)>>2]=k;c[b+(e<<2)>>2]=c[b+(f<<2)>>2];f=f+-1|0}e=f+1|0;g[a+(e<<2)>>2]=j;c[b+(e<<2)>>2]=h}h=h+1|0}return}function og(b,c){b=b|0;c=c|0;var d=0;if((b|0)<252){a[c>>0]=b;c=1;return c|0}else{d=b|252;a[c>>0]=d;a[c+1>>0]=(b-(d&255)|0)>>>2;c=2;return c|0}return 0}function pg(a,b){a=a|0;b=b|0;if(a<<24>>24<0){b=(b<<((a&255)>>>3&3)|0)/400|0;return b|0}if((a&96)==96)if(!(a&8)){b=(b|0)/100|0;return b|0}else{b=(b|0)/50|0;return b|0}else{a=(a&255)>>>3&3;if((a|0)==3){b=(b*60|0)/1e3|0;return b|0}else{b=(b<>0]|0;n=pg(I,48e3)|0;o=d+1|0;r=e+-1|0;a:do switch(I&3){case 0:{x=0;y=1;w=o;m=r;l=r;s=29;break}case 1:{if(!f)if(!(r&1)){A=(r|0)/2|0;b[i>>1]=A;z=2;B=o;s=37;break a}else{I=-4;return I|0}else{F=1;H=2;E=o;G=r;C=r;s=30}break}case 2:{k=rg(o,r,i)|0;l=r-k|0;d=b[i>>1]|0;if(d<<16>>16<0){I=-4;return I|0}d=d<<16>>16;if((l|0)<(d|0)){I=-4;return I|0}else{x=0;y=2;w=o+k|0;m=l-d|0;s=29;break a}}default:{if((e|0)<2){I=-4;return I|0}k=d+2|0;o=a[o>>0]|0;t=o&63;v=t&255;if(t<<24>>24==0|(R(n,v)|0)>5760){I=-4;return I|0}d=e+-2|0;if(o&64){while(1){if((d|0)<1){u=-4;s=46;break}q=k+1|0;p=a[k>>0]|0;if(p<<24>>24!=-1)break;k=q;d=d+-255|0}if((s|0)==46)return u|0;d=d+-1-(p&255)|0;if((d|0)<0){I=-4;return I|0}else{n=d;e=q}}else{n=d;e=k}s=(o&255)>>>7^1;t=s&255;if(s<<24>>24){if(f|0){F=t;H=v;E=e;G=r;C=n;s=30;break a}m=(n|0)/(v|0)|0;if((R(m,v)|0)!=(n|0)){I=-4;return I|0}k=v+-1|0;l=m&65535;d=0;while(1){if((d|0)>=(k|0)){x=t;y=v;w=e;l=n;s=29;break a}b[i+(d<<1)>>1]=l;d=d+1|0}}q=v+-1|0;o=0;r=n;p=e;while(1){if((o|0)>=(q|0)){s=23;break}d=i+(o<<1)|0;k=rg(p,n,d)|0;e=n-k|0;d=b[d>>1]|0;if(d<<16>>16<0){u=-4;s=46;break}d=d<<16>>16;if((d|0)>(e|0)){u=-4;s=46;break}o=o+1|0;r=r-(k+d)|0;p=p+k|0;n=e}if((s|0)==23){if((r|0)<0)u=-4;else{x=t;y=v;w=p;m=r;l=n;s=29;break a}return u|0}else if((s|0)==46)return u|0}}while(0);if((s|0)==29)if(!f){z=y;A=m;B=w;s=37}else{F=x;H=y;E=w;G=m;C=l;s=30}b:do if((s|0)==30){l=rg(E,C,i+(H<<1)+-2|0)|0;k=C-l|0;m=H+-1|0;e=i+(m<<1)|0;j=b[e>>1]|0;if(j<<16>>16<0){I=-4;return I|0}d=j<<16>>16;if((d|0)>(k|0)){I=-4;return I|0}j=E+l|0;if(!F){if((l+d|0)>(G|0))u=-4;else{D=H;break}return u|0}if((R(d,H)|0)>(k|0)){I=-4;return I|0}else d=0;while(1){if((d|0)>=(m|0)){D=H;break b}b[i+(d<<1)>>1]=b[e>>1]|0;d=d+1|0}}else if((s|0)==37)if((A|0)>1275){I=-4;return I|0}else{b[i+(z+-1<<1)>>1]=A;D=z;j=B;break}while(0);k=(h|0)==0;d=0;while(1){if((d|0)>=(D|0))break;if(!k)c[h+(d<<2)>>2]=j;H=j+(b[i+(d<<1)>>1]|0)|0;d=d+1|0;j=H}if(!g){I=D;return I|0}a[g>>0]=I;I=D;return I|0}function rg(c,e,f){c=c|0;e=e|0;f=f|0;var g=0,h=0;do if((e|0)>=1){h=a[c>>0]|0;if((h&255)<252){g=1;e=h&255;break}if((e|0)>=2){g=2;e=((d[c+1>>0]|0)<<2)+(h&255)&65535}else{g=-1;e=-1}}else{g=-1;e=-1}while(0);b[f>>1]=e;return g|0}function sg(b,c){b=b|0;c=c|0;a:do if((c|0)>=1){switch(a[b>>0]&3){case 0:{b=1;break a}case 3:break;default:{b=2;break a}}if((c|0)<2)b=-4;else b=a[b+1>>0]&63}else b=-1;while(0);return b|0}function tg(a){a=a|0;var b=0,d=0,e=0;d=l;l=l+16|0;b=d;if((a+-1|0)>>>0>1){b=0;l=d;return b|0}if(Sc(b)|0){b=0;l=d;return b|0}e=ug(c[b>>2]|0)|0;c[b>>2]=e;b=Za(a)|0;b=(ug(18036)|0)+e+b|0;l=d;return b|0}function ug(a){a=a|0;return a+3&-4|0}function vg(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+16|0;n=o+8|0;m=o;h=o+12|0;a:do if((d|0)<16e3)if((d|0)<12e3){switch(d|0){case 8e3:break a;default:h=-1}l=o;return h|0}else{switch(d|0){case 12e3:break a;default:h=-1}l=o;return h|0}else{if((d|0)<24e3){switch(d|0){case 16e3:break a;default:h=-1}l=o;return h|0}if((d|0)<48e3){switch(d|0){case 24e3:break a;default:h=-1}l=o;return h|0}else{switch(d|0){case 48e3:break a;default:h=-1}l=o;return h|0}}while(0);if((e+-1|0)>>>0>=2){n=-1;l=o;return n|0}switch(f|0){case 2051:case 2049:case 2048:break;default:{n=-1;l=o;return n|0}}Qh(a|0,0,tg(e)|0)|0;if(Sc(h)|0){n=-1;l=o;return n|0}i=ug(c[h>>2]|0)|0;c[h>>2]=i;k=ug(18036)|0;c[a+4>>2]=k;h=k+i|0;c[a>>2]=h;h=a+h|0;c[a+112>>2]=e;c[a+14088>>2]=e;i=a+144|0;c[i>>2]=d;j=a+180|0;c[j>>2]=0;if(Tc(a+k|0,0,a+8|0)|0){n=-3;l=o;return n|0}c[a+8>>2]=e;c[a+12>>2]=e;c[a+16>>2]=c[i>>2];c[a+20>>2]=16e3;c[a+24>>2]=8e3;c[a+28>>2]=16e3;c[a+32>>2]=20;c[a+36>>2]=25e3;c[a+40>>2]=0;k=a+44|0;c[k>>2]=9;c[a+48>>2]=0;c[a+56>>2]=0;c[a+60>>2]=0;c[a+76>>2]=0;if($a(h,d,e,c[j>>2]|0)|0){n=-3;l=o;return n|0}c[m>>2]=0;bb(h,10016,m)|0;c[n>>2]=c[k>>2];bb(h,4010,n)|0;c[a+148>>2]=1;c[a+152>>2]=1;c[a+164>>2]=-1e3;c[a+160>>2]=(R(d,e)|0)+3e3;n=a+108|0;c[n>>2]=f;c[a+124>>2]=-1e3;c[a+128>>2]=-1e3;c[a+132>>2]=1105;c[a+120>>2]=-1e3;c[a+136>>2]=-1e3;c[a+140>>2]=-1;m=c[i>>2]|0;c[a+172>>2]=(m|0)/100|0;c[a+168>>2]=24;c[a+156>>2]=5e3;c[a+116>>2]=(m|0)/250|0;b[a+14092>>1]=16384;g[a+14100>>2]=1.0;c[a+14096>>2]=(ue(60)|0)<<8;c[a+14148>>2]=1;c[a+14120>>2]=1001;c[a+14136>>2]=1105;bh(a+188|0,c[i>>2]|0);c[a+192>>2]=c[n>>2];n=0;l=o;return n|0}function wg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;a:do if((a|0)<16e3)if((a|0)<12e3)switch(a|0){case 8e3:{f=2;break a}default:break a}else switch(a|0){case 12e3:{f=2;break a}default:break a}else{if((a|0)<24e3)switch(a|0){case 16e3:{f=2;break a}default:break a}if((a|0)<48e3)switch(a|0){case 24e3:{f=2;break a}default:break a}else switch(a|0){case 48e3:{f=2;break a}default:break a}}while(0);b:do if((f|0)==2?(b+-1|0)>>>0<2:0){switch(d|0){case 2051:case 2049:case 2048:break;default:break b}g=xg(tg(b)|0)|0;if(!g){if(!e){e=0;return e|0}c[e>>2]=-7;e=0;return e|0}f=vg(g,a,b,d)|0;if(e|0)c[e>>2]=f;if(!f){e=g;return e|0}yg(g);e=0;return e|0}while(0);if(!e){e=0;return e|0}c[e>>2]=-1;e=0;return e|0}function xg(a){a=a|0;return Kh(a)|0}function yg(a){a=a|0;Lh(a);return}function zg(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0;i=0;while(1){if((i|0)>=(c|0))break;g[b+(i<<2)>>2]=+g[a+((R(i+d|0,h)|0)+e<<2)>>2]*32768.0;i=i+1|0}if((f|0)>-1){i=0;while(1){if((i|0)>=(c|0))break;j=+g[a+((R(i+d|0,h)|0)+f<<2)>>2]*32768.0;e=b+(i<<2)|0;g[e>>2]=+g[e>>2]+j;i=i+1|0}return}if((f|0)==-2)i=1;else return;while(1){if((i|0)<(h|0))e=0;else break;while(1){if((e|0)>=(c|0))break;j=+g[a+((R(e+d|0,h)|0)+i<<2)>>2]*32768.0;f=b+(e<<2)|0;g[f>>2]=+g[f>>2]+j;e=e+1|0}i=i+1|0}return}function Ag(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=(c|0)/400|0;if((d|0)>(a|0)){c=-1;return c|0}if((b|0)!=5e3){if((b+-5001|0)>>>0>=9){c=-1;return c|0}if((b|0)<5006)b=d<(a|0)){c=-1;return c|0}}else b=a;if(!((b*400|0)==(c|0)|(b*200|0)==(c|0)|(b*100|0)==(c|0))?(a=b*50|0,!((a|0)==(c|0)|(b*25|0)==(c|0)|(a|0)==(c*3|0)|(a|0)==(c<<2|0)|(a|0)==(c*5|0)|(a|0)==(c*6|0))):0){c=-1;return c|0}c=b;return c|0}function Bg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0;k=(c|0)/(b|0)|0;i=(k|0)<50;j=25.0/+(k|0);b=b+-3|0;c=0;f=0.0;h=0.0;e=0.0;while(1){if((c|0)>=(b|0))break;t=c<<1;o=+g[a+(t<<2)>>2];s=+g[a+((t|1)<<2)>>2];n=+g[a+((t|2)<<2)>>2];r=+g[a+((t|3)<<2)>>2];m=+g[a+((t|4)<<2)>>2];q=+g[a+((t|5)<<2)>>2];l=+g[a+((t|6)<<2)>>2];p=+g[a+((t|7)<<2)>>2];c=c+4|0;f=f+(s*s+r*r+q*q+p*p);h=h+(o*s+n*r+m*q+l*p);e=e+(o*o+n*n+m*m+l*l)}r=i?.5:1.0-j;s=+g[d>>2];e=s+r*(e-s);g[d>>2]=e;c=d+4|0;s=+g[c>>2];s=s+r*(h-s);g[c>>2]=s;t=d+8|0;h=+g[t>>2];h=h+r*(f-h);g[t>>2]=h;e=e<0.0?0.0:e;g[d>>2]=e;f=s<0.0?0.0:s;g[c>>2]=f;h=h<0.0?0.0:h;g[t>>2]=h;if((e>h?e:h)>7.999999797903001e-04){p=+F(+e);r=+F(+h);s=+F(+p);q=+F(+r);r=p*r;p=f>2]=p;r=p/(r+1.0000000036274937e-15);q=+F(+(1.0-r*r))*(+E(+(s-q))/(s+1.0000000036274937e-15+q));t=d+12|0;s=+g[t>>2];r=+(k|0);s=s+(q-s)/r;g[t>>2]=s;t=d+16|0;r=+g[t>>2]-.019999999552965164/r;s=r>s?r:s;g[t>>2]=s;s=s*20.0;t=s>1.0;s=t?1.0:s;return +s}else{s=+g[d+16>>2];s=s*20.0;t=s>1.0;s=t?1.0:s;return +s}return 0.0} +function Cg(d,e,f,h,i,j,k,m,n,o,p,q){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0.0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,ga=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0;Ya=l;l=l+528|0;Sa=Ya+240|0;Pa=Ya+232|0;Oa=Ya+224|0;Na=Ya+216|0;Ma=Ya+208|0;La=Ya+200|0;Ka=Ya+192|0;Ja=Ya+184|0;Ia=Ya+176|0;Ha=Ya+168|0;Fa=Ya+160|0;Ea=Ya+152|0;Da=Ya+144|0;Ca=Ya+136|0;Ba=Ya+128|0;Aa=Ya+120|0;za=Ya+112|0;ya=Ya+104|0;xa=Ya+96|0;ka=Ya+88|0;ja=Ya+80|0;ia=Ya+72|0;ga=Ya+64|0;ea=Ya+56|0;ba=Ya+48|0;aa=Ya+40|0;$=Ya+32|0;da=Ya+24|0;ca=Ya+16|0;N=Ya+8|0;s=Ya;_=Ya+512|0;Va=Ya+464|0;Ta=Ya+460|0;qa=Ya+456|0;Ua=Ya+400|0;G=Ya+296|0;H=Ya+264|0;Y=Ya+256|0;wa=Ya+248|0;Ga=Ya+518|0;Qa=Ya+516|0;c[Ta>>2]=0;r=(i|0)<1276?i:1276;Wa=d+18032|0;c[Wa>>2]=0;if((f|0)<1|(r|0)<1){h=-1;l=Ya;return h|0}if((r|0)==1?(c[d+144>>2]|0)==(f*10|0):0){h=-2;l=Ya;return h|0}Z=d+(c[d+4>>2]|0)|0;Ra=d+(c[d>>2]|0)|0;U=d+108|0;if((c[U>>2]|0)==2051)na=0;else na=c[d+116>>2]|0;P=c[d+168>>2]|0;P=(P|0)>(j|0)?j:P;c[s>>2]=qa;bb(Ra,10015,s)|0;c[Ua>>2]=0;y=d+44|0;do if((c[y>>2]|0)>6?(u=c[d+144>>2]|0,(u|0)>15999):0){j=d+112|0;if(Dg(e,f,c[j>>2]|0,P)|0){p=d+18016|0;c[p>>2]=0;s=-1;M=-1;va=1;break}s=c[d+8464>>2]|0;t=c[d+8468>>2]|0;eh(d+188|0,c[qa>>2]|0,k,m,f,0,n,o,u,P,p,Ua);if(+g[Ua+32>>2]>.10000000149011612){sa=d+18024|0;x=+g[sa>>2]*.9990000128746033;A=+Eg(e,f,c[j>>2]|0);g[sa>>2]=x>A?x:A;sa=12}else sa=12}else{s=-1;t=-1;sa=12}while(0);if((sa|0)==12){c[d+140>>2]=-1;Xa=c[Ua>>2]|0;p=d+18016|0;c[p>>2]=0;if(!Xa){M=t;va=0}else{if((c[d+124>>2]|0)==-1e3)c[d+140>>2]=~~+D(+((1.0-+g[Ua+20>>2])*100.0+.5));j=c[Ua+28>>2]|0;if((j|0)>=13)if((j|0)>=15)if((j|0)<17)j=1103;else j=(j|0)<19?1104:1105;else j=1102;else j=1101;c[p>>2]=j;M=t;va=0}}ua=d+112|0;if((c[ua>>2]|0)==2?(c[d+120>>2]|0)!=1:0)v=+Bg(e,f,c[d+144>>2]|0,d+14156|0);else v=0.0;j=Fg(d,f,r)|0;pa=d+160|0;c[pa>>2]=j;ta=d+144|0;z=c[ta>>2]|0;t=(z|0)/(f|0)|0;Xa=d+148|0;B=c[Xa>>2]|0;if(!B){ra=(z*12|0)/(f|0)|0;j=(((j*12|0)/8|0)+((ra|0)/2|0)|0)/(ra|0)|0;r=(j|0)<(r|0)?j:r;j=((R(r,ra)|0)<<3|0)/12|0;c[pa>>2]=j;if((r|0)<1)r=1;else sa=25}else sa=25;do if((sa|0)==25)if(!((r|0)<3|(j|0)<(t*24|0))){if((t|0)<50){u=R(r,t)|0;if((u|0)<300|(j|0)<2400)break;else V=u}else V=R(t,r)|0;W=V<<3;m=c[ua>>2]|0;o=c[y>>2]|0;L=d+40|0;y=c[L>>2]|0;k=Hg(j,m,t,B,0,o,y)|0;a:do switch(c[d+124>>2]|0){case 3001:{E=127;break}case 3002:{E=0;break}default:{u=c[d+140>>2]|0;if((u|0)>-1){E=u*327>>8;E=(c[U>>2]|0)!=2049|(E|0)<115?E:115;break a}else{E=(c[U>>2]|0)==2048?115:48;break a}}}while(0);C=d+120|0;u=c[C>>2]|0;do if(!((u|0)!=-1e3&(m|0)==2)){u=d+14088|0;if((m|0)==2){m=(k|0)>(((c[u>>2]|0)==2?23e3:25e3)|0)?2:1;c[u>>2]=m;ra=u;break}else{c[u>>2]=m;ra=u;break}}else{ra=d+14088|0;c[ra>>2]=u;m=u}while(0);n=Hg(j,m,t,B,0,o,y)|0;k=c[U>>2]|0;do if((k|0)!=2051){u=c[d+136>>2]|0;if((u|0)==-1e3){A=1.0-v;u=~~(A*16.0e3+v*16.0e3);u=u+((R(R(E,E)|0,~~(A*64.0e3+v*36.0e3)-u|0)|0)>>14)|0;u=(k|0)==2048?u+8e3|0:u;k=c[d+14124>>2]|0;if((k|0)==1002)u=u+-4e3|0;else u=(k|0)>0?u+4e3|0:u;u=(n|0)>=(u|0)?1002:1e3;k=d+14120|0;c[k>>2]=u;if((c[d+48>>2]|0)!=0?(y|0)>(128-E>>4|0):0){c[k>>2]=1e3;u=1e3}do if(c[d+184>>2]|0){if(c[Ua>>2]|0){c[d+56>>2]=0;break}c[d+56>>2]=va^1;if((va|0)==0&(E|0)>100){c[k>>2]=1e3;u=1e3}}else c[d+56>>2]=0;while(0);if((r|0)<((R((t|0)>50?9e3:6e3,f)|0)/(z<<3|0)|0|0)){c[k>>2]=1002;oa=k;u=1002;break}}else{k=d+14120|0;c[k>>2]=u}if((u|0)!=1002)if(((z|0)/100|0|0)>(f|0)){c[k>>2]=1002;oa=k;u=1002}else oa=k;else{oa=k;u=1002}}else{oa=d+14120|0;c[oa>>2]=1002;u=1002}while(0);Q=d+176|0;if(c[Q>>2]|0){c[oa>>2]=1002;u=1002}ma=d+14124|0;n=c[ma>>2]|0;do if((n|0)>0){k=(u|0)==1002;if((n|0)==1002&(k^1)){la=(u|0)!=1002;k=la&1;if(la){I=k;K=1;la=0;break}else u=k}else{if(!k){I=0;K=0;la=0;break}if((n|0)==1002){I=0;K=0;la=0;u=1002;break}u=(u|0)!=1002&1}if(((z|0)/100|0|0)>(f|0)){I=u;K=0;la=0;u=1002}else{c[oa>>2]=n;I=u;K=1;la=1;u=n}}else{I=0;K=0;la=0}while(0);if(((m|0)==1?(c[d+14128>>2]|0)==2:0)?(F=d+68|0,!((c[F>>2]|0)!=0|(u|0)==1002|(n|0)==1002)):0){c[F>>2]=1;c[ra>>2]=2;m=2}else c[d+68>>2]=0;X=Hg(j,m,t,B,u,o,y)|0;do if((u|0)!=1002){if((n|0)==1002){Tc(Z,c[d+180>>2]|0,G)|0;u=c[oa>>2]|0;j=(u|0)==1002;if(j){y=1;o=j;sa=99;break}else k=1}else{k=0;j=(u|0)==1002}if((c[d+14148>>2]|0)==0?(c[d+84>>2]|0)==0:0){o=d+14136|0;y=k;z=o;k=c[o>>2]|0;o=j}else{y=k;o=j;sa=99}}else{y=0;o=1;u=1002;sa=99}while(0);do if((sa|0)==99){if((c[ua>>2]|0)==2?(c[C>>2]|0)!=1:0){m=19400;n=19400}else{m=19400;n=19400}k=R(E,E)|0;j=0;while(1){if((j|0)==8)break;sa=c[m+(j<<2)>>2]|0;c[H+(j<<2)>>2]=sa+((R(k,(c[n+(j<<2)>>2]|0)-sa|0)|0)>>14);j=j+1|0}n=(c[d+14148>>2]|0)==0;m=d+14140|0;j=c[H+24>>2]|0;k=c[H+28>>2]|0;do if(n)if((c[m>>2]|0)<1105){j=j+k|0;break}else{j=j-k|0;break}while(0);do if((X|0)<(j|0)){j=c[H+16>>2]|0;k=c[H+20>>2]|0;do if(n)if((c[m>>2]|0)<1104){j=j+k|0;break}else{j=j-k|0;break}while(0);if((X|0)>=(j|0)){k=1104;break}j=c[H+8>>2]|0;k=c[H+12>>2]|0;do if(n)if((c[m>>2]|0)<1103){j=j+k|0;break}else{j=j-k|0;break}while(0);if((X|0)>=(j|0)){k=1103;break}j=c[H>>2]|0;k=c[H+4>>2]|0;do if(n)if((c[m>>2]|0)<1102){j=j+k|0;break}else{j=j-k|0;break}while(0);k=(X|0)<(j|0)?1101:1102}else k=1105;while(0);c[m>>2]=k;j=d+14136|0;c[j>>2]=k;if(o|n^1)z=j;else{if(!((c[d+88>>2]|0)==0&k>>>0>1103)){z=j;break}c[j>>2]=1103;z=j;k=1103}}while(0);j=c[d+132>>2]|0;if((k|0)>(j|0))c[z>>2]=j;else j=k;k=c[d+128>>2]|0;n=(k|0)==-1e3;if(!n){c[z>>2]=k;j=k}if((W|0)<15e3&(o^1)){j=(j|0)<1103?j:1103;c[z>>2]=j}k=c[ta>>2]|0;if((k|0)<24001&(j|0)>1104){c[z>>2]=1104;j=1104}if((k|0)<16001&(j|0)>1103){c[z>>2]=1103;j=1103}if((k|0)<12001&(j|0)>1102){c[z>>2]=1102;j=1102}if((k|0)<8001&(j|0)>1101){c[z>>2]=1101;k=1101}else k=j;m=c[p>>2]|0;if(!((m|0)==0|n^1)){j=c[ra>>2]|0;do if((X|0)>(j*18e3|0)|o^1){if(!((X|0)>(j*24e3|0)|o^1)){j=1102;break}if((X|0)<=(j*3e4|0)){j=1103;break}j=(X|0)>(j*44e3|0)?1105:1104}else j=1101;while(0);sa=(m|0)>(j|0)?m:j;c[p>>2]=sa;c[z>>2]=(k|0)<(sa|0)?k:sa}J=d+52|0;c[J>>2]=Ig(c[d+48>>2]|0,c[L>>2]|0,c[J>>2]|0,u,z,X)|0;c[N>>2]=P;bb(Ra,4036,N)|0;j=c[oa>>2]|0;do if((j|0)==1002){if((c[z>>2]|0)!=1102)break;c[z>>2]=1103}while(0);if(!(c[Q>>2]|0))L=c[z>>2]|0;else{c[z>>2]=1101;L=1101}do if((j|0)==1e3){if((L|0)<=1103){sa=146;break}c[oa>>2]=1001;j=1001;sa=147}else{if((j|0)!=1001){sa=147;break}if((L|0)>=1104){j=1001;sa=147;break}c[oa>>2]=1e3;sa=146}while(0);if((sa|0)==146){p=c[ta>>2]|0;k=p;j=1e3;p=(p|0)/50|0;sa=148}else if((sa|0)==147){p=c[ta>>2]|0;u=(p|0)/50|0;if((u|0)>=(f|0)|(j|0)==1e3){k=p;p=u;sa=148}else r=u}do if((sa|0)==148){if(((k*3|0)/50|0|0)<(f|0)){r=k;if((j|0)!=1e3){r=p;break}if(((r<<1|0)/25|0|0)==(f|0)){r=(r|0)/25|0;break}else{Xa=r*3|0;r=((((Xa|0)/25|0|0)==(f|0)?Xa:r)|0)/50|0;break}}N=d+14144|0;if(!(c[N>>2]|0)){H=y;s=I;p=K}else{c[N>>2]=0;H=1;s=1;p=1}if((j|0)==1002|(p|0)==0){j=0;u=0}else{u=Kg(r,c[pa>>2]|0,t,c[ra>>2]|0)|0;j=u;u=(u|0)==0?0:p}S=r-j|0;n=(R(c[pa>>2]|0,f)|0)/(k<<3|0)|0;n=(S|0)<(n|0)?S:n;S=h+1|0;P=r+-1|0;Jb(Va,S,P);M=na+f|0;K=R(M,c[ua>>2]|0)|0;T=fa()|0;i=l;l=l+((1*(K<<2)|0)+15&-16)|0;K=d+172|0;p=c[ua>>2]|0;Sh(i|0,d+14176+((R((c[K>>2]|0)-na|0,p)|0)<<2)|0,(R(na,p)|0)<<2|0)|0;if((c[oa>>2]|0)==1002){k=(ue(60)|0)<<8;p=c[ua>>2]|0}else k=c[Z+8>>2]|0;m=d+14096|0;I=c[m>>2]|0;k=k-I|0;k=I+(((k>>16)*983|0)+(((k&65535)*983|0)>>>16))|0;c[m>>2]=k;m=c[ta>>2]|0;if((c[U>>2]|0)==2048)Lg(e,ye(k>>8)|0,i+((R(na,p)|0)<<2)|0,d+14104|0,f,p,m);else Mg(e,i+((R(na,p)|0)<<2)|0,d+14104|0,f,p,m);do if(q|0){k=c[ua>>2]|0;p=i+((R(na,k)|0)<<2)|0;k=R(k,f)|0;A=+Ng(p,p,k);if(!(!(A<1.0e9)|(A!=A|0.0!=0.0)))break;Qh(p|0,0,k<<2|0)|0;q=d+14104|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0}while(0);b:do if((c[oa>>2]|0)==1002){w=1.0;o=j;y=s;m=L;sa=228}else{m=R(c[ua>>2]|0,f)|0;I=fa()|0;G=l;l=l+((1*(m<<1)|0)+15&-16)|0;m=R((n<<3)+-8|0,t)|0;E=c[oa>>2]|0;F=(E|0)==1001;do if(!F){c[d+36>>2]=m;p=c[d+14152>>2]|0;if(!p){w=1.0;z=m}else{w=1.0;sa=174}}else{k=Og(m,L,(c[ta>>2]|0)==(f*50|0)&1,c[Xa>>2]|0,c[J>>2]|0)|0;c[d+36>>2]=k;p=c[d+14152>>2]|0;if(p|0){w=1.0;m=k;sa=174;break}w=1.0-+O(+(+(k-m|0)*.0009765625*.6931471805599453));z=k}while(0);do if((sa|0)==174){if(!(c[Xa>>2]|0)){z=m;break}if(c[Q>>2]|0){z=m;break}C=c[z>>2]|0;switch(C|0){case 1101:{y=13;A=8.0e3;break}case 1102:{y=15;A=12.0e3;break}default:{y=17;A=16.0e3}}z=c[ua>>2]|0;o=0;v=0.0;while(1){if((o|0)>=(z|0))break;B=o*21|0;n=0;while(1){if((n|0)>=(y|0))break;x=+g[p+(B+n<<2)>>2];k=x<.5;do if(x>-2.0|k^1){if(k){if(!(x>0.0))break}else x=.5;x=x*.5}else x=-2.0;while(0);v=v+x;n=n+1|0}o=o+1|0}q=~~(A*(v/+(y|0)*+(z|0)+.20000000298023224));k=d+36|0;p=(R(m,-2)|0)/3|0;p=(q|0)>(p|0)?q:p;if((C&-2|0)==1104){z=m+((p*3|0)/5|0)|0;c[k>>2]=z;break}else{z=m+p|0;c[k>>2]=z;break}}while(0);y=c[ta>>2]|0;c[d+32>>2]=(f*1e3|0)/(y|0)|0;m=c[ua>>2]|0;c[d+8>>2]=m;c[d+12>>2]=c[ra>>2];o=(L|0)==1101;c[d+28>>2]=o?8e3:(L|0)==1102?12e3:16e3;c[d+24>>2]=F?16e3:8e3;n=d+20|0;c[n>>2]=16e3;do if((E|0)==1e3){if((t|0)>50)p=(V<<4|0)/3|0;else p=W;if((p|0)>=8e3)break;c[n>>2]=12e3;k=d+28|0;c[k>>2]=o?8e3:12e3;if((p|0)>=7e3)break;c[n>>2]=8e3;c[k>>2]=8e3}while(0);k=c[Xa>>2]|0;n=(k|0)==0;c[d+60>>2]=n&1;p=(r<<3)+-8|0;o=d+64|0;c[o>>2]=p;do if((u|0)!=0&(j|0)>1){p=p-(j<<3|1)|0;c[o>>2]=p;if(!F)break;p=p+-20|0;c[o>>2]=p}while(0);do if(n){if(!F)break;W=(R(z,f)|0)/(y|0)|0;c[o>>2]=(p|0)<(W|0)?p:W}else{if(!F)break;W=(R(p,y)|0)/(f|0)|0;c[o>>2]=(R(Og(W,L,(y|0)==(f*50|0)&1,k,c[J>>2]|0)|0,f)|0)/(y|0)|0}while(0);if(H){c[Y>>2]=0;W=(y|0)/400|0;k=R(m,(c[K>>2]|0)-(c[d+116>>2]|0)-W|0)|0;V=d+14176+(k<<2)|0;p=c[qa>>2]|0;Pg(V,V,0.0,1.0,c[p+4>>2]|0,W,m,c[p+60>>2]|0,y);Qh(d+14176|0,0,k<<2|0)|0;k=c[K>>2]|0;m=R(k,c[ua>>2]|0)|0;p=0;while(1){if((p|0)>=(m|0))break;b[G+(p<<1)>>1]=Qg(+g[d+14176+(p<<2)>>2])|0;p=p+1|0}Vc(Z,d+8|0,G,k,0,Y,1)|0;m=c[ua>>2]|0}k=R(m,f)|0;p=0;while(1){if((p|0)>=(k|0))break;b[G+(p<<1)>>1]=Qg(+g[i+((R(na,m)|0)+p<<2)>>2])|0;p=p+1|0}do if(!(Vc(Z,d+8|0,G,f,Va,_,0)|0)){k=c[oa>>2]|0;c:do if((k|0)==1e3){p=c[d+80>>2]|0;d:do if((p|0)>=12e3)if((p|0)<16e3){switch(p|0){case 12e3:break;default:break d}m=1102;break c}else{switch(p|0){case 16e3:break;default:break d}m=1103;break c}else switch(p|0){case 8e3:{m=1101;break c}default:{}}while(0);m=L}else m=L;while(0);if(!(c[d+96>>2]|0))p=0;else p=(c[d+18028>>2]|0)==0;c[d+72>>2]=p&1;if(!(c[_>>2]|0)){c[Wa>>2]=0;a[h>>0]=Gg(k,(c[ta>>2]|0)/(f|0)|0,m,c[ra>>2]|0)|0;r=1;break}if(p){u=Kg(r,c[pa>>2]|0,t,c[ra>>2]|0)|0;c[N>>2]=1;j=u;s=0;u=(u|0)!=0&1}ha(I|0);o=j;y=s;sa=228;break b}else r=-3;while(0);ha(I|0)}while(0);e:do if((sa|0)==228){switch(m|0){case 1101:{j=13;break}case 1103:case 1102:{j=17;break}case 1104:{j=19;break}default:j=21}c[ca>>2]=j;bb(Ra,10012,ca)|0;c[da>>2]=c[ra>>2];bb(Ra,10008,da)|0;c[$>>2]=-1;bb(Ra,4002,$)|0;do if((c[oa>>2]|0)==1e3){t=c[ua>>2]|0;ka=((R(t,c[ta>>2]|0)|0)/400|0)<<2;n=l;l=l+((1*ka|0)+15&-16)|0}else{c[aa>>2]=0;bb(Ra,4006,aa)|0;c[ba>>2]=(c[d+76>>2]|0)==0?2:0;bb(Ra,10002,ba)|0;j=(c[Xa>>2]|0)==0;do if((c[oa>>2]|0)==1001){if(j)break;c[ea>>2]=(c[pa>>2]|0)-(c[d+36>>2]|0);bb(Ra,4002,ea)|0;c[ga>>2]=0;bb(Ra,4020,ga)|0}else{if(j)break;c[ia>>2]=1;bb(Ra,4006,ia)|0;c[ja>>2]=c[d+152>>2];bb(Ra,4020,ja)|0;c[ka>>2]=c[pa>>2];bb(Ra,4002,ka)|0}while(0);j=c[oa>>2]|0;s=c[ua>>2]|0;t=c[ta>>2]|0;p=(R(s,t)|0)/400|0;k=l;l=l+((1*(p<<2)|0)+15&-16)|0;if((j|0)==1e3){t=s;n=k;break}ka=c[ma>>2]|0;if(!((j|0)!=(ka|0)&(ka|0)>0)){t=s;n=k;break}Sh(k|0,d+14176+((R((c[K>>2]|0)-na-((t|0)/400|0)|0,s)|0)<<2)|0,p<<2|0)|0;t=s;n=k}while(0);j=c[K>>2]|0;s=d+14176|0;if((R(t,j-M|0)|0)>0){na=R(t,j-f-na|0)|0;Wh(s|0,d+14176+((R(t,f)|0)<<2)|0,na<<2|0)|0;Sh(d+14176+(na<<2)|0,i|0,(R(M,t)|0)<<2|0)|0}else Sh(s|0,i+((R(M-j|0,t)|0)<<2)|0,(R(j,t)|0)<<2|0)|0;j=d+14100|0;v=+g[j>>2];if(v<1.0|w<1.0){na=c[qa>>2]|0;Pg(i,i,v,w,c[na+4>>2]|0,f,c[ua>>2]|0,c[na+60>>2]|0,c[ta>>2]|0)}g[j>>2]=w;k=c[oa>>2]|0;if(!((k|0)==1001?(c[ra>>2]|0)!=1:0)){if((X|0)>=24e3){j=X+-24e3|0;if((j<<1|0)>16384)j=16384;else sa=251}else{j=0;sa=251}if((sa|0)==251)j=j<<1;c[d+92>>2]=j}do if(!(c[d+14152>>2]|0)){if((c[ua>>2]|0)!=2){j=k;break}t=d+14092|0;p=b[t>>1]|0;j=d+92|0;s=c[j>>2]|0;if(!(p<<16>>16<16384|(s|0)<16384)){j=k;break}qa=c[qa>>2]|0;Rg(i,i,+(p<<16>>16)*.00006103515625,+(s|0)*.00006103515625,c[qa+4>>2]|0,f,2,c[qa+60>>2]|0,c[ta>>2]|0);b[t>>1]=c[j>>2];j=c[oa>>2]|0}else j=k;while(0);do if((j|0)==1002)sa=267;else{s=Va+20|0;t=Va+28|0;qa=(Sg(c[s>>2]|0,c[t>>2]|0)|0)+17|0;j=(j|0)==1001;if((qa+(j?20:0)|0)>((r<<3)+-8|0)){sa=267;break}if(j)Qb(Va,u,12);if(!u){sa=267;break}Qb(Va,y,1);p=(c[oa>>2]|0)==1001;j=Sg(c[s>>2]|0,c[t>>2]|0)|0;j=P-(j+(p?18:7)>>3)|0;j=(j|0)<(o|0)?j:o;if((j|0)>=2)if((j|0)>257)j=257;else sa=264;else{j=2;sa=264}if(!p){k=j;break}Sb(Va,j+-2|0,256);k=j}while(0);if((sa|0)==267){c[N>>2]=0;u=0;k=0}sa=c[oa>>2]|0;t=(sa|0)==1002?0:17;if((sa|0)==1e3){j=(Sg(c[Va+20>>2]|0,c[Va+28>>2]|0)|0)+7>>3;Xb(Va);s=j}else{s=P-k|0;Wb(Va,s);j=0}p=(u|0)==0;if(p?(c[oa>>2]|0)==1e3:0)sa=275;else sa=273;do if((sa|0)==273){c[xa>>2]=Ua;bb(Ra,10022,xa)|0;if((c[oa>>2]|0)!=1001){sa=275;break}c[wa>>2]=c[d+100>>2];c[wa+4>>2]=c[d+104>>2];c[ya>>2]=wa;bb(Ra,10028,ya)|0}while(0);if((sa|0)==275){c[za>>2]=0;bb(Ra,10028,za)|0}if(!(p|(y|0)==0)){c[Aa>>2]=0;bb(Ra,10010,Aa)|0;c[Ba>>2]=0;bb(Ra,4006,Ba)|0;c[Ca>>2]=-1;bb(Ra,4002,Ca)|0;if((db(Ra,i,(c[ta>>2]|0)/200|0,S+s|0,k,0)|0)<0){r=-3;break}c[Da>>2]=Ta;bb(Ra,4031,Da)|0;bb(Ra,4028,Ea)|0}c[Fa>>2]=t;bb(Ra,10010,Fa)|0;t=c[oa>>2]|0;do if((t|0)==1e3)sa=293;else{Fa=c[ma>>2]|0;if((t|0)!=(Fa|0)&(Fa|0)>0){bb(Ra,4028,Ha)|0;db(Ra,n,(c[ta>>2]|0)/400|0,Ga,2,0)|0;c[Ia>>2]=0;bb(Ra,10002,Ia)|0}if((Sg(c[Va+20>>2]|0,c[Va+28>>2]|0)|0)>(s<<3|0)){sa=293;break}do if(!(p|(y|0)==0)){if((c[oa>>2]|0)!=1001)break;if(!(c[Xa>>2]|0))break;c[Ja>>2]=(c[pa>>2]|0)-(c[d+36>>2]|0);bb(Ra,4002,Ja)|0}while(0);c[Ka>>2]=c[Xa>>2];bb(Ra,4006,Ka)|0;j=db(Ra,i,f,0,s,Va)|0;if((j|0)<0){r=-3;break e}if(p){u=0;break}if(!y){sa=295;break}if((c[oa>>2]|0)!=1001)break;if(!(c[Xa>>2]|0))break;Wh(S+j|0,S+s|0,k|0)|0}while(0);do if((sa|0)==293){if(p){u=0;break}if(!y)sa=295}while(0);if((sa|0)==295){p=c[ta>>2]|0;t=(p|0)/200|0;p=(p|0)/400|0;bb(Ra,4028,La)|0;c[Ma>>2]=0;bb(Ra,10010,Ma)|0;c[Na>>2]=0;bb(Ra,10002,Na)|0;c[Oa>>2]=0;bb(Ra,4006,Oa)|0;c[Pa>>2]=-1;bb(Ra,4002,Pa)|0;if((c[oa>>2]|0)==1001){Wb(Va,j);s=j}Pa=f-t|0;db(Ra,i+((R(c[ua>>2]|0,Pa-p|0)|0)<<2)|0,p,Qa,2,0)|0;if((db(Ra,i+((R(c[ua>>2]|0,Pa)|0)<<2)|0,t,S+s|0,k,0)|0)<0){r=-3;break}c[Sa>>2]=Ta;bb(Ra,4031,Sa)|0}a[h>>0]=Gg(c[oa>>2]|0,(c[ta>>2]|0)/(f|0)|0,m,c[ra>>2]|0)|0;p=Va+28|0;s=c[p>>2]|0;c[Wa>>2]=s^c[Ta>>2];if(!la)t=c[oa>>2]|0;else t=1002;c[ma>>2]=t;c[d+14128>>2]=c[ra>>2];c[d+14132>>2]=f;c[d+14148>>2]=0;do if(c[d+184>>2]|0){if(!(c[Ua>>2]|va))break;if(!(Tg(+g[Ua+32>>2],d+18020|0,+g[d+18024>>2],e,f,c[ua>>2]|0,va)|0)){s=c[p>>2]|0;break}else{c[Wa>>2]=0;a[h>>0]=Gg(c[oa>>2]|0,(c[ta>>2]|0)/(f|0)|0,m,c[ra>>2]|0)|0;r=1;break e}}while(0);f:do if((Sg(c[Va+20>>2]|0,s)|0)>((r<<3)+-8|0)){if((r|0)<2){r=-2;break e}a[S>>0]=0;c[Wa>>2]=0;j=1}else{if(!((c[oa>>2]|0)==1e3&(u|0)==0))break;while(1){if((j|0)<=2)break f;if(a[h+j>>0]|0)break f;j=j+-1|0}}while(0);j=j+(k+1)|0;if(!(c[Xa>>2]|0)){if(ah(h,j,r)|0){r=-3;break}}else r=j}while(0);ha(T|0);h=r;l=Ya;return h|0}while(0);if((s|0)!=-1){c[d+8464>>2]=s;c[d+8468>>2]=M}h=Jg(d,e,(f|0)/(r|0)|0,r,h,i,la,P,q)|0;l=Ya;return h|0}while(0);j=c[d+14120>>2]|0;u=c[d+14136>>2]|0;u=(u|0)==0?1101:u;j=(j|0)==0?1e3:j;g:do if((t|0)<=100){do if((t|0)==25)if((j|0)==1e3){s=0;p=0;t=25}else{s=0;p=1;t=50;sa=37}else if((t|0)<17){if((i|0)!=1?(j|0)!=1e3|(t|0)==10:0){s=50/(t|0)|0;p=3;t=50;sa=37;break}s=0;p=(t|0)<13&1;t=(t|0)==12?25:16}else{s=0;p=0;sa=37}while(0);h:do if((sa|0)==37){switch(j|0){case 1002:{sa=39;break g}case 1e3:break h;case 1001:break;default:break g}u=(u|0)>1104?u:1104;j=1001;break g}while(0);if((u|0)>1103){u=1103;j=1e3}else{j=1e3;sa=40}}else{s=0;p=0;sa=39}while(0);if((sa|0)==39)if((u|0)==1102){u=1101;j=1002}else{j=1002;sa=40}a[h>>0]=(Gg(j,t,u,c[d+14088>>2]|0)|0)&255|p;j=(p|0)<2?1:2;r=(r|0)>(j|0)?r:j;if((p|0)==3)a[h+1>>0]=s;if(!(c[Xa>>2]|0)){h=(ah(h,j,r)|0)==0;l=Ya;return (h?r:-3)|0}else{h=j;l=Ya;return h|0}return 0}function Dg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +Vg(a,R(b,c)|0)<=1.0/+(1<>2]|0)/400|0;e=c[a+164>>2]|0;switch(e|0){case -1e3:{d=c[a+144>>2]|0;d=((d*60|0)/(b|0)|0)+(R(d,c[a+112>>2]|0)|0)|0;return d|0}case -1:{d=(R(d<<3,c[a+144>>2]|0)|0)/(b|0)|0;return d|0}default:{d=e;return d|0}}return 0}function Gg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=0;while(1){if((b|0)>=400)break;b=b<<1;e=e+1|0}switch(a|0){case 1e3:{b=(c<<5)+96&224|(e<<3)+-16;break}case 1002:{b=((c|0)<1102?0:(c<<5)+64&96)|e<<3|128;break}default:b=c<<4|(e<<3)+240|96}return (b|((d|0)==2&1)<<2)&255|0}function Hg(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;a=a-(R((b*40|0)+20|0,c+-50|0)|0)|0;if(!d)a=a-((a|0)/12|0)|0;a=(R(a,f+90|0)|0)/100|0;switch(e|0){case 1001:case 1e3:{if((f|0)<2)a=(a<<2|0)/5|0;g=a-((R(a,g)|0)/((g*6|0)+10|0)|0)|0;return g|0}case 1002:{if((f|0)>=5){g=a;return g|0}g=(a*9|0)/10|0;return g|0}default:{g=a-((R(a,g)|0)/((g*12|0)+20|0)|0)|0;return g|0}}return 0}function Ig(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;if((a|0)==0|(b|0)==0|(e|0)==1002){m=0;return m|0}l=c[f>>2]|0;h=(b|0)<25;i=125-b|0;j=(b|0)<6;k=l;while(1){e=k<<1;a=c[19572+(e+-2202<<2)>>2]|0;e=c[19572+(e+-2201<<2)>>2]|0;switch(d|0){case 1:{a=a-e|0;break}case 0:{a=a+e|0;break}default:{}}e=((R(a,h?i:100)|0)>>16)*655|0;a=(e+((((R(a,h?125-b|0:100)|0)&65535)*655|0)>>>16)|0)<(g|0);if(a|j){a=a&1;m=10;break}if((k|0)<=1101)break;e=k+-1|0;c[f>>2]=e;k=e}if((m|0)==10)return a|0;c[f>>2]=l;m=0;return m|0}function Jg(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=l;l=l+304|0;C=D;k=(d|0)==2?3:d<<1;B=a+148|0;if((c[B>>2]|0)==0?(c[a+164>>2]|0)!=-1:0){A=((c[a+160>>2]|0)*3|0)/(((c[a+144>>2]|0)*24|0)/(R(e,d)|0)|0|0)|0;g=(A|0)<(g|0)?A:g}r=(g-k|0)/(d|0)|0;r=(r|0)>1275?1276:r+1|0;t=R(r,d)|0;s=l;l=l+((1*t|0)+15&-16)|0;Yg(C);t=a+136|0;u=c[t>>2]|0;v=a+128|0;w=c[v>>2]|0;x=a+120|0;y=c[x>>2]|0;c[t>>2]=c[a+14120>>2];c[v>>2]=c[a+14136>>2];k=c[a+14088>>2]|0;c[x>>2]=k;z=a+68|0;A=c[z>>2]|0;if(!A)c[a+14128>>2]=k;else c[x>>2]=1;p=d+-1|0;q=a+18028|0;h=(h|0)!=0;m=a+112|0;k=0;while(1){if((k|0)>=(d|0)){k=14;break}c[z>>2]=0;c[q>>2]=(k|0)<(p|0)&1;if(h&(k|0)==(p|0))c[t>>2]=1002;n=s+(R(k,r)|0)|0;o=Cg(a,b+((R(k,R(c[m>>2]|0,e)|0)|0)<<2)|0,e,n,r,i,0,0,0,0,0,j)|0;if((o|0)<0){g=-3;k=16;break}if((Zg(C,n,o)|0)<0){g=-3;k=16;break}k=k+1|0}if((k|0)==14){g=$g(C,d,f,g,(c[B>>2]|0)==0&1)|0;if((g|0)<0){C=-3;l=D;return C|0}c[t>>2]=u;c[v>>2]=w;c[x>>2]=y;c[z>>2]=A;C=g;l=D;return C|0}else if((k|0)==16){l=D;return g|0}return 0}function Kg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=(d*40|0)+20|0;b=(((R(e,200-c|0)|0)+b|0)*3|0)/3200|0;a=(((((a<<3)-(e<<1)|0)*240|0)/((48e3/(c|0)|0)+240|0)|0)+e|0)/8|0;a=(b|0)<(a|0)?b:a;if((a|0)>(d<<3|4|0))return ((a|0)<257?a:257)|0;else return 0;return 0}function Lg(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=((b<<16>>16)*2471|0)/((g|0)/1e3|0|0)|0;g=R(h,-471)|0;b=g+268435456|0;g=-268435456-g<<1;i=b>>6;l=b>>22;j=h<<16>>16;m=R(h>>16,j)|0;j=R(h&65535,j)|0;h=R(h,(h>>15)+1>>1)|0;n=m+(j>>>16)+h<<16>>16;k=i&65535;h=(R(l,n)|0)+((R(k,n)|0)>>16)+(R(i,(m+(j>>16)+h+-8388608>>15)+1>>1)|0)|0;j=i<<16>>16;i=(R(l,j)|0)+((R(k,j)|0)>>16)+(R(i,(b>>21)+1>>1)|0)|0;Ug(a,b,g,b,h,i,d,c,e,f);if((f|0)!=2)return;Ug(a+4|0,b,g,b,h,i,d+8|0,c+4|0,e,2);return}function Mg(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0;n=12.0/+(f|0);o=1.0-n;h=+g[c>>2];m=c+4|0;i=+g[m>>2];if((e|0)!=2){f=0;while(1){if((f|0)>=(d|0))break;k=+g[a+(f<<2)>>2];j=k-h;g[b+(f<<2)>>2]=j-i;i=n*j+1.0000000031710769e-30+o*i;h=n*k+1.0000000031710769e-30+o*h;f=f+1|0}g[c>>2]=h;g[m>>2]=i;return}e=c+8|0;l=c+12|0;j=+g[l>>2];k=+g[e>>2];f=0;while(1){if((f|0)>=(d|0))break;u=f<<1;p=+g[a+(u<<2)>>2];t=u|1;r=+g[a+(t<<2)>>2];q=p-h;s=r-k;g[b+(u<<2)>>2]=q-i;g[b+(t<<2)>>2]=s-j;j=n*s+1.0000000031710769e-30+o*j;k=n*r+1.0000000031710769e-30+o*k;i=n*q+1.0000000031710769e-30+o*i;h=n*p+1.0000000031710769e-30+o*h;f=f+1|0}g[c>>2]=h;g[m>>2]=i;g[e>>2]=k;g[l>>2]=j;return}function Ng(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0;d=0.0;e=0;while(1){if((e|0)>=(c|0))break;d=d+ +g[a+(e<<2)>>2]*+g[b+(e<<2)>>2];e=e+1|0}return +d}function Og(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=d+1+(f<<1)|0;f=1;while(1){if((f|0)>=7){h=5;break}d=c[19432+(f*20|0)>>2]|0;if((d|0)>(a|0))break;f=f+1|0}do if((h|0)==5){if((f|0)!=7){d=c[19432+(f*20|0)>>2]|0;break}h=(c[19552+(g<<2)>>2]|0)+((a+-64e3|0)/2|0)|0;a=(e|0)==0;e=h+100|0;h=a?e:h;b=(b|0)==1104;e=h+300|0;h=b?e:h;return h|0}while(0);i=f+-1|0;h=c[19432+(i*20|0)>>2]|0;h=((R(c[19432+(i*20|0)+(g<<2)>>2]|0,d-a|0)|0)+(R(c[19432+(f*20|0)+(g<<2)>>2]|0,a-h|0)|0)|0)/(d-h|0)|0;a=(e|0)==0;e=h+100|0;h=a?e:h;b=(b|0)==1104;e=h+300|0;h=b?e:h;return h|0}function Pg(a,b,c,d,e,f,h,i,j){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0.0;k=48e3/(j|0)|0;l=(e|0)/(k|0)|0;a:do if((h|0)==1){j=0;while(1){if((j|0)>=(l|0)){j=0;break a}m=+g[i+((R(j,k)|0)<<2)>>2];m=m*m;g[b+(j<<2)>>2]=(m*d+(1.0-m)*c)*+g[a+(j<<2)>>2];j=j+1|0}}else{j=0;while(1){if((j|0)>=(l|0)){j=0;break a}m=+g[i+((R(j,k)|0)<<2)>>2];m=m*m;m=m*d+(1.0-m)*c;e=j<<1;g[b+(e<<2)>>2]=m*+g[a+(e<<2)>>2];e=e|1;g[b+(e<<2)>>2]=m*+g[a+(e<<2)>>2];j=j+1|0}}while(0);do{e=l;while(1){if((e|0)>=(f|0))break;i=(R(e,h)|0)+j|0;g[b+(i<<2)>>2]=+g[a+(i<<2)>>2]*d;e=e+1|0}j=j+1|0}while((j|0)<(h|0));return}function Qg(a){a=+a;a=a*32768.0;if(a>-32768.0){if(!(a<32767.0))a=32767.0}else a=-32768.0;return (Jh(a)|0)&65535|0}function Rg(a,b,c,d,e,f,h,i,j){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0.0,n=0;k=48e3/(j|0)|0;e=(e|0)/(k|0)|0;c=1.0-c;d=1.0-d;j=0;while(1){if((j|0)>=(e|0))break;m=+g[i+((R(j,k)|0)<<2)>>2];m=m*m;n=R(j,h)|0;l=n+1|0;m=(m*d+(1.0-m)*c)*((+g[a+(n<<2)>>2]-+g[a+(l<<2)>>2])*.5);n=b+(n<<2)|0;g[n>>2]=+g[n>>2]-m;l=b+(l<<2)|0;g[l>>2]=+g[l>>2]+m;j=j+1|0}while(1){if((j|0)>=(f|0))break;l=R(j,h)|0;n=l+1|0;m=d*((+g[a+(l<<2)>>2]-+g[a+(n<<2)>>2])*.5);l=b+(l<<2)|0;g[l>>2]=+g[l>>2]-m;n=b+(n<<2)|0;g[n>>2]=+g[n>>2]+m;j=j+1|0}return}function Sg(a,b){a=a|0;b=b|0;return (U(b|0)|0)+-32+a|0}function Tg(a,b,d,e,f,g,h){a=+a;b=b|0;d=+d;e=e|0;f=f|0;g=g|0;h=h|0;do if(!h){h=a<.10000000149011612;if(h?!(!(+Eg(e,f,g)*316.2300109863281<=d)|h^1):0)break;c[b>>2]=0;b=0;return b|0}while(0);g=c[b>>2]|0;h=g+1|0;c[b>>2]=h;if((g|0)<=9){b=0;return b|0}if((h|0)<31){b=1;return b|0}c[b>>2]=10;b=0;return b|0}function Ug(a,b,c,d,e,f,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;p=+(e|0)*3.725290298461914e-09;o=+(f|0)*3.725290298461914e-09;n=+(b|0)*3.725290298461914e-09;m=+(c|0)*3.725290298461914e-09;l=+(d|0)*3.725290298461914e-09;f=h+4|0;e=0;while(1){if((e|0)>=(j|0))break;d=R(e,k)|0;r=+g[a+(d<<2)>>2];q=+g[h>>2]+n*r;g[h>>2]=+g[f>>2]-q*p+m*r;g[f>>2]=l*r-q*o+1.0000000031710769e-30;g[i+(d<<2)>>2]=q;e=e+1|0}return}function Vg(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0,f=0.0;c=0.0;d=0.0;e=0;while(1){if((e|0)>=(b|0))break;f=+g[a+(e<<2)>>2];c=cf?d:f;e=e+1|0}f=-c;return +(d>f?d:f)}function Wg(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=Ag(d,c[a+156>>2]|0,c[a+144>>2]|0)|0;return Cg(a,b,g,e,f,24,b,d,-2,c[a+112>>2]|0,1,1)|0}function Xg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=l;l=l+192|0;o=t+64|0;j=t+56|0;i=t+48|0;h=t+40|0;n=t+32|0;m=t+24|0;q=t+16|0;p=t+8|0;k=t;s=t+168|0;f=t+68|0;c[s>>2]=e;r=a+(c[a>>2]|0)|0;a:do switch(d|0){case 4e3:{r=(c[s>>2]|0)+(4-1)&~(4-1);d=c[r>>2]|0;c[s>>2]=r+4;switch(d|0){case 2051:case 2049:case 2048:break;default:{e=-1;d=104;break a}}e=a+108|0;if((c[a+14148>>2]|0)==0?(c[e>>2]|0)!=(d|0):0){e=-1;d=104;break a}c[e>>2]=d;c[a+192>>2]=d;e=0;d=104;break}case 4001:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+108>>2];e=0;d=104}break}case 4002:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;switch(e|0){case -1e3:{e=-1e3;break}case -1:{e=-1;break}default:{if((e|0)<1){d=105;break a}if((e|0)<501)e=500;else{s=(c[a+112>>2]|0)*3e5|0;e=(e|0)>(s|0)?s:e}}}c[a+164>>2]=e;e=0;d=104;break}case 4003:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=Fg(a,c[a+14132>>2]|0,1276)|0;e=0;d=104}break}case 4022:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if((e|0)<1){if((e|0)!=-1e3){d=105;break a}}else if((e|0)>(c[a+112>>2]|0)){d=105;break a}c[a+120>>2]=e;e=0;d=104;break}case 4023:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+120>>2];e=0;d=104}break}case 4004:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if((e+-1101|0)>>>0>4)d=105;else{c[a+132>>2]=e;switch(e|0){case 1101:{c[a+20>>2]=8e3;e=0;d=104;break a}case 1102:{c[a+20>>2]=12e3;e=0;d=104;break a}default:{c[a+20>>2]=16e3;e=0;d=104;break a}}}break}case 4005:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+132>>2];e=0;d=104}break}case 4008:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if((e|0)>=1101){if((e|0)>1105){d=105;break a}c[a+128>>2]=e;if((e|0)==1101){c[a+20>>2]=8e3;e=0;d=104;break a}else d=e;e=a+20|0;if((d|0)==1102){c[e>>2]=12e3;e=0;d=104;break a}}else{if((e|0)!=-1e3){d=105;break a}c[a+128>>2]=-1e3;e=a+20|0}c[e>>2]=16e3;e=0;d=104;break}case 4009:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+14136>>2];e=0;d=104}break}case 4016:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(e>>>0>1)d=105;else{c[a+184>>2]=e;e=0;d=104}break}case 4017:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+184>>2];e=0;d=104}break}case 4010:{q=(c[s>>2]|0)+(4-1)&~(4-1);e=c[q>>2]|0;c[s>>2]=q+4;if(e>>>0>10)d=105;else{c[a+44>>2]=e;c[k>>2]=e;bb(r,4010,k)|0;e=0;d=104}break}case 4011:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+44>>2];e=0;d=104}break}case 4012:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(e>>>0>1)d=105;else{c[a+48>>2]=e;e=0;d=104}break}case 4013:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+48>>2];e=0;d=104}break}case 4014:{q=(c[s>>2]|0)+(4-1)&~(4-1);e=c[q>>2]|0;c[s>>2]=q+4;if(e>>>0>100)d=105;else{c[a+40>>2]=e;c[p>>2]=e;bb(r,4014,p)|0;e=0;d=104}break}case 4015:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+40>>2];e=0;d=104}break}case 4006:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(e>>>0>1)d=105;else{c[a+148>>2]=e;c[a+60>>2]=1-e;e=0;d=104}break}case 4007:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+148>>2];e=0;d=104}break}case 11018:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if((e+1|0)>>>0>101)d=105;else{c[a+140>>2]=e;e=0;d=104}break}case 11019:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+140>>2];e=0;d=104}break}case 4020:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(e>>>0>1)d=105;else{c[a+152>>2]=e;e=0;d=104}break}case 4021:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+152>>2];e=0;d=104}break}case 4024:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if((e|0)<3001)switch(e|0){case -1e3:break;default:{d=105;break a}}else switch(e|0){case 3002:case 3001:break;default:{d=105;break a}}c[a+124>>2]=e;e=0;d=104;break}case 4025:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+124>>2];e=0;d=104}break}case 4027:{r=(c[s>>2]|0)+(4-1)&~(4-1);d=c[r>>2]|0;c[s>>2]=r+4;if(d){e=(c[a+144>>2]|0)/400|0;c[d>>2]=e;if((c[a+108>>2]|0)==2051){e=0;d=104}else{c[d>>2]=e+(c[a+116>>2]|0);e=0;d=104}}else d=105;break}case 4029:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+144>>2];e=0;d=104}break}case 4031:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+18032>>2];e=0;d=104}break}case 4036:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if((e+-8|0)>>>0>16)d=105;else{c[a+168>>2]=e;e=0;d=104}break}case 4037:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+168>>2];e=0;d=104}break}case 4040:{p=(c[s>>2]|0)+(4-1)&~(4-1);e=c[p>>2]|0;c[s>>2]=p+4;if((e+-5e3|0)>>>0<10){c[a+156>>2]=e;c[q>>2]=e;bb(r,4040,q)|0;e=0;d=104}else d=105;break}case 4041:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+156>>2];e=0;d=104}break}case 4042:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(e>>>0>1)d=105;else{c[a+76>>2]=e;e=0;d=104}break}case 4043:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if(!e)d=105;else{c[e>>2]=c[a+76>>2];e=0;d=104}break}case 4046:{a=(c[s>>2]|0)+(4-1)&~(4-1);e=c[a>>2]|0;c[s>>2]=a+4;if(e>>>0>1)d=105;else{c[m>>2]=e;bb(r,4046,m)|0;e=0;d=104}break}case 4047:{a=(c[s>>2]|0)+(4-1)&~(4-1);e=c[a>>2]|0;c[s>>2]=a+4;if(!e)d=105;else{c[n>>2]=e;bb(r,4047,n)|0;e=0;d=104}break}case 4028:{d=a+(c[a+4>>2]|0)|0;ch(a+188|0);e=a+14088|0;Qh(e|0,0,3948)|0;bb(r,4028,h)|0;Tc(d,c[a+180>>2]|0,f)|0;c[e>>2]=c[a+112>>2];b[a+14092>>1]=16384;g[a+14100>>2]=1.0;c[a+14148>>2]=1;c[a+14120>>2]=1001;c[a+14136>>2]=1105;c[a+14096>>2]=(ue(60)|0)<<8;e=0;d=104;break}case 11002:{r=(c[s>>2]|0)+(4-1)&~(4-1);e=c[r>>2]|0;c[s>>2]=r+4;if((e|0)<1e3){if((e|0)!=-1e3){d=105;break a}}else if((e|0)>1002){d=105;break a}c[a+136>>2]=e;e=0;d=104;break}case 10024:{d=(c[s>>2]|0)+(4-1)&~(4-1);e=c[d>>2]|0;c[s>>2]=d+4;c[a+176>>2]=e;c[i>>2]=e;e=bb(r,10024,i)|0;d=104;break}case 10026:{d=(c[s>>2]|0)+(4-1)&~(4-1);e=c[d>>2]|0;c[s>>2]=d+4;c[a+14152>>2]=e;c[j>>2]=e;e=bb(r,10026,j)|0;d=104;break}case 10015:{a=(c[s>>2]|0)+(4-1)&~(4-1);e=c[a>>2]|0;c[s>>2]=a+4;if(!e)d=105;else{c[o>>2]=e;e=bb(r,10015,o)|0;d=104}break}default:{e=-5;d=104}}while(0);if((d|0)==104){a=e;l=t;return a|0}else if((d|0)==105){a=-1;l=t;return a|0}return 0}function Yg(a){a=a|0;c[a+4>>2]=0;return}function Zg(a,b,c){a=a|0;b=b|0;c=c|0;return _g(a,b,c)|0}function _g(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=l;l=l+16|0;f=j;if((e|0)<1){i=-4;l=j;return i|0}i=b+4|0;g=c[i>>2]|0;if(g){if(((a[b>>0]^a[d>>0])&255)>3){i=-4;l=j;return i|0}}else{a[b>>0]=a[d>>0]|0;c[b+296>>2]=pg(a[d>>0]|0,8e3)|0}h=sg(d,e)|0;if((h|0)<1){i=-4;l=j;return i|0}if((R(h+g|0,c[b+296>>2]|0)|0)>960){i=-4;l=j;return i|0}b=qg(d,e,0,f,b+8+(g<<2)|0,b+200+(g<<1)|0)|0;if((b|0)<1){i=b;l=j;return i|0}c[i>>2]=(c[i>>2]|0)+h;i=0;l=j;return i|0}function $g(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;if((e|0)<1){h=-1;return h|0}if((c[d+4>>2]|0)<(e|0)){h=-1;return h|0}k=d+200|0;a:do switch(e|0){case 1:{i=b[k>>1]|0;if((i|0)<(g|0)){a[f>>0]=a[d>>0]&-4;j=f+1|0;i=i+1|0;l=11;break a}else{h=-2;return h|0}}case 2:{i=b[d+202>>1]|0;j=b[k>>1]|0;if(i<<16>>16==j<<16>>16){i=i<<16>>16<<1|1;if((i|0)>(g|0)){h=-2;return h|0}else{a[f>>0]=a[d>>0]&-4|1;j=f+1|0;l=11;break a}}else{i=(j<<16>>16)+(i<<16>>16)+2+(j<<16>>16>251&1)|0;if((i|0)>(g|0)){h=-2;return h|0}else{j=f+1|0;a[f>>0]=a[d>>0]&-4|2;j=j+(og(b[k>>1]|0,j)|0)|0;l=11;break a}}}default:{i=1;l=12}}while(0);if((l|0)==11)if((h|0)!=0&(i|0)<(g|0)){i=1;l=12}b:do if((l|0)==12){while(1){if((i|0)>=(e|0)){l=20;break}if((b[d+200+(i<<1)>>1]|0)!=(b[k>>1]|0)){l=14;break}i=i+1|0;l=12}do if((l|0)==14){k=e+-1|0;i=0;j=2;while(1){if((i|0)>=(k|0))break;m=b[d+200+(i<<1)>>1]|0;i=i+1|0;j=j+((m<<16>>16>251?2:1)+(m<<16>>16))|0}i=j+(b[d+200+(k<<1)>>1]|0)|0;if((i|0)>(g|0)){h=-2;return h|0}else{a[f>>0]=a[d>>0]|3;k=(e|128)&255;a[f+1>>0]=k;m=1;break}}else if((l|0)==20){i=(R(b[k>>1]|0,e)|0)+2|0;if((i|0)>(g|0)){h=-2;return h|0}else{a[f>>0]=a[d>>0]|3;k=e&255;a[f+1>>0]=k;m=0;break}}while(0);j=f+2|0;if((h|0)!=0?(n=g-i|0,(n|0)!=0):0){a[f+1>>0]=k|64;k=(n+-1|0)/255|0;i=0;while(1){if((i|0)>=(k|0))break;a[j>>0]=-1;i=i+1|0;j=j+1|0}a[j>>0]=n+(R(k,-255)|0)+255;j=j+1|0;i=g}if(m){l=e+-1|0;k=0;while(1){if((k|0)>=(l|0))break b;n=j+(og(b[d+200+(k<<1)>>1]|0,j)|0)|0;k=k+1|0;j=n}}}while(0);k=0;while(1){if((k|0)>=(e|0))break;n=d+200+(k<<1)|0;Wh(j|0,c[d+8+(k<<2)>>2]|0,b[n>>1]|0)|0;j=j+(b[n>>1]|0)|0;k=k+1|0}if(!h){h=i;return h|0}k=f+g|0;while(1){if(j>>>0>=k>>>0)break;a[j>>0]=0;j=j+1|0}return i|0}function ah(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+304|0;e=f;if((b|0)<1){e=-1;l=f;return e|0}if((b|0)==(d|0)){e=0;l=f;return e|0}if((b|0)>(d|0)){e=-1;l=f;return e|0}Yg(e);g=a+d+(0-b)|0;Wh(g|0,a|0,b|0)|0;b=Zg(e,g,b)|0;if(!b){g=$g(e,c[e+4>>2]|0,a,d,1)|0;l=f;return ((g|0)<0?g:0)|0}else{g=b;l=f;return g|0}return 0}function bh(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+8>>2]=b;ch(a);return}function ch(a){a=a|0;Qh(a+12|0,0,13888)|0;g[a+8260>>2]=.8999999761581421;g[a+8256>>2]=.10000000149011612;return}function dh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0;p=a+8276|0;e=c[p>>2]|0;m=a+8272|0;h=c[m>>2]|0;o=h-e|0;o=(o|0)<0?o+100|0:o;n=a+8|0;if(!((h|0)==(e|0)?1:((c[n>>2]|0)/50|0|0)>=(d|0))){e=e+1|0;e=(e|0)==100?0:e}l=(e|0)==(h|0)?h+-1|0:e;l=(l|0)<0?99:l;e=b;h=a+8300+(l*56|0)|0;i=e+56|0;do{c[e>>2]=c[h>>2];e=e+4|0;h=h+4|0}while((e|0)<(i|0));k=b+4|0;j=+g[k>>2];h=0;i=1;f=j;e=l;while(1){if((h|0)>=3)break;e=e+1|0;e=(e|0)==100?0:e;if((e|0)==(c[m>>2]|0))break;q=+g[a+8300+(e*56|0)+4>>2];h=h+1|0;i=i+1|0;f=f+q;j=j>q?j:q}f=f/+(i|0);q=j+-.20000000298023224;g[k>>2]=f>q?f:q;h=a+8280|0;e=(c[h>>2]|0)+((d|0)/((c[n>>2]|0)/400|0|0)|0)|0;c[h>>2]=e;while(1){if((e|0)<=7)break;d=e+-8|0;c[h>>2]=d;c[p>>2]=(c[p>>2]|0)+1;e=d}e=c[p>>2]|0;if((e|0)>99)c[p>>2]=e+-100;h=(o|0)>1?101-o|0:100;f=0.0;e=0;while(1){if((e|0)>=(h|0))break;f=f+ +g[a+7856+(e<<2)>>2];e=e+1|0}while(1){if((e|0)>=100)break;f=f+ +g[a+7456+(e<<2)>>2];e=e+1|0}g[b+20>>2]=f*+g[a+8260>>2]+(1.0-f)*+g[a+8256>>2];return}function eh(a,b,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0;e=e&-2;if(!d){c[m>>2]=0;dh(a,m,f);return}o=(j*95|0)/50|0;o=(o|0)<(e|0)?o:e;p=a+7452|0;q=c[p>>2]|0;n=(j|0)/50|0;e=o-q|0;j=q;while(1){if((e|0)<=0)break;fh(a,b,d,(e|0)>(n|0)?n:e,j,g,h,i,k,l);e=e-n|0;j=j+n|0}c[p>>2]=o-f;c[m>>2]=0;dh(a,m,f);return}function fh(b,d,e,f,h,i,k,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;m=m|0;n=n|0;o=o|0;var p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0,H=0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0,X=0.0,Y=0,Z=0,_=0.0,$=0,aa=0.0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0.0,la=0.0;ia=l;l=l+11120|0;J=ia+11040|0;$=ia+10968|0;ca=ia+10936|0;da=ia+10832|0;ea=ia+10824|0;H=ia+9864|0;ba=ia+9832|0;N=ia+9752|0;O=ia+9676|0;Q=ia+9600|0;C=ia+5760|0;Y=ia+1920|0;K=ia+960|0;L=ia;fa=b+7448|0;w=c[fa>>2]|0;W=w+1|0;aa=(w|0)>9?.10000000149011612:1.0/+(W|0);_=(w|0)>24?.03999999910593033:1.0/+(W|0);W=(w|0)>499;V=1.0/+(w+1|0);Z=b+8|0;y=c[Z>>2]|0;a:do if((y|0)<48e3){switch(y|0){case 16e3:break;default:{A=h;break a}}f=(f*3|0)/2|0;A=(h*3|0)/2|0}else{switch(y|0){case 48e3:break;default:{A=h;break a}}f=(f|0)/2|0;A=(h|0)/2|0}while(0);if((w|0)<4){g[b+7424>>2]=(c[b+4>>2]|0)==2048?.10000000149011612:.625;h=c[d+72>>2]|0;d=b+5772|0;if(!w){c[d>>2]=240;x=240}else{w=d;M=7}}else{w=b+5772|0;h=c[d+72>>2]|0;M=7}if((M|0)==7){x=c[w>>2]|0;d=w}z=b+8288|0;w=720-x|0;X=+gh(o,e,b+2892+(x<<2)|0,z,(f|0)<(w|0)?f:w,A,i,k,m,y);x=b+8284|0;X=+g[x>>2]+X;g[x>>2]=X;y=c[d>>2]|0;w=y+f|0;if((w|0)<720){c[d>>2]=w;l=ia;return}w=b+8272|0;ga=c[w>>2]|0;ha=b+8300+(ga*56|0)|0;c[w>>2]=ga+((ga|0)>98?-99:1);w=0;while(1){if((w|0)==240)break;U=+g[19612+(w<<2)>>2];g[C+(w<<3)>>2]=U*+g[b+2892+(w<<2)>>2];g[C+(w<<3)+4>>2]=U*+g[b+2892+(w+240<<2)>>2];ja=480-w+-1|0;g[C+(ja<<3)>>2]=U*+g[b+2892+(ja<<2)>>2];g[C+(ja<<3)+4>>2]=U*+g[b+2892+(720-w+-1<<2)>>2];w=w+1|0}Sh(b+2892|0,b+4812|0,960)|0;ja=f+(y+-720)|0;g[x>>2]=+gh(o,e,b+3852|0,z,ja,A+720-y|0,i,k,m,c[Z>>2]|0);c[d>>2]=ja+240;bc(h,C,Y);p=+g[Y>>2];if(p!=p|0.0!=0.0){c[ha>>2]=0;l=ia;return}else f=1;while(1){if((f|0)==240){f=2;break}B=+g[Y+(f<<3)>>2];m=480-f|0;v=+g[Y+(m<<3)>>2];I=+g[Y+(f<<3)+4>>2];S=+g[Y+(m<<3)+4>>2];T=+hh(I-S,B+v)*.15915493667125702;m=b+12+(f<<2)|0;U=T-+g[m>>2];o=b+972+(f<<2)|0;R=U-+g[o>>2];S=+hh(v-B,I+S)*.15915493667125702;T=S-T;U=T-U;R=R-+(Jh(R)|0);I=+E(+R);R=R*R;U=U-+(Jh(U)|0);g[L+(f<<2)>>2]=I+ +E(+U);U=U*U;U=U*U;ja=b+1932+(f<<2)|0;g[K+(f<<2)>>2]=1.0/((+g[ja>>2]+R*R+U*2.0)*.25*62341.81640625+1.0)+-.014999999664723873;g[H+(f<<2)>>2]=1.0/(U*62341.81640625+1.0)+-.014999999664723873;g[m>>2]=S;g[o>>2]=T;g[ja>>2]=U;f=f+1|0}while(1){if((f|0)==239)break;m=f+-1|0;S=+g[H+(m<<2)>>2];ja=f+1|0;U=+g[H+(ja<<2)>>2];k=S>U;o=K+(f<<2)|0;T=+g[o>>2];U=+g[H+((+g[H+(f<<2)>>2]<(k?S:U)?f:k?m:ja)<<2)>>2]+-.10000000149011612;g[o>>2]=(T>U?T:U)*.8999999761581421;f=ja}A=b+8300+(ga*56|0)+16|0;g[A>>2]=0.0;b:do if(!(c[fa>>2]|0)){f=0;while(1){if((f|0)==18)break b;g[b+7008+(f<<2)>>2]=1.0e10;g[b+7080+(f<<2)>>2]=-1.0e10;f=f+1|0}}while(0);U=p*2.0;p=+g[Y+4>>2]*2.0;p=U*U+p*p;f=1;while(1){if((f|0)==4)break;R=+g[Y+(f<<3)>>2];T=+g[Y+(f<<3)+4>>2];ja=480-f|0;S=+g[Y+(ja<<3)>>2];U=+g[Y+(ja<<3)+4>>2];p=p+(R*R+S*S+T*T+U*U);f=f+1|0}g[N>>2]=+P(+(p+1.000000013351432e-10))*.7213475108146667;z=b+7440|0;p=0.0;S=0.0;B=0.0;U=0.0;R=0.0;T=0.0;I=0.0;d=0;while(1){if((d|0)>=18)break;w=d+1|0;h=c[20572+(w<<2)>>2]|0;q=0.0;v=0.0;r=0.0;f=c[20572+(d<<2)>>2]|0;while(1){if((f|0)>=(h|0))break;ka=+g[Y+(f<<3)>>2];ja=480-f|0;s=+g[Y+(ja<<3)>>2];t=+g[Y+(f<<3)+4>>2];u=+g[Y+(ja<<3)+4>>2];u=ka*ka+s*s+t*t+u*u;t=+g[K+(f<<2)>>2];q=q+u*2.0*(.5-+g[L+(f<<2)>>2]);v=v+u*(t<0.0?0.0:t);r=r+u;f=f+1|0}if(!(r<1.0e9)|(r!=r|0.0!=0.0)){M=32;break}g[b+5856+((c[z>>2]|0)*72|0)+(d<<2)>>2]=r;t=r+1.0000000036274937e-15;B=B+q/t;s=r+1.000000013351432e-10;u=I+ +F(+s);s=+P(+s);g[$+(d<<2)>>2]=s;g[N+(w<<2)>>2]=s*.7213475108146667;g[b+6432+((c[z>>2]|0)*72|0)+(d<<2)>>2]=s;if(!(c[fa>>2]|0)){h=b+7008+(d<<2)|0;g[h>>2]=s;f=b+7080+(d<<2)|0;g[f>>2]=s;q=s;r=s}else{H=b+7080+(d<<2)|0;ja=b+7008+(d<<2)|0;f=H;h=ja;q=+g[H>>2];r=+g[ja>>2]}do if(q>r+7.5)if(q-s>s-r){q=q+-.009999999776482582;g[f>>2]=q;break}else{r=r+.009999999776482582;g[h>>2]=r;break}while(0);if(!(s>q)){if(s>2]=s;r=s+15.0;q=r>2]=q;r=s}}else{g[f>>2]=s;q=s+-15.0;r=q>r?q:r;g[h>>2]=r;q=s}s=(s-r)/(q-r+1.0000000036274937e-15);q=0.0;r=0.0;f=0;while(1){if((f|0)==8)break;ka=+g[b+5856+(f*72|0)+(d<<2)>>2];q=q+ka;r=r+ +F(+ka);f=f+1|0}r=r/+F(+(q*8.0+1.0e-15));r=r>.9900000095367432?.9900000095367432:r;r=r*r;r=r*r;ka=v/t;f=b+5776+(d<<2)|0;q=r*+g[f>>2];q=ka>q?ka:q;g[J+(d<<2)>>2]=q;p=p+q;if((d|0)>8)p=p-+g[J+(d+-9<<2)>>2];I=(+(d+-18|0)*.029999999329447746+1.0)*p;g[f>>2]=q;S=S>I?S:I;U=U+q*+(d+-8|0);R=R+r;T=T+s;I=u;d=w}if((M|0)==32){c[ha>>2]=0;l=ia;return}f=c[N>>2]|0;c[O>>2]=f;p=(c[j>>2]=f,+g[j>>2])+-2.5;g[Q>>2]=p;f=1;while(1){if((f|0)==19){f=16;break}ja=f+-1|0;v=+((c[20572+(f<<2)>>2]|0)-(c[20572+(ja<<2)>>2]|0)|0)*2.0*.25;u=+g[O+(ja<<2)>>2]+v;ka=+g[N+(f<<2)>>2];g[O+(f<<2)>>2]=uka?v:ka;g[Q+(f<<2)>>2]=ka;f=f+1|0;p=ka}while(1){if((f|0)<=-1){f=0;break}ja=f+1|0;v=+((c[20572+(ja<<2)>>2]|0)-(c[20572+(f<<2)>>2]|0)|0)*2.0*.25;u=+g[O+(ja<<2)>>2]+v;M=O+(f<<2)|0;ka=+g[M>>2];g[M>>2]=u>2]-v;ja=Q+(f<<2)|0;ka=+g[ja>>2];g[ja>>2]=v>ka?v:ka;f=f+-1|0}while(1){if((f|0)==19){r=0.0;d=0;break}ka=+g[N+(f<<2)>>2];v=+g[Q+(f<<2)>>2]-ka;ka=ka-(+g[O+(f<<2)>>2]+2.5);ja=~~+D(+(((v<0.0?0.0:v)+(ka<0.0?0.0:ka))*64.0+.5));a[b+8300+(ga*56|0)+36+f>>0]=(ja|0)<255?ja:255;f=f+1|0}while(1){if((d|0)==8)break;else{q=999999986991104.0;h=0}while(1){if((h|0)==8)break;else{p=0.0;f=0}while(1){if((f|0)==18)break;ka=+g[b+6432+(d*72|0)+(f<<2)>>2]-+g[b+6432+(h*72|0)+(f<<2)>>2];p=p+ka*ka;f=f+1|0}q=(h|0)==(d|0)|q>2]|0;x=d+1|0;y=c[20572+(x<<2)>>2]|0;r=0.0;h=w;while(1){if((h|0)>=(y|0))break;la=+g[Y+(h<<3)>>2];V=+g[Y+(h<<3)+4>>2];ja=480-h|0;s=+g[Y+(ja<<3)>>2];ka=+g[Y+(ja<<3)+4>>2];r=r+(la*la+s*s+V*V+ka*ka);h=h+1|0}s=q>r?q:r;ja=b+7152+(d<<2)|0;q=t*+g[ja>>2];q=q>r?q:r;g[ja>>2]=q;q=r>q?r:q;p=p*.05000000074505806;p=p>q?p:q;if(!(q>p*.1&q*1.0e9>s)){ja=f;q=s;d=x;f=ja;continue}if(!(q>u*+(y-w|0))){ja=f;q=s;d=x;f=ja;continue}f=x;q=s;d=x}if((c[Z>>2]|0)==48e3){V=X*1.7361111531499773e-05;X=(c[b+5852>>2]|0)==20?.029999999329447746:.07000000029802322;ja=b+7224|0;la=t*+g[ja>>2];la=la>V?la:V;g[ja>>2]=la;la=V>la?V:la;ka=p*.05000000074505806;f=(la*1.0e9>(q>V?q:V)?la>X*(ka>la?ka:la):0)&la>u*160.0|(f|0)>16?20:f}w=c[fa>>2]|0;y=(w|0)<3?20:f;X=+Ih(I)*20.0;x=b+7432|0;ka=+g[x>>2]+-.003000000026077032;ka=ka>X?ka:X;g[x>>2]=ka;x=b+7436|0;la=+g[x>>2]*(1.0-_);g[x>>2]=X>2]*+g[$+(f<<2)>>2];f=f+1|0}g[ca+(h<<2)>>2]=p;h=h+1|0}while(1){if((h|0)==8)break;d=h<<4;p=0.0;f=0;while(1){if((f|0)==16)break;p=p+ +g[20648+(d+f<<2)>>2]*.5*(+g[b+7080+(f<<2)>>2]+ +g[b+7008+(f<<2)>>2]);f=f+1|0}g[ba+(h<<2)>>2]=p;h=h+1|0}q=R/18.0;B=B/18.0;g[A>>2]=B+(1.0-B)*((w|0)<10?.5:T/18.0);ka=S/9.0;d=b+5848|0;la=+g[d>>2]*.800000011920929;la=ka>la?ka:la;g[d>>2]=la;d=b+8300+(ga*56|0)+8|0;g[d>>2]=U*.015625;c[z>>2]=((c[z>>2]|0)+1|0)%8|0;h=w+1|0;c[fa>>2]=(h|0)<1e4?h:1e4;h=b+8300+(ga*56|0)+4|0;g[h>>2]=la;f=0;while(1){if((f|0)==4)break;g[da+(f<<2)>>2]=(+g[ca+(f<<2)>>2]+ +g[b+7228+(f+24<<2)>>2])*-.12298999726772308+(+g[b+7228+(f<<2)>>2]+ +g[b+7228+(f+16<<2)>>2])*.49195000529289246+ +g[b+7228+(f+8<<2)>>2]*.6969299912452698-+g[b+7356+(f<<2)>>2]*1.4349000453948975;f=f+1|0}p=1.0-aa;f=0;while(1){if((f|0)==4){f=0;break}ja=b+7356+(f<<2)|0;g[ja>>2]=p*+g[ja>>2]+aa*+g[ca+(f<<2)>>2];f=f+1|0}while(1){if((f|0)==4){f=0;break}g[da+(f+4<<2)>>2]=(+g[ca+(f<<2)>>2]-+g[b+7228+(f+24<<2)>>2])*.6324599981307983+(+g[b+7228+(f<<2)>>2]-+g[b+7228+(f+16<<2)>>2])*.31622999906539917;f=f+1|0}while(1){if((f|0)==3)break;ja=f+8|0;g[da+(ja<<2)>>2]=(+g[ca+(f<<2)>>2]+ +g[b+7228+(f+24<<2)>>2])*.5345199704170227-(+g[b+7228+(f<<2)>>2]+ +g[b+7228+(f+16<<2)>>2])*.26725998520851135-+g[b+7228+(ja<<2)>>2]*.5345199704170227;f=f+1|0}c:do if((c[fa>>2]|0)>5){f=0;while(1){if((f|0)==9){f=0;break c}ja=b+7388+(f<<2)|0;la=+g[da+(f<<2)>>2];g[ja>>2]=p*+g[ja>>2]+aa*la*la;f=f+1|0}}else f=0;while(0);while(1){if((f|0)==4){f=0;break}g[da+(f<<2)>>2]=+g[ca+(f<<2)>>2]-+g[ba+(f<<2)>>2];f=f+1|0}while(1){if((f|0)==8){f=0;break}ja=b+7228+(f+16<<2)|0;c[b+7228+(f+24<<2)>>2]=c[ja>>2];ba=b+7228+(f+8<<2)|0;c[ja>>2]=c[ba>>2];ja=b+7228+(f<<2)|0;c[ba>>2]=c[ja>>2];c[ja>>2]=c[ca+(f<<2)>>2];f=f+1|0}while(1){if((f|0)==9)break;la=+F(+(+g[b+7388+(f<<2)>>2]));g[da+(f+11<<2)>>2]=la-+g[21160+(f<<2)>>2];f=f+1|0}g[da+72>>2]=v+-.7799999713897705;g[da+80>>2]=+g[h>>2]+-.15472300350666046;g[da+84>>2]=+g[A>>2]+-.7246429920196533;g[da+88>>2]=q+-.7437170147895813;g[da+92>>2]=+g[d>>2]+.06921599805355072;g[da+96>>2]=+g[x>>2]+-.06792999804019928;jh(da,ea);t=(+g[ea>>2]+1.0)*.5;g[ea>>2]=t;d=ea+4|0;u=+g[d>>2]*.5+.5;u=u*u;g[d>>2]=u;g[b+8300+(ga*56|0)+32>>2]=u;d=b+7424|0;ka=+g[d>>2];aa=1.0-ka;la=ka*1.0000000474974513e-03+aa*.009999999776482582;ca=u>.949999988079071;ja=u<.05000000074505806&(ca^1);s=ja|ca?(ja?.05000000074505806:.949999988079071):u;ja=b+7428|0;_=+g[ja>>2];ca=_>.949999988079071;da=_<.05000000074505806&(ca^1);v=da|ca?(da?.05000000074505806:.949999988079071):_;V=1.0-_;X=1.0-la;s=+E(+(s-v))*.05000000074505806/(s*(1.0-v)+v*(1.0-s))+.019999999552965164;v=(_*X+V*la)*+G(+u,+s);v=v/((V*X+_*la)*+G(+(1.0-u),+s)+v);g[ja>>2]=v;g[b+8300+(ga*56|0)+24>>2]=v;v=+g[ja>>2];v=v*t+(1.0-v)*.5;g[ea>>2]=v;ja=v>.949999988079071;ea=v<.05000000074505806&(ja^1);t=ea|ja?(ea?.05000000074505806:.949999988079071):v;ea=ka>.949999988079071;ja=ka<.05000000074505806&(ea^1);s=ja|ea?(ja?.05000000074505806:.949999988079071):ka;t=+E(+(t-s))*.05000000074505806/(t*(1.0-s)+s*(1.0-t))+.019999999552965164;s=+G(+(1.0-v),+t);t=+G(+v,+t);la=(ka*.9998999834060669+aa*9.999999747378752e-05)*t;la=la/((aa*.9998999834060669+ka*9.999999747378752e-05)*s+la);g[d>>2]=la;g[b+8300+(ga*56|0)+20>>2]=la;if((c[fa>>2]|0)==1){q=(c[b+4>>2]|0)==2048?.10000000149011612:.625;h=b+7856|0;g[h>>2]=q;p=1.0-q;f=b+7456|0;g[f>>2]=p}else{fa=b+7456|0;ja=b+7856|0;f=fa;h=ja;p=+g[fa>>2];q=+g[ja>>2]}r=p+ +g[b+7460>>2];p=q+ +g[b+7860>>2];g[f>>2]=r*.9998999834060669*s;g[h>>2]=p*.9998999834060669*t;f=1;while(1){if((f|0)==99)break;ja=f+1|0;g[b+7456+(f<<2)>>2]=+g[b+7456+(ja<<2)>>2]*s;g[b+7856+(f<<2)>>2]=+g[b+7856+(ja<<2)>>2]*t;f=ja}g[b+7852>>2]=p*9.999999747378752e-05*s;g[b+8252>>2]=r*9.999999747378752e-05*t;p=9.999999682655225e-21;f=0;while(1){if((f|0)==100)break;p=p+(+g[b+7456+(f<<2)>>2]+ +g[b+7856+(f<<2)>>2]);f=f+1|0}p=1.0/p;f=0;while(1){if((f|0)==100)break;ja=b+7456+(f<<2)|0;g[ja>>2]=+g[ja>>2]*p;ja=b+7856+(f<<2)|0;g[ja>>2]=+g[ja>>2]*p;f=f+1|0}q=+g[d>>2];if(u>.75){p=q;if(p>.9){ja=b+8268|0;fa=(c[ja>>2]|0)+1|0;c[ja>>2]=(fa|0)<500?fa:500;ja=b+8260|0;ka=+g[ja>>2];la=v-ka;g[ja>>2]=ka+1.0/+(fa|0)*(la<-.20000000298023224?-.20000000298023224:la)}if(p<.1){ja=b+8264|0;fa=(c[ja>>2]|0)+1|0;c[ja>>2]=(fa|0)<500?fa:500;ja=b+8256|0;ka=+g[ja>>2];la=v-ka;g[ja>>2]=ka+1.0/+(fa|0)*(la>.20000000298023224?.20000000298023224:la)}}c[b+7444>>2]=q>.5&1;c[b+8300+(ga*56|0)+28>>2]=y;c[b+5852>>2]=y;g[b+8300+(ga*56|0)+12>>2]=B;c[ha>>2]=1;l=ia;return}function gh(a,b,d,e,f,h,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0.0,o=0,p=0,q=0,r=0,s=0;s=l;if(!f){n=0.0;l=s;return +n}o=(m|0)==48e3;if(!o)if((m|0)==16e3){h=(h<<1|0)/3|0;p=(f<<1|0)/3|0}else p=f;else{h=h<<1;p=f<<1}r=fa()|0;q=l;l=l+((1*(p<<2)|0)+15&-16)|0;ka[a&1](b,q,p,h,i,j,k);if((j|0)==-2)n=.000030517578125/+(k|0);else n=(j|0)>-1?.0000152587890625:.000030517578125;h=0;while(1){if((h|0)>=(p|0))break;k=q+(h<<2)|0;g[k>>2]=+g[k>>2]*n;h=h+1|0}a:do if(o)n=+ih(e,d,q,p);else{if((m|0)>=24e3){switch(m|0){case 24e3:break;default:{n=0.0;break a}}Sh(d|0,q|0,p<<2|0)|0;n=0.0;break}switch(m|0){case 16e3:break;default:{n=0.0;break a}}f=p*3|0;a=fa()|0;b=l;l=l+((1*(f<<2)|0)+15&-16)|0;h=0;while(1){if((h|0)>=(p|0))break;o=c[q+(h<<2)>>2]|0;m=h*3|0;c[b+(m<<2)>>2]=o;c[b+(m+1<<2)>>2]=o;c[b+(m+2<<2)>>2]=o;h=h+1|0}+ih(e,d,b,f);ha(a|0);n=0.0}while(0);ha(r|0);l=s;return +n}function hh(a,b){a=+a;b=+b;var c=0.0,d=0.0;c=b*b;d=a*a;if(c+d<1.000000045813705e-18){d=0.0;return +d}if(c=(f|0))break;p=d<<1;l=+g[c+(p<<2)>>2];m=+g[a>>2];n=(l-m)*.6074370741844177;m=m+n;g[a>>2]=l+n;n=+g[c+((p|1)<<2)>>2];l=+g[h>>2];k=(n-l)*.15062999725341797;g[h>>2]=n+k;j=+g[i>>2];o=(-n-j)*.15062999725341797;j=m+j+o;g[i>>2]=o-n;g[b+(d<<2)>>2]=(m+l+k)*.5;e=e+j*j;d=d+1|0}return +e}function jh(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0,h=0,i=0,j=0;j=l;l=l+400|0;i=j;e=0;f=22e3;while(1){if((e|0)==16){f=0;h=23664;break}d=+g[f>>2];c=f;h=0;while(1){c=c+4|0;if((h|0)==25)break;d=d+ +g[a+(h<<2)>>2]*+g[c>>2];h=h+1|0}g[i+(e<<2)>>2]=+kh(d);e=e+1|0;f=f+104|0}while(1){if((f|0)==2)break;d=+g[h>>2];e=0;c=h;while(1){c=c+4|0;if((e|0)==16)break;d=d+ +g[i+(e<<2)>>2]*+g[c>>2];e=e+1|0}g[b+(f<<2)>>2]=+kh(d);f=f+1|0;h=h+68|0}l=j;return}function kh(a){a=+a;var b=0.0,c=0,d=0;if(!(a<8.0)){a=1.0;return +a}if(!(a>-8.0)){a=-1.0;return +a}if(a!=a|0.0!=0.0){a=0.0;return +a}c=a<0.0;a=c?-a:a;d=~~+D(+(a*25.0+.5));a=a-+(d|0)*.03999999910593033;b=+g[21196+(d<<2)>>2];a=(c?-1.0:1.0)*(b+a*(1.0-b*b)*(1.0-b*a));return +a}function lh(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return mh(a,b,c,b,c,d,e)|0}function mh(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0;if(h>>>0>10){if(!i){i=0;return i|0}c[i>>2]=3;i=0;return i|0}j=nh(96)|0;o=j+52|0;c[o>>2]=0;c[j+56>>2]=0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=-1;c[j+80>>2]=0;c[j+28>>2]=0;c[j+24>>2]=0;c[j+72>>2]=0;c[j+84>>2]=0;g[j+44>>2]=1.0;c[j+20>>2]=a;c[j+88>>2]=1;c[j+92>>2]=1;c[j+32>>2]=160;k=a<<2;l=j+60|0;c[l>>2]=nh(k)|0;m=j+68|0;c[m>>2]=nh(k)|0;n=j+64|0;c[n>>2]=nh(k)|0;k=0;while(1){if((k|0)==(a|0))break;c[(c[l>>2]|0)+(k<<2)>>2]=0;c[(c[m>>2]|0)+(k<<2)>>2]=0;c[(c[n>>2]|0)+(k<<2)>>2]=0;k=k+1|0}oh(j,h);ph(j,b,d,e,f);k=qh(j)|0;if(!k)c[o>>2]=1;else{rh(j);j=0}if(!i){i=j;return i|0}c[i>>2]=k;i=j;return i|0}function nh(a){a=a|0;var b=0;b=Kh(a)|0;if(!b)return b|0;if(!(c[b+-4>>2]&3))return b|0;Qh(b|0,0,a|0)|0;return b|0}function oh(a,b){a=a|0;b=b|0;var d=0;if(b>>>0>10)return;d=a+16|0;if((c[d>>2]|0)==(b|0))return;c[d>>2]=b;if(!(c[a+52>>2]|0))return;qh(a)|0;return}function ph(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=a+4|0;if((((c[a>>2]|0)==(e|0)?(c[g>>2]|0)==(f|0):0)?(c[a+8>>2]|0)==(b|0):0)?(c[a+12>>2]|0)==(d|0):0)return;h=a+12|0;i=c[h>>2]|0;c[a>>2]=e;c[g>>2]=f;g=a+8|0;c[g>>2]=b;c[h>>2]=d;f=2;e=b;while(1){if(f>>>0>(c[(e>>>0>>0?g:h)>>2]|0)>>>0)break;e=c[g>>2]|0;while(1){if((e>>>0)%(f>>>0)|0|0)break;d=c[h>>2]|0;if((d>>>0)%(f>>>0)|0|0)break;b=(e>>>0)/(f>>>0)|0;c[g>>2]=b;d=(d>>>0)/(f>>>0)|0;c[h>>2]=d;e=b}f=f+1|0}a:do if(i|0){e=a+20|0;f=a+64|0;d=0;while(1){if(d>>>0>=(c[e>>2]|0)>>>0)break a;g=(c[f>>2]|0)+(d<<2)|0;c[g>>2]=((R(c[g>>2]|0,c[h>>2]|0)|0)>>>0)/(i>>>0)|0;g=(c[f>>2]|0)+(d<<2)|0;b=c[h>>2]|0;if((c[g>>2]|0)>>>0>=b>>>0)c[g>>2]=b+-1;d=d+1|0}}while(0);if(!(c[a+52>>2]|0))return;qh(a)|0;return}function qh(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0;o=a+24|0;p=c[o>>2]|0;q=a+28|0;n=c[q>>2]|0;f=c[a+8>>2]|0;k=a+12|0;h=c[k>>2]|0;c[a+36>>2]=(f>>>0)/(h>>>0)|0;c[a+40>>2]=(f>>>0)%(h>>>0)|0;m=a+16|0;d=c[m>>2]|0;b=c[23800+(d*20|0)+4>>2]|0;j=a+48|0;c[j>>2]=b;e=c[23800+(d*20|0)>>2]|0;c[o>>2]=e;if(f>>>0>h>>>0){g[a+44>>2]=+g[23800+(d*20|0)+8>>2]*+(h>>>0)/+(f>>>0);e=(((R(e,f)|0)>>>0)/(h>>>0)|0)+7&-8;c[o>>2]=e;if(h<<1>>>0>>0){b=b>>>1;c[j>>2]=b}if(h<<2>>>0>>0){b=b>>>1;c[j>>2]=b}if(h<<3>>>0>>0){b=b>>>1;c[j>>2]=b}if(h<<4>>>0>>0){b=b>>>1;c[j>>2]=b}if(!b){c[j>>2]=1;b=1}}else c[a+44>>2]=c[23800+(d*20|0)+12>>2];d=R(e,h)|0;f=(R(e,b)|0)+8|0;if(d>>>0<=f>>>0?(536870911/(h>>>0)|0)>>>0>=e>>>0:0){i=1;h=16}else h=15;if((h|0)==15?(536870903/(b>>>0)|0)>>>0>=e>>>0:0){d=f;i=0;h=16}do if((h|0)==16){b=a+80|0;if((c[b>>2]|0)>>>0>>0){e=a+76|0;f=th(c[e>>2]|0,d<<2)|0;if(!f)break;c[e>>2]=f;c[b>>2]=d}f=a+44|0;h=a+76|0;do if(i){b=0;while(1){if(b>>>0>=(c[k>>2]|0)>>>0)break;l=+(b>>>0);d=0;while(1){e=c[o>>2]|0;if(d>>>0>=e>>>0)break;r=+uh(+g[f>>2],+(d-((e|0)/2|0)+1|0)-l/+((c[k>>2]|0)>>>0),e,c[23800+((c[m>>2]|0)*20|0)+16>>2]|0);g[(c[h>>2]|0)+((R(b,e)|0)+d<<2)>>2]=r;d=d+1|0}b=b+1|0}b=a+84|0;if((c[m>>2]|0)>8){c[b>>2]=1;break}else{c[b>>2]=2;break}}else{b=-4;while(1){e=c[j>>2]|0;d=c[o>>2]|0;if((b|0)>=((R(e,d)|0)+4|0))break;r=+uh(+g[f>>2],+(b|0)/+(e>>>0)-+(d>>>1>>>0),d,c[23800+((c[m>>2]|0)*20|0)+16>>2]|0);g[(c[h>>2]|0)+(b+4<<2)>>2]=r;b=b+1|0}b=a+84|0;if((c[m>>2]|0)>8){c[b>>2]=3;break}else{c[b>>2]=4;break}}while(0);b=(c[o>>2]|0)+-1+(c[a+32>>2]|0)|0;d=c[q>>2]|0;if(b>>>0>d>>>0){d=c[a+20>>2]|0;if((536870911/(d>>>0)|0)>>>0>>0)break;e=a+72|0;d=th(c[e>>2]|0,(R(d,b)|0)<<2)|0;if(!d)break;c[e>>2]=d;c[q>>2]=b}else b=d;if(!(c[a+56>>2]|0)){f=a+20|0;e=a+72|0;d=0;while(1){if(d>>>0>=(R(c[f>>2]|0,b)|0)>>>0){b=0;break}g[(c[e>>2]|0)+(d<<2)>>2]=0.0;d=d+1|0;b=c[q>>2]|0}return b|0}b=c[o>>2]|0;if(b>>>0<=p>>>0){if(b>>>0>=p>>>0){q=0;return q|0}j=a+20|0;k=a+68|0;e=a+72|0;d=0;while(1){if(d>>>0>=(c[j>>2]|0)>>>0){b=0;break}b=(c[k>>2]|0)+(d<<2)|0;f=c[b>>2]|0;c[b>>2]=(p-(c[o>>2]|0)|0)>>>1;b=0;while(1){h=(c[k>>2]|0)+(d<<2)|0;i=c[h>>2]|0;if(b>>>0>=((c[o>>2]|0)+-1+i+f|0)>>>0)break;a=c[e>>2]|0;n=(R(d,c[q>>2]|0)|0)+b|0;c[a+(n<<2)>>2]=c[a+(n+i<<2)>>2];b=b+1|0}c[h>>2]=i+f;d=d+1|0}return b|0}i=a+68|0;j=p+-1|0;k=a+72|0;m=a+60|0;b=c[a+20>>2]|0;a:while(1){h=b+-1|0;if(!b){b=0;break}b=c[(c[i>>2]|0)+(h<<2)>>2]|0;f=b<<1;d=R(h,n)|0;b=j+b|0;while(1){e=b+-1|0;if(!b){b=0;break}a=c[k>>2]|0;b=(R(h,c[q>>2]|0)|0)+e|0;c[a+(b+(c[(c[i>>2]|0)+(h<<2)>>2]|0)<<2)>>2]=c[a+(d+e<<2)>>2];b=e}while(1){d=(c[i>>2]|0)+(h<<2)|0;if(b>>>0>=(c[d>>2]|0)>>>0)break;g[(c[k>>2]|0)+((R(h,c[q>>2]|0)|0)+b<<2)>>2]=0.0;b=b+1|0}f=p+f|0;c[d>>2]=0;b=c[o>>2]|0;if(f>>>0>=b>>>0){c[(c[i>>2]|0)+(h<<2)>>2]=(f-b|0)>>>1;b=0;while(1){d=c[(c[i>>2]|0)+(h<<2)>>2]|0;if(b>>>0>=((c[o>>2]|0)+-1+d|0)>>>0){b=h;continue a}f=c[k>>2]|0;a=(R(h,c[q>>2]|0)|0)+b|0;c[f+(a<<2)>>2]=c[f+(a+d<<2)>>2];b=b+1|0}}b=f+-1|0;e=f+-2|0;d=0;while(1){if((d|0)==(b|0))break;s=c[k>>2]|0;a=R(h,c[q>>2]|0)|0;c[s+(a+((c[o>>2]|0)+-2-d)<<2)>>2]=c[s+(a+(e-d)<<2)>>2];d=d+1|0}while(1){d=c[o>>2]|0;if(b>>>0>=(d+-1|0)>>>0)break;g[(c[k>>2]|0)+((R(h,c[q>>2]|0)|0)+(d+-2-b)<<2)>>2]=0.0;b=b+1|0}b=(c[m>>2]|0)+(h<<2)|0;c[b>>2]=(c[b>>2]|0)+((d-f|0)>>>1);b=h}return b|0}while(0);c[a+84>>2]=5;c[o>>2]=p;s=1;return s|0}function rh(a){a=a|0;sh(c[a+72>>2]|0);sh(c[a+76>>2]|0);sh(c[a+60>>2]|0);sh(c[a+68>>2]|0);sh(c[a+64>>2]|0);sh(a);return}function sh(a){a=a|0;Lh(a);return}function th(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!a){a=Kh(b)|0;return a|0}if(b>>>0>4294967231){c[6029]=12;a=0;return a|0}o=b>>>0<11?16:b+11&-8;n=a+-8|0;p=a+-4|0;m=c[p>>2]|0;d=m&-8;j=a+(d+-8)|0;h=c[8506]|0;e=m&3;if(!((e|0)!=1&n>>>0>=h>>>0&(d|0)>0))da();f=c[j+4>>2]|0;if(!(f&1))da();do if(!e){if(!(o>>>0<256|d>>>0<(o|4)>>>0)?(d-o|0)>>>0<=c[8622]<<1>>>0:0)return a|0}else{if(d>>>0>=o>>>0){d=d-o|0;if(d>>>0<=15)return a|0;n=n+o|0;c[p>>2]=m&1|o|2;c[n+4>>2]=d|3;p=n+d+4|0;c[p>>2]=c[p>>2]|1;Mh(n,d);return a|0}if((j|0)==(c[8508]|0)){l=(c[8505]|0)+d|0;e=l-o|0;d=n+o|0;if(l>>>0<=o>>>0)break;c[p>>2]=m&1|o|2;c[d+4>>2]=e|1;c[8508]=d;c[8505]=e;return a|0}if((j|0)==(c[8507]|0)){f=(c[8504]|0)+d|0;if(f>>>0>>0)break;d=f-o|0;e=m&1;if(d>>>0>15){n=n+o|0;m=n+d|0;c[p>>2]=e|o|2;c[n+4>>2]=d|1;c[m>>2]=d;e=m+4|0;c[e>>2]=c[e>>2]&-2;e=n}else{c[p>>2]=e|f|2;e=n+f+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[8504]=d;c[8507]=e;return a|0}if((f&2|0)==0?(l=(f&-8)+d|0,l>>>0>=o>>>0):0){k=l-o|0;b=f>>>3;a:do if(f>>>0>=256){g=c[j+24>>2]|0;f=c[j+12>>2]|0;do if((f|0)==(j|0)){f=j+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){i=0;break}else e=f}while(1){f=d+20|0;b=c[f>>2]|0;if(b|0){d=b;e=f;continue}f=d+16|0;b=c[f>>2]|0;if(!b)break;else{d=b;e=f}}if(e>>>0>>0)da();else{c[e>>2]=0;i=d;break}}else{b=c[j+8>>2]|0;if(b>>>0>>0)da();d=b+12|0;if((c[d>>2]|0)!=(j|0))da();e=f+8|0;if((c[e>>2]|0)==(j|0)){c[d>>2]=f;c[e>>2]=b;i=f;break}else da()}while(0);if(g|0){d=c[j+28>>2]|0;e=34312+(d<<2)|0;do if((j|0)==(c[e>>2]|0)){c[e>>2]=i;if(!i){c[8503]=c[8503]&~(1<>>0>=(c[8506]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=i;if(!i)break a;else break}else da();while(0);f=c[8506]|0;if(i>>>0>>0)da();c[i+24>>2]=g;d=j+16|0;e=c[d>>2]|0;do if(e|0)if(e>>>0>>0)da();else{c[i+16>>2]=e;c[e+24>>2]=i;break}while(0);d=c[d+4>>2]|0;if(d|0)if(d>>>0<(c[8506]|0)>>>0)da();else{c[i+20>>2]=d;c[d+24>>2]=i;break}}}else{e=c[j+8>>2]|0;f=c[j+12>>2]|0;d=34048+(b<<1<<2)|0;if((e|0)!=(d|0)){if(e>>>0>>0)da();if((c[e+12>>2]|0)!=(j|0))da()}if((f|0)==(e|0)){c[8502]=c[8502]&~(1<>>0>>0)da();d=f+8|0;if((c[d>>2]|0)==(j|0))g=d;else da()}else g=f+8|0;c[e+12>>2]=f;c[g>>2]=e}while(0);d=m&1;if(k>>>0<16){c[p>>2]=l|d|2;p=n+l+4|0;c[p>>2]=c[p>>2]|1;return a|0}else{n=n+o|0;c[p>>2]=d|o|2;c[n+4>>2]=k|3;p=n+k+4|0;c[p>>2]=c[p>>2]|1;Mh(n,k);return a|0}}}while(0);d=Kh(b)|0;if(!d){a=0;return a|0}p=c[p>>2]|0;p=(p&-8)-((p&3|0)==0?8:4)|0;Sh(d|0,a|0,(p>>>0>>0?p:b)|0)|0;Lh(a);a=d;return a|0}function uh(a,b,d,e){a=+a;b=+b;d=d|0;e=e|0;var f=0.0,g=0.0;g=+E(+b);if(g<1.0e-06){g=a;return +g}f=+(d|0);if(g>f*.5){g=0.0;return +g}g=b*a*3.141592653589793;a=a*+I(+g)/g;g=+E(+(b*2.0/f));g=a*+Bh(g,c[e>>2]|0,c[e+4>>2]|0);return +g}function vh(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0;w=c[a+24>>2]|0;y=a+60|0;x=a+64|0;s=c[a+76>>2]|0;t=c[a+92>>2]|0;u=c[a+36>>2]|0;v=c[a+40>>2]|0;m=c[a+12>>2]|0;p=c[(c[x>>2]|0)+(b<<2)>>2]|0;q=c[(c[y>>2]|0)+(b<<2)>>2]|0;r=0;while(1){if((q|0)>=(c[e>>2]|0)){a=8;break}if((r|0)>=(c[h>>2]|0)){a=8;break}n=s+((R(p,w)|0)<<2)|0;o=d+(q<<2)|0;a=0;i=0.0;j=0.0;k=0.0;l=0.0;while(1){if((a|0)>=(w|0))break;C=i+ +g[n+(a<<2)>>2]*+g[o+(a<<2)>>2];A=a|1;z=a|2;B=a|3;a=a+4|0;i=C;j=j+ +g[n+(B<<2)>>2]*+g[o+(B<<2)>>2];k=k+ +g[n+(A<<2)>>2]*+g[o+(A<<2)>>2];l=l+ +g[n+(z<<2)>>2]*+g[o+(z<<2)>>2]}g[f+((R(t,r)|0)<<2)>>2]=i+k+l+j;A=p+v|0;B=A>>>0>>0;p=A-(B?0:m)|0;q=q+u+((B^1)&1)|0;r=r+1|0}if((a|0)==8){c[(c[y>>2]|0)+(b<<2)>>2]=q;c[(c[x>>2]|0)+(b<<2)>>2]=p;return r|0}return 0}function wh(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0;t=c[a+24>>2]|0;v=a+60|0;u=a+64|0;p=c[a+76>>2]|0;q=c[a+92>>2]|0;r=c[a+36>>2]|0;s=c[a+40>>2]|0;j=c[a+12>>2]|0;m=c[(c[u>>2]|0)+(b<<2)>>2]|0;n=c[(c[v>>2]|0)+(b<<2)>>2]|0;o=0;while(1){if((n|0)>=(c[e>>2]|0)){a=8;break}if((o|0)>=(c[h>>2]|0)){a=8;break}k=p+((R(m,t)|0)<<2)|0;l=d+(n<<2)|0;a=0;i=0.0;while(1){if((a|0)>=(t|0))break;w=i+ +g[k+(a<<2)>>2]*+g[l+(a<<2)>>2];a=a+1|0;i=w}g[f+((R(q,o)|0)<<2)>>2]=i;k=m+s|0;l=k>>>0>>0;m=k-(l?0:j)|0;n=n+r+((l^1)&1)|0;o=o+1|0}if((a|0)==8){c[(c[v>>2]|0)+(b<<2)>>2]=n;c[(c[u>>2]|0)+(b<<2)>>2]=m;return o|0}return 0}function xh(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0;J=l;l=l+16|0;F=J;G=c[a+24>>2]|0;I=a+60|0;H=a+64|0;z=c[a+92>>2]|0;A=c[a+36>>2]|0;B=c[a+40>>2]|0;C=a+12|0;D=c[C>>2]|0;E=a+48|0;n=a+76|0;o=F+4|0;p=F+8|0;q=F+12|0;w=c[(c[H>>2]|0)+(b<<2)>>2]|0;x=c[(c[I>>2]|0)+(b<<2)>>2]|0;y=0;while(1){if((x|0)>=(c[e>>2]|0)){a=8;break}if((y|0)>=(c[h>>2]|0)){a=8;break}r=d+(x<<2)|0;s=c[E>>2]|0;u=R(w,s)|0;a=c[C>>2]|0;t=(u>>>0)/(a>>>0)|0;u=(u>>>0)%(a>>>0)|0;v=+(a>>>0);a=0;i=0.0;j=0.0;k=0.0;m=0.0;while(1){if((a|0)>=(G|0))break;M=+g[r+(a<<2)>>2];L=c[n>>2]|0;N=a+1|0;K=(R(N,s)|0)+4-t|0;a=N;i=i+M*+g[L+(K+-2<<2)>>2];j=j+M*+g[L+(K+1<<2)>>2];k=k+M*+g[L+(K+-1<<2)>>2];m=m+M*+g[L+(K<<2)>>2]}Ah(+(u>>>0)/v,F);g[f+((R(z,y)|0)<<2)>>2]=+g[F>>2]*i+ +g[o>>2]*k+ +g[p>>2]*m+ +g[q>>2]*j;L=w+B|0;N=L>>>0>>0;w=L-(N?0:D)|0;x=x+A+((N^1)&1)|0;y=y+1|0}if((a|0)==8){c[(c[I>>2]|0)+(b<<2)>>2]=x;c[(c[H>>2]|0)+(b<<2)>>2]=w;l=J;return y|0}return 0}function yh(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0;J=l;l=l+16|0;F=J;G=c[a+24>>2]|0;I=a+60|0;H=a+64|0;z=c[a+92>>2]|0;A=c[a+36>>2]|0;B=c[a+40>>2]|0;C=a+12|0;D=c[C>>2]|0;E=a+48|0;n=a+76|0;o=F+4|0;p=F+8|0;q=F+12|0;w=c[(c[H>>2]|0)+(b<<2)>>2]|0;x=c[(c[I>>2]|0)+(b<<2)>>2]|0;y=0;while(1){if((x|0)>=(c[e>>2]|0)){a=8;break}if((y|0)>=(c[h>>2]|0)){a=8;break}r=d+(x<<2)|0;s=c[E>>2]|0;u=R(w,s)|0;a=c[C>>2]|0;t=(u>>>0)/(a>>>0)|0;u=(u>>>0)%(a>>>0)|0;v=+(a>>>0);a=0;i=0.0;j=0.0;k=0.0;m=0.0;while(1){if((a|0)>=(G|0))break;M=+g[r+(a<<2)>>2];L=c[n>>2]|0;N=a+1|0;K=(R(N,s)|0)+4-t|0;a=N;i=i+M*+g[L+(K+-2<<2)>>2];j=j+M*+g[L+(K+1<<2)>>2];k=k+M*+g[L+(K+-1<<2)>>2];m=m+M*+g[L+(K<<2)>>2]}Ah(+(u>>>0)/v,F);g[f+((R(z,y)|0)<<2)>>2]=+g[F>>2]*i+ +g[o>>2]*k+ +g[p>>2]*m+ +g[q>>2]*j;L=w+B|0;N=L>>>0>>0;w=L-(N?0:D)|0;x=x+A+((N^1)&1)|0;y=y+1|0}if((a|0)==8){c[(c[I>>2]|0)+(b<<2)>>2]=x;c[(c[H>>2]|0)+(b<<2)>>2]=w;l=J;return y|0}return 0}function zh(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=a+60|0;n=a+64|0;k=c[a+92>>2]|0;l=c[a+36>>2]|0;m=c[a+40>>2]|0;d=c[a+12>>2]|0;a=c[(c[n>>2]|0)+(b<<2)>>2]|0;i=c[(c[o>>2]|0)+(b<<2)>>2]|0;j=0;while(1){if((i|0)>=(c[e>>2]|0)){d=5;break}if((j|0)>=(c[h>>2]|0)){d=5;break}g[f+((R(k,j)|0)<<2)>>2]=0.0;q=a+m|0;p=q>>>0>>0;a=q-(p?0:d)|0;i=i+l+((p^1)&1)|0;j=j+1|0}if((d|0)==5){c[(c[o>>2]|0)+(b<<2)>>2]=i;c[(c[n>>2]|0)+(b<<2)>>2]=a;return j|0}return 0}function Ah(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0.0,f=0.0;e=a*.16666999459266663*a*a;d=a*-.16666999459266663+e;g[b>>2]=d;f=a*.5*a;c=f+a-f*a;g[b+4>>2]=c;a=a*-.3333300054073334+f-e;g[b+12>>2]=a;g[b+8>>2]=1.0-d-c-a;return}function Bh(a,b,c){a=+a;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,g=0.0;d=+(c|0)*a;c=~~+D(+d);d=d-+(c|0);g=d;f=d*d;d=f*d;e=d*.1666666667;a=g*-.1666666667+e;f=f*.5;d=g+f-d*.5;e=g*-.3333333333+f-e;return +(e*+h[b+(c<<3)>>3]+(1.0-a-d-e)*+h[b+(c+1<<3)>>3]+d*+h[b+(c+2<<3)>>3]+a*+h[b+(c+3<<3)>>3])}function Ch(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;v=l;l=l+16|0;s=v+8|0;t=v+4|0;u=v;c[s>>2]=f;i=c[e>>2]|0;f=c[h>>2]|0;q=c[a+28>>2]|0;o=(c[a+72>>2]|0)+((R(q,b)|0)<<2)|0;p=(c[a+24>>2]|0)+-1|0;q=q-p|0;r=c[a+88>>2]|0;j=a+68|0;if(c[(c[j>>2]|0)+(b<<2)>>2]|0){f=f-(Dh(a,b,s,f)|0)|0;if(c[(c[j>>2]|0)+(b<<2)>>2]|0){t=i;u=f;s=c[e>>2]|0;t=s-t|0;c[e>>2]=t;e=c[h>>2]|0;e=e-u|0;c[h>>2]=e;l=v;return}}n=a+92|0;m=d;a:while(1){k=(m|0)==0;do{if(!((i|0)!=0&(f|0)!=0))break a;j=i>>>0>q>>>0?q:i;c[t>>2]=j;c[u>>2]=f;b:do if(k){d=0;while(1){if(d>>>0>=j>>>0)break b;g[o+(d+p<<2)>>2]=0.0;d=d+1|0;j=c[t>>2]|0}}else{d=0;while(1){if(d>>>0>=j>>>0)break b;c[o+(d+p<<2)>>2]=c[m+((R(d,r)|0)<<2)>>2];d=d+1|0;j=c[t>>2]|0}}while(0);w=c[s>>2]|0;Eh(a,b,t,w,u);j=c[t>>2]|0;i=i-j|0;d=c[u>>2]|0;f=f-d|0;c[s>>2]=w+((R(d,c[n>>2]|0)|0)<<2)}while(k);m=m+((R(j,r)|0)<<2)|0}w=c[e>>2]|0;w=w-i|0;c[e>>2]=w;w=c[h>>2]|0;w=w-f|0;c[h>>2]=w;l=v;return}function Dh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0;n=l;l=l+16|0;k=n+4|0;m=n;c[k>>2]=e;j=a+68|0;c[m>>2]=c[(c[j>>2]|0)+(b<<2)>>2];i=(c[a+72>>2]|0)+((R(c[a+28>>2]|0,b)|0)<<2)|0;e=c[a+24>>2]|0;Eh(a,b,m,c[d>>2]|0,k);g=(c[j>>2]|0)+(b<<2)|0;c[g>>2]=(c[g>>2]|0)-(c[m>>2]|0);g=c[(c[j>>2]|0)+(b<<2)>>2]|0;if(!g){m=c[k>>2]|0;k=a+92|0;k=c[k>>2]|0;k=R(m,k)|0;b=c[d>>2]|0;k=b+(k<<2)|0;c[d>>2]=k;l=n;return m|0}h=e+-1|0;f=0;e=g;while(1){if(f>>>0>=e>>>0)break;e=h+f|0;c[i+(e<<2)>>2]=c[i+(e+(c[m>>2]|0)<<2)>>2];f=f+1|0;e=c[(c[j>>2]|0)+(b<<2)>>2]|0}m=c[k>>2]|0;k=a+92|0;k=c[k>>2]|0;k=R(m,k)|0;b=c[d>>2]|0;k=b+(k<<2)|0;c[d>>2]=k;l=n;return m|0}function Eh(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;h=c[a+24>>2]|0;i=(c[a+72>>2]|0)+((R(c[a+28>>2]|0,b)|0)<<2)|0;c[a+56>>2]=1;g=ja[c[a+84>>2]&7](a,b,i,d,e,f)|0;e=a+60|0;a=c[(c[e>>2]|0)+(b<<2)>>2]|0;if((a|0)<(c[d>>2]|0))c[d>>2]=a;c[f>>2]=g;g=(c[e>>2]|0)+(b<<2)|0;c[g>>2]=(c[g>>2]|0)-(c[d>>2]|0);g=c[d>>2]|0;a=h+-1|0;e=0;while(1){if((e|0)>=(a|0))break;c[i+(e<<2)>>2]=c[i+(e+g<<2)>>2];e=e+1|0}return}function Fh(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=c[f>>2]|0;m=c[d>>2]|0;n=a+88|0;o=c[n>>2]|0;p=a+92|0;h=c[p>>2]|0;i=a+20|0;k=c[i>>2]|0;c[p>>2]=k;c[n>>2]=k;j=(b|0)==0;g=0;while(1){if(g>>>0>=k>>>0)break;c[f>>2]=l;c[d>>2]=m;if(j)Ch(a,g,0,d,e+(g<<2)|0,f);else Ch(a,g,b+(g<<2)|0,d,e+(g<<2)|0,f);g=g+1|0;k=c[i>>2]|0}c[n>>2]=o;c[p>>2]=h;return (c[a+84>>2]|0)==5|0}function Gh(){return 33944}function Hh(a){a=+a;var b=0;b=(g[j>>2]=a,c[j>>2]|0);if((b&2130706432)>>>0<=1249902592){b=(b|0)<0;a=(b?8388608.0:-8388608.0)+((b?-8388608.0:8388608.0)+a);if(a==0.0)a=b?-0.0:0.0}return +a}function Ih(a){a=+a;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,k=0.0,l=0.0,m=0.0;h[j>>3]=a;b=c[j>>2]|0;d=c[j+4>>2]|0;e=(d|0)<0;do if(e|d>>>0<1048576){if((b|0)==0&(d&2147483647|0)==0){a=-1.0/(a*a);break}if(e){a=(a-a)/0.0;break}else{h[j>>3]=a*18014398509481984.0;d=c[j+4>>2]|0;e=-1077;b=c[j>>2]|0;f=9;break}}else if(d>>>0<=2146435071)if((b|0)==0&0==0&(d|0)==1072693248)a=0.0;else{e=-1023;f=9}while(0);if((f|0)==9){f=d+614242|0;c[j>>2]=b;c[j+4>>2]=(f&1048575)+1072079006;k=+h[j>>3]+-1.0;i=k*(k*.5);l=k/(k+2.0);m=l*l;a=m*m;h[j>>3]=k-i;d=c[j+4>>2]|0;c[j>>2]=0;c[j+4>>2]=d;g=+h[j>>3];a=k-g-i+l*(i+(a*(a*(a*.15313837699209373+.22222198432149784)+.3999999999940942)+m*(a*(a*(a*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)));m=g*.4342944818781689;i=+(e+(f>>>20)|0);l=i*.30102999566361177;k=l+m;a=k+(m+(l-k)+(a*.4342944818781689+(i*3.694239077158931e-13+(g+a)*2.5082946711645275e-11)))}return +a}function Jh(a){a=+a;return ~~+Hh(a)|0}function Kh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=l;l=l+16|0;o=K;do if(a>>>0<245){p=a>>>0<11?16:a+11&-8;a=p>>>3;t=c[8502]|0;d=t>>>a;if(d&3|0){a=(d&1^1)+a|0;d=34048+(a<<1<<2)|0;e=d+8|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[8506]|0)>>>0)da();b=h+12|0;if((c[b>>2]|0)==(f|0)){c[b>>2]=d;c[e>>2]=h;break}else da()}else c[8502]=t&~(1<>2]=J|3;J=f+J+4|0;c[J>>2]=c[J>>2]|1;J=g;l=K;return J|0}s=c[8504]|0;if(p>>>0>s>>>0){if(d|0){i=2<>>12&16;a=a>>>i;e=a>>>5&8;a=a>>>e;g=a>>>2&4;a=a>>>g;d=a>>>1&2;a=a>>>d;b=a>>>1&1;b=(e|i|g|d|b)+(a>>>b)|0;a=34048+(b<<1<<2)|0;d=a+8|0;g=c[d>>2]|0;i=g+8|0;e=c[i>>2]|0;do if((a|0)!=(e|0)){if(e>>>0<(c[8506]|0)>>>0)da();f=e+12|0;if((c[f>>2]|0)==(g|0)){c[f>>2]=a;c[d>>2]=e;j=t;break}else da()}else{j=t&~(1<>2]=p|3;e=g+p|0;c[e+4>>2]=h|1;c[e+h>>2]=h;if(s|0){f=c[8507]|0;b=s>>>3;d=34048+(b<<1<<2)|0;b=1<>2]|0;if(a>>>0<(c[8506]|0)>>>0)da();else{k=a;m=b}}else{c[8502]=j|b;k=d;m=d+8|0}c[m>>2]=f;c[k+12>>2]=f;c[f+8>>2]=k;c[f+12>>2]=d}c[8504]=h;c[8507]=e;J=i;l=K;return J|0}k=c[8503]|0;if(k){a=(k&0-k)+-1|0;I=a>>>12&16;a=a>>>I;H=a>>>5&8;a=a>>>H;J=a>>>2&4;a=a>>>J;d=a>>>1&2;a=a>>>d;b=a>>>1&1;b=c[34312+((H|I|J|d|b)+(a>>>b)<<2)>>2]|0;a=(c[b+4>>2]&-8)-p|0;d=c[b+16+(((c[b+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){j=b;h=a}else{do{I=(c[d+4>>2]&-8)-p|0;J=I>>>0>>0;a=J?I:a;b=J?d:b;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0}while((d|0)!=0);j=b;h=a}f=c[8506]|0;if(j>>>0>>0)da();i=j+p|0;if(j>>>0>=i>>>0)da();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){n=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0>>0)da();else{c[a>>2]=0;n=b;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)da();b=e+12|0;if((c[b>>2]|0)!=(j|0))da();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;n=d;break}else da()}while(0);a:do if(g|0){b=c[j+28>>2]|0;a=34312+(b<<2)|0;do if((j|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[8503]=k&~(1<>>0>=(c[8506]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=n;if(!n)break a;else break}else da();while(0);a=c[8506]|0;if(n>>>0>>0)da();c[n+24>>2]=g;b=c[j+16>>2]|0;do if(b|0)if(b>>>0>>0)da();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);b=c[j+20>>2]|0;if(b|0)if(b>>>0<(c[8506]|0)>>>0)da();else{c[n+20>>2]=b;c[b+24>>2]=n;break}}while(0);if(h>>>0<16){J=h+p|0;c[j+4>>2]=J|3;J=j+J+4|0;c[J>>2]=c[J>>2]|1}else{c[j+4>>2]=p|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(s|0){e=c[8507]|0;b=s>>>3;d=34048+(b<<1<<2)|0;b=1<>2]|0;if(a>>>0<(c[8506]|0)>>>0)da();else{q=a;r=b}}else{c[8502]=t|b;q=d;r=d+8|0}c[r>>2]=e;c[q+12>>2]=e;c[e+8>>2]=q;c[e+12>>2]=d}c[8504]=h;c[8507]=i}J=j+8|0;l=K;return J|0}}}else if(a>>>0<=4294967231){a=a+11|0;p=a&-8;k=c[8503]|0;if(k){e=0-p|0;a=a>>>8;if(a)if(p>>>0>16777215)i=31;else{r=(a+1048320|0)>>>16&8;C=a<>>16&4;C=C<>>16&2;i=14-(q|r|i)+(C<>>15)|0;i=p>>>(i+7|0)&1|i<<1}else i=0;d=c[34312+(i<<2)>>2]|0;b:do if(!d){d=0;a=0;C=81}else{a=0;h=p<<((i|0)==31?0:25-(i>>>1)|0);g=0;while(1){f=(c[d+4>>2]&-8)-p|0;if(f>>>0>>0)if(!f){a=d;e=0;f=d;C=85;break b}else{a=d;e=f}f=c[d+20>>2]|0;d=c[d+16+(h>>>31<<2)>>2]|0;g=(f|0)==0|(f|0)==(d|0)?g:f;f=(d|0)==0;if(f){d=g;C=81;break}else h=h<<((f^1)&1)}}while(0);if((C|0)==81){if((d|0)==0&(a|0)==0){a=2<>>12&16;r=r>>>m;j=r>>>5&8;r=r>>>j;n=r>>>2&4;r=r>>>n;q=r>>>1&2;r=r>>>q;d=r>>>1&1;a=0;d=c[34312+((j|m|n|q|d)+(r>>>d)<<2)>>2]|0}if(!d){j=a;i=e}else{f=d;C=85}}if((C|0)==85)while(1){C=0;d=(c[f+4>>2]&-8)-p|0;r=d>>>0>>0;d=r?d:e;a=r?f:a;f=c[f+16+(((c[f+16>>2]|0)==0&1)<<2)>>2]|0;if(!f){j=a;i=d;break}else{e=d;C=85}}if((j|0)!=0?i>>>0<((c[8504]|0)-p|0)>>>0:0){f=c[8506]|0;if(j>>>0>>0)da();h=j+p|0;if(j>>>0>=h>>>0)da();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){s=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0>>0)da();else{c[a>>2]=0;s=b;break}}else{e=c[j+8>>2]|0;if(e>>>0>>0)da();b=e+12|0;if((c[b>>2]|0)!=(j|0))da();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;s=d;break}else da()}while(0);c:do if(g){b=c[j+28>>2]|0;a=34312+(b<<2)|0;do if((j|0)==(c[a>>2]|0)){c[a>>2]=s;if(!s){t=k&~(1<>>0>=(c[8506]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=s;if(!s){t=k;break c}else break}else da();while(0);a=c[8506]|0;if(s>>>0>>0)da();c[s+24>>2]=g;b=c[j+16>>2]|0;do if(b|0)if(b>>>0>>0)da();else{c[s+16>>2]=b;c[b+24>>2]=s;break}while(0);b=c[j+20>>2]|0;if(b)if(b>>>0<(c[8506]|0)>>>0)da();else{c[s+20>>2]=b;c[b+24>>2]=s;t=k;break}else t=k}else t=k;while(0);do if(i>>>0>=16){c[j+4>>2]=p|3;c[h+4>>2]=i|1;c[h+i>>2]=i;b=i>>>3;if(i>>>0<256){d=34048+(b<<1<<2)|0;a=c[8502]|0;b=1<>2]|0;if(a>>>0<(c[8506]|0)>>>0)da();else{x=a;y=b}}else{c[8502]=a|b;x=d;y=d+8|0}c[y>>2]=h;c[x+12>>2]=h;c[h+8>>2]=x;c[h+12>>2]=d;break}b=i>>>8;if(b)if(i>>>0>16777215)b=31;else{I=(b+1048320|0)>>>16&8;J=b<>>16&4;J=J<>>16&2;b=14-(H|I|b)+(J<>>15)|0;b=i>>>(b+7|0)&1|b<<1}else b=0;d=34312+(b<<2)|0;c[h+28>>2]=b;a=h+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}a=i<<((b|0)==31?0:25-(b>>>1)|0);e=c[d>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(i|0)){C=139;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=136;break}else{a=a<<1;e=b}}if((C|0)==136)if(d>>>0<(c[8506]|0)>>>0)da();else{c[d>>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;break}else if((C|0)==139){b=e+8|0;a=c[b>>2]|0;J=c[8506]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=h;c[b>>2]=h;c[h+8>>2]=a;c[h+12>>2]=e;c[h+24>>2]=0;break}else da()}}else{J=i+p|0;c[j+4>>2]=J|3;J=j+J+4|0;c[J>>2]=c[J>>2]|1}while(0);J=j+8|0;l=K;return J|0}}}else p=-1;while(0);d=c[8504]|0;if(d>>>0>=p>>>0){b=d-p|0;a=c[8507]|0;if(b>>>0>15){J=a+p|0;c[8507]=J;c[8504]=b;c[J+4>>2]=b|1;c[J+b>>2]=b;c[a+4>>2]=p|3}else{c[8504]=0;c[8507]=0;c[a+4>>2]=d|3;J=a+d+4|0;c[J>>2]=c[J>>2]|1}J=a+8|0;l=K;return J|0}h=c[8505]|0;if(h>>>0>p>>>0){H=h-p|0;c[8505]=H;J=c[8508]|0;I=J+p|0;c[8508]=I;c[I+4>>2]=H|1;c[J+4>>2]=p|3;J=J+8|0;l=K;return J|0}if(!(c[8620]|0)){c[8622]=4096;c[8621]=4096;c[8623]=-1;c[8624]=-1;c[8625]=0;c[8613]=0;a=o&-16^1431655768;c[o>>2]=a;c[8620]=a;a=4096}else a=c[8622]|0;i=p+48|0;j=p+47|0;g=a+j|0;f=0-a|0;k=g&f;if(k>>>0<=p>>>0){J=0;l=K;return J|0}a=c[8612]|0;if(a|0?(x=c[8610]|0,y=x+k|0,y>>>0<=x>>>0|y>>>0>a>>>0):0){J=0;l=K;return J|0}d:do if(!(c[8613]&4)){d=c[8508]|0;e:do if(d){e=34456;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(w=e+4|0,(a+(c[w>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){C=163;break e}else e=a}b=g-h&f;if(b>>>0<2147483647){a=Vh(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[w>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;C=180;break d}}else{e=a;C=171}}else b=0}else C=163;while(0);do if((C|0)==163){d=Vh(0)|0;if((d|0)!=(-1|0)?(b=d,u=c[8621]|0,v=u+-1|0,b=((v&b|0)==0?0:(v+b&0-u)-b|0)+k|0,u=c[8610]|0,v=b+u|0,b>>>0>p>>>0&b>>>0<2147483647):0){y=c[8612]|0;if(y|0?v>>>0<=u>>>0|v>>>0>y>>>0:0){b=0;break}a=Vh(b|0)|0;if((a|0)==(d|0)){h=b;g=d;C=180;break d}else{e=a;C=171}}else b=0}while(0);do if((C|0)==171){d=0-b|0;if(!(i>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;C=180;break d}a=c[8622]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;C=180;break d}if((Vh(a|0)|0)==(-1|0)){Vh(d|0)|0;b=0;break}else{h=a+b|0;g=e;C=180;break d}}while(0);c[8613]=c[8613]|4;C=178}else{b=0;C=178}while(0);if(((C|0)==178?k>>>0<2147483647:0)?(B=Vh(k|0)|0,y=Vh(0)|0,z=y-B|0,A=z>>>0>(p+40|0)>>>0,!((B|0)==(-1|0)|A^1|B>>>0>>0&((B|0)!=(-1|0)&(y|0)!=(-1|0))^1)):0){h=A?z:b;g=B;C=180}if((C|0)==180){b=(c[8610]|0)+h|0;c[8610]=b;if(b>>>0>(c[8611]|0)>>>0)c[8611]=b;k=c[8508]|0;do if(k){b=34456;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){C=190;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((C|0)==190?(c[b+12>>2]&8|0)==0:0)?k>>>0>>0&k>>>0>=a>>>0:0){c[d>>2]=e+h;J=k+8|0;J=(J&7|0)==0?0:0-J&7;I=k+J|0;J=(c[8505]|0)+(h-J)|0;c[8508]=I;c[8505]=J;c[I+4>>2]=J|1;c[I+J+4>>2]=40;c[8509]=c[8624];break}b=c[8506]|0;if(g>>>0>>0){c[8506]=g;i=g}else i=b;d=g+h|0;b=34456;while(1){if((c[b>>2]|0)==(d|0)){C=198;break}a=c[b+8>>2]|0;if(!a)break;else b=a}if((C|0)==198?(c[b+12>>2]&8|0)==0:0){c[b>>2]=g;n=b+4|0;c[n>>2]=(c[n>>2]|0)+h;n=g+8|0;n=g+((n&7|0)==0?0:0-n&7)|0;b=d+8|0;b=d+((b&7|0)==0?0:0-b&7)|0;m=n+p|0;j=b-n-p|0;c[n+4>>2]=p|3;do if((b|0)!=(k|0)){if((b|0)==(c[8507]|0)){J=(c[8504]|0)+j|0;c[8504]=J;c[8507]=m;c[m+4>>2]=J|1;c[m+J>>2]=J;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;f=a>>>3;f:do if(a>>>0>=256){g=c[b+24>>2]|0;e=c[b+12>>2]|0;do if((e|0)==(b|0)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){H=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}if(d>>>0>>0)da();else{c[d>>2]=0;H=a;break}}else{f=c[b+8>>2]|0;if(f>>>0>>0)da();a=f+12|0;if((c[a>>2]|0)!=(b|0))da();d=e+8|0;if((c[d>>2]|0)==(b|0)){c[a>>2]=e;c[d>>2]=f;H=e;break}else da()}while(0);if(!g)break;a=c[b+28>>2]|0;d=34312+(a<<2)|0;do if((b|0)!=(c[d>>2]|0))if(g>>>0>=(c[8506]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=H;if(!H)break f;else break}else da();else{c[d>>2]=H;if(H|0)break;c[8503]=c[8503]&~(1<>>0>>0)da();c[H+24>>2]=g;a=b+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0>>0)da();else{c[H+16>>2]=d;c[d+24>>2]=H;break}while(0);a=c[a+4>>2]|0;if(!a)break;if(a>>>0<(c[8506]|0)>>>0)da();else{c[H+20>>2]=a;c[a+24>>2]=H;break}}else{d=c[b+8>>2]|0;e=c[b+12>>2]|0;a=34048+(f<<1<<2)|0;do if((d|0)!=(a|0)){if(d>>>0>>0)da();if((c[d+12>>2]|0)==(b|0))break;da()}while(0);if((e|0)==(d|0)){c[8502]=c[8502]&~(1<>>0>>0)da();a=e+8|0;if((c[a>>2]|0)==(b|0)){E=a;break}da()}while(0);c[d+12>>2]=e;c[E>>2]=d}while(0);b=b+h|0;f=h+j|0}else f=j;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[m+4>>2]=f|1;c[m+f>>2]=f;b=f>>>3;if(f>>>0<256){d=34048+(b<<1<<2)|0;a=c[8502]|0;b=1<>2]|0;if(a>>>0>=(c[8506]|0)>>>0){I=a;J=b;break}da()}while(0);c[J>>2]=m;c[I+12>>2]=m;c[m+8>>2]=I;c[m+12>>2]=d;break}b=f>>>8;do if(!b)b=0;else{if(f>>>0>16777215){b=31;break}I=(b+1048320|0)>>>16&8;J=b<>>16&4;J=J<>>16&2;b=14-(H|I|b)+(J<>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=34312+(b<<2)|0;c[m+28>>2]=b;a=m+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[8503]|0;d=1<>2]=m;c[m+24>>2]=e;c[m+12>>2]=m;c[m+8>>2]=m;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){C=265;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=262;break}else{a=a<<1;e=b}}if((C|0)==262)if(d>>>0<(c[8506]|0)>>>0)da();else{c[d>>2]=m;c[m+24>>2]=e;c[m+12>>2]=m;c[m+8>>2]=m;break}else if((C|0)==265){b=e+8|0;a=c[b>>2]|0;J=c[8506]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=m;c[b>>2]=m;c[m+8>>2]=a;c[m+12>>2]=e;c[m+24>>2]=0;break}else da()}}else{J=(c[8505]|0)+j|0;c[8505]=J;c[8508]=m;c[m+4>>2]=J|1}while(0);J=n+8|0;l=K;return J|0}b=34456;while(1){a=c[b>>2]|0;if(a>>>0<=k>>>0?(D=a+(c[b+4>>2]|0)|0,D>>>0>k>>>0):0)break;b=c[b+8>>2]|0}f=D+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=k+16|0;a=a>>>0>>0?k:a;b=a+8|0;d=g+8|0;d=(d&7|0)==0?0:0-d&7;J=g+d|0;d=h+-40-d|0;c[8508]=J;c[8505]=d;c[J+4>>2]=d|1;c[J+d+4>>2]=40;c[8509]=c[8624];d=a+4|0;c[d>>2]=27;c[b>>2]=c[8614];c[b+4>>2]=c[8615];c[b+8>>2]=c[8616];c[b+12>>2]=c[8617];c[8614]=g;c[8615]=h;c[8617]=0;c[8616]=b;b=a+24|0;do{J=b;b=b+4|0;c[b>>2]=7}while((J+8|0)>>>0>>0);if((a|0)!=(k|0)){g=a-k|0;c[d>>2]=c[d>>2]&-2;c[k+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=34048+(b<<1<<2)|0;a=c[8502]|0;b=1<>2]|0;if(a>>>0<(c[8506]|0)>>>0)da();else{F=a;G=b}}else{c[8502]=a|b;F=d;G=d+8|0}c[G>>2]=k;c[F+12>>2]=k;c[k+8>>2]=F;c[k+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)d=31;else{I=(b+1048320|0)>>>16&8;J=b<>>16&4;J=J<>>16&2;d=14-(H|I|d)+(J<>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=34312+(d<<2)|0;c[k+28>>2]=d;c[k+20>>2]=0;c[f>>2]=0;b=c[8503]|0;a=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(g|0)){C=292;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=289;break}else{a=a<<1;e=b}}if((C|0)==289)if(d>>>0<(c[8506]|0)>>>0)da();else{c[d>>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((C|0)==292){b=e+8|0;a=c[b>>2]|0;J=c[8506]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=k;c[b>>2]=k;c[k+8>>2]=a;c[k+12>>2]=e;c[k+24>>2]=0;break}else da()}}}else{J=c[8506]|0;if((J|0)==0|g>>>0>>0)c[8506]=g;c[8614]=g;c[8615]=h;c[8617]=0;c[8511]=c[8620];c[8510]=-1;b=0;do{J=34048+(b<<1<<2)|0;c[J+12>>2]=J;c[J+8>>2]=J;b=b+1|0}while((b|0)!=32);J=g+8|0;J=(J&7|0)==0?0:0-J&7;I=g+J|0;J=h+-40-J|0;c[8508]=I;c[8505]=J;c[I+4>>2]=J|1;c[I+J+4>>2]=40;c[8509]=c[8624]}while(0);b=c[8505]|0;if(b>>>0>p>>>0){H=b-p|0;c[8505]=H;J=c[8508]|0;I=J+p|0;c[8508]=I;c[I+4>>2]=H|1;c[J+4>>2]=p|3;J=J+8|0;l=K;return J|0}}c[6029]=12;J=0;l=K;return J|0}function Lh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if(!a)return;d=a+-8|0;h=c[8506]|0;if(d>>>0>>0)da();a=c[a+-4>>2]|0;b=a&3;if((b|0)==1)da();e=a&-8;o=d+e|0;a:do if(!(a&1)){a=c[d>>2]|0;if(!b)return;k=d+(0-a)|0;j=a+e|0;if(k>>>0>>0)da();if((k|0)==(c[8507]|0)){a=o+4|0;b=c[a>>2]|0;if((b&3|0)!=3){r=k;f=j;m=k;break}c[8504]=j;c[a>>2]=b&-2;c[k+4>>2]=j|1;c[k+j>>2]=j;return}e=a>>>3;if(a>>>0<256){b=c[k+8>>2]|0;d=c[k+12>>2]|0;a=34048+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0>>0)da();if((c[b+12>>2]|0)!=(k|0))da()}if((d|0)==(b|0)){c[8502]=c[8502]&~(1<>>0>>0)da();a=d+8|0;if((c[a>>2]|0)==(k|0))g=a;else da()}else g=d+8|0;c[b+12>>2]=d;c[g>>2]=b;r=k;f=j;m=k;break}g=c[k+24>>2]|0;d=c[k+12>>2]|0;do if((d|0)==(k|0)){d=k+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){i=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0>>0)da();else{c[b>>2]=0;i=a;break}}else{e=c[k+8>>2]|0;if(e>>>0>>0)da();a=e+12|0;if((c[a>>2]|0)!=(k|0))da();b=d+8|0;if((c[b>>2]|0)==(k|0)){c[a>>2]=d;c[b>>2]=e;i=d;break}else da()}while(0);if(g){a=c[k+28>>2]|0;b=34312+(a<<2)|0;do if((k|0)==(c[b>>2]|0)){c[b>>2]=i;if(!i){c[8503]=c[8503]&~(1<>>0>=(c[8506]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(k|0)&1)<<2)>>2]=i;if(!i){r=k;f=j;m=k;break a}else break}else da();while(0);d=c[8506]|0;if(i>>>0>>0)da();c[i+24>>2]=g;a=k+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0>>0)da();else{c[i+16>>2]=b;c[b+24>>2]=i;break}while(0);a=c[a+4>>2]|0;if(a)if(a>>>0<(c[8506]|0)>>>0)da();else{c[i+20>>2]=a;c[a+24>>2]=i;r=k;f=j;m=k;break}else{r=k;f=j;m=k}}else{r=k;f=j;m=k}}else{r=d;f=e;m=d}while(0);if(m>>>0>=o>>>0)da();a=o+4|0;b=c[a>>2]|0;if(!(b&1))da();if(!(b&2)){a=c[8507]|0;if((o|0)==(c[8508]|0)){q=(c[8505]|0)+f|0;c[8505]=q;c[8508]=r;c[r+4>>2]=q|1;if((r|0)!=(a|0))return;c[8507]=0;c[8504]=0;return}if((o|0)==(a|0)){q=(c[8504]|0)+f|0;c[8504]=q;c[8507]=m;c[r+4>>2]=q|1;c[m+q>>2]=q;return}f=(b&-8)+f|0;e=b>>>3;b:do if(b>>>0>=256){g=c[o+24>>2]|0;a=c[o+12>>2]|0;do if((a|0)==(o|0)){d=o+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){n=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<(c[8506]|0)>>>0)da();else{c[b>>2]=0;n=a;break}}else{b=c[o+8>>2]|0;if(b>>>0<(c[8506]|0)>>>0)da();d=b+12|0;if((c[d>>2]|0)!=(o|0))da();e=a+8|0;if((c[e>>2]|0)==(o|0)){c[d>>2]=a;c[e>>2]=b;n=a;break}else da()}while(0);if(g|0){a=c[o+28>>2]|0;b=34312+(a<<2)|0;do if((o|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[8503]=c[8503]&~(1<>>0>=(c[8506]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(o|0)&1)<<2)>>2]=n;if(!n)break b;else break}else da();while(0);d=c[8506]|0;if(n>>>0>>0)da();c[n+24>>2]=g;a=o+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0>>0)da();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);a=c[a+4>>2]|0;if(a|0)if(a>>>0<(c[8506]|0)>>>0)da();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}else{b=c[o+8>>2]|0;d=c[o+12>>2]|0;a=34048+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0<(c[8506]|0)>>>0)da();if((c[b+12>>2]|0)!=(o|0))da()}if((d|0)==(b|0)){c[8502]=c[8502]&~(1<>>0<(c[8506]|0)>>>0)da();a=d+8|0;if((c[a>>2]|0)==(o|0))l=a;else da()}else l=d+8|0;c[b+12>>2]=d;c[l>>2]=b}while(0);c[r+4>>2]=f|1;c[m+f>>2]=f;if((r|0)==(c[8507]|0)){c[8504]=f;return}}else{c[a>>2]=b&-2;c[r+4>>2]=f|1;c[m+f>>2]=f}a=f>>>3;if(f>>>0<256){d=34048+(a<<1<<2)|0;b=c[8502]|0;a=1<>2]|0;if(b>>>0<(c[8506]|0)>>>0)da();else{p=b;q=a}}else{c[8502]=b|a;p=d;q=d+8|0}c[q>>2]=r;c[p+12>>2]=r;c[r+8>>2]=p;c[r+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{p=(a+1048320|0)>>>16&8;q=a<>>16&4;q=q<>>16&2;a=14-(o|p|a)+(q<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=34312+(a<<2)|0;c[r+28>>2]=a;c[r+20>>2]=0;c[r+16>>2]=0;b=c[8503]|0;d=1<>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){a=124;break}d=e+16+(b>>>31<<2)|0;a=c[d>>2]|0;if(!a){a=121;break}else{b=b<<1;e=a}}if((a|0)==121)if(d>>>0<(c[8506]|0)>>>0)da();else{c[d>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;break}else if((a|0)==124){a=e+8|0;b=c[a>>2]|0;q=c[8506]|0;if(b>>>0>=q>>>0&e>>>0>=q>>>0){c[b+12>>2]=r;c[a>>2]=r;c[r+8>>2]=b;c[r+12>>2]=e;c[r+24>>2]=0;break}else da()}}else{c[8503]=b|d;c[e>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r}while(0);r=(c[8510]|0)+-1|0;c[8510]=r;if(!r)a=34464;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[8510]=-1;return}function Mh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=a+b|0;d=c[a+4>>2]|0;a:do if(!(d&1)){g=c[a>>2]|0;if(!(d&3))return;l=a+(0-g)|0;k=g+b|0;i=c[8506]|0;if(l>>>0>>0)da();if((l|0)==(c[8507]|0)){a=o+4|0;d=c[a>>2]|0;if((d&3|0)!=3){r=l;f=k;break}c[8504]=k;c[a>>2]=d&-2;c[l+4>>2]=k|1;c[l+k>>2]=k;return}e=g>>>3;if(g>>>0<256){d=c[l+8>>2]|0;b=c[l+12>>2]|0;a=34048+(e<<1<<2)|0;if((d|0)!=(a|0)){if(d>>>0>>0)da();if((c[d+12>>2]|0)!=(l|0))da()}if((b|0)==(d|0)){c[8502]=c[8502]&~(1<>>0>>0)da();a=b+8|0;if((c[a>>2]|0)==(l|0))h=a;else da()}else h=b+8|0;c[d+12>>2]=b;c[h>>2]=d;r=l;f=k;break}g=c[l+24>>2]|0;b=c[l+12>>2]|0;do if((b|0)==(l|0)){b=l+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){j=0;break}else d=b}while(1){b=a+20|0;e=c[b>>2]|0;if(e|0){a=e;d=b;continue}b=a+16|0;e=c[b>>2]|0;if(!e)break;else{a=e;d=b}}if(d>>>0>>0)da();else{c[d>>2]=0;j=a;break}}else{e=c[l+8>>2]|0;if(e>>>0>>0)da();a=e+12|0;if((c[a>>2]|0)!=(l|0))da();d=b+8|0;if((c[d>>2]|0)==(l|0)){c[a>>2]=b;c[d>>2]=e;j=b;break}else da()}while(0);if(g){a=c[l+28>>2]|0;d=34312+(a<<2)|0;do if((l|0)==(c[d>>2]|0)){c[d>>2]=j;if(!j){c[8503]=c[8503]&~(1<>>0>=(c[8506]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(l|0)&1)<<2)>>2]=j;if(!j){r=l;f=k;break a}else break}else da();while(0);b=c[8506]|0;if(j>>>0>>0)da();c[j+24>>2]=g;a=l+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0>>0)da();else{c[j+16>>2]=d;c[d+24>>2]=j;break}while(0);a=c[a+4>>2]|0;if(a)if(a>>>0<(c[8506]|0)>>>0)da();else{c[j+20>>2]=a;c[a+24>>2]=j;r=l;f=k;break}else{r=l;f=k}}else{r=l;f=k}}else{r=a;f=b}while(0);h=c[8506]|0;if(o>>>0>>0)da();a=o+4|0;d=c[a>>2]|0;if(!(d&2)){a=c[8507]|0;if((o|0)==(c[8508]|0)){q=(c[8505]|0)+f|0;c[8505]=q;c[8508]=r;c[r+4>>2]=q|1;if((r|0)!=(a|0))return;c[8507]=0;c[8504]=0;return}if((o|0)==(a|0)){q=(c[8504]|0)+f|0;c[8504]=q;c[8507]=r;c[r+4>>2]=q|1;c[r+q>>2]=q;return}f=(d&-8)+f|0;e=d>>>3;b:do if(d>>>0>=256){g=c[o+24>>2]|0;b=c[o+12>>2]|0;do if((b|0)==(o|0)){b=o+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){n=0;break}else d=b}while(1){b=a+20|0;e=c[b>>2]|0;if(e|0){a=e;d=b;continue}b=a+16|0;e=c[b>>2]|0;if(!e)break;else{a=e;d=b}}if(d>>>0>>0)da();else{c[d>>2]=0;n=a;break}}else{e=c[o+8>>2]|0;if(e>>>0>>0)da();a=e+12|0;if((c[a>>2]|0)!=(o|0))da();d=b+8|0;if((c[d>>2]|0)==(o|0)){c[a>>2]=b;c[d>>2]=e;n=b;break}else da()}while(0);if(g|0){a=c[o+28>>2]|0;d=34312+(a<<2)|0;do if((o|0)==(c[d>>2]|0)){c[d>>2]=n;if(!n){c[8503]=c[8503]&~(1<>>0>=(c[8506]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(o|0)&1)<<2)>>2]=n;if(!n)break b;else break}else da();while(0);b=c[8506]|0;if(n>>>0>>0)da();c[n+24>>2]=g;a=o+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0>>0)da();else{c[n+16>>2]=d;c[d+24>>2]=n;break}while(0);a=c[a+4>>2]|0;if(a|0)if(a>>>0<(c[8506]|0)>>>0)da();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}else{d=c[o+8>>2]|0;b=c[o+12>>2]|0;a=34048+(e<<1<<2)|0;if((d|0)!=(a|0)){if(d>>>0>>0)da();if((c[d+12>>2]|0)!=(o|0))da()}if((b|0)==(d|0)){c[8502]=c[8502]&~(1<>>0>>0)da();a=b+8|0;if((c[a>>2]|0)==(o|0))m=a;else da()}else m=b+8|0;c[d+12>>2]=b;c[m>>2]=d}while(0);c[r+4>>2]=f|1;c[r+f>>2]=f;if((r|0)==(c[8507]|0)){c[8504]=f;return}}else{c[a>>2]=d&-2;c[r+4>>2]=f|1;c[r+f>>2]=f}a=f>>>3;if(f>>>0<256){b=34048+(a<<1<<2)|0;d=c[8502]|0;a=1<>2]|0;if(d>>>0<(c[8506]|0)>>>0)da();else{p=d;q=a}}else{c[8502]=d|a;p=b;q=b+8|0}c[q>>2]=r;c[p+12>>2]=r;c[r+8>>2]=p;c[r+12>>2]=b;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{p=(a+1048320|0)>>>16&8;q=a<>>16&4;q=q<>>16&2;a=14-(o|p|a)+(q<>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=34312+(a<<2)|0;c[r+28>>2]=a;c[r+20>>2]=0;c[r+16>>2]=0;d=c[8503]|0;b=1<>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;return}d=f<<((a|0)==31?0:25-(a>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){a=121;break}b=e+16+(d>>>31<<2)|0;a=c[b>>2]|0;if(!a){a=118;break}else{d=d<<1;e=a}}if((a|0)==118){if(b>>>0<(c[8506]|0)>>>0)da();c[b>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;return}else if((a|0)==121){a=e+8|0;d=c[a>>2]|0;q=c[8506]|0;if(!(d>>>0>=q>>>0&e>>>0>=q>>>0))da();c[d+12>>2]=r;c[a>>2]=r;c[r+8>>2]=d;c[r+12>>2]=e;c[r+24>>2]=0;return}}function Nh(){}function Oh(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>c;return a>>>c|(b&(1<>c-32|0}function Ph(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (C=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Qh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;g=f-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function Rh(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){C=b>>>c;return a>>>c|(b&(1<>>c-32|0}function Sh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return ga(b|0,d|0,e|0)|0;h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function Th(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=R(e,f)|0;d=a>>>16;a=(c>>>16)+(R(e,d)|0)|0;e=b>>>16;b=R(e,f)|0;return (C=(a>>>16)+(R(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function Uh(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=Th(e,f)|0;a=C;return (C=(R(b,f)|0)+(R(d,e)|0)+a|a&0,c|0|0)|0}function Vh(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){Z()|0;ea(12);return -1}c[i>>2]=a;if((a|0)>(Y()|0)?(X()|0)==0:0){ea(12);c[i>>2]=b;return -1}return b|0}function Wh(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else Sh(b,c,d)|0;return b|0}function Xh(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return ja[a&7](b|0,c|0,d|0,e|0,f|0,g|0)|0}function Yh(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;ka[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function Zh(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;V(0);return 0}function _h(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;V(1)} + +// EMSCRIPTEN_END_FUNCS +var ja=[Zh,vh,wh,xh,yh,zh,Zh,Zh];var ka=[_h,zg];return{___muldsi3:Th,_sbrk:Vh,_speex_resampler_destroy:rh,_free:Lh,_memset:Qh,_opus_encode_float:Wg,_speex_resampler_init:lh,_memmove:Wh,_bitshift64Ashr:Oh,_opus_encoder_create:wg,_speex_resampler_process_interleaved_float:Fh,_malloc:Kh,_i64Add:Ph,_emscripten_get_global_libc:Gh,_memcpy:Sh,___muldi3:Uh,_bitshift64Lshr:Rh,_opus_encoder_ctl:Xg,runPostSets:Nh,stackAlloc:la,stackSave:ma,stackRestore:na,establishStackSpace:oa,setTempRet0:qa,getTempRet0:ra,setThrew:pa,stackAlloc:la,stackSave:ma,stackRestore:na,establishStackSpace:oa,setThrew:pa,setTempRet0:qa,getTempRet0:ra,dynCall_iiiiiii:Xh,dynCall_viiiiiii:Yh}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _speex_resampler_destroy=Module["_speex_resampler_destroy"]=asm["_speex_resampler_destroy"];var setThrew=Module["setThrew"]=asm["setThrew"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Ashr=Module["_bitshift64Ashr"]=asm["_bitshift64Ashr"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var _speex_resampler_init=Module["_speex_resampler_init"]=asm["_speex_resampler_init"];var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=asm["_emscripten_get_global_libc"];var _opus_encoder_ctl=Module["_opus_encoder_ctl"]=asm["_opus_encoder_ctl"];var stackSave=Module["stackSave"]=asm["stackSave"];var ___muldsi3=Module["___muldsi3"]=asm["___muldsi3"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var _opus_encode_float=Module["_opus_encode_float"]=asm["_opus_encode_float"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var _memmove=Module["_memmove"]=asm["_memmove"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var _speex_resampler_process_interleaved_float=Module["_speex_resampler_process_interleaved_float"]=asm["_speex_resampler_process_interleaved_float"];var _malloc=Module["_malloc"]=asm["_malloc"];var _opus_encoder_create=Module["_opus_encoder_create"]=asm["_opus_encoder_create"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=asm["dynCall_viiiiiii"];Runtime.stackAlloc=Module["stackAlloc"];Runtime.stackSave=Module["stackSave"];Runtime.stackRestore=Module["stackRestore"];Runtime.establishStackSpace=Module["establishStackSpace"];Runtime.setTempRet0=Module["setTempRet0"];Runtime.getTempRet0=Module["getTempRet0"];Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run();"use strict";var root=typeof self==="object"&&self.self===self&&self||typeof global==="object"&&global.global===global&&global||this;((function(global){var encoder;global["onmessage"]=(function(e){switch(e["data"]["command"]){case"encode":if(encoder){encoder.encode(e["data"]["buffers"])}break;case"done":if(encoder){encoder.encodeFinalFrame()}break;case"init":encoder=new OggOpusEncoder(e["data"]);break;default:}});var OggOpusEncoder=(function(config){this.numberOfChannels=config["numberOfChannels"]||1;this.originalSampleRate=config["originalSampleRate"];this.originalSampleRateOverride=config["originalSampleRateOverride"];this.encoderSampleRate=config["encoderSampleRate"]||48e3;this.maxBuffersPerPage=config["maxBuffersPerPage"]||40;this.encoderApplication=config["encoderApplication"]||2049;this.encoderFrameSize=config["encoderFrameSize"]||20;this.encoderComplexity=config["encoderComplexity"];this.bufferLength=config["bufferLength"]||4096;this.resampleQuality=config["resampleQuality"]||3;this.bitRate=config["bitRate"];this.pageIndex=0;this.granulePosition=0;this.segmentData=new Uint8Array(65025);this.segmentDataIndex=0;this.segmentTable=new Uint8Array(255);this.segmentTableIndex=0;this.buffersInPage=0;this.serial=Math.floor(Math.random()*Math.pow(2,32));this.initChecksumTable();this.initCodec();this.initResampler();this.generateIdPage();this.generateCommentPage();if(this.numberOfChannels===1){this.interleave=(function(buffers){return buffers[0]})}else{this.interleavedBuffers=new Float32Array(this.bufferLength*this.numberOfChannels)}});OggOpusEncoder._opus_encoder_create=_opus_encoder_create;OggOpusEncoder._opus_encoder_ctl=_opus_encoder_ctl;OggOpusEncoder._speex_resampler_process_interleaved_float=_speex_resampler_process_interleaved_float;OggOpusEncoder._speex_resampler_init=_speex_resampler_init;OggOpusEncoder._opus_encode_float=_opus_encode_float;OggOpusEncoder._free=_free;OggOpusEncoder._malloc=_malloc;OggOpusEncoder.prototype.encode=(function(buffers){var samples=this.interleave(buffers);var sampleIndex=0;while(sampleIndex=this.maxBuffersPerPage){this.generatePage()}});OggOpusEncoder.prototype.encodeFinalFrame=(function(){var finalFrameBuffers=[];for(var i=0;i>>24&255^data[i]]}return checksum>>>0});OggOpusEncoder.prototype.generateCommentPage=(function(){var segmentDataView=new DataView(this.segmentData.buffer);segmentDataView.setUint32(0,1937076303,true);segmentDataView.setUint32(4,1936154964,true);segmentDataView.setUint32(8,10,true);segmentDataView.setUint32(12,1868784978,true);segmentDataView.setUint32(16,1919247474,true);segmentDataView.setUint16(20,21322,true);segmentDataView.setUint32(22,0,true);this.segmentTableIndex=1;this.segmentDataIndex=this.segmentTable[0]=26;this.headerType=0;this.generatePage()});OggOpusEncoder.prototype.generateIdPage=(function(){var segmentDataView=new DataView(this.segmentData.buffer);segmentDataView.setUint32(0,1937076303,true);segmentDataView.setUint32(4,1684104520,true);segmentDataView.setUint8(8,1,true);segmentDataView.setUint8(9,this.numberOfChannels,true);segmentDataView.setUint16(10,3840,true);segmentDataView.setUint32(12,this.originalSampleRateOverride||this.originalSampleRate,true);segmentDataView.setUint16(16,0,true);segmentDataView.setUint8(18,0,true);this.segmentTableIndex=1;this.segmentDataIndex=this.segmentTable[0]=19;this.headerType=2;this.generatePage()});OggOpusEncoder.prototype.generatePage=(function(){var granulePosition=this.lastPositiveGranulePosition===this.granulePosition?-1:this.granulePosition;var pageBuffer=new ArrayBuffer(27+this.segmentTableIndex+this.segmentDataIndex);var pageBufferView=new DataView(pageBuffer);var page=new Uint8Array(pageBuffer);pageBufferView.setUint32(0,1399285583,true);pageBufferView.setUint8(4,0,true);pageBufferView.setUint8(5,this.headerType,true);pageBufferView.setUint32(6,granulePosition,true);if(granulePosition>4294967296||granulePosition<0){pageBufferView.setUint32(10,Math.floor(granulePosition/4294967296),true)}pageBufferView.setUint32(14,this.serial,true);pageBufferView.setUint32(18,this.pageIndex++,true);pageBufferView.setUint8(26,this.segmentTableIndex,true);page.set(this.segmentTable.subarray(0,this.segmentTableIndex),27);page.set(this.segmentData.subarray(0,this.segmentDataIndex),27+this.segmentTableIndex);pageBufferView.setUint32(22,this.getChecksum(page),true);global["postMessage"](page,[page.buffer]);this.segmentTableIndex=0;this.segmentDataIndex=0;this.buffersInPage=0;if(granulePosition>0){this.lastPositiveGranulePosition=granulePosition}});OggOpusEncoder.prototype.initChecksumTable=(function(){this.checksumTable=[];for(var i=0;i<256;i++){var r=i<<24;for(var j=0;j<8;j++){r=(r&2147483648)!=0?r<<1^79764919:r<<1}this.checksumTable[i]=r&4294967295}});OggOpusEncoder.prototype.initCodec=(function(){var errLocation=OggOpusEncoder._malloc(4);this.encoder=OggOpusEncoder._opus_encoder_create(this.encoderSampleRate,this.numberOfChannels,this.encoderApplication,errLocation);OggOpusEncoder._free(errLocation);if(this.bitRate){var bitRateLocation=OggOpusEncoder._malloc(4);HEAP32[bitRateLocation>>2]=this.bitRate;OggOpusEncoder._opus_encoder_ctl(this.encoder,4002,bitRateLocation);OggOpusEncoder._free(bitRateLocation)}if(this.encoderComplexity){var encoderComplexityLocation=OggOpusEncoder._malloc(4);HEAP32[encoderComplexityLocation>>2]=this.encoderComplexity;OggOpusEncoder._opus_encoder_ctl(this.encoder,4010,encoderComplexityLocation);OggOpusEncoder._free(encoderComplexityLocation)}this.encoderSamplesPerChannel=this.encoderSampleRate*this.encoderFrameSize/1e3;this.encoderSamplesPerChannelPointer=OggOpusEncoder._malloc(4);HEAP32[this.encoderSamplesPerChannelPointer>>2]=this.encoderSamplesPerChannel;this.encoderBufferLength=this.encoderSamplesPerChannel*this.numberOfChannels;this.encoderBufferPointer=OggOpusEncoder._malloc(this.encoderBufferLength*4);this.encoderBuffer=HEAPF32.subarray(this.encoderBufferPointer>>2,(this.encoderBufferPointer>>2)+this.encoderBufferLength);this.encoderOutputMaxLength=4e3;this.encoderOutputPointer=OggOpusEncoder._malloc(this.encoderOutputMaxLength);this.encoderOutputBuffer=HEAPU8.subarray(this.encoderOutputPointer,this.encoderOutputPointer+this.encoderOutputMaxLength)});OggOpusEncoder.prototype.initResampler=(function(){var errLocation=OggOpusEncoder._malloc(4);this.resampler=OggOpusEncoder._speex_resampler_init(this.numberOfChannels,this.originalSampleRate,this.encoderSampleRate,this.resampleQuality,errLocation);OggOpusEncoder._free(errLocation);this.resampleBufferIndex=0;this.resampleSamplesPerChannel=this.originalSampleRate*this.encoderFrameSize/1e3;this.resampleSamplesPerChannelPointer=OggOpusEncoder._malloc(4);HEAP32[this.resampleSamplesPerChannelPointer>>2]=this.resampleSamplesPerChannel;this.resampleBufferLength=this.resampleSamplesPerChannel*this.numberOfChannels;this.resampleBufferPointer=OggOpusEncoder._malloc(this.resampleBufferLength*4);this.resampleBuffer=HEAPF32.subarray(this.resampleBufferPointer>>2,(this.resampleBufferPointer>>2)+this.resampleBufferLength)});OggOpusEncoder.prototype.interleave=(function(buffers){for(var i=0;i=0){if(this.segmentTableIndex===255){this.generatePage();this.headerType=1}var segmentLength=Math.min(packetLength,255);this.segmentTable[this.segmentTableIndex++]=segmentLength;this.segmentData.set(this.encoderOutputBuffer.subarray(packetIndex,packetIndex+segmentLength),this.segmentDataIndex);this.segmentDataIndex+=segmentLength;packetIndex+=segmentLength;packetLength-=255}this.granulePosition+=48*this.encoderFrameSize;if(this.segmentTableIndex===255){this.generatePage();this.headerType=0}});global.OggOpusEncoder=OggOpusEncoder;if(typeof module=="object"&&module.exports){module.exports=OggOpusEncoder}}))(root) + + + + diff --git a/app/vendor/recorderjs/recorder.js b/app/vendor/recorderjs/recorder.js new file mode 100755 index 00000000..787ef9ca --- /dev/null +++ b/app/vendor/recorderjs/recorder.js @@ -0,0 +1,242 @@ +"use strict"; + +var root = (typeof self === 'object' && self.self === self && self) || (typeof global === 'object' && global.global === global && global) || this; + +(function( global ) { + + var Recorder = function( config ){ + + var that = this; + + if ( !Recorder.isRecordingSupported() ) { + throw new Error("Recording is not supported in this browser"); + } + + this.state = "inactive"; + this.eventTarget = global.document.createDocumentFragment(); + this.audioContext = new global.AudioContext(); + this.monitorNode = this.audioContext.createGain(); + + this.config = config = config || {}; + this.config.command = "init"; + this.config.bufferLength = config.bufferLength || 4096; + this.config.monitorGain = config.monitorGain || 0; + this.config.numberOfChannels = config.numberOfChannels || 1; + this.config.originalSampleRate = this.audioContext.sampleRate; + this.config.encoderSampleRate = config.encoderSampleRate || 48000; + this.config.encoderPath = config.encoderPath || 'encoderWorker.min.js'; + this.config.streamPages = config.streamPages || false; + this.config.leaveStreamOpen = config.leaveStreamOpen || false; + this.config.maxBuffersPerPage = config.maxBuffersPerPage || 40; + this.config.encoderApplication = config.encoderApplication || 2049; + this.config.encoderFrameSize = config.encoderFrameSize || 20; + this.config.resampleQuality = config.resampleQuality || 3; + this.config.streamOptions = config.streamOptions || { + optional: [], + mandatory: { + googEchoCancellation: false, + googAutoGainControl: false, + googNoiseSuppression: false, + googHighpassFilter: false + } + }; + + this.setMonitorGain( this.config.monitorGain ); + this.scriptProcessorNode = this.audioContext.createScriptProcessor( this.config.bufferLength, this.config.numberOfChannels, this.config.numberOfChannels ); + this.scriptProcessorNode.onaudioprocess = function( e ){ + that.encodeBuffers( e.inputBuffer ); + }; + }; + + Recorder.isRecordingSupported = function(){ + return global.AudioContext && global.navigator && ( global.navigator.getUserMedia || ( global.navigator.mediaDevices && global.navigator.mediaDevices.getUserMedia ) ); + }; + + Recorder.prototype.addEventListener = function( type, listener, useCapture ){ + this.eventTarget.addEventListener( type, listener, useCapture ); + }; + + Recorder.prototype.clearStream = function() { + if ( this.stream ) { + + if ( this.stream.getTracks ) { + this.stream.getTracks().forEach(function ( track ) { + track.stop(); + }); + } + + else { + this.stream.stop(); + } + + delete this.stream; + } + }; + + Recorder.prototype.encodeBuffers = function( inputBuffer ){ + if ( this.state === "recording" ) { + var buffers = []; + for ( var i = 0; i < inputBuffer.numberOfChannels; i++ ) { + buffers[i] = inputBuffer.getChannelData(i); + } + + this.encoder.postMessage({ + command: "encode", + buffers: buffers + }); + } + }; + + Recorder.prototype.initStream = function(){ + var that = this; + + var onStreamInit = function( stream ){ + that.stream = stream; + that.sourceNode = that.audioContext.createMediaStreamSource( stream ); + that.sourceNode.connect( that.scriptProcessorNode ); + that.sourceNode.connect( that.monitorNode ); + that.eventTarget.dispatchEvent( new global.Event( "streamReady" ) ); + return stream; + } + + var onStreamError = function( e ){ + that.eventTarget.dispatchEvent( new global.ErrorEvent( "streamError", { error: e } ) ); + } + + var constraints = { audio : this.config.streamOptions }; + + if ( this.stream ) { + this.eventTarget.dispatchEvent( new global.Event( "streamReady" ) ); + return global.Promise.resolve( this.stream ); + } + + if ( global.navigator.mediaDevices && global.navigator.mediaDevices.getUserMedia ) { + return global.navigator.mediaDevices.getUserMedia( constraints ).then( onStreamInit, onStreamError ); + } + + if ( global.navigator.getUserMedia ) { + return new global.Promise( function( resolve, reject ) { + global.navigator.getUserMedia( constraints, resolve, reject ); + }).then( onStreamInit, onStreamError ); + } + }; + + Recorder.prototype.pause = function(){ + if ( this.state === "recording" ){ + this.state = "paused"; + this.eventTarget.dispatchEvent( new global.Event( 'pause' ) ); + } + }; + + Recorder.prototype.removeEventListener = function( type, listener, useCapture ){ + this.eventTarget.removeEventListener( type, listener, useCapture ); + }; + + Recorder.prototype.resume = function() { + if ( this.state === "paused" ) { + this.state = "recording"; + this.eventTarget.dispatchEvent( new global.Event( 'resume' ) ); + } + }; + + Recorder.prototype.setMonitorGain = function( gain ){ + this.monitorNode.gain.value = gain; + }; + + Recorder.prototype.start = function(){ + if ( this.state === "inactive" && this.stream ) { + var that = this; + this.encoder = new global.Worker( this.config.encoderPath ); + + if (this.config.streamPages){ + this.encoder.addEventListener( "message", function( e ) { + that.streamPage( e.data ); + }); + } + + else { + this.recordedPages = []; + this.totalLength = 0; + this.encoder.addEventListener( "message", function( e ) { + that.storePage( e.data ); + }); + } + + // First buffer can contain old data. Don't encode it. + this.encodeBuffers = function(){ + delete this.encodeBuffers; + }; + + this.state = "recording"; + this.monitorNode.connect( this.audioContext.destination ); + this.scriptProcessorNode.connect( this.audioContext.destination ); + this.eventTarget.dispatchEvent( new global.Event( 'start' ) ); + this.encoder.postMessage( this.config ); + } + }; + + Recorder.prototype.stop = function(){ + if ( this.state !== "inactive" ) { + this.state = "inactive"; + this.monitorNode.disconnect(); + this.scriptProcessorNode.disconnect(); + + if ( !this.config.leaveStreamOpen ) { + this.clearStream(); + } + + this.encoder.postMessage({ command: "done" }); + } + }; + + Recorder.prototype.storePage = function( page ) { + if ( page === null ) { + var outputData = new Uint8Array( this.totalLength ); + var outputIndex = 0; + + for ( var i = 0; i < this.recordedPages.length; i++ ) { + outputData.set( this.recordedPages[i], outputIndex ); + outputIndex += this.recordedPages[i].length; + } + + this.eventTarget.dispatchEvent( new global.CustomEvent( 'dataAvailable', { + detail: outputData + })); + + this.recordedPages = []; + this.eventTarget.dispatchEvent( new global.Event( 'stop' ) ); + } + + else { + this.recordedPages.push( page ); + this.totalLength += page.length; + } + }; + + Recorder.prototype.streamPage = function( page ) { + if ( page === null ) { + this.eventTarget.dispatchEvent( new global.Event( 'stop' ) ); + } + + else { + this.eventTarget.dispatchEvent( new global.CustomEvent( 'dataAvailable', { + detail: page + })); + } + }; + + + // Exports + global.Recorder = Recorder; + + if ( typeof define === 'function' && define.amd ) { + define( [], function() { + return Recorder; + }); + } + + else if ( typeof module == 'object' && module.exports ) { + module.exports = Recorder; + } + +})(root); diff --git a/app/vendor/recorderjs/recorder.min.js b/app/vendor/recorderjs/recorder.min.js new file mode 100755 index 00000000..8f1e5ec3 --- /dev/null +++ b/app/vendor/recorderjs/recorder.min.js @@ -0,0 +1 @@ +"use strict";var root="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||this;!function(e){var t=function(n){var i=this;if(!t.isRecordingSupported())throw new Error("Recording is not supported in this browser");this.state="inactive",this.eventTarget=e.document.createDocumentFragment(),this.audioContext=new e.AudioContext,this.monitorNode=this.audioContext.createGain(),this.config=n=n||{},this.config.command="init",this.config.bufferLength=n.bufferLength||4096,this.config.monitorGain=n.monitorGain||0,this.config.numberOfChannels=n.numberOfChannels||1,this.config.originalSampleRate=this.audioContext.sampleRate,this.config.encoderSampleRate=n.encoderSampleRate||48e3,this.config.encoderPath=n.encoderPath||"encoderWorker.min.js",this.config.streamPages=n.streamPages||!1,this.config.leaveStreamOpen=n.leaveStreamOpen||!1,this.config.maxBuffersPerPage=n.maxBuffersPerPage||40,this.config.encoderApplication=n.encoderApplication||2049,this.config.encoderFrameSize=n.encoderFrameSize||20,this.config.resampleQuality=n.resampleQuality||3,this.config.streamOptions=n.streamOptions||{optional:[],mandatory:{googEchoCancellation:!1,googAutoGainControl:!1,googNoiseSuppression:!1,googHighpassFilter:!1}},this.setMonitorGain(this.config.monitorGain),this.scriptProcessorNode=this.audioContext.createScriptProcessor(this.config.bufferLength,this.config.numberOfChannels,this.config.numberOfChannels),this.scriptProcessorNode.onaudioprocess=function(e){i.encodeBuffers(e.inputBuffer)}};t.isRecordingSupported=function(){return e.AudioContext&&e.navigator&&(e.navigator.getUserMedia||e.navigator.mediaDevices&&e.navigator.mediaDevices.getUserMedia)},t.prototype.addEventListener=function(e,t,n){this.eventTarget.addEventListener(e,t,n)},t.prototype.clearStream=function(){this.stream&&(this.stream.getTracks?this.stream.getTracks().forEach(function(e){e.stop()}):this.stream.stop(),delete this.stream)},t.prototype.encodeBuffers=function(e){if("recording"===this.state){for(var t=[],n=0;n Date: Thu, 10 Aug 2017 00:20:05 +0200 Subject: [PATCH 37/49] Added channel profile to mobile --- app/js/lib/{schema.tl.txt => schema.tl} | 0 app/js/locales/en-us.json | 2 + app/less/mobile.less | 8 ++ app/partials/mobile/channel_modal.html | 152 ++++++++++++++++++++++++ app/partials/mobile/chat_modal.html | 7 +- app/partials/mobile/im.html | 2 +- 6 files changed, 168 insertions(+), 3 deletions(-) rename app/js/lib/{schema.tl.txt => schema.tl} (100%) create mode 100644 app/partials/mobile/channel_modal.html diff --git a/app/js/lib/schema.tl.txt b/app/js/lib/schema.tl similarity index 100% rename from app/js/lib/schema.tl.txt rename to app/js/lib/schema.tl diff --git a/app/js/locales/en-us.json b/app/js/locales/en-us.json index bbb2ea28..847b82ff 100644 --- a/app/js/locales/en-us.json +++ b/app/js/locales/en-us.json @@ -23,6 +23,7 @@ "group_modal_menu_delete_group": "Delete and exit", "group_modal_menu_clear_history": "Clear history", "group_modal_delete_group": "Delete group", + "group_modal_join": "Join group", "group_modal_settings": "Settings", "group_modal_notifications": "Notifications", "group_modal_menu_share_link": "Invite to group via link", @@ -40,6 +41,7 @@ "channel_modal_description": "Description", "channel_modal_share_link": "Share link", "channel_modal_share_loading": "Loading{dots}", + "channel_modal_menu_edit": "Edit channel", "channel_modal_join": "Join channel", "channel_modal_add_member": "Invite members", "channel_modal_leave_channel": "Leave channel", diff --git a/app/less/mobile.less b/app/less/mobile.less index 53d3b5a5..4586fdd8 100644 --- a/app/less/mobile.less +++ b/app/less/mobile.less @@ -574,6 +574,9 @@ html { .audio_player_button { margin-right: 8px; } +.audio_player_volume_slider .tg_slider_wrap { + display: none; +} .im_message_body_media { .im_message_document, @@ -1329,6 +1332,11 @@ a.im_message_fwd_author { &_modal_section_value { font-size: 15px; padding: 0 12px; + + overflow: hidden; + text-overflow: ellipsis; + display: inline-block; + width: 100%; } &_modal_section_body { diff --git a/app/partials/mobile/channel_modal.html b/app/partials/mobile/channel_modal.html new file mode 100644 index 00000000..e1c397fc --- /dev/null +++ b/app/partials/mobile/channel_modal.html @@ -0,0 +1,152 @@ +
    + +
    + +
    + + + +
    diff --git a/app/partials/mobile/chat_modal.html b/app/partials/mobile/chat_modal.html index e3e63aad..8624bd16 100644 --- a/app/partials/mobile/chat_modal.html +++ b/app/partials/mobile/chat_modal.html @@ -20,6 +20,9 @@
  • +
  • + +
  • @@ -71,12 +74,12 @@
    - +
    - +
    diff --git a/app/partials/mobile/im.html b/app/partials/mobile/im.html index 3d7e3732..e84c656e 100644 --- a/app/partials/mobile/im.html +++ b/app/partials/mobile/im.html @@ -139,7 +139,7 @@
    - +
    From fa47720d22cddb772baf9a21aa5ecb882a7eb9a4 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Thu, 10 Aug 2017 23:05:04 +0200 Subject: [PATCH 38/49] Working on mobile Broken desktop --- app/js/controllers.js | 5 +- app/js/directives.js | 81 ++++++++++++------ app/js/locales/en-us.json | 3 +- app/less/mobile.less | 125 +++++++++++++++++----------- app/partials/desktop/im.html | 50 +---------- app/partials/desktop/send_form.html | 50 +++++++++++ app/partials/mobile/im.html | 57 +------------ app/partials/mobile/send_form.html | 55 ++++++++++++ app/vendor/recorderjs/recorder.js | 3 + 9 files changed, 245 insertions(+), 184 deletions(-) create mode 100644 app/partials/desktop/send_form.html create mode 100644 app/partials/mobile/send_form.html diff --git a/app/js/controllers.js b/app/js/controllers.js index ff175065..342d4ca6 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -2321,6 +2321,8 @@ angular.module('myApp.controllers', ['myApp.i18n']) send: submitMessage, replyClear: replyClear, fwdsClear: fwdsClear, + toggleSlash: toggleSlash, + replyKeyboardToggle: replyKeyboardToggle, type: 'new' } $scope.mentions = {} @@ -2347,9 +2349,6 @@ angular.module('myApp.controllers', ['myApp.i18n']) $scope.$on('last_message_edit', setEditLastMessage) - $scope.replyKeyboardToggle = replyKeyboardToggle - $scope.toggleSlash = toggleSlash - $rootScope.$watch('idle.isIDLE', function (newVal) { if ($rootScope.idle.initial) { return diff --git a/app/js/directives.js b/app/js/directives.js index c5c4a11e..84f6bd9b 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1548,8 +1548,11 @@ angular.module('myApp.directives', ['myApp.filters']) }) .directive('mySendForm', function (_, $q, $timeout, $interval, $window, $compile, $modalStack, $http, $interpolate, Storage, AppStickersManager, AppDocsManager, ErrorService, AppInlineBotsManager, FileManager, shouldFocusOnInteraction) { + return { link: link, + templateUrl: templateUrl('send_form'), + replace: true, scope: { draftMessage: '=', mentions: '=', @@ -1574,7 +1577,6 @@ angular.module('myApp.directives', ['myApp.filters']) var cachedStickerImages = {} var voiceRecorder = null - var voiceRecordSuccess = false var voiceRecordSupported = Recorder.isRecordingSupported() var voiceRecordDurationInterval = null var voiceRecorderPromise = null @@ -1698,7 +1700,7 @@ angular.module('myApp.directives', ['myApp.filters']) $(voiceRecordBtn).on('contextmenu', cancelEvent) - $(voiceRecordBtn).on('touchstart', function(e) { + $(voiceRecordBtn).on('touchstart', function(event) { if ($scope.voiceRecorder.processing) { return } @@ -1716,8 +1718,6 @@ angular.module('myApp.directives', ['myApp.filters']) voiceRecorder.addEventListener('start', function(e) { var startTime = tsNow(true) - voiceRecordSuccess = false - voiceRecordDurationInterval = $interval(function() { $scope.voiceRecorder.duration = tsNow(true) - startTime }, 1000) @@ -1735,40 +1735,67 @@ angular.module('myApp.directives', ['myApp.filters']) voiceRecorder.initStream() - $($window).one('touchend', function() { - var deferred = $q.defer() - voiceRecorder.addEventListener('dataAvailable', function(e) { - var blob = blobConstruct([e.detail], 'audio/ogg') - deferred.resolve(blob) - }) - voiceRecorderPromise = deferred.promise - voiceRecorder.stop() + var curHover = false + var curBoundaries = {} - $interval.cancel(voiceRecordDurationInterval) + var updateVoiceHoverBoundaries = function () { + var offset = element.offset() + curBoundaries = { + top: offset.top, + left: offset.left, + width: element.outerWidth(), + height: element.outerHeight(), + } + } - $scope.$apply(function() { - $scope.voiceRecorder.recording = false - }) - }) - }) + var updateVoiceHoveredClass = function (event, returnHover) { + var originalEvent = event.originalEvent || event + var touch = originalEvent.changedTouches && originalEvent.changedTouches[0] + var isHover = touch && + touch.pageX >= curBoundaries.left && + touch.pageX <= curBoundaries.left + curBoundaries.width && + touch.pageY >= curBoundaries.top && + touch.pageY <= curBoundaries.top + curBoundaries.height - $(voiceRecordBtn).on('touchend', function(e) { - voiceRecordSuccess = true - $timeout(function () { - if (voiceRecorderPromise) { - $scope.voiceRecorder.processing = true + if (curHover != isHover) { + element.toggleClass('im_send_form_hover', isHover) + curHover = isHover + } + return returnHover && isHover + } - voiceRecorderPromise.then(function(blob) { + updateVoiceHoverBoundaries() + updateVoiceHoveredClass(event) + + $($window).on('touchmove', updateVoiceHoveredClass) + + $($window).one('touchend', function(event) { + $($window).off('touchmove', updateVoiceHoveredClass) + + var isHover = updateVoiceHoveredClass(event, true) + + if ($scope.voiceRecorder.duration > 0 && isHover) { + $scope.voiceRecorder.processing = true + voiceRecorder.addEventListener('dataAvailable', function(e) { + var blob = blobConstruct([e.detail], 'audio/ogg') console.warn(dT(), 'got audio', blob) + $scope.draftMessage.files = [blob] $scope.draftMessage.isMedia = true $scope.voiceRecorder.processing = false - - voiceRecorderPromise = null }) } - }, 100) + voiceRecorder.stop() + console.warn(dT(), 'stop audio') + + $interval.cancel(voiceRecordDurationInterval) + + $scope.$apply(function() { + $scope.voiceRecorder.recording = false + $scope.voiceRecorder.duration = 0 + }) + }) }) var sendOnEnter = true diff --git a/app/js/locales/en-us.json b/app/js/locales/en-us.json index 847b82ff..db8760dc 100644 --- a/app/js/locales/en-us.json +++ b/app/js/locales/en-us.json @@ -530,7 +530,8 @@ "im_submit_message": "Send", "im_submit_edit_message": "Save", "im_edit_message_title": "Edit message", - "im_voice_recorder_label": "Swipe left to abort", + "im_voice_recording_label": "Release outside this field to cancel", + "im_voice_processing_label": "Processing{dots}", "login_sign_in": "Sign in", "login_enter_number_description": "Please choose your country and enter your full phone number.", "login_incorrect_number": "Incorrect phone number", diff --git a/app/less/mobile.less b/app/less/mobile.less index 4586fdd8..7f8494ee 100644 --- a/app/less/mobile.less +++ b/app/less/mobile.less @@ -577,6 +577,13 @@ html { .audio_player_volume_slider .tg_slider_wrap { display: none; } +.audio_player_seek_slider { + width: 100%; +} + +.audio_player_seek_slider .tg_slider_track { + background: rgba(200, 200, 200, 0.6); +} .im_message_body_media { .im_message_document, @@ -1426,7 +1433,7 @@ a.im_message_fwd_author { .icon-paperclip, .icon-mic { display: inline-block; - width: 19px; + width: 18px; height: 23px; vertical-align: text-top; opacity: 0.8; @@ -1438,19 +1445,22 @@ a.im_message_fwd_author { .icon-mic { background-position: -12px -285px; } +.im_voice_recording .icon-mic { + background-position: -12px -705px; +} .im_attach { cursor: pointer; - display: none; + display: block; overflow: hidden; position: absolute; - right: 34px; + left: 0; top: 0; margin: 0; width: 50px; height: 32px; padding: 3px 13px 4px 16px; - right: 0; + right: auto; &:active { .icon-paperclip { @@ -1461,47 +1471,51 @@ a.im_message_fwd_author { } .im_record { + display: none; right: 0; + top: -9px; + width: 50px; + height: 50px; + position: absolute; user-select: none; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; + padding: 13px 16px 13px 16px; - .im_record_supported .im_send_form_empty & { + border-radius: 50px; + overflow: hidden; + background: #fff; + transition: background-color linear 0.2s; + + .im_send_form_empty .im_record_supported & { display: block; } } +.im_send_form_hover .im_voice_recording .im_record { + background: #bfd9ed; +} -.im_send_form_empty { - .im_submit { - display: none; - } - - .im_attach { - display: block; - } +.im_send_form_empty .im_submit { + opacity: 0.4; +} +.im_send_form_empty .im_record_supported .im_submit { + display: none; } -.im_voice_recording, .im_processing_recording { - background-color: rgb(23, 23, 23); - color: white; - .im_voice_recorder_wrap { - display: block; - } +.im_voice_recording, +.im_processing_recording { + color: #AAA; - .im_send_field_wrap { - display: none; + .im_voice_recorder_wrap { + display: block; } - + .im_send_field_wrap, + .im_submit, .im_attach { display: none; } - - .composer_emoji_insert_btn { - display: none; - } - } .im_processing_recording { @@ -1527,17 +1541,12 @@ a.im_message_fwd_author { } .composer_emoji_insert_btn { - position: absolute; - left: 0; - top: 0; - margin: 0; - padding: 3px 13px 4px 13px; - width: 48px; - height: 32px; + top: 3px; + right: 5px; - &.on, + &.composer_emoji_insert_btn_on, &:active, - .is_1x &.on, + .is_1x &.composer_emoji_insert_btn_on, .is_1x &:active { .icon-emoji { background-position: -10px -803px; @@ -1555,34 +1564,46 @@ a.im_message_fwd_author { } .im_voice_recorder_wrap { - margin-left: 0px; - padding-left: 10px; - height: 38px; + height: 32px; display: none; - line-height: 38px; - color: white; + line-height: 32px; + right: 50px; + left: 0; + z-index: 100; + padding: 0 0 0 20px; } .im_recorder_indicator, .im_recorder_time { float: left; vertical-align: middle; + color: #333; } .im_recorder_indicator i { - background-color: #F00; + background-color: #ff1010; height: 10px; width: 10px; border-radius: 50%; margin-right: 5px; - vertical-align: middle; + vertical-align: baseline; display: inline-block; + animation: blinker 0.5s cubic-bezier(.5, 0, 1, 1) infinite alternate; +} + +@keyframes blinker { + from { opacity: 1; } + to { opacity: 0; } } .im_recorder_label { overflow: auto; - font-size: 17px; + font-size: 12px; text-align: center; - margin-right: 50px; + vertical-align: middle; + padding-right: 48px; + color: #3a6d99; + + transition: color linear 0.2s; i, span { vertical-align: middle; @@ -1591,6 +1612,10 @@ a.im_message_fwd_author { i { margin-right: 5px; } + + .im_send_form_hover & { + color: #CCC; + } } .composer_rich_textarea { @@ -1620,8 +1645,8 @@ a.im_message_fwd_author { } .composer_emoji_tooltip { - margin-left: 6px; - margin-top: -176px; + margin-left: -246px; + margin-top: -181px; z-index: 10000; } .composer_emoji_tooltip_tab { @@ -1940,6 +1965,8 @@ a.media_modal_date:hover { } .composer_rich_textarea, .composer_textarea { + padding-right: 28px; + .im_send_field_wrap_2ndbtn & { padding-right: 35px; } @@ -1962,11 +1989,11 @@ a.media_modal_date:hover { position: relative; } .composer_command_btn { - right: 10px; + right: 35px; top: 6px; } .composer_keyboard_btn { - right: 10px; + right: 35px; top: 6px; } .im_send_keyboard_wrap { diff --git a/app/partials/desktop/im.html b/app/partials/desktop/im.html index 6a87c3c7..1c403323 100644 --- a/app/partials/desktop/im.html +++ b/app/partials/desktop/im.html @@ -211,56 +211,8 @@ - +
    -
    - -
    - - -
    - -
    - -
    -
    - -
    - -
    -
    -
    - - - -
    - -
    - -
    - - -
    - - -
    - -
    - - -
    - -
    -
    - -
    -
    -
    - -
    diff --git a/app/partials/desktop/send_form.html b/app/partials/desktop/send_form.html new file mode 100644 index 00000000..0f0b244d --- /dev/null +++ b/app/partials/desktop/send_form.html @@ -0,0 +1,50 @@ +
    + +
    + +
    + + +
    + +
    + +
    +
    + +
    + +
    +
    +
    + + + +
    + +
    + +
    + + +
    + + +
    + +
    + + +
    + +
    +
    + +
    +
    +
    + +
    \ No newline at end of file diff --git a/app/partials/mobile/im.html b/app/partials/mobile/im.html index e84c656e..917ead92 100644 --- a/app/partials/mobile/im.html +++ b/app/partials/mobile/im.html @@ -131,65 +131,12 @@
    -
    +
    -
    - -
    - - -
    - -
    - -
    -
    - -
    -
    - - - -
    -
    -
    - -
    - -
    - -
    -
    -
    -
    - - -
    -
    - -
    - - -
    - -
    - -
    - - - - -
    - - -
    -
    -
    - -
    +
    diff --git a/app/partials/mobile/send_form.html b/app/partials/mobile/send_form.html new file mode 100644 index 00000000..09ce8f27 --- /dev/null +++ b/app/partials/mobile/send_form.html @@ -0,0 +1,55 @@ +
    + +
    + + +
    + +
    + +
    +
    + +
    + +
    +
    +
    +
    + + + +
    +
    + +
    + + + + +
    +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + +
    + + +
    +
    +
    + +
    \ No newline at end of file diff --git a/app/vendor/recorderjs/recorder.js b/app/vendor/recorderjs/recorder.js index 787ef9ca..188540c4 100755 --- a/app/vendor/recorderjs/recorder.js +++ b/app/vendor/recorderjs/recorder.js @@ -185,6 +185,9 @@ var root = (typeof self === 'object' && self.self === self && self) || (typeof g this.clearStream(); } + this.audioContext.close(); + this.audioContext = null; + this.encoder.postMessage({ command: "done" }); } }; From 1071104ac114619d64a0dca065bb559544c8cc72 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 11 Aug 2017 20:09:37 +0200 Subject: [PATCH 39/49] Voice record in desktop version --- app/img/icons/IconsetW.png | Bin 13473 -> 13468 bytes app/img/icons/IconsetW_2x.png | Bin 28956 -> 29023 bytes app/js/directives.js | 63 +++++++++++++------- app/js/locales/en-us.json | 2 +- app/js/message_composer.js | 3 +- app/less/app.less | 70 ++++++++++++++++++++++ app/less/desktop.less | 89 ++++++++++++++++++++++++++++ app/less/mobile.less | 77 ++++++------------------ app/partials/desktop/send_form.html | 16 ++++- app/partials/mobile/send_form.html | 14 ++--- 10 files changed, 242 insertions(+), 92 deletions(-) diff --git a/app/img/icons/IconsetW.png b/app/img/icons/IconsetW.png index dfbe13626a6706d628e4214d644aa296d02d3f4d..9e8d7ede1629982f9ca81a10586a950169caa33b 100644 GIT binary patch literal 13468 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 literal 13473 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 diff --git a/app/img/icons/IconsetW_2x.png b/app/img/icons/IconsetW_2x.png index 19e6472b681d9d0ad8375fe4d004cb2a6f0f27d0..d8519014ab17b2aac1e04fa5fbd0d54a63d80232 100644 GIT binary patch literal 29023 zcma&NbyQpJwl9pk6?gYyEdh$VThQXgU5cbwaVzfb9;~>#I|ME6?!}#tckg@0+2`JI z$9Mk9O4eEnYud;n+ZTcIYP@yh^o6Son)eB;LaspOjeww z8X5W;p@pe@z!j&>Gr6Eii$J9cr=lveu6egFb#3`Mw&1pVZ_#FDZz{ zx_PMp9mINsFK`ZO(wm!_s>V(pZ_x|r3jg)`n?64N!$$MHBeS(xtd9~$GW7<(W3xhl zjjWU_PY|I)+8+A{bA9$7;yi|YXC{2wIO=^)Qcc-ljpbA9&OTE867}z`6xaolE31t{pbA3hT zEx+k-)6_->2pGj~DGnCEBt2ELU97kc3$z+z6*c18V_wjtalZBvnGO}j zholMTEdmYrVM=#0ZNEb7K=j=i5s!CJmErcY!WvvLL1`i%y$E&RO#E$M;@zhF^zj<% zc=+q~ZlHU|M%L%5y-l>g=1&}w_(Au>!quN2mhPKWa-IiV1V(|t6-t?<6Lv=B{xn)` z-qyM|h8+k&6|brUL=cNrv-ityd+0s1M9AKN_zA>}@#< z7T~BH=vSWIPi;E=yR$*?MS+zYtgQM+t(z=3o89$rYt46gqV6X}I3Mq?j!x0Yxb-mL zM72JozR5mvhO9qJ2c3<*`gZ*9RweCuzOR85dI3bJN{~>_&R_p8q0IrQEzjQ!EiJ}| zyhJVbY)jpC7Uf=0jd-9H%2}~q&~Ziq>Dz>Xutl_Iyhg> zFPOCgIo<4iuYL&IW;Rw;*=6h^ zFTcf^u#8q240eKHBu$&e>uXVtd-dI4BfNFZ*wO1MVFVk|=hKV*>0e=P_`4!FLKe%7 zb)ix9%feQ1N3GdKBXn&=CpM)s?*pkRe75QdYX8#B|nkgIdJ?D$Lx6nm!m^ z)XF%-2B*8Zn1fz+-Mb9#rAaF9*NKy^6xBCP;;`a-;Iff}mKw^-Z9Ct0(t6mkvP3)X z*O!)%kQWT{yGLkPgmQ^Lp$Nxou1iQy*V2nDE_S3W*SsW#{+@|54R&^R(mC*I*=;b5 zt-2bbuK4aUX^u`IkI$f`ViKUheCWf3hCHg|of&V7$as?P;Fmy+Vp7LewYLvCRX0&< ze*2ube^gAtz!)k&-@T2F%7!)JrQ*@Zq6gJ^dkfCYvU8Caj41HIxayEZf9>ZvWJUu+ z8n)MnM+f}y4q}HPtEK|qE4gG7AXM=49F6VqTLe%3R3USXba7HC$+<(~-P8J;(69Lf zrPoioj{FFE{sTyxM0!7`Hj5RJjG=p$O+yvNfm8IY0^yHz$$3H;(SP&oZg^%Rqk~L3 zaoK;eN)E6>ynVxK^%~x=?K=q@8~N|xzDM=vtsdD~Ul;8juDy0Oyev@~7C9IIO+F$G zu3=?{dPtI=8xo`YYzzuYX1tN#@XTDE+@XMMk6X&Z2pgH@B6EJArK(7J7GzOo$L??W zgo7S8o1WcsFUah~m-B93=Iv788hLxWd$katBi#_RL(Fx5rZwDSdz0E~pStJ4x+5YL zv5|xpx8NT4YAB&+h;v=I=sb z2KjW3zz_g%;mKjS@X#mqf-WJ@p{%tL+ zk1)EJ_h(uK)YEb`D>)JD z@;Z9M9{8gwA$25O7#I55l8^w;rw=7}fDumwOE|V-039Y zgbDaugmhtmOj=QD3z1^}z&y;KQI4w+l+<`(fR~c!9wry8bpjmWf#q@*l+vHn&+oTm zWAw+T+E|elqg?s~j8KFTV2FZoF&@O>=N+gOThrx+b}+fnufC{XfK#7y?;El8-o{}) zUx5NV>PTYo*V*g-f;q!I?~moMihhPs+D1$g>GBE`C+2iq_J0tsHk~6j6bR+XS2aER zW%CNTu2$rosWE5CG{N%nfptam{&;IVQBBo>k6aGzF*H`h)LSk}&ij5J;&(dcof$a7 z_hTyx>Nz1?ycR3n<+N+w9gd{^9RKw+z|RIqR6#i|*;e05ymFI{zd~Wld+d!z20amX z$0_&<-p=eF#K&t2-oF)&Hp%GY`pt>pE~cW~+f@iPl+TM&n8hB9P5{AHmauwQEJP5J z0RH{lB=QP5TWktC%o4`6(K}Mv-NDq@KXPap4P2jOG4=0Fic1mp0b3F7_T;)6(Z;!7 zg~-)Dt;>if>{qUj(P6W^XB&yq2Yk&lj`f3UaAZYGf9*L}Yx@g5G5A1cPf-M7T<5v= zb)s3zo;Ig0^ z4-(C;$M4s=%T%(bB1T?b-etvRbi9?ieueUS0)9ZA?obR0SdjMa%UVjki}OmtME@<% z>pmuWPHjv)v}1N@G>Xvfe244$j85e3x{OCNh1(=WnAuOk&}5hpCwI9t};gU0;0XO7;iwC!&|DJxsgcJr&L5ton z`fhJeqjLuZmv{xL&Hxm_*>i}{?MVCGskO}-CSC@>i>-OBPX}{NLgnZQ>la7FegS~B zBkO(Ll}|>+q%Kn9-6y-MHOL*PyaE?fg%fU(*&f8_ns+kF-lEzkOKAD9OLjvsV&jEz z6^B0gSdMTAf9_hU7vX>jKJ&R)&bkcgxSJPsj!{*5g(Sp8-P9Y=SIK9jzwe(p*PJG` z&b!ns8@N=k+pRU}`)V0`Ur5Lh&vZ;aMN^oGvj=g`SL?>-Tm-_%iA0jj0Ing*t$LKWP&E`D zjL(>9Ql4{RV2ExCa0&;k%IUn57<|C@*xan)@GkEu>Ks2jnf3o3N--q;x6{g9EKst9E62KHyZ%7INh?dF%-0{Qnb$Dw5QF;k)D{aOg_(-ye~v!!DcwG%4Bq$jH?jh?;IX`(nc?7 z@3=Cby19=Txv^Mj1}Ma;7~%3^^e0xXh)zA9z5MzTe(^4)^aI}@Vm(+`ezrZRLXv4E zVMxCw2DZ-u0m=! z{(;5+j*>n9r6>OZ(b8nv?H@fBWNi-{H8nL4sw1H>sdE-&dj-%nH^D{_(ieD@jBK|J zKSX2L8NfJR(>=ijH=+ZB|BJzbp@~uMJKaQNh?n)?C{Ho1m~(?A&vOml+CL9Q0Bqci z-sxOCA7Sl%BP(|*#xjP785Lrxp*X^w%`acx;@$_lCVMwd>N57wj{fX1P&QT(;@3^E zJC}K_uG#a1o_>(v%iS{Oe<{@+$xjzZWm^bx!oUEi+G?BGZ2hjgVdj&Ier!c7H!*b2K0 zKYoiP@2`)Jj;@QrtHNJFVBSmjS7f{s>rQAo)LHbR`nSjlFP>w`W|Bmf_|Ko@91ScYIZ+`ufqiZC)p?zSfhRV;KQnB*f3nN1?+0s+y1>4gB&T1I zrI#hf`@;&tEt&h9&80KDVV`%j(K(q4E=UD}oIYuY3du8kZ0M;unM8U1=;xX#elSW9 zLCUn@UeQSS@fJp40{;l!+~Bz0F8xm!6JsRgyt-QtnF=ns*K)VhAz<+Yrq*y}rltaK zR;mnde{o#`Nfrh^Y`%68`{ytMe|dktR*C^j`=F@RDVb+rvpU|ed9qkty!Eh8Hh*>KF*kEk-O&F{M+7osDNpXB=u&LSiCo zjs8#RSdPq6bUVY~rDW;#3pNzE<;VSEwUwFNPr89=1h}iD%iLrty=XX=nS(ceVi}{315`bkk7gReNoBU?k5FMQt>8X|sYUw|?FhM+f z#F<9HFu2DP+VdV0CGxUD5QVd!HJKkAGrHqB;{$ZYm1 zfH{1=ybcVy5%YvGF#ekrHX+}76gzTN{j82el*_4yY6sBja8n=x#h%zA#prhT&6;Vg zm+{lbxoEJV8bb>IHVo$&p9}So0V-Hr!!Tflk$4aEbEAu?r9cpZ)$7WzkhPbSu8pc+ z8-6-nE?y=6hg!J?1v(PW!8x3G8;KJ|_?i`t3yw9BKI{eQc>09}UtV&T)g}9Ybq%!# zX{nEUX=nO!^3P3dRuk@n5Y@l9Kf=g=RI&fF$Q@Buk5WAPQ2cCZY0o!KiaE5}2EeT* zCP;RTQtqPQn8JG7L~K3x5mb883-!wqUt#G8x{cb_PQ%p-*;Z9oK`v_=j-sNxKT>km z_LV7cbh*hw0qF;WA-?p0N+}#B!YSw%;`fSHi0f1h726>wyFuUl8;bE z^4JzcKcZ90FVWdALsy&yDCGU9pFjs4zj#9%K02zi530K<8$5S*&XJSl)Wk=`1oUOl zNOrS0jN>{lYK#TRD6^y|Vx1K-&rLZnyb7?>jrVKqd^N4mK$(hRu_1znE+&%O3Oyd0 z!7JJ)p^lJ}MMk6(DAYt((q-#v6Y<*;t;-JunFLe;M6}8&`uzcAh^;z)PtC{S$L|Ic7@<^&+d>mK|9r>$Uv{ste>lm;ofe;HAJ<${`K@jgPwLZa^ zTeW@32tqoh*b#52Ry%0 z*Wd9*&VNjBunusY#c@*Zw2X|C9gTH8AC%N7=~8&-kK2kD7eXo};ais+M22BN0am9z zCd&3n=zDBON?~;jiD#N;HBE9iJNZlX4%fTYjv~MyqdmkmLtpTCi=_Px&23zj?$V-G zISVhUBxAi6Ho&9j#0#yoEYFLKC zlt&Qd;pJ)umlGLnkO3lbeXxP^!pWyE`1^tLfo)nktZH%=8)7U!I(Ut}qslba;s*kGxvpk5e?r9$apF>U8vZnzt@>Bmh-I)n=E_e=g>2v_|j z!h@9w_GC=nh?Kp+J)z!*jg=!_JB55J3;!a(ZkgL>9-`gMLV^nvbQh%xBivk~eWyfDp{1omL+bHiTE!ocM zbgdc7(W*hh*Nw)tlwf@>?R7?C_i|;0dv~&yk9(5`#n{5zvpvovn8W%aH5Axr7!u~Q z=byaC^3iQ+;CLLFj8U>L;M^mRf>E$1&|pv|w}7=yz%1fG#^v2$0OGtC^xi-#Ra{>t z$!~GY0$?6UGJ687qOHn>@HMSHXo2fi5I@`~Ln_qg#%J zP3-ybHL(DU#nFrjuRAGm8C~Hns*RIR<;4LKLJ_ty`6_b(hcTH3lBN`H&>-(ce>af~@LLaHUdzzF_+Em$1-D<@oDQkyuIu)tMVvW1T>L z57DT>Eb$WM3R3Oo`=^U_CN1=!RbnLS<1`P+p}Y8ujOdi9bQi4}n&-;{5Ix!k z?v|oU>kvjW23e(t2?R123-YSSX-D52N`&`!1Vv7UB>+k~?9gZ|ah5IBTtAiUexo|Q z@}=!FxVJL>e-O)m*)RX)&Y){kkMcSl8c{@WDqi)=R19-Ob@vks-!b8{>fjFdQ!3~q zM0#a9X7r(MJL#ZE3dwx@OX-)0VV^+ANZ_s?=KhlvcQw`#A{Z?~E4S~Dq8XVPBz5|Y zFC+X{eUKBGP8!IJmJG4sKUl6hj%=YSjicjltgSEV-_;O~`l}P1eo)7{;Rvt!WoJuz zVG1i7p`NCWNsQJq_!0#JDGm<~2!l{G&2k>X9|(uW=S&mj>XshBh8hS*7_}=L5g`{Q z9Ttqmc{lTpWJh!hF$xBuz5^cMZ$ADg+GaTzVywJ9&9mEkYUS0F9SGNGv(i*AmyCaj z+1>&-_G07%QRHxntkzHx&L;9VZiRDIRv4w7#K~YpWyGtya|X;x3&GP@m-!z~aGy_! zpWBFUlystx!@TaMLQA1__aPj^aWHZm)k1oHIRm&0E&^7VB=|ciIXr(dzE0!I^%LwG zVRCr={rcA}+1)X7R-M$x4?)Fm`Itihfr|x4>~kEmz*@7ConG$MHM}JR?~Bf;WnI!o z@mmZwmPJi+qt_Z=HS$0-cC$t+=4+}=w}0$2v;;}c!7Ng9{XHJ|&9;!Uh5YjF7ZkS3 z|AFiF@3e2z$C~v&><+vP`Z48`wekd>H=oD38BOUa%yP6&bg!?t8p^R17Xo+edYaF* z2rY*R+$X%g2J+`Ap0!>#LnK7X1}4Nn-$P+sBAYN+tN9X~*Q@`fWBz6DH8R1VVhzZs zjSLsbRP~8Drgqt&2P`BAPpI?MXt1|ts1Zxo+ zqseS$Jx%!jJHONv=Va<^imAePnOJI~#2}G55ltd+E!tscICfVA>rc8%1~8-qt*$kt zM*w4d()p}4W5FUDhPj_eY_~()@NmVoDMOs?19P)f)!VN|oL~jq#3u}eI#uHS$nUgY zXZ7#&D2K`i51t`YLhAH!cLm1+uG*|YZEC)R5uOibv4e_6us>+o{us5}2qW^02t|*E zfcBBhYi!}YSyG;qWIlC-gviRws5hTW9OAn(cOYH;lkFyFV{_r!pH+kQe?F}aqB9EC6TC&Y@M*}N3mRYZ&b-q|a#L5*+C@2eQG~Y zxv|O#(xW-eB~I%mJb*3L~jHZ74t3v*X)E%Cy)bnp;S0@5T7 zg@{-#%@5_mx`3>WmLKMo>wb@w!X|7TPOlcB+7>7fBw*pn0&6IVe|L>6AnmEGG zrbDF9FU1h9MOy)}7j!md^rw}69A$xAJOwyTWY!DW(Ne{QgN)$OxrbM_SQ$v&K*-;7 zY28~%5rSZp>q(#2T1}A;d-6@-aePPHgbv?Pkijc=qFiKOXR*5ym-Sq5Ccmq9k~d1l zkjbZMguNWmfB~8qozc?cDZW2=j-1@N6OyBCyvsmzasfBh6gCZPOmKWSK>J5~dL@z3 z+H^p=6VH71R|^tmH~~8K9I;9Q>WKPTpGY@*{;<{VEJ07OnU9j+*rG+Y&F+US=%lUI zdVm#~8n!Z6I8Pmo@fHX4+kyre%L(l> z&+@_V>%p}Rl`RMSaUxv{lxHcM-@4lugD(|LqiPL$A*2$@Gz(m(=%!ZC9~!)RAu||+ zo0VpHdARNnb4UPOiI;pxwb#`M$|3JHgY|FkUPCWDqi195KmLN~^liuk=gh|HKm=r! zP&Jte{{6cHQ8;UJ3n4SW5P1n<)~*km3PT)piIBAM>P;BB9Ecc2y61;Tt`&-kf{|_c z@%6Z3D&O`^kEw~UR}saW89PU%mz2-N67RO1BIvApXZL+g-Xpw9iC7_-I{E2Wh@sNQ zlvN8;ysMOafiH53o}T=YdxOjKl~Tt7yYb3GR+=4$$XY(+zFkU19lRhF6`Uq}RJK3c z+_+aOc>#misml_+Rie2Ew}i{eHt%Llhu^3^#>K{Lp*%J_rR|_sIqcYJ)2j`xV@Qhp zLA0yS^WVYf{LW@v}~|`b^g~WO%073E|(B{jfy9DH?^(l|LPF^Ut9ElTVsXNaS>1Owku7J#+}|TmY@5SSbgnRi7Qo>lai7` zgN?=pqH$EptdNQ;Dz2>h`^Avb=4Y^oAdK{U*T4h6Dv}QyeFDo0@v2I_yLvMKt1)ZI z_rzsPOjqRbp!rLvk(Hfx=1Tq+`BmSrF14{P5Y(AT)=+=MO}8@jd9Ln4srwx8a7z!w zq=gh10nq%vpmt77^z@&eso;c(2Uzz(?WrZ5U%RYMA)VP)39kADR}=Z9e>E@=ntmh^ z4f-A8_~i02J1CWPBogU(lw9X3vuSl|0jQmA-SOdO)C(WX+@YDmUn10pFk5RQaq)q9 zJh60ug!2PQNvIJ(b%{&vKuxoZZwBRR6u1Mchaxmr>#QN@smUk;@<1ub%gZCKIAW4l z0r|^nh%O;Ymg&Y~Vy|U9G77SjHfwa(t~`a8^FjZYOMPgQQ2@FCZ1qNax$2!>;M z3S1EgS>LztVJHkP7ct=+-|`N^W|WnJR|6sQ8~K?@ao!9&uIe?e+ktHG7mP!;#~J`K z(MhGt39vYyKaJJ4_cX{TfqX%yiVcrWS(jgD`pE=?`g5WBVS}Wwb+>E@F<4%%YFXK$ z$bRJGHAo(5pgP#yd~MSHGLqxqm6&q&S@ktg(r_~g4^>Wfz`jzaMf%+o7@ zuHhYEg+LgU?xQH>p%Dto57XZ7Y(_2dWIZkhrQ!ZOg$XM~0LF06tg~!Sw3*%dwxlHd zN*+4W9I7afAO22AKiqDW1%Gs#IC88uIo_f&7V>fpr7q2Y7ydmNO%(zmu8U)}cN(*fs_6!8lmucG6BBq5S?cX$0ch2CuTi3w@k*4KF z-9E^!EtDjQh@){-jHo=#&kTxI2(bw`qcy zs78ij=Ru4==y(FmRze;R7D`fN$WY6s(M-vDzE>Z37=P-}Qat>v=@(g?kZ6twQSx6| zq~b4;51l7NO|i;xt1%*vrtkM&H216D5a?g1WC{6n%Tw^mXnJH zgbkbrrpSWxvy!|8wO1ECZ%(jaG z(;<{PaYA|opH{_k)Z-WCan@DQk4nNX*9O_W%07>3Z@!PsoY{e&o%JIr;&w4sM~u=8Q&CBaS8^zEly zW86ie)trol@XqWWZ_D3k8t973X0)*5iEH%!N```bO~pR8%DO8gb7wD?D>tV9n%(;^ zN&L>3)xS+`=@aBiM4xxQd82r*_&&1MAN?uL_I@NCrC;`R|E1s5X+HXw`TJjz*%Gir z{wu?4N1Z7PE_-nKzWS^e&;~fE5mPJ1(Qv(mm2SI!7orf6FaXBzgXy*jLw+g@PLBK; zcQ=P#K!zboX7}W!!hYM{b((Dgh{g}p{_t#5-9I9}0y@mvdrU~q zp>~3i85oT}*Zr5vnR#>ERAvuW%yqpoOVuizc#bTnIClpW$t7M$kFe8uM7LGHE;qEZ zOXMSa+0RhxhVx_GFvO&4ny|lqQ%jO^P7h`hb|yLcTy$(>%$>qDXEF4V` zwod%0GU@mb&pKl4^P9NhX~i%PWDpR3*f95X^V1&!K6a0%-`|M$%6`^5@tO{7RMZNd ziIKskGI2>p5>pS!nWb{t3cny5y{?Q3)i~hY^^4Uy3{Mmb=~~q?-;OtATQ;nQm;Um^ zvmSrjgo-cH^Yo6c$;P*KTV(Xjdm|tKU-!&10JA0AaY1brN~9&vUrSxzLLYs{r)xPT z2Tj_}Z+^-d+v6Bqv}@`8DM|9l2r%*1!~7x7vu(R_*D8rOqni3Y1o6rzZh{&~ZSdmT5dw;l;`GQy^$7<6x?pqk8=QB7g+hIL&N27zSM(NTH>$<3^P6{Fc))K~1&pZcPdT@IwOYc7 ze)yK--=bmFY3Mnm@A9PQiv94NBI`n|`;g38a)>_#lnAQR1as5}TOXjznD}b*gJtzu z-w$|gN}@!MI?QvuZ^tuP>K*XhnRY{k?#B6Zr#qfjI6jY1Tr7BFHeX^PAxi%*rTzcv zUHlW*IRm-Z@%Jb>tCrxlS2)TuiYU&otZrEl);fL?j+L<$1rLTm&oP>%SY}?${n*F*WL`+0s(^vHBqx6cub~yh+ilwey0+fX(AzPAt1a+7f~qz3J%XvF^*w^) zycGcj5ZUDL^+d1&^^K&q7Pcj$Z5$km|H$4RY{C!}>!YUR>N0jq9DBgD`hCnntc?VP z5HUko6pmo>Fh1g2lN$abn%ryrQ}HH&?|q*WY9C&hrs0O)l(S#DBk~d}*%7Q)45fCt z-TjHBQ(~JG@xkhq6Aj{ug{n9o_7cAIL||JAf!Q~lzLOdqLDZa>U#o*k#4;f&*FwSew zM^0hJ-lBTe(zsrqMwj_D{OcC*+@g+}<0h)o5V}tt!SB(G)AnKO)9ls7RVFb&ZVGU{ zFr*Ntx^}WozB?|4#QZp#Uk^bdPi8;nuvx<1GJ4iJ+qNJ5iy)|%6&JF(PZkT^ACCHx zV<-CwQ8yv2$09j!2RsQy8yB;5&o`8mB<7oxc@HNzarG)>D+umBKIlV|fdT51&mf7q%ZZD`MRE?lR>Ujr-pH#E8&3BWw$JqrlaV<>{@ET82C6YIsnx-D5`s!|B0%2)j2N zNVqu9Tl_?-`!h^G>7niTkB}J#A2muy$JJ7B8f^ZTv!rOlJCJ3G@L$L5B0#^7ZHQnA zBP$@30c+SVBrV|gBV<7kRygXi5DdM-f=2W(S`r`pVZ1iWGS?1iL!hpd!E0fae#W+) z6c9t3CF3H^W7N#Se6Tys={d*WO#&(jiR^?j@YShEudG}^z63p3|Xwlk!{}HoH=#@CQS}oS*Z-? z5sU2Alo>=kUySQblBVkrX7jhRFsGWfF!&tikRwjFs+(6W<)WA^&G-Sxd*KAp3lz9f zw^Kf&F}a&dg$i3)GNNZxng6lsN8czK-@w2#Mhb9kT@VzaifrDctPe>=(7{k$j$elM zR2ARNsT2+TJD%q^-zBm-`H7oD_MVsS|G$SM4~(nk-(G(?BYn=^3$W((l#pTC4s_-| z`U!vKMwUzbDNt5SjXWD6T8)Cp(mO@F#3<*ryWo%w0Bwv1%W9O;0vk!Dkm>hc5`T-B zywif5>fjO*$U^TdvZZX-EWG7#*DSQ9Y%&k$_f z3a6-9{c9gySUoY3{o@19?AEu)A#F>j>-+FmWs)3fMYgLWM1N`K7*pbcu|j&Tz>>@$ zW>vAGZ;s_1BYHolFH6x&h{gcGlKobZzyu-#vCWej_1WVzjHw*+F{ksE)AYH zX;?OUX)mFO?L-e4e`%ny)Tyt6T;zW9&>gvX1MT!va+Fz4dq`>`+|fP}SeT>4pcU&z z6M>i}r4Rw&lu`(%j+#;kqfU}i2&Mip#SyWTZ0rl{9JaZ-h_ZC1Y8VHng;=z1U~zGN z8klL8N$~zj+SE1oMIY-D)MSmzQLDl*@UCQ*3&xS#e7C+JVj^uJksVe>&fdcm6R z3+#Xb%>PdrNsvVAVC!V-ZnOzH%_mVgUi{9a{OKBO5XTWWa+Su0s!Vgg0%0VDPgVLF z*LuUA z9gr)BIti3wl?zq5%$^_;Iw@FdWC``uQ-A$&zcYJl<0*a2K0$hAEaK%(rQGoTG+}j?B)DjW}Rv7+dNT^&kK*P*580Q!bCwunC&JTtwAcI9ylbg_VFrQi{ zMPG>e*TVsP`C#;DKrO`A&AaZKTHanjX~^HtQdYALjEGd^p9Alyz1OhNfHWy$->$m5 zj=z7>ZpXstq%cTEvU7MT6Wc;~KzzXA`n8B!3~Vn93)PC};6*`p0^p_6JDF+3?^1)o5l!L+McOneav#bArcpGS&-16SzOSb#50|>7 z{6dN}R!$03gHKizo)1VQj#uf%R7A->f&|8ZRB2MQwOb!x*(2i}9JSvJ5}0>Wzy>BB zdj&M4Mz2OUBvscAB<&~0b!iC=D&5apn~1jv^uu7Xr?cF^iuR~821jY{o7Ip3 zT=S)2it7o=uwSPKT)>ssZ;lzI9Ifd>J!5syp%RJgBJbA)Nnkq$r6R;CBtEHzY(@QS z9!g*l!u@gZDsH&#Ng<7)rtim|+g9L{U!GTz;&{VO0pb_~^OL?#HzDH-)e0G>(7wFD zEUh!-u%?Fv$zE30r#iNZ0hQk__hAA;&8t=uSYM&~$sV@3p=~dWv+>N3Q+}$SZCFr& z;cD&2M4`3KA9wyd;FHSoj0u4OJJ#%owsy+hH{n?!WS%-LqJq2O*~k?1VaQIb%=fv$ z-}pHxI;}a)O~bPe1!<1*3Rde%@5`sV=lNdDzfEdrvo>j%wS^TL(%xi(C{lc^fEkbcJ{BC9t3rlaa>Nc|=ESZlpWQ@+Q+R4Im`CG{y5Oib zY%knlQt#I)Uw58D)1aIK18qDm8{uv)iM|E;CGPt5NNCrZtP6gF%4XPkw9mE54Xw{6 zzQ;U}+_T+@|EWfw~bg}AO~BGy*VFQeb~oVz?Z^@5Q7l(^H1QzN}G$=z9~UoQT0 zmq>$^GN+wF?z>xk6~_I(YWWc#~-QORh>BB}Fu znt3xm3SudMR(FrC5Z#c>ZV!RI8jf&(2TtiWIWfqr=(f6%oJZPOa#QKVzPN3E@c~$( zpp}qH9^3RDQA5&^%i#X68^5vw@)v2-z3s2J#>qB7ioTXOW8_$Y{ZxddPA^Oe7I_)n zkHMO$HD;d$V_8HM{sJfCj%(4{LkbP+)DmnyR@nY7kGM9DQ^^)d2B;j%7~-pZ&2Mim zFKWvsw36e+El`*|idO~DVH<|No+@C34sg*^17qpiP{D7!c)#Ar!AV6sg4F+(ohZ^9rqK8%ABiC52d#vp@Hd z%j;I^+}mtU#;+2}9W*%gueMPtqMS#Ji={G{((KXX2Wd!tBQD-;MBr^!n?E!eLDZRh zUu~8B7N`rF$xQQ9iEEgt#;5N21($_1&1)`54Rc$u9Y!+m54(qag`SM>MGA2(py+Z` z4+A94=LdUk)s3NXQ+G#YMjVkIB%a-*=372oZ#R7%!R=si$tinnV5Qeaj=+rUui}+(Q}ygVLG;4-`3wOS6}NL@Bphv20Pk(uWcaYG}6QsSI#Zk7Mj74OB?{BhIUCorW4bX za|;Fxjcsgt5L|^bTk{o@bWR)R3kzq+W|G z&+lRajD;Cd41(QXbG!>563vb4u$Vla&BBrXCYlK*X*OezRLk{{t1o9^f?5CWD(Vk6 ztWw-Nd7EiG%`tt{M{taBx{hU%h3RVA$uW`^rGK}}bDB7P!eXqVl!OE5`aFJxBE=j- z#0H6qNViFVE2-c1?-mt;*iB&7!xW@ssR|s}r+TvDghi^UN{3yd45fdvsM~&Z&%c|S zsFqGSJXt^>Y&AB?RaK=25C@cAqJtf1C}Fgo>wsaBcJ3-(PmKRSRebsvl z?d8N?0o*OMy^vvrm$xhjk(VQPV(hgp&3Gkybz2too`bQO?bl`x*^6O`LYXHQ0Gl8^ zH$L;{N+X_v3p*#V>6o6%<#svqr6S~N-$evm0!3K6)!OmK*b&;Zu}UvHMvA6$gg`!& z$gHpzgiQA|Jmb$v^m3x@1wSDj9qo?%q5N0Xamvcl0CbLM!fJc1R%l#9Hf5sSCv!nuADxH5N?E-mh8#P(ANcg7 zZbN)EP^{Z|c2KpF^oZ*{fr|~RlU@vtA>KThs8y7TT`evX^E`trQ0Rz<61*9ed^9`{ zYigH1XPIr0YX@NzM;HP-8pLp|vJ5$&IjQ+mh-sj!M$TUlIRh5qh;`fug}DkNt|dZ1 zd|e7DnE}7X4?;3cJjB#*nC8-5OiIApyF$N+wJ^-T4eqw;T5rwtC`?KC zPg&x*=6?hkEC8*foZV3ciuSJ9dr1W0VKS)6?-MTe-(E*HivS1Oc}{I$__>#vb7u!s z*uCHShi7!{4~7Ec`#h0wQx?#F7hY zBondbFddY*e5b$O7s>aU=Y+0}VG|Trw>TWO6)*NAQk><2vlT~Ovqp)H`b1pBt4ato zkt1aKOamKVI}bJ`dSx9~^AISN$DaHh`nstNCn0k9|5f&tVR3BP+Bm^U@B|4VxVr>t zAV7jPE(z`ghsIq41osf28*Li*-~mE#Z#+PP(*z075d7=RIWu$S&fNRmTR-+wwYBzs zYOS?v)w|xBdDG7X<)!e(-rau2aL6}BqWFA;NyTf2@0xR}Ptq7}?QdZ<#kXfCf~!Y# zwf-LSi2PjTj-@6&!y+2(g2m9)kmdG$(@GJZ(Th4$+#Tj8jd;U1C8{Lq649bUlw&*p z!g=vepYC7YHtq0~1rDf=+H7w%SJ7|S?si@op#>gg&so}_b0Y;9c`&opTRA?FCWXvC znwG)$(FnU{ijaKubo=_vNTR;tj-*bJiYhZE-di#v5<~~rTZHDJM}0`ed{?rY^~E0A z^MXd+)xJp8w;iqJ0T<@ETuCL8$2qN{?<-&M8^f7*M`K?$F|L}dlMJv~RDXojg_9|A zO0^kgN5%%%kLPtAN4`2~c5S=82Xdk0nCXC^_l4Ul38bfh z@Z=55mFrY77p2-1_wO-4oRtsd<%C7FkSHj}%jBsyRiu|`I#&5L-Ph+9+!ci13ki_= zj{Q@KIVy~u4ER9y)4|S^6bf-UFkd{j# z9I-a`w6I>)m#T-xn)^$SmQ`dDXVJblQjVide}Y%T*qz8~`u44v>DB{#&cxgA#<2Wl zJc2u!igLT5wxnNJf51Qt&VQKUU363!!)i>90M@@q&^LOXlJ;QKqdCTH=;5;a8avP9 z4)oL$g z$JQfPZRJ6dz&JqJIDr5kd!4f%-ZVu``ybd5AMaiXJyxjK5}(3-zT(kiSDAvj+G&IH zG+MK*h~2sZjM4KYbC51oo{O?QrY^r)KcBH}BLAbRJ&7(_0}~hJrvUkQ5$4YYo+0zh zbynfK4!$PN%2t5UBpj(}u+`p6=j6gMq{y(mL66;T}QGO;W9bisDXLj^lk&CP-;pWZ>(!zePFl#Cx8GUj|J295#D0KNE zJY1Y3zIUp!kmyLj2M6sJcBp8WQJ%8xHhfm`O+Td8e@xm%G*&REAEN~0A%gZw7areWXlCsd z^+8QSz+CK3yAYSQlOV8XAETkQ5|8m<@F#a=Sk--nb!~q3EpfmSgbNjDUa9<2jLSN} z9f1AxwmG$sUB8)TrkQbPnN<5_$peb}^qm%OI6sLN?%SjRG|K*+RpIX#hJVlz{Zlpn zfe!zVAXvM{1vgh|&bQrjyD@F%h&^01FmlfkM(P> z8)Dm}gKq;(<2WbA3uYk)Bz|}^&Ew$C2UK8qjjDna&;vKDPK8TXg*!B(Q0qx3uicuI zPkI+bI&u+426U*@z#6`iv|xez+@OOjUA#AxB%*_5i=T$xJnqzjNG4gi7+0>K6^92C z;I}if*a*DdeIvD>j3j5Xt`f%tJ;(FvFIy~l%~pM0G&e&A-bl-L-ZjlE(1B=Gu?^MF z(LMztOvkl4^0cTN$iA?tI1yvmMRIIi0alaUb+7O6zH#Ta>Vx5ExrS?flBWJ{Z^Pan z6YL1hupX9c6~D8uWB?3uUp}aTLoM#qT|%ae#VLHCpBI^)_OA+`WNV_Gu}dRMloj6g z4Z>OfF^5m<>INf~@PAM@{P7Tm@r+MC_;JBnmw`kYJDCS(X>D|HB zXikphy~d%%Z~@1_*-6b0nkfIs_u&lgtJ?yFxK1r?ZEZ?HFnpY02kZ2R?bVr;fT4)f zVgueIQRnOK@u0JMCJU^zfGMUAA@s$)3%dIHB%RmC!(EN$y-|lBeAZ&F`mhk1Uf^)q zdbd+~5-HEmYkhI!rkw#7qQnwAkC$=LqHUJwd#85is=4sY11^S5=@W@&`F@v8%G0TIl z*BLZc8|mrJM z=Hqeu$(VmrSs8omHo`lDaAKxh|8D*IWITB7F!;_tjn{Bl7SP;Bv(a|g*|s0cS!ICg z;?5{~?luSjSWRRaut|%GiejyuG_0Jo@5p!BlnKj{TxKj5s+|e?Sy4ZBIlSc3wOlY+ zCTtxiIk+W;w*1j;eM^O>#cDT&S;dn}H>Xmnm>at8iQVF{J!agz?6p*PcUgUR8U5wl zKaOJO5tObKq=14NEHe22sI~1n?>LmAljAMb7rt+m_i+#F1<7hPZu}NpR79lH?`I#? zo%m-Hb(e^(rNdfWC6h^XHlsDKADfav>+zzU_nAs9D}}`{GAz2Np2U7@Zfa_}K5OnW zcAHe7>LAtRE$ychf`ilnW%NFHPkbB>PyqHoyuCr|H*;0-maok#9fGGU#>M4k#h;CQ ziNTqq_uWYTcs4t5&qZ;06DMt>9J(Ib7YD5IivdMWlMd8_eQ}=0SDesX4MnIht1v-& zvkgryo>?6uWElyV4bze32DFjwkkSu9e8(R#RI+o*uW4Q%Cv7}ZWa&B;w%Mk}a#MS5 zVD~!Ds3v!$MteZxHn5WjAKgj!**86zX&A2-vb5YMTU{-lY;#epArbSY{P-E98Ss+L z4NvOn(XKT93B?R)s3|JLX#rRq_>v8KiwQPxg`XB-QF8jx%yf`Pk^3^tVll}gbjr8@ zNTJ5Wi{!FQd+BIiOXRMR|C3Rr7#EY6Lo@45+Av$(P49}N5RwJK3T1+LZe^zkOYhEB z5m1JC}L;2ZBCjIjiPm3GMi z$l`l_m@tI(^7S9iz&##5fAc)B7U;@E45*YN*_{^5vXnc*H`0w$>uraO(#0R=(qWyO z#hrQWNEClc?xbURZXB{`&7jK+H~3l|NcZ{~qQk2HXEUe1Eo;On1_$N;{m1|_ALDk> z`|U6qD$k{TCYbtOGNi>%S{R`mOPOehNDEN-OjqIz@W)py#SLjxC3(7rudNR@k;S9a zc)g9K_rw_m%S7O)?*#O?y{Khb!w}q`_eiWdG_F|Li}2G<~;3a`m{Qdx@>Jky6+JjO?7Tzdcu9RPzHzPi zEm*uZHCwIcTB_b5PzcJvEJ9#>+82-+zhzxKGoAwEn$1$;334{lhYV>|$=e$G2^gBX z6;$3y4eM1OXf3~lWVCU0%_yzlKex*!lQJlw+RHtJ1bv{?qkEVhIlE|N;`)}*x7Gwm z7b0f?Iugx%A2}=00I&Bm>rl@Pq0qd7Nc4Cv+Pv?_amwozIZX>U@P+uCH=%5tB{mVys!`2tvUMS&6HVrF;2dQ$`Nd3PF)h0zKEH zTTvMSbPka|DI85R^yXFX2u5o1G3*;c{Zv|{;!Y%8zX|0ghf?~y?^UzF6?AO2uMcaT z>TMG3yKgg3iQi=S8R;NCuZ3L!L^?5j)>%8VdqU;=AGWN24+{A^YPmOaAQdlYbFBGm zkOUf%5I#5|oYYK*bc0_3y(eOK!%Zd$cAQAKRkAg*&lnSJTZYle^aMSKhb`z$x<^3}x(~@aWt2OIHBge=! z2i%)JsMRUPb4-|4oEF-&>-u1Ac2%14mn`LhbXXXJC^$%^@)CI}TRo!LH5nEqeRj4+ z+U6QOld-P*ZA}!aliU@5ng8o*Dy0_KPFO^QjL zikHChqi>&W9q6h~Q0m@bgcdq=@gn*sU#`E2a$rbP?uvSI&9b?LkkN=4B!PLA-dRkp8#=i@~O${5E2^cT2MAtNbH#+c~G zc4b!CrH@CLn~*~85?_x437qR;8zE~7nuQ)YPDl_;y>Vz6njblm_DIy16zKs~aa_TQ zS21>4I_uOr80M{O{J0Jb#>lo8K3lsJwzd~)w$C~iY=-b?tFS^cYiZ3+)KsY0jCKVY zo*XOj)>d?Cp|>x6*J%1!;e8CU#~JioLX;n6?Wrutz2u1=p>78?^&3MifxOy8YW%rT z|HKuyZ?xt4B#*-8MVEq}lm}{3xK+zlUdYgzRYj^Mw0BNsDnWzYLX}&7<^cjJky`Md zO%iTJ$EIZ~H>?Ou5tZ>CNruFqL4#+TC**T?rAD`I()%gSUl#72EJLfqA-^5zEIat5qWlvp1TA`%91}l9 zmo-Eh6bGHw!lS$MUS0%Ci|Lp}ve>%P4aGnBlVR`gwt@hYJH0c2T^js}@;B2ErZv{T z;WCS{LZ&Rgo~F!DB>4(fHn4S=rJFPu4Ffs`B?sCc{8AiH9cpAHEy^_1=9$bSKQh8W zIHy|$dURh6!&upB>U$(7#foSiqK~=Ulw|7hMpd1&wRLFS&^J1ofoWdEL9U){+lHPH zlu?yCKuiqlDG=&N|9tM_85q6fP~CxvF7K9q+qpV6(hhE%fh2Os4}1W9G-82}50f4} z4y>vBDvj6BjdLzP$o0!?qU6tx^-lkoe971+pE!U)Y=h!Tm9k_?s<2pMzI_rSHesXRK zsNx0@@~m4i z^fk-VLDTEl^l1wtPKv;Tv%7oNVyd!!i!*i}3&^1u_n!aq5M<7l2-FvSO~&Nt&}tZ?$si58fR#zjmUn zVIIDY&r-Q&D|=|u_Q5C0eYJNJjPsiBkd&{Se3nfeLpx!y8^b&|CjqmsxPJAa*l@~; zoq+MrJI$g~k*%SoyJ)dZ*=9?oPj4>S{FI&fy#2m<8S$R!y94%|sP0e{5UhR;r!UN+ zh|*$r<3*JG-w*fA`J?HMjIxV^nPLgO=DU}2kN;+da`mxB^1i%yB#X%}S2tGg=$gwD z^rtpjZ|3N7LdCO8!)OP8csun|AaoATW}}mB4{Jlq5ivSN_?*V&<<3$i9%9SIeDgNWsSI{#tSv{QkWmf!@&_Lk(@GnU=oS>8e zCZ*OkwH)2>4QuB~HMaMlg07_-K0I-=yjf z>-1O7OR!z))d85}<+fIg1ie7Gk0me~lF<0URuEwXcS@qM33`BJfbK)-Bwk1V>SeeE z_xiq5lp+I3Af)jfvoY8mm!{%MwUc~J1<-@2kj>EZvhl!0Is1WMrAfYbZj=R?4nx2t zJqWRa6fIH-8V3wcxU@0Flu!*VYRS9d%23j4eh8vLaKh}W8_Bnob+LbtWS1qIYV+Y8 zkT!N{Yu@1^gBinWZ))Ns4QHusB6`HYSwica^Oud-=^tZjx^QGxaFlBV8(2qMdHGK zLiOT@1fiz73c=MR{qqTa^oU(p>thI>eXv%1E*k~dif$X`$NlPaaI~KQViiM-e#U(D zxp7tJxl$k+au05J+BpYa!RH@yRY7jiZZ@b`b7w|=Eo5xo^@j%QuXYt7j_1)S5F55-hdG+n zAzv@R=7USn%z~hT&gpIWHJk>y#+8NJ^Xjzl0~So34nJ|k$0yE<`tbPoCg9Y%*C4fG zgt0L_D_HI#n~XbX%?bN<3l~;pnFuGjgMgC=wK@tgPp(ICp(N!z2LOt9G1wF6ly4wB zn|BoRK^zG5CeW(Rl^dD+e3$vFb6=8~zB}j}b*SZOBIX2BT3ibELFDylGO=dKB=!@H za2>wS95=cX%=wNr&kJ@+0(gi4^`LE&nf;Tges3dNa;VC7CFB4(gY^a;)V-(Lr&K8^zTtu5V+PvumF|@$t zwTyQ|>q;pe>a~N)GowG$eiq&!wL8k+V=T{VX88HY)5c21Z-0RD9I<6)ct9OW(;{qP?u5N zcDm_ZPI+dq+1gMBzy&ebpY=p7>d5#n|a(plKqlI7pBoQ-|7pn z#4@1T>*fK+J1S)qOp`^Pp6gi3SBms$-R(?$_c2x|y0?*;cE<^725M7mXU_C#y>-N~ zihBG*t`JP#|DhN$ZJExXg8ptUt#SIi5_Vq#*uAPmvAoW;A{&hmzggI9=c)A+&JU{^ zBwc)EH>+Is>to|_+dMPaOk3#e-UxfuwL$uNa+YM&Xg8m0 z_SkUX-LBY0G`v8Y^1~|f$ben<&g1|i_3>DA)z4r4;bAmSfxyb6P1trCFdm-xx+zd? zrZkh>ki1N|G{zzmCNan3iCHb5>$vOrn!-wyi{E2w4JSgwPz=(kdmhCOxxrvG;{rcL znJ867e%1w8gMqkWpMCm|B-0=X7Ny+Mh$Id#i?S~ z%_uZ91z2>QnUrmlMf8&nf)Gb&=i{!>8`Ti#GI*pNN{l~H8^Wm!#$3UeHM)ZMCYF8h zh2fMeVz7{Z^HCRHxzkx~7K>Ot3mQI5I z>fo}D-{DUBp2mOH)|${qYoBhf18qv|DkF z5PARarOCgysQ*r3@^|p{??^0e*-4h*9bS_g9s3QE%C-Y>y0LH+ap=&OlAnhPsu@=!<;SgqEt*L-(qA{4&GNst`2EHXgAoIux=B zIbnT5`&*{E59$I#doC0&Y*uj6O)sc~QBuDot1LbgQQZYR(x8Z@>@h+xE{l-+YW z41r1R-caZ3^4=x}81k^pE`5%Tv~f!xR&YSBU;OBW@1c65r$i?v`j!{|1G}b2L#RoR z|DFVD1|f2Of4f(*3;Et4JBV6~(jzcuFk5`J1~Aa~J?A)TF(!b&M~pa$#(@{ET|>}y zF+a%s_aB}9VEXNA(O9OZu(I(A28VL!N59=T}<~oZB7k7cI!>TT=Oq|a+a8a!~jcd zZEr9tXi9Lxpa)K2=V*?YA0k7seg^rWqSb65wb3ZHkd%-zm1NeeQ|ezY-J;7dfnhI6 z=-#noXK7Mh9BYNs2v6+Mnt8E#vuE(VEOTKoB;(fTm#tnzI9D`f6FBrRf+txvhE3=(^2z+LVZ}k8(5o0ZPCwI(=v>PL?Hs z?lxnRf!s`B5|0;fo$nnjC)6!lJSFlHd;nY*qKF3Pl|6%_BJQT?9cW7hTV*Rzkr1-Q zG$UzEPP%Yb%5Cv8Lnv12_IxJn$Wr+Kx0}?##dB1(->6<0?u12~?8;XkEzGc@ey@Ss z=;HS{bR|A55Ob7)@#IT&?&}SI9;_5amR(TCskDS&rep`e;T|Tp33OoEKl$oaf&!(A zi}H1}(JWxDErr?+9g?Zh*a}}dowD=OecIujuwvWpQYMrnYl4OHKkI)A+l@DwliT7p zIejuMPi+_Et6=EBxWFJ#U08%?dKV*+f%28qUhGK6`$-`l!1DoHHz>xfC#N{QnSMv! zOu*_W)r{!;emuts0Lof+lpY&yI^Una(_Fn0n$Y15HR`?v>SA{lBp8?;3{OA$cz)Ty z>sNV+4GmW4P}3y}B;LV=R$sPj99!;g!cUdIT?{QNpHhGsNU@R@VSJl_^OTB21C?}j?^GeLPY}FxCb}Nsb&ew!! zg_So89XafD*9fNf-HN=G5E-FjAXk{@|(DM0CDN&_`lF*_Mc|q zvd`nnZ_zythsQr2uy)AS`9$WhH1x!RQV@h#sqen^oP1Yo zcIJKzYC|%`4SmDcY|7??Is>2i-UyW`LYePmHbtbSQ!fP^z@{@;Hp(FRLrsOYzQZAD zLK?!!(rWNasxH0a4WcgDD56ue%?c$(@pTph_$D$@C^B$qUSv-co>6%RJMi*sC zFjW+7h0zIL#Pz^tQg+PocukzVK#^qxe_p3-ixk|w3+w(%YCxH_jO3@Au9!<)_!Xnz zozO9lG4;*fIChOGf?fp7Glgz74m3ub_U zoA@^&J^8YLB}n3n31@9(`~3U=3oI5WX@Fks>*>vny~GpiSMxw+Kw$t8Gu=lTfkYkC za%sT{6O4T!1M5nakHknNyQsm!r0jIb*w9PXQ%N>8`nCt{tVG|Q90E7!mMX>cFeTd5 z792uY(&>gM7yStu@qN+eWNq|31TpueCMw#?V4*Uu$>&PMnjl!y4B#u5&XvRCF+gJl zjxwWIfvzwRpAv>j9RN(#ILgBGDAP}jQiFq{k59rfTg>}#lp6=04JzsqNq(V3r2Yil zbD>f>Lr;PZi&Y>7kTGwISrKW{gO`l%Y^SgzYp}?;;wF{){;)PL)ef|%vSmOHpFsi!y z+B{JOL68>(*@IB(?)YJ=vZ`y$uPrZx-e-3A%RQ%3oXq_u zm#q0Nl#i74XZG8l3TunT_X^lLDfe4c@hsIEr=^y6TaA%7-?(4`#?u#DdNWeqt)f8SCGxD>!HK*r+%1+F7|!u98l$ zwC%bEYG}44;$+0>Ad)3MCXcHyiZ3`96W9e^FyH#hUK#bC+2)|qmKW~Gk8=0kQ6V!6 z>b_L8WintPW5*&sJCOZ1ckT)GR08VuFIhz-h_HIdISsMr6FH<-K@7nn`z1Qh9LNrj z8w*50i#m@SQnw+EV39xz885hqr?RDjlggg&gPjN)zp#A&jNty2d)SCH2J0wam0xN1 z5ouIl)Ep^L3I3lW|FLjF(W;;}V|>Mbtn1&_?~g_Nb76ir!WiXke%`@=d0 zypHe)Vps3Eeu_Ary3H@NDHx-Mgl{h3kEESmc#fmaS#!7c{I6e0-0%v@;SN9VyqhPCeMl_tFb0+1BV&+r?$_togwHZ7c4L4b0o)%Sd3v`*{M?Eh3Nod^_6j z!!qZF_cn9?c41;tibW3H+5Dr(WaZurst9?k2sJVBRQ@ls`}0Y$n-d%frkut4)8+F zF3f$;s#pnH&~{S)OWp_{aQ*38^z2I7?D;2EnFW#p`q)-!#2OT&Df%4cpEB>OwTbP2 zoia+Q#^gDIH1f9YjBhPW?01g2>|Fa<4L`brR=5TCI#Ez774p!1qkdFC$&uipK@48+ zj0&O^Zgae9gL3B<&xH}E5NYNsEw?+a{8-Zsdv)rMt+ch;wUVGXxIvRNT; zIU{H4Z0hVgBcJxv-eF?e*}mPhac6);r+AoUMxvX34nS1zwMO)4%#_!@OAF1m@M$$P zF2kwRcWYIiUT{?Vjx8_|V(P4sNo)&Lyzk+J!QFM@w0AE-Tz^q| ziDja1>MWc|%;ti+k#{%#q$G`H*;JRyIY8v|j-<(=_ZzsV6Ah%4vqap5+-U>+(nTep zqv5cym4ELe=K+UPsYyT(03LB+0*@~i@v?oDc}T2VL0-(LdEHsW6L#O1bX2Vy?rqn!Rt;53b6FaYFyF^oJ3F znr%z-?8U3-%Tyq{djpxzIOjC;-!3jSy|HVVQogcizN6)=D&DQl@e3Hu6ET+eXC7tr zCRcH_pV@i8Mkt~039z5KRkz*5I9~57Ga1W+mM*#z(SiIR(&7gyfYgt7j3;LKk8;iVk+)@^KDgnbXlq$v@dQT7s!RUa0^)9Rrm0y zu|w06+I}bj`I+MS7rFb34*Q3g;p_ZG)_x1{;ls=wEt1nP;uSe<3n5Ht#!lHSUyBU9WNEspI6D5 Gh5bJo^bx`U literal 28956 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') @@ -1581,7 +1583,7 @@ angular.module('myApp.directives', ['myApp.filters']) var voiceRecordDurationInterval = null var voiceRecorderPromise = null if (voiceRecordSupported) { - $(sendFieldPanel).addClass('im_record_supported') + element.addClass('im_record_supported') } $scope.voiceRecorder = {duration: 0, recording: false, processing: false} @@ -1700,7 +1702,13 @@ angular.module('myApp.directives', ['myApp.filters']) $(voiceRecordBtn).on('contextmenu', cancelEvent) - $(voiceRecordBtn).on('touchstart', function(event) { + var voiceRecordTouch = Config.Navigator.touch ? true : false + var voiceRecordEvents = { + start: voiceRecordTouch ? 'touchstart' : 'mousedown', + move: voiceRecordTouch ? 'touchmove' : 'mousemove', + stop: voiceRecordTouch ? 'touchend' : 'mouseup' + } + $(voiceRecordBtn).on(voiceRecordEvents.start, function(event) { if ($scope.voiceRecorder.processing) { return } @@ -1739,18 +1747,23 @@ angular.module('myApp.directives', ['myApp.filters']) var curBoundaries = {} var updateVoiceHoverBoundaries = function () { - var offset = element.offset() + var boundElement = $('.im_bottom_panel_wrap') + // console.warn(dT(), 'bound', boundElement[0]) + var offset = boundElement.offset() curBoundaries = { top: offset.top, left: offset.left, - width: element.outerWidth(), - height: element.outerHeight(), + width: boundElement.outerWidth(), + height: boundElement.outerHeight(), } } var updateVoiceHoveredClass = function (event, returnHover) { var originalEvent = event.originalEvent || event - var touch = originalEvent.changedTouches && originalEvent.changedTouches[0] + var touch = voiceRecordTouch + ? originalEvent.changedTouches && originalEvent.changedTouches[0] + : originalEvent + // console.log('event', voiceRecordTouch, originalEvent) var isHover = touch && touch.pageX >= curBoundaries.left && touch.pageX <= curBoundaries.left + curBoundaries.width && @@ -1758,6 +1771,7 @@ angular.module('myApp.directives', ['myApp.filters']) touch.pageY <= curBoundaries.top + curBoundaries.height if (curHover != isHover) { + console.warn(dT(), 'change hover', isHover) element.toggleClass('im_send_form_hover', isHover) curHover = isHover } @@ -1767,10 +1781,18 @@ angular.module('myApp.directives', ['myApp.filters']) updateVoiceHoverBoundaries() updateVoiceHoveredClass(event) - $($window).on('touchmove', updateVoiceHoveredClass) + if (!Config.Mobile) { + $(voiceRecorderWrap).css({ + height: messageFieldWrap.offsetHeight, + width: messageFieldWrap.offsetWidth + }) + } - $($window).one('touchend', function(event) { - $($window).off('touchmove', updateVoiceHoveredClass) + $($window).on(voiceRecordEvents.move, updateVoiceHoveredClass) + + $($window).one(voiceRecordEvents.stop, function(event) { + console.warn(111) + $($window).off(voiceRecordEvents.move, updateVoiceHoveredClass) var isHover = updateVoiceHoveredClass(event, true) @@ -1982,14 +2004,14 @@ angular.module('myApp.directives', ['myApp.filters']) if (e.type == 'dragenter' || e.type == 'dragover') { if (dragStateChanged) { - if (!Config.Mobile) { - $(emojiButton).hide() - } - $(dropbox) - .css({height: messageFieldWrap.offsetHeight + 2, width: messageFieldWrap.offsetWidth}) - .show() + $(dropbox).css({ + height: messageFieldWrap.offsetHeight, + width: messageFieldWrap.offsetWidth + }) + element.addClass('im_send_form_dragging') } } else { + return cancelEvent(e) if (e.type == 'drop') { $scope.$apply(function () { $scope.draftMessage.files = Array.prototype.slice.call(e.originalEvent.dataTransfer.files) @@ -1997,10 +2019,7 @@ angular.module('myApp.directives', ['myApp.filters']) }) } dragTimeout = setTimeout(function () { - $(dropbox).hide() - if (!Config.Mobile) { - $(emojiButton).show() - } + element.removeClass('im_send_form_dragging') dragStarted = false dragTimeout = false }, 300) diff --git a/app/js/locales/en-us.json b/app/js/locales/en-us.json index db8760dc..516c076b 100644 --- a/app/js/locales/en-us.json +++ b/app/js/locales/en-us.json @@ -530,7 +530,7 @@ "im_submit_message": "Send", "im_submit_edit_message": "Save", "im_edit_message_title": "Edit message", - "im_voice_recording_label": "Release outside this field to cancel", + "im_voice_recording_label": "Release outside this form to cancel", "im_voice_processing_label": "Processing{dots}", "login_sign_in": "Sign in", "login_enter_number_description": "Please choose your country and enter your full phone number.", diff --git a/app/js/message_composer.js b/app/js/message_composer.js index fb0b805f..298a8a7e 100644 --- a/app/js/message_composer.js +++ b/app/js/message_composer.js @@ -1610,7 +1610,8 @@ MessageComposer.prototype.resetTyping = function () { } MessageComposer.prototype.setPlaceholder = function (newPlaceholder) { - (this.richTextareaEl || this.textareaEl).attr('placeholder', newPlaceholder) + console.warn(dT(), 'set placeholder', this.richTextareaEl) + ;(this.richTextareaEl || this.textareaEl).attr('placeholder', newPlaceholder) } function Scroller (content, options) { diff --git a/app/less/app.less b/app/less/app.less index 04187eaf..dfe7e53c 100644 --- a/app/less/app.less +++ b/app/less/app.less @@ -2551,6 +2551,21 @@ a.im_message_fwd_photo { color: #999; position: absolute; } +.im_send_form_dragging { + .im_send_dropbox_wrap { + display: block; + } + .composer_rich_textarea, + .im_message_field, + .composer_emoji_insert_btn, + .composer_progress_icon_wrap, + .composer_command_btn, + .composer_keyboard_btn, + .im_inline_placeholder_wrap { + visibility: hidden; + } +} + .im_send_field_wrap { position: relative; } @@ -3505,6 +3520,61 @@ li.inline_result_sticker.composer_autocomplete_option_active a { } +.im_voice_recorder_wrap { + display: none; + z-index: 100; +} + +.im_recorder_indicator, .im_recorder_time { + float: left; + vertical-align: middle; + color: #333; +} + +.im_recorder_indicator i { + background-color: #ff1010; + height: 10px; + width: 10px; + border-radius: 50%; + margin-right: 5px; + vertical-align: baseline; + display: inline-block; + animation: blinker 0.5s cubic-bezier(.5, 0, 1, 1) infinite alternate; +} + +@keyframes blinker { + from { opacity: 1; } + to { opacity: 0; } +} + +.im_recorder_label { + overflow: auto; + font-size: 12px; + text-align: center; + vertical-align: middle; + color: #3a6d99; + + transition: color linear 0.2s; + + i { + margin-right: 5px; + } + + .im_send_form_hover & { + color: #CCC; + } +} + +.im_voice_recording, +.im_processing_recording { + color: #AAA; + + .im_voice_recorder_wrap { + display: block; + } +} + + .error_modal_window { .modal-dialog { max-width: 350px; diff --git a/app/less/desktop.less b/app/less/desktop.less index f170b203..f4b8f1cd 100644 --- a/app/less/desktop.less +++ b/app/less/desktop.less @@ -1290,6 +1290,75 @@ a.im_panel_peer_photo .peer_initials { } } +.im_record { + display: none; + width: 50px; + height: 50px; + margin: -8px 0 0 -18px; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + padding: 13px 16px 13px 16px; + + border-radius: 50px; + overflow: hidden; + background: #fff; + transition: background-color linear 0.2s; + + .im_record_supported & { + display: block; + } +} +.im_send_form_hover .im_voice_recording .im_record { + background: #bfd9ed; +} + +.icon-mic { + display: inline-block; + width: 18px; + height: 22px; + vertical-align: text-top; + opacity: 0.8; + + .image-2x('../img/icons/IconsetW.png', 42px, 1171px); + background-position: -12px -285px; + background-color: transparent; + + .im_record:hover & { + opacity: 1; + } + .im_record:active &, + .im_voice_recording & { + background-position: -12px -705px; + } + +} + +.im_voice_recorder_wrap { + padding: 17px 10px 0; + display: none; + position: absolute; +} + +.im_voice_recording, +.im_processing_recording { + .im_voice_recorder_wrap { + display: block; + } + + .composer_rich_textarea, + .im_message_field, + .composer_emoji_insert_btn, + .composer_progress_icon_wrap, + .composer_command_btn, + .composer_keyboard_btn, + .im_inline_placeholder_wrap { + visibility: hidden; + } +} + + @media (max-height: 600px) { a { &.im_panel_peer_photo, @@ -1340,6 +1409,10 @@ a.im_panel_peer_photo .peer_initials { top: 0; left: 100%; margin: 0 0 0 15px; + + .im_record_supported .im_send_form_empty & { + display: none; + } } .im_media_attach { position: absolute; @@ -1412,6 +1485,22 @@ a.im_panel_peer_photo .peer_initials { padding-top: 5px; padding-bottom: 5px; } + + .im_record { + display: none; + position: absolute; + top: -4px; + right: -56px; + + .im_record_supported .im_send_form_empty & { + display: block; + } + } + + .im_voice_recorder_wrap { + padding-top: 4px; + } + } .im_edit_panel { diff --git a/app/less/mobile.less b/app/less/mobile.less index 7f8494ee..8393aa4f 100644 --- a/app/less/mobile.less +++ b/app/less/mobile.less @@ -1473,7 +1473,7 @@ a.im_message_fwd_author { .im_record { display: none; right: 0; - top: -9px; + top: -8px; width: 50px; height: 50px; position: absolute; @@ -1488,7 +1488,7 @@ a.im_message_fwd_author { background: #fff; transition: background-color linear 0.2s; - .im_send_form_empty .im_record_supported & { + .im_record_supported .im_send_form_empty & { display: block; } } @@ -1499,13 +1499,24 @@ a.im_message_fwd_author { .im_send_form_empty .im_submit { opacity: 0.4; } -.im_send_form_empty .im_record_supported .im_submit { +.im_record_supported .im_send_form_empty .im_submit { display: none; } +.im_voice_recorder_wrap { + height: 32px; + line-height: 32px; + right: 50px; + left: 0; + padding: 0 0 0 20px; +} +.im_recorder_label { + padding-right: 48px; +} + .im_voice_recording, -.im_processing_recording { +.im_processing_recording { color: #AAA; .im_voice_recorder_wrap { @@ -1515,11 +1526,12 @@ a.im_message_fwd_author { .im_submit, .im_attach { display: none; + // visibility: hidden; } } .im_processing_recording { - .im_recorder_indicator i { + .im_recorder_indicator i { background-color: green; } @@ -1563,61 +1575,6 @@ a.im_message_fwd_author { } } -.im_voice_recorder_wrap { - height: 32px; - display: none; - line-height: 32px; - right: 50px; - left: 0; - z-index: 100; - padding: 0 0 0 20px; -} - -.im_recorder_indicator, .im_recorder_time { - float: left; - vertical-align: middle; - color: #333; -} - -.im_recorder_indicator i { - background-color: #ff1010; - height: 10px; - width: 10px; - border-radius: 50%; - margin-right: 5px; - vertical-align: baseline; - display: inline-block; - animation: blinker 0.5s cubic-bezier(.5, 0, 1, 1) infinite alternate; -} - -@keyframes blinker { - from { opacity: 1; } - to { opacity: 0; } -} - -.im_recorder_label { - overflow: auto; - font-size: 12px; - text-align: center; - vertical-align: middle; - padding-right: 48px; - color: #3a6d99; - - transition: color linear 0.2s; - - i, span { - vertical-align: middle; - } - - i { - margin-right: 5px; - } - - .im_send_form_hover & { - color: #CCC; - } -} - .composer_rich_textarea { min-height: 18px; max-height: 136px; diff --git a/app/partials/desktop/send_form.html b/app/partials/desktop/send_form.html index 0f0b244d..208e8bfa 100644 --- a/app/partials/desktop/send_form.html +++ b/app/partials/desktop/send_form.html @@ -1,4 +1,4 @@ -

    +
    @@ -21,6 +21,16 @@
    +
    +
    +
    +
    + + + +
    +
    +
    @@ -40,6 +50,10 @@
    + + + +
    diff --git a/app/partials/mobile/send_form.html b/app/partials/mobile/send_form.html index 09ce8f27..1bbb6891 100644 --- a/app/partials/mobile/send_form.html +++ b/app/partials/mobile/send_form.html @@ -13,13 +13,13 @@
    -
    -
    -
    - - - -
    +
    +
    +
    + + + +
    From 213431735a69f4dff31d3f44e97d0487fffc0996 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 11 Aug 2017 20:18:28 +0200 Subject: [PATCH 40/49] Bump version to 0.6.0 --- app/js/app.js | 2 +- app/js/background.js | 2 +- app/js/controllers.js | 2 +- app/js/directives.js | 2 +- app/js/directives_mobile.js | 2 +- app/js/filters.js | 2 +- app/js/lib/bin_utils.js | 2 +- app/js/lib/config.js | 4 ++-- app/js/lib/crypto_worker.js | 2 +- app/js/lib/mtproto.js | 2 +- app/js/lib/mtproto_wrapper.js | 2 +- app/js/lib/ng_utils.js | 2 +- app/js/lib/tl_utils.js | 2 +- app/js/lib/utils.js | 2 +- app/js/message_composer.js | 2 +- app/js/messages_manager.js | 2 +- app/js/services.js | 2 +- app/manifest.json | 2 +- app/manifest.webapp | 2 +- package.json | 2 +- 20 files changed, 21 insertions(+), 21 deletions(-) diff --git a/app/js/app.js b/app/js/app.js index 19adeb66..c5c88f38 100644 --- a/app/js/app.js +++ b/app/js/app.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/background.js b/app/js/background.js index d9f27da7..80317ffd 100644 --- a/app/js/background.js +++ b/app/js/background.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/controllers.js b/app/js/controllers.js index 342d4ca6..7eb5b6a1 100644 --- a/app/js/controllers.js +++ b/app/js/controllers.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/directives.js b/app/js/directives.js index 9759fe91..5969c132 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/directives_mobile.js b/app/js/directives_mobile.js index 1c48747d..082a9f1d 100644 --- a/app/js/directives_mobile.js +++ b/app/js/directives_mobile.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/filters.js b/app/js/filters.js index 577d261a..2840c7e8 100644 --- a/app/js/filters.js +++ b/app/js/filters.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/bin_utils.js b/app/js/lib/bin_utils.js index 2348e7b9..e2ca7dfd 100644 --- a/app/js/lib/bin_utils.js +++ b/app/js/lib/bin_utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/config.js b/app/js/lib/config.js index 4bc2c564..ab4bcdcf 100644 --- a/app/js/lib/config.js +++ b/app/js/lib/config.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE @@ -20,7 +20,7 @@ Config = window.Config || {} Config.App = { id: 2496, hash: '8da85b0d5bfe62527e5b244c209159c3', - version: '0.5.7.1', + version: '0.6.0', domains: ['web.telegram.org', 'zhukov.github.io'] } diff --git a/app/js/lib/crypto_worker.js b/app/js/lib/crypto_worker.js index 087c3bb9..2605da61 100644 --- a/app/js/lib/crypto_worker.js +++ b/app/js/lib/crypto_worker.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/mtproto.js b/app/js/lib/mtproto.js index 2b269fc4..25932bd8 100644 --- a/app/js/lib/mtproto.js +++ b/app/js/lib/mtproto.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/mtproto_wrapper.js b/app/js/lib/mtproto_wrapper.js index 2c9dc123..6b6e6ed6 100644 --- a/app/js/lib/mtproto_wrapper.js +++ b/app/js/lib/mtproto_wrapper.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/ng_utils.js b/app/js/lib/ng_utils.js index 85e2fa10..8671f9ac 100755 --- a/app/js/lib/ng_utils.js +++ b/app/js/lib/ng_utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/tl_utils.js b/app/js/lib/tl_utils.js index a9164d39..a6a7a4a5 100644 --- a/app/js/lib/tl_utils.js +++ b/app/js/lib/tl_utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/lib/utils.js b/app/js/lib/utils.js index f88ba448..15232bc7 100644 --- a/app/js/lib/utils.js +++ b/app/js/lib/utils.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/message_composer.js b/app/js/message_composer.js index 298a8a7e..777770bb 100644 --- a/app/js/message_composer.js +++ b/app/js/message_composer.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/messages_manager.js b/app/js/messages_manager.js index 83cfda69..b994d208 100644 --- a/app/js/messages_manager.js +++ b/app/js/messages_manager.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/js/services.js b/app/js/services.js index 8a34e783..0ffb5a84 100755 --- a/app/js/services.js +++ b/app/js/services.js @@ -1,5 +1,5 @@ /*! - * Webogram v0.5.7.1 - messaging web application for MTProto + * Webogram v0.6.0 - messaging web application for MTProto * https://github.com/zhukov/webogram * Copyright (C) 2014 Igor Zhukov * https://github.com/zhukov/webogram/blob/master/LICENSE diff --git a/app/manifest.json b/app/manifest.json index c69e3fdd..fe46016c 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "Telegram", "description": "Telegram Web App.\nMore info & source code here: https://github.com/zhukov/webogram", - "version": "0.5.7.1", + "version": "0.6.0", "short_name": "Telegram", "manifest_version": 2, "app": { diff --git a/app/manifest.webapp b/app/manifest.webapp index 4d6825da..279931bf 100644 --- a/app/manifest.webapp +++ b/app/manifest.webapp @@ -1,7 +1,7 @@ { "name": "Telegram", "description": "Telegram Web App.\nMore info & source code here: https://github.com/zhukov/webogram", - "version": "0.5.7.1", + "version": "0.6.0", "type": "privileged", "launch_path": "/index.html", "developer": { diff --git a/package.json b/package.json index 24337790..7a52309a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "Telegram", "description": "Telegram Web App.\nMore info & source code here: https://github.com/zhukov/webogram", - "version": "0.5.8", + "version": "0.6.0", "main": "app/index.html", "single-instance": true, "dom_storage_quota": 40, From dd660750895a10b7a295cd550c52c1c07715079d Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Fri, 11 Aug 2017 21:19:07 +0200 Subject: [PATCH 41/49] Bugfixes --- app/js/directives.js | 3 +-- app/js/locales/en-us.json | 1 + app/js/message_composer.js | 1 - app/less/app.less | 10 +++++++++- app/less/desktop.less | 2 +- app/less/mobile.less | 2 +- app/partials/desktop/send_form.html | 12 ++++++++---- app/partials/mobile/send_form.html | 12 ++++++++---- 8 files changed, 29 insertions(+), 14 deletions(-) diff --git a/app/js/directives.js b/app/js/directives.js index 5969c132..7e172a5a 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1771,7 +1771,7 @@ angular.module('myApp.directives', ['myApp.filters']) touch.pageY <= curBoundaries.top + curBoundaries.height if (curHover != isHover) { - console.warn(dT(), 'change hover', isHover) + // console.warn(dT(), 'change hover', isHover) element.toggleClass('im_send_form_hover', isHover) curHover = isHover } @@ -1791,7 +1791,6 @@ angular.module('myApp.directives', ['myApp.filters']) $($window).on(voiceRecordEvents.move, updateVoiceHoveredClass) $($window).one(voiceRecordEvents.stop, function(event) { - console.warn(111) $($window).off(voiceRecordEvents.move, updateVoiceHoveredClass) var isHover = updateVoiceHoveredClass(event, true) diff --git a/app/js/locales/en-us.json b/app/js/locales/en-us.json index 516c076b..d4490696 100644 --- a/app/js/locales/en-us.json +++ b/app/js/locales/en-us.json @@ -531,6 +531,7 @@ "im_submit_edit_message": "Save", "im_edit_message_title": "Edit message", "im_voice_recording_label": "Release outside this form to cancel", + "im_voice_recording_cancel_label": "Release to cancel record", "im_voice_processing_label": "Processing{dots}", "login_sign_in": "Sign in", "login_enter_number_description": "Please choose your country and enter your full phone number.", diff --git a/app/js/message_composer.js b/app/js/message_composer.js index 777770bb..e2eaf574 100644 --- a/app/js/message_composer.js +++ b/app/js/message_composer.js @@ -1610,7 +1610,6 @@ MessageComposer.prototype.resetTyping = function () { } MessageComposer.prototype.setPlaceholder = function (newPlaceholder) { - console.warn(dT(), 'set placeholder', this.richTextareaEl) ;(this.richTextareaEl || this.textareaEl).attr('placeholder', newPlaceholder) } diff --git a/app/less/app.less b/app/less/app.less index dfe7e53c..ef5b13c6 100644 --- a/app/less/app.less +++ b/app/less/app.less @@ -3559,11 +3559,19 @@ li.inline_result_sticker.composer_autocomplete_option_active a { i { margin-right: 5px; } - + .im_send_form_hover & { color: #CCC; } } +.im_send_form_hover .im_recorder_label_hout, +.im_recorder_label_hover { + display: none; +} +.im_send_form_hover .im_recorder_label_hover { + display: inline; + +} .im_voice_recording, .im_processing_recording { diff --git a/app/less/desktop.less b/app/less/desktop.less index f4b8f1cd..d810f928 100644 --- a/app/less/desktop.less +++ b/app/less/desktop.less @@ -1311,7 +1311,7 @@ a.im_panel_peer_photo .peer_initials { } } .im_send_form_hover .im_voice_recording .im_record { - background: #bfd9ed; + background: #cae9ff; } .icon-mic { diff --git a/app/less/mobile.less b/app/less/mobile.less index 8393aa4f..0ad3b770 100644 --- a/app/less/mobile.less +++ b/app/less/mobile.less @@ -1493,7 +1493,7 @@ a.im_message_fwd_author { } } .im_send_form_hover .im_voice_recording .im_record { - background: #bfd9ed; + background: #cae9ff; } .im_send_form_empty .im_submit { diff --git a/app/partials/desktop/send_form.html b/app/partials/desktop/send_form.html index 208e8bfa..7bebf14d 100644 --- a/app/partials/desktop/send_form.html +++ b/app/partials/desktop/send_form.html @@ -24,10 +24,14 @@
    -
    - - - +
    + + + + + + +
    diff --git a/app/partials/mobile/send_form.html b/app/partials/mobile/send_form.html index 1bbb6891..bdc4eaa1 100644 --- a/app/partials/mobile/send_form.html +++ b/app/partials/mobile/send_form.html @@ -15,10 +15,14 @@
    -
    - - - +
    + + + + + + +
    From 4d6447ed517cd136a18a7b541bcae118250143e5 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Mon, 14 Aug 2017 14:37:29 +0200 Subject: [PATCH 42/49] Fixed voice recorder --- app/js/directives.js | 72 +++++++++++++++++++++++++------------------ app/less/desktop.less | 3 +- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/app/js/directives.js b/app/js/directives.js index 7e172a5a..56ddc963 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1581,7 +1581,6 @@ angular.module('myApp.directives', ['myApp.filters']) var voiceRecorder = null var voiceRecordSupported = Recorder.isRecordingSupported() var voiceRecordDurationInterval = null - var voiceRecorderPromise = null if (voiceRecordSupported) { element.addClass('im_record_supported') } @@ -1706,15 +1705,15 @@ angular.module('myApp.directives', ['myApp.filters']) var voiceRecordEvents = { start: voiceRecordTouch ? 'touchstart' : 'mousedown', move: voiceRecordTouch ? 'touchmove' : 'mousemove', - stop: voiceRecordTouch ? 'touchend' : 'mouseup' + stop: voiceRecordTouch ? 'touchend blur' : 'mouseup blur' } + var onRecordStart, onRecordStreamReady, onRecordStop + $(voiceRecordBtn).on(voiceRecordEvents.start, function(event) { if ($scope.voiceRecorder.processing) { return } - voiceRecorderPromise = null - voiceRecorder = new Recorder({ monitorGain: 0, numberOfChannels: 1, @@ -1723,7 +1722,7 @@ angular.module('myApp.directives', ['myApp.filters']) encoderPath: 'vendor/recorderjs/encoder_worker.js' }) - voiceRecorder.addEventListener('start', function(e) { + onRecordStart = function(e) { var startTime = tsNow(true) voiceRecordDurationInterval = $interval(function() { @@ -1733,13 +1732,13 @@ angular.module('myApp.directives', ['myApp.filters']) $scope.$apply(function() { $scope.voiceRecorder.recording = true }) + } + voiceRecorder.addEventListener('start', onRecordStart) - console.warn(dT(), 'recording now!') - }) - - voiceRecorder.addEventListener('streamReady', function(e) { + onRecordStreamReady = function(e) { voiceRecorder.start() - }) + } + voiceRecorder.addEventListener('streamReady', onRecordStreamReady) voiceRecorder.initStream() @@ -1748,7 +1747,6 @@ angular.module('myApp.directives', ['myApp.filters']) var updateVoiceHoverBoundaries = function () { var boundElement = $('.im_bottom_panel_wrap') - // console.warn(dT(), 'bound', boundElement[0]) var offset = boundElement.offset() curBoundaries = { top: offset.top, @@ -1763,7 +1761,6 @@ angular.module('myApp.directives', ['myApp.filters']) var touch = voiceRecordTouch ? originalEvent.changedTouches && originalEvent.changedTouches[0] : originalEvent - // console.log('event', voiceRecordTouch, originalEvent) var isHover = touch && touch.pageX >= curBoundaries.left && touch.pageX <= curBoundaries.left + curBoundaries.width && @@ -1771,7 +1768,6 @@ angular.module('myApp.directives', ['myApp.filters']) touch.pageY <= curBoundaries.top + curBoundaries.height if (curHover != isHover) { - // console.warn(dT(), 'change hover', isHover) element.toggleClass('im_send_form_hover', isHover) curHover = isHover } @@ -1781,19 +1777,11 @@ angular.module('myApp.directives', ['myApp.filters']) updateVoiceHoverBoundaries() updateVoiceHoveredClass(event) - if (!Config.Mobile) { - $(voiceRecorderWrap).css({ - height: messageFieldWrap.offsetHeight, - width: messageFieldWrap.offsetWidth - }) - } - - $($window).on(voiceRecordEvents.move, updateVoiceHoveredClass) - - $($window).one(voiceRecordEvents.stop, function(event) { + onRecordStop = function(event) { $($window).off(voiceRecordEvents.move, updateVoiceHoveredClass) + $($window).off(voiceRecordEvents.stop, onRecordStop) - var isHover = updateVoiceHoveredClass(event, true) + var isHover = event == 'blur' ? false : updateVoiceHoveredClass(event, true) if ($scope.voiceRecorder.duration > 0 && isHover) { $scope.voiceRecorder.processing = true @@ -1801,23 +1789,47 @@ angular.module('myApp.directives', ['myApp.filters']) var blob = blobConstruct([e.detail], 'audio/ogg') console.warn(dT(), 'got audio', blob) - $scope.draftMessage.files = [blob] - $scope.draftMessage.isMedia = true + $scope.$apply(function () { + if (blob.size !== undefined && + blob.size > 1024) { + $scope.draftMessage.files = [blob] + $scope.draftMessage.isMedia = true + } - $scope.voiceRecorder.processing = false + $scope.voiceRecorder.processing = false + }) }) } + cancelRecord() + } + + if (!Config.Mobile) { + $(voiceRecorderWrap).css({ + height: messageFieldWrap.offsetHeight, + width: messageFieldWrap.offsetWidth + }) + } + + $($window).on(voiceRecordEvents.move, updateVoiceHoveredClass) + $($window).one(voiceRecordEvents.stop, onRecordStop) + }) + + function cancelRecord() { + if (voiceRecorder) { voiceRecorder.stop() - console.warn(dT(), 'stop audio') + voiceRecorder.removeEventListener('streamReady', onRecordStreamReady) + voiceRecorder.removeEventListener('start', onRecordStart) + } + if ($scope.voiceRecorder.recording) { $interval.cancel(voiceRecordDurationInterval) $scope.$apply(function() { $scope.voiceRecorder.recording = false $scope.voiceRecorder.duration = 0 }) - }) - }) + } + } var sendOnEnter = true function updateSendSettings () { diff --git a/app/less/desktop.less b/app/less/desktop.less index d810f928..bc5ac39a 100644 --- a/app/less/desktop.less +++ b/app/less/desktop.less @@ -1294,7 +1294,7 @@ a.im_panel_peer_photo .peer_initials { display: none; width: 50px; height: 50px; - margin: -8px 0 0 -18px; + margin: -10px 0 0 -18px; user-select: none; -moz-user-select: none; -webkit-user-select: none; @@ -1491,6 +1491,7 @@ a.im_panel_peer_photo .peer_initials { position: absolute; top: -4px; right: -56px; + margin-top: -8px; .im_record_supported .im_send_form_empty & { display: block; From d13fd8020d7322663a403004d304ffb6f8ef2c76 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Wed, 23 Aug 2017 13:17:59 +0200 Subject: [PATCH 43/49] Sync translations --- app/js/directives.js | 1 - app/js/locales/de-de.json | 2 +- app/js/locales/nl-nl.json | 2 +- app/js/locales/pt-br.json | 30 +++++++++++++++--------------- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/app/js/directives.js b/app/js/directives.js index 56ddc963..728663ca 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -2022,7 +2022,6 @@ angular.module('myApp.directives', ['myApp.filters']) element.addClass('im_send_form_dragging') } } else { - return cancelEvent(e) if (e.type == 'drop') { $scope.$apply(function () { $scope.draftMessage.files = Array.prototype.slice.call(e.originalEvent.dataTransfer.files) diff --git a/app/js/locales/de-de.json b/app/js/locales/de-de.json index 08813179..565cf36e 100644 --- a/app/js/locales/de-de.json +++ b/app/js/locales/de-de.json @@ -377,7 +377,7 @@ "error_modal_media_not_supported_description": "Dein Browser kann diese Mediendatei nicht wiedergeben. Lade die Datei herunter und versuche sie mit einem externen Player zu öffnen.", "error_modal_username_not_found_description": "Es gibt leider kein Telegram Konto mit dem Benutzernamen.", "error_modal_phonecalls_not_supported_description_md": "Leider werden Anrufe in der Web App noch nicht unterstützt.\n\nDu kannst {user} über unsere mobilen Apps oder Desktop Clients anrufen.\n{download-link: Download »}", - "error_modal_bad_request_description": "Eine Parameter fehlt oder ist ungültig.", + "error_modal_bad_request_description": "Ein Parameter fehlt oder ist ungültig.", "error_modal_unauthorized_description": "Diese Aktion benötigt autorisierten Zugriff. Bitte {login-link: melde dich an}.", "error_modal_forbidden_description": "Diese Aktion ist für dich nicht erlaubt.", "error_modal_not_found_description": "Die Seite wurde nicht gefunden.", diff --git a/app/js/locales/nl-nl.json b/app/js/locales/nl-nl.json index 6b279f8f..0a10e74d 100644 --- a/app/js/locales/nl-nl.json +++ b/app/js/locales/nl-nl.json @@ -61,7 +61,7 @@ "settings_modal_language": "Taal", "settings_modal_notifications": "Desktopmeldingen", "settings_modal_pushes": "Achtergrondmeldingen", - "settings_modal_message_preview": "Voorvertoning", + "settings_modal_message_preview": "Voorbeeld", "settings_modal_sound": "Geluid", "settings_modal_enter_send_description_md": "**Enter** - bericht versturen, **Shift + Enter** - nieuwe regel", "settings_modal_ctrl_enter_send_description_md": "**Ctrl + Enter** - bericht versturen. **Enter** - nieuwe regel", diff --git a/app/js/locales/pt-br.json b/app/js/locales/pt-br.json index 3d598c2d..fda174e4 100644 --- a/app/js/locales/pt-br.json +++ b/app/js/locales/pt-br.json @@ -203,13 +203,13 @@ "confirm_modal_clipboard_file_send": "Você tem certeza que deseja enviar arquivo(s) da área de transferência?", "confirm_modal_clipboard_X_files_send": "{'one': 'Você tem certeza que deseja enviar o arquivo da área de transferência?', 'other': 'Você tem certeza que deseja enviar {} arquivos da área de transferência?'}", "confirm_modal_message_delete": "Você tem certeza que deseja apagar esta mensagem?", - "confirm_modal_delete_X_messages": "{'one': '{} message', 'other': '{} messages'}", - "confirm_modal_delete_messages": "Are you sure you want to delete {messages}?", - "confirm_modal_message_revoke": "Delete for {recipient}", - "confirm_modal_message_revoke_recipient_chat": "everyone", - "confirm_modal_delete_messages_for_everyone_chat": "This will delete messages for everyone in this chat.", - "confirm_modal_delete_messages_for_you_only_pm": "This will delete messages just for you, not for {user}.", - "confirm_modal_delete_messages_for_you_only_chat": "This will delete messages just for you, not for other participants of the chat.", + "confirm_modal_delete_X_messages": "{'one': '{} mensagem', 'other': '{} mensagens'}", + "confirm_modal_delete_messages": "Você tem certeza que deseja apagar {mensagens}?", + "confirm_modal_message_revoke": "Apagar para {recipient}", + "confirm_modal_message_revoke_recipient_chat": "todos", + "confirm_modal_delete_messages_for_everyone_chat": "Isso apagará para todos nessa conversa.", + "confirm_modal_delete_messages_for_you_only_pm": "Isso irá apagar somente para você, não para {user}.", + "confirm_modal_delete_messages_for_you_only_chat": "Isso apagará as mensagens somente para você, não para os outros participantes dessa conversa.", "confirm_modal_photo_delete": "Você tem certeza que deseja apagar a foto?", "confirm_modal_contacts_import": "Telegram sincronizará os seus contatos para encontrar seus amigos.", "confirm_modal_login_phone_correct": "O número de telefone está correto?", @@ -324,11 +324,11 @@ "message_service_joined_by_link": "entrou para o grupo via link de convite", "message_service_joined": "entrou no grupo", "message_service_pinned_message": "fixou «{message}»", - "message_service_phonecall_incoming": "Incoming Call", - "message_service_phonecall_outgoing": "Outgoing Call", - "message_service_phonecall_missed": "Missed Call", - "message_service_phonecall_canceled": "Cancelled Call", - "message_service_phonecall": "Phone call {duration}", + "message_service_phonecall_incoming": "Chamada Recebida", + "message_service_phonecall_outgoing": "Chamada Efetuada", + "message_service_phonecall_missed": "Chamada Perdida", + "message_service_phonecall_canceled": "Chamada Cancelada", + "message_service_phonecall": "Chamada {duration}", "message_service_scored_game": "{scored} em {message}", "message_service_unsupported_action": "ação sem suporte {action}", "message_service_bot_intro_header": "O que esse bot pode fazer?", @@ -359,7 +359,7 @@ "error_modal_password_success_title": "Sucesso!", "error_modal_password_disabled_title": "Senha desativada", "error_modal_media_not_supported_title": "Mídia não suportada", - "error_modal_phonecalls_not_supported_title": "Calls are not available yet", + "error_modal_phonecalls_not_supported_title": "As chamadas ainda não estão disponíveis.", "error_modal_recovery_na_title": "Desculpe", "error_modal_network_description": "Por favor, verifique sua conexão com a internet.", "error_modal_firstname_invali_description": "O nome inserido é inválido.", @@ -376,7 +376,7 @@ "error_modal_username_occupied_description": "Desculpe, esse nome de usuário já está em uso.", "error_modal_media_not_supported_description": "Seu navegador não pode visualizar este tipo de mídia. Tente baixar o arquivo e abri-lo em outro reprodutor. ", "error_modal_username_not_found_description": "Não existe nenhuma conta do Telegram com o número informado.", - "error_modal_phonecalls_not_supported_description_md": "Unfortunately calls are not supported in the Web App at the moment.\n\nYou can call {user} using our mobile apps or native desktop applications.\n{download-link: Download »}", + "error_modal_phonecalls_not_supported_description_md": "Infelizmente as chamadas ainda não são suportadas pelo App Web.\n\nVocê pode ligar para {user} usando nossos apps para celular ou aplicações desktop.\n{download-link: Download »}", "error_modal_bad_request_description": "Um dos parâmetros está faltando ou inválido.", "error_modal_unauthorized_description": "Essa ação requer autorização. Por favor {login-link: entre}.", "error_modal_forbidden_description": "Você não tem permissão para esta ação.", @@ -505,7 +505,7 @@ "login_signing_up": "Inscrevendo-se", "login_sign_up": "Inscrever-se", "login_about_title": "Sobre", - "login_about_hide": "hide", + "login_about_hide": "esconder", "login_about_desc1_md": "O cliente web do Telegram é grátis, rápido e seguro para usufruir de muitas das funcionalidades do **Telegram** diretamente do seu **navegador**.", "login_about_desc2_md": "Está sempre sincronizado com o **aplicativo do Telegram** em seu dispositivo celular, o que o torna uma ferramenta perfeita para mensagens e compartilhamento de arquivos.", "login_about_desc3_md": "Nosso {source-link: source code} é aberto, então todos podem contribuir.", From 3be736e4ae4ac13962a46e5287764782682a4e57 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Wed, 23 Aug 2017 16:24:51 +0200 Subject: [PATCH 44/49] Fixed reply markup Closes #1482 --- app/js/directives.js | 1 + app/partials/desktop/im.html | 2 +- app/partials/desktop/send_form.html | 10 +++++----- app/partials/mobile/im.html | 2 +- app/partials/mobile/send_form.html | 10 +++++----- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/js/directives.js b/app/js/directives.js index 728663ca..3770c5b2 100755 --- a/app/js/directives.js +++ b/app/js/directives.js @@ -1557,6 +1557,7 @@ angular.module('myApp.directives', ['myApp.filters']) templateUrl: templateUrl('send_form'), scope: { draftMessage: '=', + replyKeyboard: '=', mentions: '=', commands: '=' } diff --git a/app/partials/desktop/im.html b/app/partials/desktop/im.html index 1c403323..cf0194ac 100644 --- a/app/partials/desktop/im.html +++ b/app/partials/desktop/im.html @@ -211,7 +211,7 @@ -
    +
    diff --git a/app/partials/desktop/send_form.html b/app/partials/desktop/send_form.html index 7bebf14d..07c62770 100644 --- a/app/partials/desktop/send_form.html +++ b/app/partials/desktop/send_form.html @@ -12,13 +12,13 @@
    -
    +
    - - + +
    @@ -61,8 +61,8 @@
    -
    -
    +
    +
    \ No newline at end of file diff --git a/app/partials/mobile/im.html b/app/partials/mobile/im.html index 917ead92..b20acab7 100644 --- a/app/partials/mobile/im.html +++ b/app/partials/mobile/im.html @@ -136,7 +136,7 @@
    -
    +
    diff --git a/app/partials/mobile/send_form.html b/app/partials/mobile/send_form.html index bdc4eaa1..f6186bd0 100644 --- a/app/partials/mobile/send_form.html +++ b/app/partials/mobile/send_form.html @@ -26,10 +26,10 @@
    -
    +
    - - + +
    @@ -52,8 +52,8 @@
    -
    -
    +
    +
    \ No newline at end of file From d712a0e0d730408910f81dda2bbfe8980e024a89 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Wed, 23 Aug 2017 22:38:10 +0200 Subject: [PATCH 45/49] Added translation to changelog Also sync translations --- app/js/locales/de-de.json | 12 ++++++++++++ app/js/locales/en-us.json | 1 + app/js/locales/es-es.json | 12 ++++++++++++ app/js/locales/it-it.json | 12 ++++++++++++ app/js/locales/nl-nl.json | 12 ++++++++++++ app/js/locales/pt-br.json | 12 ++++++++++++ app/js/locales/ru-ru.json | 12 ++++++++++++ app/partials/desktop/changelog_modal.html | 4 +++- 8 files changed, 76 insertions(+), 1 deletion(-) diff --git a/app/js/locales/de-de.json b/app/js/locales/de-de.json index 565cf36e..c37e6639 100644 --- a/app/js/locales/de-de.json +++ b/app/js/locales/de-de.json @@ -22,6 +22,7 @@ "group_modal_menu_delete_group": "Löschen und verlassen", "group_modal_menu_clear_history": "Verlauf löschen", "group_modal_delete_group": "Gruppe löschen", + "group_modal_join": "Gruppe beitreten", "group_modal_settings": "Einstellungen", "group_modal_notifications": "Benachrichtigungen", "group_modal_menu_share_link": "Per Link zur Gruppe einladen", @@ -38,6 +39,7 @@ "channel_modal_description": "Beschreibung", "channel_modal_share_link": "Link teilen", "channel_modal_share_loading": "Lade{dots}", + "channel_modal_menu_edit": "Kanal bearbeiten", "channel_modal_join": "Kanal beitreten", "channel_modal_add_member": "Mitglied hinzufügen", "channel_modal_leave_channel": "Kanal verlassen", @@ -169,6 +171,8 @@ "changelog_modal_header_recent_updates_md": "Aktualisierungen bei **Telegram Web**", "changelog_modal_header_new_updates_md": "**Telegram Web** wurde aktualisiert!", "changelog_modal_title_current_version": "aktuelle Version", + "changelog_modal_full_description_md": "Offizielle Messaging App basierend auf Telegram API für Geschwindigkeit und Sicherheit.\n\nDiese Software steht unter der GNU GPL Version 3.", + "changelog_modal_changelog_link": "Changelog", "group_create_contacts_modal_title": "Neue Gruppe", "group_create_modal_title": "Gruppe erstellen", "group_create_name": "Gruppenname", @@ -280,6 +284,7 @@ "conversation_draft": "Entwurf:", "conversation_media_photo": "Bild", "conversation_media_video": "Video", + "conversation_media_round": "Videonachricht", "conversation_media_document": "Datei", "conversation_media_sticker": "Sticker", "conversation_media_gif": "GIF", @@ -287,6 +292,7 @@ "conversation_media_location": "Standort", "conversation_media_contact": "Kontakt", "conversation_media_attachment": "Anhang", + "conversation_media_unsupported": "Nicht unterstützte Datei", "conversation_search_peer": "Diesen Chat durchsuchen", "conversation_group_created": "hat die Gruppe erstellt", "conversation_group_renamed": "hat den Gruppennamen geändert", @@ -338,6 +344,7 @@ "message_service_changed_channel_photo": "Bild geändert", "message_service_removed_channel_photo": "Bild gelöscht", "message_service_scored_X": "{'one': 'erzielte {} Punkte', 'other': 'erzielten {} Punkte'}", + "message_service_payment_sent": "Zahlung gesendet", "message_action_reply": "Antworten", "message_action_edit": "Bearbeiten", "message_action_delete": "Löschen", @@ -377,6 +384,7 @@ "error_modal_media_not_supported_description": "Dein Browser kann diese Mediendatei nicht wiedergeben. Lade die Datei herunter und versuche sie mit einem externen Player zu öffnen.", "error_modal_username_not_found_description": "Es gibt leider kein Telegram Konto mit dem Benutzernamen.", "error_modal_phonecalls_not_supported_description_md": "Leider werden Anrufe in der Web App noch nicht unterstützt.\n\nDu kannst {user} über unsere mobilen Apps oder Desktop Clients anrufen.\n{download-link: Download »}", + "error_modal_app_signup_forbidden_md": "Du hast noch kein Telegram Konto, bitte **registriere** dich zuerst über {signup-link: Android / iPhone}.", "error_modal_bad_request_description": "Ein Parameter fehlt oder ist ungültig.", "error_modal_unauthorized_description": "Diese Aktion benötigt autorisierten Zugriff. Bitte {login-link: melde dich an}.", "error_modal_forbidden_description": "Diese Aktion ist für dich nicht erlaubt.", @@ -408,6 +416,7 @@ "head_media_video": "Videos", "head_media_documents": "Dateien", "head_media_audio": "Sprachnachrichten", + "head_media_round": "Videonachrichten", "head_media_search": "Suchen", "head_about": "Info", "head_clear_all": "Verlauf löschen", @@ -476,6 +485,9 @@ "im_submit_message": "Senden", "im_submit_edit_message": "Speichern", "im_edit_message_title": "Nachricht bearbeiten", + "im_voice_recording_label": "Zum Abbrechen rausbewegen", + "im_voice_recording_cancel_label": "Loslassen, um abzubrechen", + "im_voice_processing_label": "Verarbeite{dots}", "login_sign_in": "Anmelden", "login_enter_number_description": "Land auswählen und Nummer eintragen", "login_incorrect_number": "Falsche Telefonnummer", diff --git a/app/js/locales/en-us.json b/app/js/locales/en-us.json index d4490696..fc43a995 100644 --- a/app/js/locales/en-us.json +++ b/app/js/locales/en-us.json @@ -191,6 +191,7 @@ "changelog_modal_title_current_version": "current version", "changelog_modal_full_description_md": "Official free messaging app based on Telegram API for speed and security.\n\nThis software is licensed under GNU GPL version 3.", "changelog_modal_changelog_link": "Changelog", + "changelog_app_version": "Version {version}", "group_create_contacts_modal_title": "New group", "group_create_modal_title": "Create group", diff --git a/app/js/locales/es-es.json b/app/js/locales/es-es.json index 5f4c0f33..7f789aed 100644 --- a/app/js/locales/es-es.json +++ b/app/js/locales/es-es.json @@ -22,6 +22,7 @@ "group_modal_menu_delete_group": "Eliminar y salir", "group_modal_menu_clear_history": "Eliminar historial", "group_modal_delete_group": "Eliminar grupo", + "group_modal_join": "Unirme al grupo", "group_modal_settings": "Ajustes", "group_modal_notifications": "Notificaciones", "group_modal_menu_share_link": "Invitar al grupo con un enlace", @@ -38,6 +39,7 @@ "channel_modal_description": "Descripción", "channel_modal_share_link": "Compartir enlace", "channel_modal_share_loading": "Cargando{dots}", + "channel_modal_menu_edit": "Editar canal", "channel_modal_join": "Unirme al canal", "channel_modal_add_member": "Invitar miembros", "channel_modal_leave_channel": "Salir del canal", @@ -169,6 +171,8 @@ "changelog_modal_header_recent_updates_md": "Últimas actualizaciones en **Telegram Web**", "changelog_modal_header_new_updates_md": "¡**Telegram Web** se ha actualizado!", "changelog_modal_title_current_version": "versión actual", + "changelog_modal_full_description_md": "App oficial de mensajería gratuita basada en la API de Telegram para la velocidad y seguridad.\n\nEste software está bajo licencia GNU GPL versión 3.", + "changelog_modal_changelog_link": "Novedades", "group_create_contacts_modal_title": "Nuevo grupo", "group_create_modal_title": "Crear grupo", "group_create_name": "Nombre del grupo", @@ -280,6 +284,7 @@ "conversation_draft": "Borrador:", "conversation_media_photo": "Foto", "conversation_media_video": "Vídeo", + "conversation_media_round": "Videomensaje", "conversation_media_document": "Archivo", "conversation_media_sticker": "Sticker", "conversation_media_gif": "GIF", @@ -287,6 +292,7 @@ "conversation_media_location": "Ubicación", "conversation_media_contact": "Contacto", "conversation_media_attachment": "Archivo adjunto", + "conversation_media_unsupported": "Adjunto no soportado", "conversation_search_peer": "Buscar en el chat", "conversation_group_created": "creó el grupo", "conversation_group_renamed": "cambió el nombre del grupo", @@ -338,6 +344,7 @@ "message_service_changed_channel_photo": "Foto del canal actualizada", "message_service_removed_channel_photo": "Foto del canal eliminada", "message_service_scored_X": "{'one': 'consiguió {} punto', 'other': 'consiguió {} puntos'}", + "message_service_payment_sent": "Pago enviado", "message_action_reply": "Responder", "message_action_edit": "Editar", "message_action_delete": "Eliminar", @@ -377,6 +384,7 @@ "error_modal_media_not_supported_description": "Tu navegador no puede reproducir este archivo multimedia. Prueba descargándolo y abriéndolo en un reproductor independiente.", "error_modal_username_not_found_description": "No hay una cuenta de Telegram con el alias que entregaste.", "error_modal_phonecalls_not_supported_description_md": "Las llamadas no están soportadas en la versión Web, por el momento.\n\nPuedes llamar a {user} con una app móvil o de escritorio.\n{download-link: Download »}", + "error_modal_app_signup_forbidden_md": "Aún no tienes una cuenta de Telegram. Por favor, **regístrate** con {signup-link: Android / iPhone} primero.", "error_modal_bad_request_description": "Falta uno de los parámetros o es inválido.", "error_modal_unauthorized_description": "Esta acción requiere acceso autorizado. Por favor, {login-link: inicia sesión}.", "error_modal_forbidden_description": "No estás autorizado para esta acción.", @@ -408,6 +416,7 @@ "head_media_video": "Vídeos", "head_media_documents": "Archivos", "head_media_audio": "Mensajes de voz", + "head_media_round": "Videomensajes", "head_media_search": "Buscar", "head_about": "Acerca de", "head_clear_all": "Eliminar historial", @@ -476,6 +485,9 @@ "im_submit_message": "Enviar", "im_submit_edit_message": "Guardar", "im_edit_message_title": "Editar mensaje", + "im_voice_recording_label": "Suelta fuera de aquí para cancelar", + "im_voice_recording_cancel_label": "Suelta para cancelar la grabación", + "im_voice_processing_label": "Procesando{dots}", "login_sign_in": "Registrarse", "login_enter_number_description": "Por favor, escoge tu país y pon tu número de teléfono completo.", "login_incorrect_number": "Número de teléfono incorrecto", diff --git a/app/js/locales/it-it.json b/app/js/locales/it-it.json index 7dd7ca75..05f8f5de 100644 --- a/app/js/locales/it-it.json +++ b/app/js/locales/it-it.json @@ -22,6 +22,7 @@ "group_modal_menu_delete_group": "Elimina ed esci", "group_modal_menu_clear_history": "Cancella cronologia", "group_modal_delete_group": "Elimina gruppo", + "group_modal_join": "Unisciti al gruppo", "group_modal_settings": "Impostazioni", "group_modal_notifications": "Notifiche", "group_modal_menu_share_link": "Invita nel gruppo tramite link", @@ -38,6 +39,7 @@ "channel_modal_description": "Descrizione", "channel_modal_share_link": "Condividi link", "channel_modal_share_loading": "Carico{dots}", + "channel_modal_menu_edit": "Modifica canale", "channel_modal_join": "Unisciti al canale", "channel_modal_add_member": "Invita membri", "channel_modal_leave_channel": "Lascia il canale", @@ -169,6 +171,8 @@ "changelog_modal_header_recent_updates_md": "Aggiornamenti recenti di **Telegram Web**", "changelog_modal_header_new_updates_md": "**Telegram Web** è stato aggiornato!", "changelog_modal_title_current_version": "versione corrente", + "changelog_modal_full_description_md": "App ufficiale basata sulle API di Telegram per velocità e sicurezza.\n\nQuesto software è sotto licenza GNU GPL versione 3.", + "changelog_modal_changelog_link": "Novità", "group_create_contacts_modal_title": "Nuovo gruppo", "group_create_modal_title": "Crea gruppo", "group_create_name": "Nome del gruppo", @@ -280,6 +284,7 @@ "conversation_draft": "Bozza:", "conversation_media_photo": "Foto", "conversation_media_video": "Video", + "conversation_media_round": "Videomessaggio", "conversation_media_document": "File", "conversation_media_sticker": "Sticker", "conversation_media_gif": "GIF", @@ -287,6 +292,7 @@ "conversation_media_location": "Posizione", "conversation_media_contact": "Contatto", "conversation_media_attachment": "Allegato", + "conversation_media_unsupported": "Allegato non supportato", "conversation_search_peer": "Cerca in questa chat", "conversation_group_created": "ha creato il gruppo", "conversation_group_renamed": "ha cambiato il nome del gruppo", @@ -338,6 +344,7 @@ "message_service_changed_channel_photo": "Foto del canale aggiornata", "message_service_removed_channel_photo": "Foto del canale rimossa", "message_service_scored_X": "{'one': 'ha totalizzato {} punto', 'other': 'ha totalizzato {} punti'}", + "message_service_payment_sent": "Pagamento inviato", "message_action_reply": "Rispondi", "message_action_edit": "Modifica", "message_action_delete": "Elimina", @@ -377,6 +384,7 @@ "error_modal_media_not_supported_description": "Il tuo browser non può riprodurre questo file. Prova a scaricarlo e ad aprirlo in un player esterno.", "error_modal_username_not_found_description": "Non esiste alcun account Telegram con l'username che hai fornito.", "error_modal_phonecalls_not_supported_description_md": "Sfortunatamente le chiamate non sono ancora supportate nell'app Web al momento.\n\nPuoi chiamare {user} usando le nostre app mobile o le app native per computer.\n{download-link: Scarica »}", + "error_modal_app_signup_forbidden_md": "Se non hai ancora un account Telegram, per favore **iscriviti** prima da {signup-link: Android / iPhone}.", "error_modal_bad_request_description": "Un parametro è mancante o errato.", "error_modal_unauthorized_description": "L'azione necessita dell'autorizzazione d'accesso. Per favore {login-link: accedi}.", "error_modal_forbidden_description": "Non sei autorizzato a questa operazione.", @@ -408,6 +416,7 @@ "head_media_video": "Video", "head_media_documents": "File", "head_media_audio": "Messaggi vocali", + "head_media_round": "Videomessaggi", "head_media_search": "Cerca", "head_about": "Info", "head_clear_all": "Cancella cronologia", @@ -476,6 +485,9 @@ "im_submit_message": "Invia", "im_submit_edit_message": "Salva", "im_edit_message_title": "Modifica messaggio", + "im_voice_recording_label": "Rilascia fuori da qui per annullare", + "im_voice_recording_cancel_label": "Rilascia per annullare la registrazione", + "im_voice_processing_label": "Elaboro{dots}", "login_sign_in": "Accedi", "login_enter_number_description": "Inserisci il tuo numero di telefono completo.", "login_incorrect_number": "Numero di telefono errato", diff --git a/app/js/locales/nl-nl.json b/app/js/locales/nl-nl.json index 0a10e74d..4745459d 100644 --- a/app/js/locales/nl-nl.json +++ b/app/js/locales/nl-nl.json @@ -22,6 +22,7 @@ "group_modal_menu_delete_group": "Verwijderen en verlaten", "group_modal_menu_clear_history": "Geschiedenis wissen", "group_modal_delete_group": "Groep verwijderen", + "group_modal_join": "Join group", "group_modal_settings": "Instellingen", "group_modal_notifications": "Meldingen", "group_modal_menu_share_link": "Uitnodigingslink sturen", @@ -38,6 +39,7 @@ "channel_modal_description": "Beschrijving", "channel_modal_share_link": "Link delen", "channel_modal_share_loading": "Laden{dots}", + "channel_modal_menu_edit": "Kanaal wijzigen", "channel_modal_join": "Lid worden van kanaal", "channel_modal_add_member": "Leden toevoegen", "channel_modal_leave_channel": "Kanaal verlaten", @@ -169,6 +171,8 @@ "changelog_modal_header_recent_updates_md": "Recente updates in **Telegram Web**", "changelog_modal_header_new_updates_md": "**Telegram Web** is bijgewerkt!", "changelog_modal_title_current_version": "huidige versie", + "changelog_modal_full_description_md": "Officiële, gratis Telegram app gebaseerd op de Telegram API voor snelheid en veiligheid.\n\nDeze software valt onder de GNU GPL versie 3 licentie.", + "changelog_modal_changelog_link": "Wijzigingen", "group_create_contacts_modal_title": "Nieuwe groep", "group_create_modal_title": "Groep maken", "group_create_name": "Groepsnaam", @@ -280,6 +284,7 @@ "conversation_draft": "Concept:", "conversation_media_photo": "Foto", "conversation_media_video": "Video", + "conversation_media_round": "Videobericht", "conversation_media_document": "Bestand", "conversation_media_sticker": "sticker", "conversation_media_gif": "GIF", @@ -287,6 +292,7 @@ "conversation_media_location": "Locatie", "conversation_media_contact": "Contact", "conversation_media_attachment": "Bijlage", + "conversation_media_unsupported": "Bestandstype niet ondersteund", "conversation_search_peer": "In chat zoeken", "conversation_group_created": "heeft de groep gemaakt", "conversation_group_renamed": "heeft de groepsnaam gewijzigd", @@ -338,6 +344,7 @@ "message_service_changed_channel_photo": "Kanaalfoto bijgewerkt", "message_service_removed_channel_photo": "Kanaalfoto verwijderd", "message_service_scored_X": "{'one': '{} punt', 'other': '{} punten'}", + "message_service_payment_sent": "Betaling verzonden", "message_action_reply": "Antwoord", "message_action_edit": "Wijzig", "message_action_delete": "Verwijder", @@ -377,6 +384,7 @@ "error_modal_media_not_supported_description": "Je browser kan dit mediabestand niet afspelen. Probeer het bestand te downloaden en af te spelen in een vrijstaande afspeelapplicatie.", "error_modal_username_not_found_description": "Geen Telegram-account gevonden voor de opgegeven gebruikersnaam. ", "error_modal_phonecalls_not_supported_description_md": "Helaas zijn oproepen nog niet beschikbaar in de Web-versie.\n\nJe kunt {user} bellen via onze mobiele- of desktop-applicaties.\n{download-link: Download »}", + "error_modal_app_signup_forbidden_md": "Je hebt nog geen Telegram-account, **meld je eerst aan** via {signup-link: Android / iPhone} ", "error_modal_bad_request_description": "Éen van de parameters mist of is ongeldig.", "error_modal_unauthorized_description": "Deze actie vereist authenticatie. {login-link: Inloggen}", "error_modal_forbidden_description": "Je bent niet bevoegd deze bewerking uit te voeren.", @@ -408,6 +416,7 @@ "head_media_video": "Video's", "head_media_documents": "Bestanden", "head_media_audio": "Spraakberichten", + "head_media_round": "Videoberichten", "head_media_search": "Zoeken", "head_about": "Over", "head_clear_all": "Geschiedenis wissen", @@ -476,6 +485,9 @@ "im_submit_message": "Stuur", "im_submit_edit_message": "Opslaan", "im_edit_message_title": "Bericht wijzigen", + "im_voice_recording_label": "Buiten het veld loslaten om te annuleren", + "im_voice_recording_cancel_label": "Release to cancel record", + "im_voice_processing_label": "Verwerken{dots}", "login_sign_in": "Inloggen", "login_enter_number_description": "Kies je land en voer je volledige telefoonnummer in.", "login_incorrect_number": "Onjuist telefoonnummer", diff --git a/app/js/locales/pt-br.json b/app/js/locales/pt-br.json index fda174e4..2f9e5712 100644 --- a/app/js/locales/pt-br.json +++ b/app/js/locales/pt-br.json @@ -22,6 +22,7 @@ "group_modal_menu_delete_group": "Apagar e sair", "group_modal_menu_clear_history": "Limpar histórico", "group_modal_delete_group": "Apagar grupo", + "group_modal_join": "Join group", "group_modal_settings": "Configurações", "group_modal_notifications": "Notificações", "group_modal_menu_share_link": "Convidar ao grupo via link", @@ -38,6 +39,7 @@ "channel_modal_description": "Descrição", "channel_modal_share_link": "Compartilhar link", "channel_modal_share_loading": "Carregando{dots}", + "channel_modal_menu_edit": "Edit channel", "channel_modal_join": "Entrar no canal", "channel_modal_add_member": "Convidar membros", "channel_modal_leave_channel": "Sair do canal", @@ -169,6 +171,8 @@ "changelog_modal_header_recent_updates_md": "Atualizações recentes no **Telegram Web**", "changelog_modal_header_new_updates_md": "**Telegram Web** foi atualizado!", "changelog_modal_title_current_version": "versão atual", + "changelog_modal_full_description_md": "Official free messaging app based on Telegram API for speed and security.\n\nThis software is licensed under GNU GPL version 3.", + "changelog_modal_changelog_link": "Changelog", "group_create_contacts_modal_title": "Novo grupo", "group_create_modal_title": "Criar grupo", "group_create_name": "Nome do grupo", @@ -280,6 +284,7 @@ "conversation_draft": "Rascunho", "conversation_media_photo": "Foto", "conversation_media_video": "Vídeo", + "conversation_media_round": "Video message", "conversation_media_document": "Arquivo", "conversation_media_sticker": "Sticker", "conversation_media_gif": "GIF", @@ -287,6 +292,7 @@ "conversation_media_location": "Localização", "conversation_media_contact": "Contato", "conversation_media_attachment": "Anexo", + "conversation_media_unsupported": "Unsupported attachment", "conversation_search_peer": "Buscar neste chat", "conversation_group_created": "criou o grupo", "conversation_group_renamed": "alterou o nome do grupo", @@ -338,6 +344,7 @@ "message_service_changed_channel_photo": "Foto do canal atualizada", "message_service_removed_channel_photo": "Foto do canal removida", "message_service_scored_X": "{'one': 'marcou {} ponto', 'other': 'marcou {} pontos'}", + "message_service_payment_sent": "Payment sent", "message_action_reply": "Responder", "message_action_edit": "Editar", "message_action_delete": "Apagar", @@ -377,6 +384,7 @@ "error_modal_media_not_supported_description": "Seu navegador não pode visualizar este tipo de mídia. Tente baixar o arquivo e abri-lo em outro reprodutor. ", "error_modal_username_not_found_description": "Não existe nenhuma conta do Telegram com o número informado.", "error_modal_phonecalls_not_supported_description_md": "Infelizmente as chamadas ainda não são suportadas pelo App Web.\n\nVocê pode ligar para {user} usando nossos apps para celular ou aplicações desktop.\n{download-link: Download »}", + "error_modal_app_signup_forbidden_md": "You don't have a Telegram account yet, please **sign up** with {signup-link: Android / iPhone} first.", "error_modal_bad_request_description": "Um dos parâmetros está faltando ou inválido.", "error_modal_unauthorized_description": "Essa ação requer autorização. Por favor {login-link: entre}.", "error_modal_forbidden_description": "Você não tem permissão para esta ação.", @@ -408,6 +416,7 @@ "head_media_video": "Vídeos", "head_media_documents": "Arquivos", "head_media_audio": "Mensagens de voz", + "head_media_round": "Video messages", "head_media_search": "Pesquisar", "head_about": "Sobre", "head_clear_all": "Limpar histórico", @@ -476,6 +485,9 @@ "im_submit_message": "Enviar", "im_submit_edit_message": "Salvar", "im_edit_message_title": "Editar mensagem", + "im_voice_recording_label": "Release outside this form to cancel", + "im_voice_recording_cancel_label": "Release to cancel record", + "im_voice_processing_label": "Processing{dots}", "login_sign_in": "Entrar", "login_enter_number_description": "Escolha seu país e insira seu número de telefone com DDD.", "login_incorrect_number": "Número de telefone incorreto", diff --git a/app/js/locales/ru-ru.json b/app/js/locales/ru-ru.json index 37f1a845..2c17f0e0 100644 --- a/app/js/locales/ru-ru.json +++ b/app/js/locales/ru-ru.json @@ -22,6 +22,7 @@ "group_modal_menu_delete_group": "Удалить и выйти", "group_modal_menu_clear_history": "Очистить историю", "group_modal_delete_group": "Удалить группу", + "group_modal_join": "Join group", "group_modal_settings": "Настройки", "group_modal_notifications": "Уведомления", "group_modal_menu_share_link": "Пригласить в группу по ссылке", @@ -38,6 +39,7 @@ "channel_modal_description": "Описание", "channel_modal_share_link": "Поделиться ссылкой", "channel_modal_share_loading": "Загрузка{dots}", + "channel_modal_menu_edit": "Edit channel", "channel_modal_join": "Подписаться на канал", "channel_modal_add_member": "Пригласить участников", "channel_modal_leave_channel": "Покинуть канал", @@ -169,6 +171,8 @@ "changelog_modal_header_recent_updates_md": "Последние обновления в **веб-клиенте Telegram**", "changelog_modal_header_new_updates_md": "**Веб-клиент Telegram** обновился!", "changelog_modal_title_current_version": "текущая версия", + "changelog_modal_full_description_md": "Official free messaging app based on Telegram API for speed and security.\n\nThis software is licensed under GNU GPL version 3.", + "changelog_modal_changelog_link": "Changelog", "group_create_contacts_modal_title": "Новая группа", "group_create_modal_title": "Создать группу", "group_create_name": "Название группы", @@ -280,6 +284,7 @@ "conversation_draft": "Draft:", "conversation_media_photo": "Фотография", "conversation_media_video": "Видео", + "conversation_media_round": "Video message", "conversation_media_document": "Файл", "conversation_media_sticker": "Стикер", "conversation_media_gif": "GIF", @@ -287,6 +292,7 @@ "conversation_media_location": "Местоположение", "conversation_media_contact": "Контакт", "conversation_media_attachment": "Прикрепление", + "conversation_media_unsupported": "Unsupported attachment", "conversation_search_peer": "Search in this chat", "conversation_group_created": "создал(а) группу", "conversation_group_renamed": "изменил(а) название группы", @@ -338,6 +344,7 @@ "message_service_changed_channel_photo": "Фото канала изменено", "message_service_removed_channel_photo": "Фото канала удалено", "message_service_scored_X": "{'one': 'scored {}', 'other': 'scored {}'}", + "message_service_payment_sent": "Payment sent", "message_action_reply": "Ответить", "message_action_edit": "Edit", "message_action_delete": "Удалить", @@ -377,6 +384,7 @@ "error_modal_media_not_supported_description": "Ваш браузер не может воспроизвести этот медиафайл. Попробуйте загрузить этот файл и открыть в стороннем плеере.", "error_modal_username_not_found_description": "Нет аккаунта Telegram с указанным вами именем пользователя.", "error_modal_phonecalls_not_supported_description_md": "Unfortunately calls are not supported in the Web App at the moment.\n\nYou can call {user} using our mobile apps or native desktop applications.\n{download-link: Download »}", + "error_modal_app_signup_forbidden_md": "You don't have a Telegram account yet, please **sign up** with {signup-link: Android / iPhone} first.", "error_modal_bad_request_description": "Один из параметров отсутствует или некорректен.", "error_modal_unauthorized_description": "Для этого действия необходима авторизация. Пожалуйста, {login-link: войдите}.", "error_modal_forbidden_description": "Вам запрещено это действие.", @@ -408,6 +416,7 @@ "head_media_video": "Видео", "head_media_documents": "Файлы", "head_media_audio": "Голосовые сообщения", + "head_media_round": "Video messages", "head_media_search": "Search", "head_about": "О приложении", "head_clear_all": "Clear history", @@ -476,6 +485,9 @@ "im_submit_message": "Отправить", "im_submit_edit_message": "Save", "im_edit_message_title": "Edit message", + "im_voice_recording_label": "Release outside this form to cancel", + "im_voice_recording_cancel_label": "Release to cancel record", + "im_voice_processing_label": "Processing{dots}", "login_sign_in": "Войти", "login_enter_number_description": "Выберите вашу страну из списка и введите номер телефона:", "login_incorrect_number": "Некорректный номер", diff --git a/app/partials/desktop/changelog_modal.html b/app/partials/desktop/changelog_modal.html index 646c424d..8c216364 100644 --- a/app/partials/desktop/changelog_modal.html +++ b/app/partials/desktop/changelog_modal.html @@ -14,7 +14,9 @@
    Telegram Web
    -
    Version {{currentVersion}}
    +
    + +
    From 623d7535ccacc2419b2a864198389dfcfc6a0a78 Mon Sep 17 00:00:00 2001 From: Igor Zhukov Date: Thu, 31 Aug 2017 00:28:13 +0200 Subject: [PATCH 46/49] Improved mtproto and handling updates --- app/js/lib/mtproto.js | 4 +++- app/js/services.js | 22 +++++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/js/lib/mtproto.js b/app/js/lib/mtproto.js index 25932bd8..a36a0e68 100644 --- a/app/js/lib/mtproto.js +++ b/app/js/lib/mtproto.js @@ -1545,7 +1545,9 @@ angular.module('izhukov.mtproto', ['izhukov.utils']) break } case 'msg_new_detailed_info': - // this.ackMessage(message.answer_msg_id) + if (this.pendingAcks.indexOf(message.answer_msg_id)) { + break + } this.reqResendMessage(message.answer_msg_id) break diff --git a/app/js/services.js b/app/js/services.js index 0ffb5a84..58c88bec 100755 --- a/app/js/services.js +++ b/app/js/services.js @@ -3095,6 +3095,7 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) curState.pendingPtsUpdates.sort(function (a, b) { return a.pts - b.pts }) + // console.log(dT(), 'pop update', channelID, curState.pendingPtsUpdates) var curPts = curState.pts var goodPts = false @@ -3387,7 +3388,11 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) } if (update._ == 'updateChannelTooLong') { - getChannelDifference(channelID) + if (!curState.lastPtsUpdateTime || + curState.lastPtsUpdateTime < tsNow() - 10000) { + // console.trace(dT(), 'channel too long, get diff', channelID, update) + getChannelDifference(channelID) + } return false } @@ -3398,12 +3403,13 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) var message = update.message var toPeerID = AppPeersManager.getPeerID(message.to_id) var fwdHeader = message.fwd_from || {} - if (message.from_id && !AppUsersManager.hasUser(message.from_id, message.pFlags.post) || - fwdHeader.from_id && !AppUsersManager.hasUser(fwdHeader.from_id, !!fwdHeader.channel_id) || - fwdHeader.channel_id && !AppChatsManager.hasChat(fwdHeader.channel_id, true) || - toPeerID > 0 && !AppUsersManager.hasUser(toPeerID) || - toPeerID < 0 && !AppChatsManager.hasChat(-toPeerID)) { - console.warn(dT(), 'Not enough data for message update', message) + var reason = false + if (message.from_id && !AppUsersManager.hasUser(message.from_id, message.pFlags.post/* || channelID*/) && (reason = 'author') || + fwdHeader.from_id && !AppUsersManager.hasUser(fwdHeader.from_id, !!fwdHeader.channel_id) && (reason = 'fwdAuthor') || + fwdHeader.channel_id && !AppChatsManager.hasChat(fwdHeader.channel_id, true) && (reason = 'fwdChannel') || + toPeerID > 0 && !AppUsersManager.hasUser(toPeerID) && (reason = 'toPeer User') || + toPeerID < 0 && !AppChatsManager.hasChat(-toPeerID) && (reason = 'toPeer Chat')) { + console.warn(dT(), 'Not enough data for message update', toPeerID, reason, message) if (channelID && AppChatsManager.hasChat(channelID)) { getChannelDifference(channelID) } else { @@ -3442,6 +3448,8 @@ angular.module('myApp.services', ['myApp.i18n', 'izhukov.utils']) if (update.pts > curState.pts) { curState.pts = update.pts popPts = true + + curState.lastPtsUpdateTime = tsNow() } else if (update.pts_count) { // console.warn(dT(), 'Duplicate update', update) From 6259907fac09f6525efebf7330cfdaf42dde4a98 Mon Sep 17 00:00:00 2001 From: Margolin96 Date: Fri, 15 Sep 2017 18:38:37 +0300 Subject: [PATCH 47/49] Update channel_modal.html (#1503) --- app/partials/desktop/channel_modal.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/desktop/channel_modal.html b/app/partials/desktop/channel_modal.html index 27346f80..bc86b76c 100644 --- a/app/partials/desktop/channel_modal.html +++ b/app/partials/desktop/channel_modal.html @@ -33,7 +33,7 @@