bullet_train 1.0.60 ā†’ 1.0.61

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a31a2c2246fb6f2d9e82e21d6e2a54677c659004925e6a0e05362049784821f
4
- data.tar.gz: 209e1be3698752408c23ccceedd74aabcb15d7d67bc418fed0bcca0ab27a2853
3
+ metadata.gz: 4fea59622718639896bc50bb9d91d934331a3f985fd65e22703c1ca19025d349
4
+ data.tar.gz: f50597d18f7d906c487ff60479b4bbe7ba8bc3cbf7111b1735b394fbc0c11a4f
5
5
  SHA512:
6
- metadata.gz: 01e2fda3d6f57bc96e8f45fac0eda8b32b18384d3af0c15909791b8c97611ffd8c1e4fe998b91b33c687835a68a0063d4d64d53bd278bc025bd935f351c78445
7
- data.tar.gz: f5a8ff518213dc2b9e16c02996e04da2e0a73db51f24021bef3ad6d2d364b36352bbb88f91b69823286d18c46d77f22d8792e5a761d8647e4e2ebaf63b7d498a
6
+ metadata.gz: 41bb8cc66fcef89d33bb568dd2f656eda2c2de1614ca21188d188b35a8385f7407fa682ce67fbd686cc81c0f854195e3e360a9682b9627f6151ecc3a12bd972a
7
+ data.tar.gz: 8bf40a3c0748b733708d7ddd5dfb33c6034b62ff437101c96d8b0e1fe48cc512c07836f00f060b9e750a5d9146669b64f1f550e815a50fd8312ffa38c1710b45
@@ -1,3 +1,3 @@
1
1
  module BulletTrain
2
- VERSION = "1.0.60"
2
+ VERSION = "1.0.61"
3
3
  end
@@ -56,4 +56,178 @@ namespace :bullet_train do
56
56
  warn "\nšŸš… Usage: `bin/resolve [path, partial, or URL] (--eject) (--open)`\n".blue
57
57
  end
58
58
  end
59
+
60
+ task :develop, [:all_options] => :environment do |t, arguments|
61
+ def stream(command, prefix = " ")
62
+ puts ""
63
+
64
+ begin
65
+ trap("SIGINT") { throw :ctrl_c }
66
+
67
+ IO.popen(command) do |io|
68
+ while (line = io.gets)
69
+ puts "#{prefix}#{line}"
70
+ end
71
+ end
72
+ rescue UncaughtThrowError
73
+ puts "Received a <Control + C>. Exiting the child process.".blue
74
+ end
75
+
76
+ puts ""
77
+ end
78
+
79
+ # TODO Extract this into a YAML file.
80
+ framework_packages = {
81
+ "bullet_train" => {
82
+ git: "https://github.com/bullet-train-co/bullet_train-base",
83
+ npm: "@bullet-train/bullet-train"
84
+ },
85
+ "bullet_train-api" => {
86
+ git: "https://github.com/bullet-train-co/bullet_train-api",
87
+ },
88
+ "bullet_train-fields" => {
89
+ git: "https://github.com/bullet-train-co/bullet_train-fields",
90
+ npm: "@bullet-train/fields"
91
+ },
92
+ "bullet_train-has_uuid" => {
93
+ git: "https://github.com/bullet-train-co/bullet_train-has_uuid",
94
+ },
95
+ "bullet_train-incoming_webhooks" => {
96
+ git: "https://github.com/bullet-train-co/bullet_train-incoming_webhooks",
97
+ },
98
+ "bullet_train-integrations" => {
99
+ git: "https://github.com/bullet-train-co/bullet_train-integrations",
100
+ },
101
+ "bullet_train-integrations-stripe" => {
102
+ git: "https://github.com/bullet-train-co/bullet_train-base-integrations-stripe",
103
+ },
104
+ "bullet_train-obfuscates_id" => {
105
+ git: "https://github.com/bullet-train-co/bullet_train-obfuscates_id",
106
+ },
107
+ "bullet_train-outgoing_webhooks" => {
108
+ git: "https://github.com/bullet-train-co/bullet_train-outgoing_webhooks",
109
+ },
110
+ "bullet_train-outgoing_webhooks-core" => {
111
+ git: "https://github.com/bullet-train-co/bullet_train-outgoing_webhooks-core",
112
+ },
113
+ "bullet_train-scope_questions" => {
114
+ git: "https://github.com/bullet-train-co/bullet_train-scope_questions",
115
+ },
116
+ "bullet_train-scope_validator" => {
117
+ git: "https://github.com/bullet-train-co/bullet_train-scope_validator",
118
+ },
119
+ "bullet_train-sortable" => {
120
+ git: "https://github.com/bullet-train-co/bullet_train-sortable",
121
+ npm: "@bullet-train/bullet-train-sortable"
122
+ },
123
+ "bullet_train-super_scaffolding" => {
124
+ git: "https://github.com/bullet-train-co/bullet_train-super_scaffolding",
125
+ },
126
+ "bullet_train-super_load_and_authorize_resource" => {
127
+ git: "https://github.com/bullet-train-co/bullet_train-super_load_and_authorize_resource",
128
+ },
129
+ "bullet_train-themes" => {
130
+ git: "https://github.com/bullet-train-co/bullet_train-themes",
131
+ },
132
+ "bullet_train-themes-base" => {
133
+ git: "https://github.com/bullet-train-co/bullet_train-themes-base",
134
+ },
135
+ "bullet_train-themes-light" => {
136
+ git: "https://github.com/bullet-train-co/bullet_train-themes-light",
137
+ },
138
+ "bullet_train-themes-tailwind_css" => {
139
+ git: "https://github.com/bullet-train-co/bullet_train-themes-tailwind_css",
140
+ },
141
+ }
142
+
143
+ puts "Which framework package do you want to work on?".blue
144
+ puts ""
145
+ framework_packages.each do |gem, details|
146
+ puts " #{framework_packages.keys.find_index(gem) + 1}. #{gem}".blue
147
+ end
148
+ puts ""
149
+ puts "Enter a number below and hit <Enter>:".blue
150
+ number = $stdin.gets.chomp
151
+
152
+ gem = framework_packages.keys[number.to_i - 1]
153
+
154
+ if gem
155
+ details = framework_packages[gem]
156
+
157
+ puts "OK! Let's work on `#{gem}` together!".green
158
+ puts ""
159
+ puts "First, we're going to clone a copy of the package repository.".blue
160
+
161
+ # TODO Prompt whether they want to check out their own forked version of the repository.
162
+
163
+ if File.exist?("local/#{gem}")
164
+ puts "Can't clone into `local/#{gem}` because it already exists. We will try to use what's already there.".yellow
165
+ puts "However, it will be up to you to make sure that working copy of the repository is in a clean state and checked out to the `main` branch or whatever you want to work on.".yellow
166
+ puts "Hit <Enter> to continue.".blue
167
+ $stdin.gets
168
+
169
+ # TODO We should check whether the local copy is in a clean state, and if it is, check out `main`.
170
+ # TODO We should also pull `origin/main` to make sure we're on the most up-to-date version of the package.
171
+ else
172
+ stream "git clone #{details[:git]} local/#{gem}"
173
+ end
174
+
175
+ # TODO Ask them whether they want to check out a specific branch to work on. (List available remote branches.)
176
+
177
+ puts ""
178
+ puts "Now we'll try to link up that repository in the `Gemfile`.".blue
179
+ if `cat Gemfile | grep "gem \\\"#{gem}\\\", path: \\\"local/#{gem}\\\""`.chomp.present?
180
+ puts "This gem is already linked to a checked out copy in `local` in the `Gemfile`.".green
181
+ elsif `cat Gemfile | grep "gem \\\"#{gem}\\\","`.chomp.present?
182
+ puts "This gem already has some sort of alternative source configured in the `Gemfile`.".yellow
183
+ puts "We can't do anything with this. Sorry! We'll proceed, but you have to link this package yourself.".red
184
+ elsif `cat Gemfile | grep "gem \\\"#{gem}\\\""`.chomp.present?
185
+ puts "This gem is directly present in the `Gemfile`, so we'll update that line.".green
186
+
187
+ text = File.read("Gemfile")
188
+ new_contents = text.gsub(/gem "#{gem}"/, "gem \"#{gem}\", path: \"local/#{gem}\"")
189
+ File.open("Gemfile", "w") { |file| file.puts new_contents }
190
+ else
191
+ puts "This gem isn't directly present in the `Gemfile`, so we'll add it temporarily.".green
192
+ File.open("Gemfile", "a+") { |file|
193
+ file.puts
194
+ file.puts "gem \"#{gem}\", path: \"local/#{gem}\" # Added by \`bin/develop\`."
195
+ }
196
+ end
197
+
198
+ puts ""
199
+ puts "Now we'll run `bundle install`.".blue
200
+ stream "bundle install"
201
+
202
+ puts ""
203
+ puts "We'll restart any running Rails server now.".blue
204
+ stream "rails restart"
205
+
206
+ puts ""
207
+ puts "OK, we're opening that package in your IDE, `#{ENV["IDE"] || "code"}`. (You can configure this with `export IDE=whatever`.)".blue
208
+ `#{ENV["IDE"] || "code"} local/#{gem}`
209
+
210
+ puts ""
211
+ if details[:npm]
212
+ puts "This package also has an npm package, so we'll link that up as well.".blue
213
+ stream "cd local/#{gem} && yarn install && yarn link && cd ../.. && yarn link \"#{details[:npm]}\""
214
+
215
+ puts ""
216
+ puts "And now we're going to watch for any changes you make to the JavaScript and recompile as we go.".blue
217
+ puts "When you're done, you can hit <Control + C> and we'll clean all off this up.".blue
218
+ stream "cd local/#{gem} && yarn build --watch"
219
+ else
220
+ puts "This package has no npm package, so we'll just hang out here and do nothing. However, when you hit <Enter> here, we'll start the process of cleaning all of this up.".blue
221
+ $stdin.gets
222
+ end
223
+
224
+ puts ""
225
+ puts "OK, here's a list of things this script still doesn't do you for you:".yellow
226
+ puts "1. It doesn't clean up the repository that was cloned into `local`.".yellow
227
+ puts "2. Unless you remove it, it won't update that repository the next time you link to it.".yellow
228
+ else
229
+ puts ""
230
+ puts "Invalid option, \"#{number}\". Try again.".red
231
+ end
232
+ end
59
233
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet_train
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.60
4
+ version: 1.0.61
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-30 00:00:00.000000000 Z
11
+ date: 2022-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard
@@ -399,8 +399,6 @@ files:
399
399
  - README.md
400
400
  - Rakefile
401
401
  - app/assets/config/bullet_train_manifest.js
402
- - app/assets/javascripts/bullet-train.js
403
- - app/assets/javascripts/bullet-train.js.map
404
402
  - app/controllers/account/invitations_controller.rb
405
403
  - app/controllers/account/memberships_controller.rb
406
404
  - app/controllers/account/onboarding/user_details_controller.rb
@@ -634,7 +632,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
634
632
  - !ruby/object:Gem::Version
635
633
  version: '0'
636
634
  requirements: []
637
- rubygems_version: 3.2.32
635
+ rubygems_version: 3.3.7
638
636
  signing_key:
639
637
  specification_version: 4
640
638
  summary: Bullet Train
@@ -1,2 +0,0 @@
1
- import{Controller as e}from"stimulus";function t(e){var t=(e.match(/^(?:\.\/)?(.+)(?:[_-]controller\..+?)$/)||[])[1];if(t)return t.replace(/_/g,"-").replace(/\//g,"--")}function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,n(e,t)}function n(e,t){return n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},n(e,t)}var i=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t.prototype.copy=function(){this.inputTarget.value=this.sourceTarget.innerText,this.inputTarget.select(),document.execCommand("copy"),this.buttonTarget.innerHTML='<i id="copied" class="fas fa-check w-4 h-4 block text-green-600"></i>',setTimeout(function(){document.getElementById("copied").innerHTML='<i class="far fa-copy w-4 h-4 block text-gray-600"></i>'},1500)},t}(e);i.targets=["source","input","button"];var o=function(e){function t(){for(var t,r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(t=e.call.apply(e,[this].concat(n))||this).removeTrailingNewlines=function(e){e.element.innerHTML.match(/<br><\/div>$/)&&(e.element.innerHTML=e.element.innerHTML.slice(0,-10)+"</div>",t.removeTrailingNewlines(e))},t.removeTrailingWhitespace=function(e){e.element.innerHTML.match(/&nbsp;<\/div>$/)?(e.element.innerHTML=e.element.innerHTML.slice(0,-12)+"</div>",t.removeTrailingWhitespace(e)):e.element.innerHTML.match(/&nbsp; <\/div>$/)&&(e.element.innerHTML=e.element.innerHTML.slice(0,-13)+"</div>",t.removeTrailingWhitespace(e))},t}r(t,e);var n=t.prototype;return n.resetOnSuccess=function(e){e.detail.success&&e.target.reset()},n.stripTrix=function(){var e=this;this.trixFieldTargets.forEach(function(t){e.removeTrailingNewlines(t.editor),e.removeTrailingWhitespace(t.editor),t.parentElement.querySelector("input").value=t.innerHTML})},n.submitOnReturn=function(e){if((e.metaKey||e.ctrlKey)&&13==e.keyCode){e.preventDefault();var t=e.target.closest("form");this.submitForm(t)}},n.submitForm=function(e){e.requestSubmit?e.requestSubmit():e.querySelector("[type=submit]").click()},t}(e);o.targets=["trixField","scroll"];var a=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n,i,o=t.prototype;return o.toggle=function(){var e=this.isWrapperHidden?this.showEventNameValue:this.hideEventNameValue;this.isWrapperHidden&&this.showWrapper(),this.wrapperTarget.dispatchEvent(new CustomEvent(e))},o.showWrapper=function(){this.wrapperTarget.classList.remove(this.hiddenClass)},o.hideWrapper=function(){this.wrapperTarget.classList.add(this.hiddenClass)},n=t,(i=[{key:"isWrapperHidden",get:function(){return this.wrapperTarget.classList.contains(this.hiddenClass)}}])&&function(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}(n.prototype,i),Object.defineProperty(n,"prototype",{writable:!1}),t}(e);a.targets=["wrapper"],a.classes=["hidden"],a.values={showEventName:String,hideEventName:String};var s=[[i,"clipboard_controller.js"],[o,"form_controller.js"],[a,"mobile_menu_controller.js"]].map(function(e){var r=e[0];return{identifier:t(e[1]),controllerConstructor:r}});document.addEventListener("turbo:load",function(){navigator.userAgent.toLocaleLowerCase().includes("electron")&&document.body.classList.add("electron")});export{s as controllerDefinitions};
2
- //# sourceMappingURL=bullet-train.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bullet-train.js","sources":["../../../node_modules/@stimulus/webpack-helpers/dist/index.js","../../javascript/controllers/clipboard_controller.js","../../javascript/controllers/form_controller.js","../../javascript/controllers/mobile_menu_controller.js","../../javascript/controllers/index.js","../../javascript/electron/index.js"],"sourcesContent":["export function definitionsFromContext(context) {\n return context.keys()\n .map(function (key) { return definitionForModuleWithContextAndKey(context, key); })\n .filter(function (value) { return value; });\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n var identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n var controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier: identifier, controllerConstructor: controllerConstructor };\n }\n}\nexport function identifierForContextKey(key) {\n var logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n//# sourceMappingURL=index.js.map","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['source', 'input', 'button']\n\n copy() {\n this.inputTarget.value = this.sourceTarget.innerText\n this.inputTarget.select()\n document.execCommand('copy')\n this.buttonTarget.innerHTML = '<i id=\"copied\" class=\"fas fa-check w-4 h-4 block text-green-600\"></i>'\n setTimeout(function () {\n document.getElementById('copied').innerHTML = '<i class=\"far fa-copy w-4 h-4 block text-gray-600\"></i>'\n }, 1500)\n }\n}\n","import { Controller } from 'stimulus'\n\n// TODO Some of this feels really specific to the conversation messages form. Should we rename this controller?\nexport default class extends Controller {\n static targets = ['trixField', 'scroll']\n\n resetOnSuccess(e){\n if(e.detail.success) {\n e.target.reset();\n }\n }\n\n stripTrix(){\n this.trixFieldTargets.forEach(element => {\n this.removeTrailingNewlines(element.editor)\n this.removeTrailingWhitespace(element.editor)\n // When doing this as part of the form submission, Trix does not update the input element's value attribute fast enough.\n // In order to submit the stripped value, we manually update it here to fix the race condition\n element.parentElement.querySelector(\"input\").value = element.innerHTML\n })\n }\n\n submitOnReturn(e) {\n if((e.metaKey || e.ctrlKey) && e.keyCode == 13) {\n e.preventDefault();\n let form = e.target.closest(\"form\")\n this.submitForm(form)\n }\n }\n\n removeTrailingNewlines = (trixEditor) => {\n if (trixEditor.element.innerHTML.match(/<br><\\/div>$/)) {\n trixEditor.element.innerHTML = trixEditor.element.innerHTML.slice(0, -10) + \"</div>\"\n this.removeTrailingNewlines(trixEditor)\n }\n }\n\n removeTrailingWhitespace = (trixEditor) => {\n if (trixEditor.element.innerHTML.match(/&nbsp;<\\/div>$/)) {\n trixEditor.element.innerHTML = trixEditor.element.innerHTML.slice(0, -12) + \"</div>\"\n this.removeTrailingWhitespace(trixEditor)\n } else if (trixEditor.element.innerHTML.match(/&nbsp; <\\/div>$/)) {\n trixEditor.element.innerHTML = trixEditor.element.innerHTML.slice(0, -13) + \"</div>\"\n this.removeTrailingWhitespace(trixEditor)\n }\n }\n\n submitForm(form) {\n // Right now, Safari and IE don't support the requestSubmit method which is required for Turbo\n // Doing form.submit() doesn't actually fire the submit event which Turbo needs\n if (form.requestSubmit) {\n form.requestSubmit()\n } else {\n form.querySelector(\"[type=submit]\").click()\n }\n }\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"wrapper\"]\n static classes = [ \"hidden\" ] // necessary because stimulus-reveal will mess with the [hidden] attribute on the wrapper\n static values = {\n showEventName: String,\n hideEventName: String,\n }\n\n toggle() {\n const eventName = this.isWrapperHidden? this.showEventNameValue: this.hideEventNameValue\n if (this.isWrapperHidden) {\n this.showWrapper()\n }\n \n this.wrapperTarget.dispatchEvent(new CustomEvent(eventName))\n }\n \n get isWrapperHidden() {\n return this.wrapperTarget.classList.contains(this.hiddenClass)\n }\n \n showWrapper() {\n this.wrapperTarget.classList.remove(this.hiddenClass)\n }\n \n hideWrapper() {\n this.wrapperTarget.classList.add(this.hiddenClass)\n }\n}","import { identifierForContextKey } from \"@stimulus/webpack-helpers\"\n\nimport ClipboardController from './clipboard_controller'\nimport FormController from './form_controller'\nimport MobileMenuController from './mobile_menu_controller'\n\nexport const controllerDefinitions = [\n [ClipboardController, 'clipboard_controller.js'],\n [FormController, 'form_controller.js'],\n [MobileMenuController, 'mobile_menu_controller.js'],\n].map(function(d) {\n const key = d[1]\n const controller = d[0]\n return {\n identifier: identifierForContextKey(key),\n controllerConstructor: controller\n }\n})\n","document.addEventListener(\"turbo:load\", () => {\n if (navigator.userAgent.toLocaleLowerCase().includes('electron')) {\n document.body.classList.add('electron')\n }\n})"],"names":["identifierForContextKey","key","logicalName","match","replace","copy","this","inputTarget","value","sourceTarget","innerText","select","document","execCommand","buttonTarget","innerHTML","setTimeout","getElementById","Controller","targets","removeTrailingNewlines","trixEditor","element","slice","_this","removeTrailingWhitespace","resetOnSuccess","e","detail","success","target","reset","stripTrix","trixFieldTargets","forEach","_this2","editor","parentElement","querySelector","submitOnReturn","metaKey","ctrlKey","keyCode","preventDefault","form","closest","submitForm","requestSubmit","click","toggle","eventName","isWrapperHidden","showEventNameValue","hideEventNameValue","showWrapper","wrapperTarget","dispatchEvent","CustomEvent","classList","remove","hiddenClass","hideWrapper","add","contains","classes","values","showEventName","String","hideEventName","controllerDefinitions","ClipboardController","FormController","MobileMenuController","map","d","controller","identifier","controllerConstructor","addEventListener","navigator","userAgent","toLocaleLowerCase","includes","body"],"mappings":"sCAiBO,SAASA,EAAwBC,GACpC,IAAIC,GAAeD,EAAIE,MAAM,2CAA6C,IAAI,GAC9E,GAAID,EACA,OAAOA,EAAYE,QAAQ,KAAM,KAAKA,QAAQ,MAAO,yRCf3DC,KAAA,WACEC,KAAKC,YAAYC,MAAQF,KAAKG,aAAaC,UAC3CJ,KAAKC,YAAYI,SACjBC,SAASC,YAAY,QACrBP,KAAKQ,aAAaC,UAAY,wEAC9BC,WAAW,WACTJ,SAASK,eAAe,UAAUF,UAAY,2DAC7C,UAVsBG,KACpBC,QAAU,CAAC,SAAU,QAAS,oKC2BrCC,uBAAyB,SAACC,GACpBA,EAAWC,QAAQP,UAAUZ,MAAM,kBACrCkB,EAAWC,QAAQP,UAAYM,EAAWC,QAAQP,UAAUQ,MAAM,GAAI,IAAM,SAC5EC,EAAKJ,uBAAuBC,OAIhCI,yBAA2B,SAACJ,GACtBA,EAAWC,QAAQP,UAAUZ,MAAM,mBACrCkB,EAAWC,QAAQP,UAAYM,EAAWC,QAAQP,UAAUQ,MAAM,GAAI,IAAM,SAC5EC,EAAKC,yBAAyBJ,IACrBA,EAAWC,QAAQP,UAAUZ,MAAM,qBAC5CkB,EAAWC,QAAQP,UAAYM,EAAWC,QAAQP,UAAUQ,MAAM,GAAI,IAAM,SAC5EC,EAAKC,yBAAyBJ,yCArClCK,eAAA,SAAeC,GACVA,EAAEC,OAAOC,SACVF,EAAEG,OAAOC,WAIbC,UAAA,sBACE1B,KAAK2B,iBAAiBC,QAAQ,SAAAZ,GAC5Ba,EAAKf,uBAAuBE,EAAQc,QACpCD,EAAKV,yBAAyBH,EAAQc,QAGtCd,EAAQe,cAAcC,cAAc,SAAS9B,MAAQc,EAAQP,eAIjEwB,eAAA,SAAeZ,GACb,IAAIA,EAAEa,SAAWb,EAAEc,UAA0B,IAAbd,EAAEe,QAAe,CAC/Cf,EAAEgB,iBACF,IAAIC,EAAOjB,EAAEG,OAAOe,QAAQ,QAC5BvC,KAAKwC,WAAWF,OAqBpBE,WAAA,SAAWF,GAGLA,EAAKG,cACPH,EAAKG,gBAELH,EAAKN,cAAc,iBAAiBU,YAlDb9B,KACpBC,QAAU,CAAC,YAAa,oHCM/B8B,OAAA,WACE,IAAMC,EAAY5C,KAAK6C,gBAAiB7C,KAAK8C,mBAAoB9C,KAAK+C,mBAClE/C,KAAK6C,iBACP7C,KAAKgD,cAGPhD,KAAKiD,cAAcC,cAAc,IAAIC,YAAYP,OAOnDI,YAAA,WACEhD,KAAKiD,cAAcG,UAAUC,OAAOrD,KAAKsD,gBAG3CC,YAAA,WACEvD,KAAKiD,cAAcG,UAAUI,IAAIxD,KAAKsD,iDATxC,WACE,YAAYL,cAAcG,UAAUK,SAASzD,KAAKsD,4PAlBzB1C,KACpBC,QAAU,CAAE,aACZ6C,QAAU,CAAE,YACZC,OAAS,CACdC,cAAeC,OACfC,cAAeD,QCDNE,IAAAA,EAAwB,CACnC,CAACC,EAAqB,2BACtB,CAACC,EAAgB,sBACjB,CAACC,EAAsB,8BACvBC,IAAI,SAASC,GACb,IACMC,EAAaD,EAAE,GACrB,MAAO,CACLE,WAAY5E,EAHF0E,EAAE,IAIZG,sBAAuBF,KCf3B/D,SAASkE,iBAAiB,aAAc,WAClCC,UAAUC,UAAUC,oBAAoBC,SAAS,aACnDtE,SAASuE,KAAKzB,UAAUI,IAAI"}